我有以下XSD复杂类型:
<!-- Authentication type -->
<xs:simpleType name="DatabaseAuthentication">
<xs:restriction base="xs:string">
<xs:enumeration id="Windows" value="Windows" />
<xs:enumeration id="SQL" value="SQL" />
</xs:restriction>
</xs:simpleType>
<!-- Credentials -->
<xs:complexType name="Credentials">
<xs:sequence>
<xs:element name="Domain" minOccurs="0" maxOccurs="1" type="xs:string" />
<xs:element name="Username" minOccurs="1" maxOccurs="1" type="xs:string" />
<xs:element name="Password" minOccurs="1" maxOccurs="1" type="xs:string" />
</xs:sequence>
<xs:attribute name="Authentication" type="DatabaseAuthentication" use="required" />
</xs:complexType>
有时我需要使用凭据复杂类型,但没有身份验证属性。我想扩展这个复杂类型并指示XSD跳过该属性。像这样:
<xs:element name="CustomCredentials" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:complexContent>
<xs:extension base="Credentials">
<!-- Here I would like to remove the Authentication attribute -->
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
答案 0 :(得分:2)
扩展总是添加东西,它不能删除东西。
删除东西的正常方法是限制。但限制只能删除原始中可选的内容(如果类型R是类型B的限制,那么R的每个有效实例也必须是B的有效实例)。
我认为您需要将现有的凭据类型定义为某种不包含“身份验证”属性的新类型的扩展。