此代码是一系列xsd文件的一部分,它们结合在一起..
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="Headers"
targetNamespace="http://HttpNamespace/types"
elementFormDefault="qualified"
xmlns="http://HttpNamespace/types"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:saml ="http://HttpNamespace/saml"
>
<xs:import namespace="http://HttpNamespace/saml" schemaLocation="Saml.xsd" />
<xs:complexType name="ConnectionHeader">
<xs:attribute name="key" fixed="Connection" />
<xs:attribute name="value" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="keep-alive" />
<xs:enumeration value="close" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="ContentTypeHeader">
<xs:attribute name="key" fixed="Content-Type" />
<xs:attribute name="value" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="application/json" />
<xs:enumeration value="application/soap+xml" />
<xs:enumeration value="text/xml" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="AuthorizationHeader">
<xs:sequence>
<xs:element name="Saml" minOccurs="0" maxOccurs="1" type="saml:SamlContent"/>
</xs:sequence>
<xs:attribute name="key" fixed="Authorization"/>
</xs:complexType>
<xs:complexType name="HeadersType">
<xs:sequence>
<xs:element name="Header" maxOccurs="unbounded">
<xs:complexType>
<xs:choice>
<xs:element name="Header" minOccurs="0" maxOccurs="1" type="ConnectionHeader" />
<xs:element name="Header" minOccurs="0" maxOccurs="1" type="ContentTypeHeader" />
<xs:element name="Header" minOccurs="0" maxOccurs="1" type="AuthorizationHeader" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
你可以看到,在复杂类型HeadersType中我试图在相同元素名称的3种复杂类型之间创建选择&#34; Header&#34;。所有3种类型都在此代码段中定义。
但编辑不断向我提出错误:
元素Header的多个定义导致内容模型 变得暧昧
所以我的问题是如何定义具有不同复杂类型的相同元素的多重选择?
答案 0 :(得分:1)
你做不到。约束“元素声明一致”表示如果两个兄弟元素(或具有相同父元素的两个替代元素)具有相同的名称,则它们必须具有相同的类型。无论您使用的是XSD 1.0还是XSD 1.1,都是如此。
您必须更改内容模型(例如,使用不同的元素名称),或者您必须使用当前允许的类型的并集来定义Header元素,并使用其他方式来验证约束(例如XSD) 1.1断言)。