jcr:primaryType和jcr:mixinTypes有什么区别?

7
我很好奇jcr:primaryType和jcr:mixinTypes之间的区别是什么,以及为什么要使用jcr:mixinTypes?它代表什么意义?如果您在CRX中检查/content/dam文件夹,它会将jcr:primaryType属性值显示为sling:OrderedFolder,而jcr:mixinTypes则为mix:lockable,rep:AccessControllable。其中,jcr:primaryType表示这是一个sling文件夹,但为什么需要混合类型?我还阅读了这些文档http://www.day.com/specs/jcr/1.0/6.7.4_Primary_and_Mixin_Node_Types.html http://www.day.com/specs/jcr/1.0/6.7.5_Special_Properties_jcr_primaryType_and_jcr_mixinTypes.html,但并没有给出太多关于区别的见解。
谢谢。
3个回答

14
一个节点只能有一个jcr:primaryType,但可以有多个jcr:mixinTypes,因此将混合类型视为节点的“特性”或附加方面是正确的。虽然http://wiki.apache.org/jackrabbit/DavidsModel“先数据,后结构。也许”规则建议节省使用主节点类型,因为它们通常会带来强烈的约束,但混合类型的约束要少得多,并且非常有用于识别具有特定用途或属性的节点。例如,你提到的mix:lockable混合类型用于表示节点可以被锁定。根据http://www.day.com/specs/jcr/2.0/17_Locking.html,只有具有混合节点类型mix:lockable的节点才能持有锁定。任何类型的节点都可能被锁定,因此使用节点类型就不起作用了。

感谢您深入的解释。 - yash ahuja

8

首先需要注意的是,jcr:primaryTypejcr:mixinTypes这两个属性都在超级节点nt:base中定义,然后被所有其他节点继承。

jcr:primaryType属性指定了节点的基本类型,并在节点创建时分配,可以将其视为OO世界中对象的BASE类。可以使用Node.setPrimaryType('some-primary-type')进行编程设置,例如:nt:filent:unstructured等。

jcr:mixinTypes属性是一个多值属性(不是单一属性值,可以有一个列表),基本上可以在节点创建时为空,因为它不是强制性属性,节点可以没有任何jcr:mixinType。可以使用node.addMixin('some-mixin-type')程序化地添加混合类型。可以将其视为OO世界中的接口,因为节点可以拥有多个接口,它们旨在向该节点添加附加属性(OO世界中的状态/实例变量)。例如:mix:versionablemix:referenceable


2

混合类型类似于接口,一个节点可以具有多个混合类型。

您可以使用混合类型为节点启用功能,例如标记,请参见:可标记内容


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接