Batasan atribusi partikel unik

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Database Azure SQL Managed Instance

Dalam XSD, model konten kompleks dibatasi oleh aturan batasan atribusi partikel (UPA) yang unik. Aturan ini mengharuskan setiap elemen dalam dokumen instans sesuai secara tidak ambigu dengan tepat satu <xsd:element> atau <xsd:any> partikel dalam model konten induknya. Skema apa pun yang berisi jenis dengan model konten yang berpotensi ambigu ditolak.

Penyebab paling umum dari ambiguitas adalah <xsd:any> karakter kartubebas dan partikel yang memiliki rentang kemunculan variabel, seperti minOccurs < maxOccurs. Misalnya, model konten berikut ambigu, karena <e1> elemen dapat cocok dengan <xsd:element> elemen atau <xsd:any> .

<xsd:element name="root">
    <xsd:complexType>
        <xsd:choice>
            <xsd:element name="e1"/>
            <xsd:any namespace="##any"/>
        </xsd:choice>
    </xsd:complexType>
</xsd:element>

Model konten berikut juga ambigu:

<xsd:element name="root">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="e1" maxOccurs="2"/>
            <xsd:element name="e2" minOccurs="0"/>
            <xsd:element name="e1"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Meskipun dokumen seperti <root><e1/><e2/><e1/></root> dapat divalidasi secara tidak ambigu, dokumen seperti <root><e1/><e1/></root> tidak bisa, karena tidak jelas mana yang <xsd:element> dimaksud oleh dokumen kedua <e1/> . Meskipun beberapa dokumen dapat divalidasi secara tidak ambigu, skema akan ditolak, karena potensi ambiguitas.

Agar model konten valid, dimungkinkan untuk memvalidasi instans apa pun secara tidak ambigu tanpa melihat ke depan. Misalnya, pertimbangkan model konten berikut:

<xsd:element name="root">
    <xsd:complexType>
        <xsd:choice>
           <xsd:sequence>
               <xsd:element name="e1"/>
               <xsd:element name="e2"/>
           </xsd:sequence>
           <xsd:sequence>
               <xsd:element name="e1"/>
               <xsd:element name="e3"/>
           </xsd:sequence>
       </xsd:choice>
    </xsd:complexType>
</xsd:element>

Untuk dokumen seperti <root><e1/><e3/></root>, urutannya <e1/><e3/> secara tidak ambigu cocok dengan yang kedua <xsd:sequence>. Namun, karena <xsd:element> yang <e1/> sesuai tidak dapat ditentukan tanpa melihat ke <e3/>depan , model konten melanggar aturan batasan UPA.

Langkah berikutnya

Dokumen berikut diterbitkan oleh World Wide Web Consortium (W3C) dan berisi deskripsi teknis batasan atribusi partikel unik:

"Skema XML Bagian 1: Struktur Edisi Kedua, Rekomendasi Edit yang Diusulkan W3C":

  • Bagian 3.8.6: Batasan pada Komponen Skema Grup Model

  • Lampiran H: Analisis Batasan Atribusi Partikel Unik (non-normatif)

Untuk melihat dokumen, kunjungi http://www.w3.org/TR/xmlschema-1.

Lihat juga