Стойности на схемата по подразбиране в MarkLogic

Опитвам се да вмъкна документ чрез xdmp:document-insert(), преди това да бъде извикано, валидирам документа спрямо съответната му схема чрез validate strict { $xml } и използвам този изход в повикването за вмъкване. Изходът от повикването validate обаче не включва стойността по подразбиране, посочена в схемата.

Опростена схема:

<xs:schema>
  <xs:complexType name="fields-type" abstract="false" mixed="false">
    <xs:sequence minOccurs="1" maxOccurs="1">
      <xs:element default="Faulkner" maxOccurs="1" minOccurs="0" name="an_author" nillable="false" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="document-type" abstract="false" mixed="false">
    <xs:sequence minOccurs="1" maxOccurs="1">
      <xs:element name="fields" type="fields-type" minOccurs="1" maxOccurs="1" nillable="false"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="document" type="document-type" abstract="false" nillable="false"/>
</xs:schema>

Документът:

 <document>
     <fields>
       <an_author/>
     </fields>
 </document>

След извикване на validate strict { $xml } изходният документ е същият като по-горе, без добавена стойност по подразбиране към елемента <an_author>. Забележка: Опитах също да използвам атрибута fixed на мястото на default в схемата и получавам същия резултат. xdmp:validate($xml, "strict") също не връща никакви грешки.

Редактиране: Според спецификацията за валидиране на XQuery тук изходът трябва да има стойността по подразбиране посочени.


person sinemetu1    schedule 30.10.2012    source източник


Отговори (1)


Стойностите по подразбиране всъщност са част от модела на данни, но не е задължително да са сериализирани, когато извеждаме модела на данни. Можете да проверите дали атрибутите по подразбиране са в модела на данни, като направите израз на пътя срещу тях.

Ако искате да сте сигурни, че те се сериализират при изхода, има настройка за изход, която ще ги принуди да бъдат излъчени:

declare option xdmp:output "default-attributes=yes";

(Или можете да зададете опцията атрибути по подразбиране на xdmp:quote или xdmp:save.)

Като алтернатива можете да принудите копие на екземпляра на модела на данни, което ще носи всички атрибути, но забравя, че те са били по подразбиране:

let $d := validate strict { $node }
return document { $d }
person Mary Holstege    schedule 30.10.2012
comment
Не мисля, че разбра въпроса ми. Атрибутът по подразбиране, зададен в схемата на xs:element, трябва да направи стойността на an_author Faulkner след извикване на validate. Взето от спецификацията на XML-схемата тук процесорът на схемата предоставя елемента с стойност, равна на тази на атрибута по подразбиране. - person sinemetu1; 31.10.2012
comment
Предполагам, че е възможно тя да не е разбрала въпроса ви, но след като прочетох въпроса, отговора и коментара ви, по-скоро ми изглежда, че не сте разбрали отговора. Опитахте ли предложението? Имате ли пример, показващ, че дори след declare option xdmp:output "default-attributes=yes"; сериализираният документ все още няма стойност по подразбиране? Проверихте ли с израз на пътя, за да видите дали стойността по подразбиране е или не действително се показва в модела на данни след вашето извикване на validate? - person C. M. Sperberg-McQueen; 01.11.2012