我有这样的文件:
<?xml version="1.0" encoding="UTF-8"?>
<a>2015-08-12T09:51:16-05:00</a>
在同一个URI中我有这样的属性:
<?xml version="1.0" encoding="UTF-8"?>
<prop:properties xmlns:prop="http://marklogic.com/xdmp/property">
<prop:b>2015-08-12T09:51:16-05:00</prop:b>
</prop:properties>
我在元素dateTime
和a
上有prop:b
类型的范围索引。如果我在a
或prop:b
上运行cts:values,我会从词典中获取相应的值,但是当我运行以下内容时,我得到一个空序列:
cts:value-tuples((cts:element-reference(xs:QName("prop:b")),
cts:element-reference(xs:QName("a"))),("any"))
请帮我弄清楚我错过了什么。
版本:7.0.5
答案 0 :(得分:1)
any
选项表示:
应包括来自任何片段的共现。
其中任何片段包含document
,properties
和lock
片段。
但问题是,每个共现仍然需要在 中发生一个相同的片段,无论哪个片段。因此,文档片段中的a
和属性片段中的prop:b
永远不会作为共现返回。实现此功能的唯一方法是将a
和prop:b
放在同一个片段中。
一种推荐的方法是将文档包装在额外的根元素中以允许兄弟元素。这是MarkLogic中一种非常常见的模式,称为信封模式。额外的空间通常用于诸如出处,附加元数据,嵌入式三元组,标准化值等等。在您的情况下,它可能看起来很简单:
<envelope>
<header>
<prop:b>2015-08-12T09:51:16-05:00</prop:b>
</header>
<content>
<a>2015-08-12T09:51:16-05:00</a>
</content>
</envelope>
包装元素的名称并不重要,但envelope
,header
和content
等元素名称相当常见。将这些包装器元素放在一个单独的命名空间中会很有用,这样可以更容易区分它们。
HTH!