1

が呼び出される前にドキュメントを挿入しようとしています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代わりに属性を使用しようとしましたが、同じ結果が得られました。エラーも返しません。defaultxdmp:validate($xml, "strict")

編集:ここでのXQuery検証仕様によれば、出力にはデフォルト値が指定されている必要があります。

4

1 に答える 1

2

デフォルト値は実際にはデータ モデルの一部ですが、データ モデルを出力するときに必ずしもシリアル化されるとは限りません。デフォルトの属性がデータ モデルに含まれていることを確認するには、それらに対してパス式を実行します。

出力時にそれらが確実にシリアル化されるようにしたい場合は、それらを強制的に出力する出力設定があります。

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

(または、オプションのdefault-attributes onxdmp:quoteまたはを設定できますxdmp:save。)

または、データ モデル インスタンスのコピーを強制的に作成することもできます。これにより、すべての属性が保持されますが、それらがデフォルト設定されていることは忘れられます。

let $d := validate strict { $node }
return document { $d }
于 2012-10-30T17:41:17.227 に答える