Поделиться через


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

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Наиболее распространенными причинами неоднозначности являются <xsd:any> подстановочные знаки и частицы, имеющие диапазоны вхождения переменных, например minOccurs maxOccurs < . Например, следующий con режим палатки l является неоднозначным, так как <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/> . Даже если документы можно проверить однозначно, схема будет отклонена, поскольку возможность неоднозначности существует.

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

<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/>, con режим палатки l нарушает правило ограничения UPA.

Следующие шаги

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

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

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

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

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

См. также