使用ref时,XML模式可以使用unique吗?
VisualStudio给了我一个错误,我看不出这个错误实际上是针对XML模式定义的 当我对一个集合有一个唯一的约束时,我引用它的元素表示使用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
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应该在元素定义中,但在类型定义中。您可以在原始问题的编辑中看到,该类型没有元素。无论如何,这样更好吗?