在Jackrabbit中是否可以在不完全定义节点类型的情况下限制同名同级?我正在寻找(我想)一个简单的CND定义,可以将其应用于存储库并用作所有节点的类型。
我正在尝试遵循此处的准则:(http://wiki.apache.org/jackrabbit/DavidsModel),具体地说,#1避免了在前面创建强大的架构,但是我发现这与#4不兼容,避免了同名兄弟姐妹。
我可以通过锁定相关的父节点(集合)并手动检查具有相同名称的节点来手动避免同名兄弟姐妹,我仍然可能会这样做以呈现应用程序级错误消息,但是我更喜欢防止不一致的附加保护层。
另外,我找到了此文档:
http://www.day.com/specs/jcr/1.0/4.3.2_Support_for_Same_Name_Siblings_is_Optional.html
尽管每个兼容存储库都必须支持一组必需的节点类型,但是这些必需的节点类型均不允许同名同级,并且特定存储库中可用的其他任何节点类型都是特定于实现的。因此,存储库有可能通过限制可用节点类型的集合而完全禁止同名兄弟姐妹。
这似乎与我观察到的不一致,例如:
final Repository repository = new TransientRepository();
final Session session = repository.login(new SimpleCredentials("username", "password".toCharArray()));
final Node collection = session.getRootNode().addNode("collection", "nt:unstructured");
final Node childA = collection.addNode("child", "nt:unstructured");
final Node childB = collection.addNode("child", "nt:unstructured");
session.save();
System.err.println(collection.getNodes("child").getSize());
//prints 2
这是JCR 2.0版中更改的内容吗? (我注意到这是v1.0规范)
我发现JCR原则上似乎非常合适,但是目前缺少文档让我失望,因此,任何与最新信息的链接都将受到高度赞赏。
最佳答案
基于nt的CND定义:此处非结构化:
https://docs.jboss.org/author/display/MODE/Defining+custom+node+types
我想出了这个定义:
<my = 'http://example.com/my'>
[my:unstructured] orderable
- * (undefined) multiple
- * (undefined)
+ * (nt:base) = my:unstructured version
这似乎正在工作,现在我尝试添加第二个子节点时得到了此信息:
javax.jcr.ItemExistsException:该节点已经存在:/ collection / child
在org.apache.jackrabbit.core.NodeImpl.addNode(NodeImpl.java:1508)
在org.apache.jackrabbit.core.NodeImpl.addNodeWithUuid(NodeImpl.java:2087)
在org.apache.jackrabbit.core.NodeImpl.addNode(NodeImpl.java:1992)
这是我所期望的。