В TDE Marklogic как избежать тройных значений? - PullRequest
1 голос
/ 26 июня 2019

<template xmlns="http://marklogic.com/xdmp/tde">
    <context>/test</context>
    <vars>
        <var>
            <name>subprefix</name>
            <val>"http://www.test.com/resource/test/"</val>
        </var>
    <var>
            <name>objprefix</name>
            <val>"http://www.test.com/resource/test/"</val>
        </var>
    </vars>
    <triples>
        <triple>
            <subject>
                <val>sem:iri($subprefix || ElemenetName)</val>
                <invalid-values>ignore</invalid-values>
            </subject>
            <predicate>
                <val>sem:iri('is')</val>
            </predicate>
            <object>
                <val>sem:iri($objprefix || FullName)</val>
                <invalid-values>ignore</invalid-values>
            </object>
        </triple>
    </triples>
</template>

Я создал шаблон для получения троек из XML.

Но вы хотите избежать тройных значений с нулевым значением (s, p или o). Я использую игнорировать, но это работает, только если нет префикса в теме или объекте. Если есть префикс, он создает тройки с нулем (только префикс).

У нас есть какой-нибудь способ справиться с этим в MarkLogic TDE?

Обнуляемый объект / тема вопроса.

PFB.

1 Ответ

0 голосов
/ 27 июня 2019

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

xquery version "1.0-ml";

let $tde :=
<template xmlns="http://marklogic.com/xdmp/tde">
  <context>/test</context>
  <vars>
    <var>
      <name>subprefix</name>
      <val>"http://www.test.com/resource/test/"</val>
    </var>
    <var>
      <name>objprefix</name>
      <val>"http://www.test.com/resource/test/"</val>
    </var>
  </vars>
  <templates>
    <template>
      <context>FullName</context>
      <triples>
        <triple>
            <subject>
                <val>sem:iri($subprefix || ../ElemenetName)</val>
                <invalid-values>ignore</invalid-values>
            </subject>
            <predicate>
                <val>sem:iri('is')</val>
            </predicate>
            <object>
                <val>sem:iri($objprefix || .)</val>
                <invalid-values>ignore</invalid-values>
            </object>
        </triple>
      </triples>
    </template>
  </templates>
</template>
let $xml1 := <test><ElemenetName>elem</ElemenetName><FullName>full</FullName></test>
let $xml2 := <test><ElemenetName>elem</ElemenetName></test>
let $xml3 := <test><FullName>full</FullName></test>
return tde:node-data-extract(($xml1, $xml2, $xml3), $tde)

Здесь можно найти дополнительную информацию о подшаблонах:

https://docs.marklogic.com/guide/sql/creating-template-views#id_28999

НТН!

...