What is the difference between jcr:primaryType and jcr:mixinTypes?

后端 未结 3 1680
陌清茗
陌清茗 2021-02-10 06:31

I am just curious to know what is the difference between jcr:primaryType and jcr:mixinTypes, and why exactly does jcr:mixinTypes is used ? what does it signifies ? If you check

相关标签:
3条回答
  • 2021-02-10 07:03

    Mixin Types are similar to interfaces, one node could have multiple mixin types.

    You can enable features for your node with mixins, for example tagging, see: Taggable content

    0 讨论(0)
  • 2021-02-10 07:15

    A Node can have only one jcr:primaryType but it can have several jcr:mixinTypes, so it is correct to see the mixins as "traits" or additional aspects of a node.

    While http://wiki.apache.org/jackrabbit/DavidsModel "Data First, Structure Later. Maybe" rule recommends using primary node types sparingly due to the strong constraints that they usually imply, mixins are much less constraining and very useful to identify nodes as having specific uses or properties.

    The mix:lockable mixin that you mention, for example, is used to express that a node can be locked. As per http://www.day.com/specs/jcr/2.0/17_Locking.html, only nodes with mixin node type mix:lockable may hold locks. Any type of node can potentially be locked, so using a node type for that wouldn't work.

    0 讨论(0)
  • 2021-02-10 07:19

    First you should note that both properties jcr:primaryType and jcr:mixinTypes are defined in the super node nt:base then inherited by all other nodes.

    The jcr:primaryType property specifies the base type of a node and will be assigned at node's creation time and you can think of it as the BASE class of an object in OO world. It can be done programatically with Node.setPrimaryType('some-primary-type') e.g: nt:file, nt:unstructured...

    The jcr:mixinTypes property is a multi-value one (not a single property value but can have a list) and basically talking can be empty at node's creation since it is not a mondatory property and a node can have no jcr:mixinType at all. The node can get a mixin type added programatically with node.addMixin('some-mixin-type'). You can think of it as interfaces in OO world since a node can have multiple ones and they aim to add aditionnal properties (state/instance variable in OO world) to that node. e.g: mix:versionable, mix:referenceable

    0 讨论(0)
提交回复
热议问题