Список всех названий документов в марклогическом лесу - PullRequest
0 голосов
/ 24 апреля 2018

Я просто хочу найти все имена документов в лесу.

Я знаю название леса (ABC), и мне нужно найти все документы в этом лесу (ABC). Мой выход должен выглядеть следующим образом.

Лесная азбука имеет

A.xml
B.xml
C.xml

и так далее ...

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Чтобы вывести список всех URI из определенного леса, вы можете использовать cts:uris() и указать идентификатор леса в 5-м параметре:

cts:uris((), (), cts:true-query(), (), xdmp:forest("ABC"))

Ваш комментарийпредположил, что причина, по которой вы пытаетесь перечислить все URI из определенного леса, заключалась в том, чтобы вы могли удалить дубликаты.

Приведенный ниже код можно использовать для получения всех URI изуказанный лес, а затем удалите их из этого леса, если они являются дубликатами.

Если вы попытаетесь прочитать свойства документа и будет сгенерировано исключение XDMP-DBDUPURI , перехватите это исключение и затем удалите документ в другой транзакции из проблемного леса.

(: update this with the name of problem forest :)
declare variable $PROBLEM-FOREST := xdmp:forest("ABC"); 
declare variable $URIS := cts:uris((), (), cts:true-query(), (), $PROBLEM-FOREST);

for $uri in $URIS
return
  try {
      let $properties := xdmp:document-get-properties($uri, xs:QName("foo"))
      return ()
  } catch($e) {
    if ($e/error:code = "XDMP-DBDUPURI") then
      xdmp:invoke-function(
        function(){ xdmp:document-delete($uri) },
        <options xmlns="xdmp:eval">
          <isolation>different-transaction</isolation>
          <database>{$PROBLEM-FOREST}</database>
        </options>
      )  
    else ()
  }

В зависимости от количества документов в этом лесу вы можете столкнуться с проблемами тайм-аута.Вы можете запустить это как CORB-задание , в котором URI форсов выбраны в URIS-MODULE , а затем каждая проверка / удаление обрабатывается индивидуально в PROCESS-MODULE .

0 голосов
/ 24 апреля 2018

Поиск и поиск по лексике могут быть ограничены лесом, поэтому вы должны иметь возможность получить имена документов из лексикона URI с помощью вызова, подобного следующему:

cts.values(cts.uriReference(), null, null, null, null, xdmp.forest('ABC'))

При этом «нет»t много общих мотиваций для поиска имен документов в лесу.Что вы пытаетесь достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...