Ограничение однозначного соответствия примитивов

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

В XSD сложные модели содержимого ограничены правилом ограничения однозначного соответствия примитивов. Это правило требует, чтобы каждый элемент в документе экземпляра соответствовал однозначно одному <xsd:element> элементу или <xsd:any> частице в модели содержимого родительского элемента. Любая схема, которая содержит тип с потенциально неоднозначной моделью содержимого, отклоняется.

Наиболее распространенными причинами неоднозначности являются <xsd:any> подстановочные знаки и частицы, имеющие диапазоны вхождения переменных, например minOccurs maxOccurs < . Например, следующая модель содержимого неоднозначна, так как <e1> элемент может соответствовать либо элементу, либо <xsd:element> элементу <xsd:any> .

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

Следующая модель содержимого также является неоднозначной:

<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>

Хотя документ, например <root><e1/><e2/><e1/></root> , можно проверить однозначно, документ, такой как <root><e1/><e1/></root> не может, потому что он не ясно, к чему <xsd:element> ссылается второй <e1/> . Даже если документы можно проверить однозначно, схема будет отклонена, поскольку возможность неоднозначности существует.

Чтобы модель содержимого была допустимой, необходимо проверить любой экземпляр однозначно, не глядя вперед. Например, рассмотрим следующую модель содержимого:

<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>

Для такого документа, как <root><e1/><e3/></root>, последовательность <e1/><e3/> однозначно совпадает со вторым элементом <xsd:sequence>. Тем не менее, поскольку <xsd:element><e1/> не удается определить соответствие, не ожидая, <e3/>модель содержимого нарушает правило ограничения UPA.

Далее

Следующий документ опубликован консорциумом World Wide Web (W3C) и содержит техническое описание ограничения однозначного соответствия примитивов:

«XML-схема. Часть 1, структуры, второе издание, W3C Proposed Edited Recommendation»:

  • Раздел 3.8.6. Ограничения компонентов схемы для группы моделей

  • Приложение H. Анализ ограничения однозначного соответствия примитивов (не нормативный)

Чтобы просмотреть документ, перейдите по адресу http://www.w3.org/TR/xmlschema-1.

См. также