2012-05-18 3 views
0

У меня есть XML-документ. Структура документов, как это: -Проблема с cts: и-query в Marklogic

<?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> 
     <assignor-name>TSAI, YU-WEN</name> 
     <execution-date> 
     <date>20050331</date> 
     </execution-date> 
    </patent-assignor> 
    <patent-assignor> 
     <assignor-name>HUANG, CHENG-I</name> 
     <execution-date> 
     <date>20050331</date> 
     </execution-date> 
    </patent-assignor> 
    </patent-assignors> 
    <patent-assignees> 
    <patent-assignee> 
     <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> 

я создал поля на assignor-name и assignee-name. Теперь я бег cts:search запроса следующим образом: -

let $query:=cts:and-query((

    cts:element-query(xs:QName("assignor-name"), 
     cts:field-word-query("Assignor Name", "apple")), 
    cts:element-query(xs:QName("assignee-name"), 
     cts:field-word-query("Assignee Name", "salix")) 
)) 

for $x in cts:search(fn:doc(), $query) 
return $x 

где Цедент Имя и Правопреемник Имя являются именами полей, которые я создал. И эти поля имеют assignor-name и assignee-name в качестве их локального имени соответственно. Но когда я запускаю этот запрос, он дает мне пустую последовательность. Я также проверил документы xml и документы на данные, где assignor-name - «яблоко», а assignee-name - «salix», но я не получаю результат. Когда я запускаю этот запрос только для имени цедента или имени цессионария, тогда я получаю результаты, но когда я их объединяю в and-query, то я не получил никаких результатов. Пожалуйста помоги.

+2

Puneet, ваши данные выборки не соответствует тому, что вы пытаетесь сделать: ваш запрос использует пространство имен ("па: »), который не отображается в ваших данных, а также яблоко и саликс, которые не присутствуют. Не могли бы вы обновить образец, который должен совпадать? –

ответ

2

Помимо проблемы пространства имен, которую указал Дэйв, комбинация element-query и field-query необычна и, вероятно, не приведет к удовлетворительным результатам.

Для этого запроса вы можете оставить оба в пользу простого cts:element-word-query элемента.

1

Да, вы можете использовать функцию cts:element-word-query следующим образом:

cts:and-query((cts:element-word-query(xs:QName("pa:assignor-name"), 
             "apple", 
             "case-insensitive" 
            ), 
       cts:element-word-query(xs:QName("pa:assignee-name"), 
            "salix", 
             "case-insensitive") 
      ))