我是 XML 数据库的新手,特别是,我正在尝试了解 Marklogic 的工作原理。如果这些问题太天真或太明显,我深表歉意。
我想做的是在 Marklogic 中实现 MongoDB 样式的文档引用,因为我认为该模式非常适用于后者,它本身就是一个面向文档的数据库。
这是 MongoDB 文档对手册和 DBRef 样式文档引用的说明:
http://docs.mongodb.org/manual/reference/database-references/
MongoDB 建议使用手动文档引用。
现在,我能看到的最直接的方法是将这条信息定义为,比如说,模式定义的一部分;从 objectid、书和出版商的定义开始:
<xs:simpleType name="objectId">
<xs:restriction base="xs:string">
<xs:length value="24"/>
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Publisher">
<xs:complexType>
<xs:attribute name="id" type="fbc:objectId" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="location" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Book">
<xs:complexType>
<xs:attribute name="Title" type="xs:string"/>
<xs:attribute name="publisherId" type="fbc:objectId" use="required"/>
</xs:complexType>
</xs:element>
所以三个问题:
这足以模拟一本书与其出版商之间的文档引用吗?对于基于模式的 XML 文档有更好的方法吗?
这种方法在 Marklogic(或任何其他 XML 数据库,如existDB、Senda 或 Basex)中执行 XQuery 时会带来困难吗?
Marklogic 声明它可以使用“模块化文档”,其中包含使用 XPointer 和 XInclude 的某种类型的特殊文档引用:
使用这种方法而不是手动文档参考有什么好处吗?是否有任何有效的 Java API 示例此功能?
如果这些问题太多,我提前道歉,但我相信它们都与此处所述的整体问题有关。谢谢。
更新:
我想我会在适当的地方进行一些数据反规范化,并在需要时使用普通的旧文档 URI 属性来引用其他文档。我猜这不是最好的方法,但我认为它在未来可能已经足够好了。我会不断更新我的发现。谢谢!