1

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 在原则上似乎非常合适,但目前缺乏文档让我失望,因此任何指向良好最新信息的链接都将受到高度赞赏。

4

1 回答 1

1

基于 nt:unstructured 的 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 at org.apache.jackrabbit.core.NodeImpl.addNode(NodeImpl.java:1508) at org.apache.jackrabbit.core.NodeImpl.addNodeWithUuid(NodeImpl.java :2087) 在 org.apache.jackrabbit.core.NodeImpl.addNode(NodeImpl.java:1992)

这是我所期望的。

于 2013-08-04T13:57:04.517 回答