Шаблон XQuery в MarkLogic не показывает никаких значений, только атрибуты (TDE)

Я создал .xml-файл и шаблон для извлечения некоторых данных, но отображаются только атрибуты.

Это мой .xml-тестовый файл:

<user id="1234" email="[email protected]" password="1234">
<type>Human</type>
<notes>
    <note reference="5432" id="753" xmlns="http://testnamespace.de/note">
        <text>example</text>
        <username>John Doe</username>
        <groups>
            <group id="42">Avengers</group>
            <group id="55">JLA</group>
        </groups>
        <distinctiveTitle>title</distinctiveTitle>
        <personNameInverted>Doe John</personNameInverted>
    </note>
</notes>

and here the corresponding template:

import module namespace tde = "http://marklogic.com/xdmp/tde" at "/MarkLogic/tde.xqy";
declare namespace testns = "http://testnamespace.de/note";

let $userNoteTDE:=
<template xmlns="http://marklogic.com/xdmp/tde" xmlns:testns="http://testnamespace.de/note">
    <context>/user/notes/testns:note</context>
    <rows>
        <row>
            <schema-name>user</schema-name>
            <view-name>notes</view-name>
            <columns>
                <column>
                    <name>reference</name>
                    <scalar-type>string</scalar-type>
                    <val>@reference</val>
                    <nullable>true</nullable>
                    <default>""</default>
                </column>
                <column>
                    <name>id</name>
                    <scalar-type>string</scalar-type>
                    <val>@id</val>
                    <nullable>true</nullable>
                    <default>""</default>
                </column>
                <column>
                    <name>text</name>
                    <scalar-type>string</scalar-type>
                    <val>text</val>
                    <nullable>true</nullable>
                    <default>""</default>
                </column>
                <column>
                    <name>username</name>
                    <scalar-type>string</scalar-type>
                    <val>username</val>
                    <nullable>true</nullable>
                    <default>""</default>
                </column>
                <column>
                    <name>distinctiveTitle</name>
                    <scalar-type>string</scalar-type>
                    <val>distinctiveTitle</val>
                    <nullable>true</nullable>
                    <default>""</default>
                </column>
                <column>
                    <name>personNameInverted</name>
                    <scalar-type>string</scalar-type>
                    <val>personNameInverted</val>
                    <nullable>true</nullable>
                    <default>""</default>
                </column>
            </columns>
        </row>
    </rows>
</template>

Я изменил контекст, чтобы использовать правильный (?) Путь и пространство имен (потому что эта часть должна быть вложена в другой шаблон):

<context>/user/notes/testns:note</context>

Если я проверю шаблон с помощью tde: node-data-extract (fn: doc (TESTFILE PATH), $ userNoteTDE), я получаю следующий результат:

    {
"TESTFILE PATH": [
  {
    "row": {
     "schema": "user", 
     "view": "notes", 
     "data": {
      "rownum": "1", 
      "reference": "5432", 
      "id": "753", 
      "text": "", 
      "username": "", 
      "distinctiveTitle": "", 
      "personNameInverted": ""
     }
    }
   }
  ]
 }

Это показывает, что атрибуты отображаются правильно, но каким-то образом значения (текст, имя пользователя, отличительный заголовок, personNameInverted) элементов не работают. Я предполагаю, что значениям нужен более точный путь или выражение, но я не могу найти никакой информации. Если я изменю значение текст, например, на <val>testns:text</val> в моем шаблоне, я получаю сообщение об ошибке: XDMP-UNBPRFX: (err: XPST0081) Prefix testns не имеет привязки к пространству имен

Итак, каким-то образом элементы не могут использовать объявленное пространство имен, но атрибуты могут.

Также я пропустил раздел <groups> в моем шаблоне, потому что им нужен был бы контекст сам по себе, это не имеет значения, не так ли?

Заранее благодарим за любую полезную информацию!


person Taco23    schedule 20.09.2017    source источник


Ответы (1)


Служба поддержки MarkLogic дала мне ответ на эту проблему, поэтому я хочу поделиться им здесь!

(Спасибо, Крис Хэмлин!)

Это действительно была проблема с пространством имен. В документации MarkLogic показано, что для нескольких пространств имен "пространства имен путей" должны использоваться.

После объявления

...

    <path-namespaces>
        <path-namespace>
            <prefix>testns</prefix>
            <namespace-uri>http://testnamespace.de/note</namespace-uri>
        </path-namespace>
    </path-namespaces>

...

между шаблоном и context и с использованием префикса testns для моих элементов, таких как testns: text, элементы правильно отображается!

person Taco23    schedule 20.09.2017
comment
Так как вы это поняли, отметьте свой ответ как Принято, чтобы было ясно, что на этот вопрос есть хороший ответ. - person Dave Cassel; 22.09.2017