如何在Marklogic创建元素的范围索引?(How to create element range

2019-09-17 05:04发布

我有以下XML: -

<?xml version="1.0" encoding="UTF-8"?>
<patent-assignment>
  <assignment-record>
    <correspondent>
      <name>NORTH AMERICA INTERNATIONAL PATENT OFFIC</name>
      <address-1>P.O. BOX 506</address-1>
      <address-2>MERRIFIELD, VA 22116</address-2>
    </correspondent>
   </assignment-record>
  <patent-assignors>
    <patent-assignor>
      <name>TSAI, YU-WEN</name>
      <execution-date>
    <date>20050331</date>
      </execution-date>
    </patent-assignor>
    <patent-assignor>
      <name>HUANG, CHENG-I</name>
      <execution-date>
    <date>20050331</date>
      </execution-date>
    </patent-assignor>
  </patent-assignors>
  <patent-assignees>
    <patent-assignee>
      <name>FARADAY TECHNOLOGY CORP.</name>
      <address-1>NO.10-2, LI-HSIN ROAD 1, SCIENCE-BASED INDUSTRIAL PARK</address-1>
      <city>HSIN-CHU CITY</city>
      <country-name>TAIWAN</country-name>
    </patent-assignee>
  </patent-assignees>
 </patent-assignment>

现在,我想在专利转让人和专利受让人的名称创建范围元素的索引。 但在Marklogic没有选项来指定的XPath的范围索引。 这将只是走索引名“名”。 那么,什么将是创造与专利转让人和专利受让人的姓名元素的索引范围的正确方法?

Answer 1:

普尼特,为了得到的只是一组名称,MarkLogic需要能够以某种方式集合区别开来。 最好的办法是摄取期间改名字元素的localName(目前“名称”)或命名空间(目前没有)。 这样做之后,你可以建立一个元素范围索引和使用CTS:元素值()。 例如:

<?xml version="1.0" encoding="UTF-8"?>
<patent-assignment>
  <assignment-record>
    <correspondent>
      <name>NORTH AMERICA INTERNATIONAL PATENT OFFIC</name>
      <address-1>P.O. BOX 506</address-1>
      <address-2>MERRIFIELD, VA 22116</address-2>
    </correspondent>
  </assignment-record>
  <patent-assignors xmlns="http://puneet/assignors">
    <patent-assignor>
      <name>TSAI, YU-WEN</name>
      <execution-date>
        <date>20050331</date>
      </execution-date>
    </patent-assignor>
    <patent-assignor>
      <name>HUANG, CHENG-I</name>
      <execution-date>
        <date>20050331</date>
      </execution-date>
    </patent-assignor>
  </patent-assignors>
  <patent-assignees xmlns="http://puneet/assignees">
    <patent-assignee>
      <name>FARADAY TECHNOLOGY CORP.</name>
      <address-1>NO.10-2, LI-HSIN ROAD 1, SCIENCE-BASED INDUSTRIAL PARK</address-1>
      <city>HSIN-CHU CITY</city>
      <country-name>TAIWAN</country-name>
    </patent-assignee>
  </patent-assignees>
</patent-assignment>

从这个XML,你可以建立在每个“名字”元素的范围索引,然后调用

cts:element-values(fn:QName("http://puneet/assignees", "name"))

获得受让人的名称。



Answer 2:

您可以使用cts:path-range-query()的专利转让和专利受让人

  1. cts:path-range-query("/patent-assignors/patent-assignor","=",$name)
  2. cts:path-range-query("/patent-assignees/patent-assignor","=",$name)


Answer 3:

你不需要担心元素的父或祖先。 可以通过在一个元件查询包裹它限制上的某个祖先元素范围查询或元素值的查询:

cts:element-query(xs:QName("patent-assignor"), cts:element-value-query(xs:QName("name"), "my value"))

元素查询:您可以通过传递序列作为第一个参数来CTS上一次调用不同的祖先的名字进行搜索:

cts:element-query((xs:QName("patent-assignor"), xs:QName("patent-assignee")), cts:element-value-query(xs:QName("name"), "my value"))

HTH!



文章来源: How to create element range index in Marklogic?