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

Область применения: SQL Server (все поддерживаемые версии) База данных SQL Azure Управляемый экземпляр 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.

См. также раздел