XML-схему можно использовать уникально при использовании ref? - PullRequest
0 голосов
/ 21 марта 2012

Visual Studio выдала мне ошибку, которую я не вижу, действительно противоречит определению схемы XML.

Когда у меня есть уникальное ограничение на коллекцию, элемент которого я ссылаюсь на него, говорит

When the ref attribute is present, the type attribute and complexType, simpleType, key, keyref, and unique elements cannot be present. 

Правильно ли это, и если да, я вынужден объявить дочерний элемент внутри его родителя?

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://mysticwarlords.kaa/XMLSchema"
            xmlns="http://mysticwarlords.kaa/XMLSchema"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="titletype">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Warlord"/>
            <xs:enumeration value="FirstMate"/>
            <xs:enumeration value="Jester"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="warlord">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="warlordName" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="title" type="titletype" />
        </xs:complexType>
    </xs:element>

    <xs:element name="warband">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="warbandName" type="xs:string" />
            <xs:element name="warlords">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="warlord" minOccurs="1" maxOccurs="unbounded">
                    <xs:unique name="eachTitleOnlyOnce">
                        <xs:selector xpath="warlord"/>
                        <xs:field xpath="@title"/>
                    </xs:unique>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

Правильно ли я использую уникальный?

EDIT

Что насчёт этого:

<xs:complexType  name="warlordtype">
    <xs:simpleContent>
      <xs:extension base="xs:string">
          <xs:attribute name="title" type="titletype" />
      </xs:extension>
    </xs:simpleContent>
</xs:complexType>

    <xs:element name="warband">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="warbandName" type="xs:string" />
            <xs:element name="warlords">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="warlord" type="warlordtype" minOccurs="1" maxOccurs="unbounded">
                    <xs:unique name="eachTitleOnlyOnce">
                        <xs:selector xpath="warlord"/>
                        <xs:field xpath="@title"/>
                    </xs:unique>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
    </xs:element>

Почему бы это не сработало?

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Уникальный элемент не может быть в элементе ref. Проверьте определение элемента.

Можете ли вы использовать это:

<xs:schema xmlns="http://mysticwarlords.kaa/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://mysticwarlords.kaa/XMLSchema">
<xs:simpleType name="titletype">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Warlord"/>
        <xs:enumeration value="FirstMate"/>
        <xs:enumeration value="Jester"/>
    </xs:restriction>
</xs:simpleType>
<xs:element name="warlord">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="warlordName" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="title" type="titletype"/>
    </xs:complexType>
    <xs:unique name="eachTitleOnlyOnce">
        <xs:selector xpath="warlord"/>
        <xs:field xpath="@title"/>
    </xs:unique>
</xs:element>
<xs:element name="warband">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="warbandName" type="xs:string"/>
            <xs:element name="warlords">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="warlord" minOccurs="1" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

1 голос
/ 23 ноября 2013

Уникальное ограничение для определенного элемента всегда должно появляться в содержащем элементе.Вероятно, вы хотите выразить что-то вроде этого: «Дочерние элементы элемента warlords (эти дочерние элементы являются полевыми элементами) должны иметь уникальный заголовок»
Если вы измените xsd, как показано ниже,работа:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  targetNamespace="http://mysticwarlords.kaa/XMLSchema"
    xmlns="http://mysticwarlords.kaa/XMLSchema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:simpleType name="titletype">
        <xs:restriction base="xs:string">
            <xs:enumeration value="Warlord"/>
            <xs:enumeration value="FirstMate"/>
            <xs:enumeration value="Jester"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="warlord">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="warlordName" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="title" type="titletype" />
        </xs:complexType>
    </xs:element>

    <xs:element name="warband">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="warbandName" type="xs:string" />
                <xs:element name="warlords">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="warlord" minOccurs="1" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                    <xs:unique name="eachTitleOnlyOnce">
                        <xs:selector xpath="warlord"/>
                        <xs:field xpath="@title"/>
                    </xs:unique>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...