Значения схемы по умолчанию в 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";

(Или вы можете установить параметр default-attributes для 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-Schema здесь, процессор схемы предоставляет элементу значение равно значению атрибута по умолчанию. - person sinemetu1; 31.10.2012
comment
Я полагаю, возможно, что она не поняла вашего вопроса, но, прочитав вопрос, ответ и ваш комментарий, мне кажется, что вы не поняли ответа. Вы пробовали предложение? У вас есть пример, показывающий, что даже после declare option xdmp:output "default-attributes=yes"; сериализованный документ все еще не имеет значения по умолчанию? Вы проверили выражение пути, чтобы увидеть, действительно ли значение по умолчанию отображается в модели данных после вашего вызова validate? - person C. M. Sperberg-McQueen; 01.11.2012