使用ref时,XML模式可以使用unique吗?

使用ref时,XML模式可以使用unique吗?,xml,xsd,unique-constraint,Xml,Xsd,Unique Constraint,VisualStudio给了我一个错误,我看不出这个错误实际上是针对XML模式定义的 当我对一个集合有一个唯一的约束时,我引用它的元素表示 When the ref attribute is present, the type attribute and complexType, simpleType, key, keyref, and unique elements cannot be present. 这是正确的吗?如果是的话,我是被迫在它的父元素中声明子元素的吗 <?xml ve

VisualStudio给了我一个错误,我看不出这个错误实际上是针对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>

我使用的是唯一正确的吗

编辑

那么这个呢:

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


为什么不工作?

唯一元素不能在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>


唯一元素不能在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>


特定元素的唯一约束必须始终出现在包含元素中。 你可能想表达的是这样的:“军阀元素的子元素(这些子元素是军阀元素)必须有一个唯一的标题”
如果按以下方式更改xsd,它应该可以工作:


特定元素的唯一约束必须始终出现在包含元素中。 你可能想表达的是这样的:“军阀元素的子元素(这些子元素是军阀元素)必须有一个唯一的标题”
如果按以下方式更改xsd,它应该可以工作:



我不知道,我可以:P这样我就可以在元素中声明唯一性了。如果我在不止一个地方使用元素,并且只在其中一个集合中使用唯一的元素,会怎么样?我认为在XSD中不可能这样做。您可以键入,但不能是唯一的。同样的,的父元素只能是“元素”。如果我将Warrord作为一个类型,为什么不使用unique,如何使用它?您可以为complexType、simpleType等定义类型。unique应该在元素定义中,但在类型定义中。您可以在原始问题的编辑中看到,该类型没有元素。我不知道,我可以:P这样我就可以在元素中声明唯一性了。如果我在不止一个地方使用元素,并且只在其中一个集合中使用唯一的元素,会怎么样?我认为在XSD中不可能这样做。您可以键入,但不能是唯一的。同样的,的父元素只能是“元素”。如果我将Warrord作为一个类型,为什么不使用unique,如何使用它?您可以为complexType、simpleType等定义类型。unique应该在元素定义中,但在类型定义中。您可以在原始问题的编辑中看到,该类型没有元素。无论如何,这样更好吗?