XSD通过抑制一个属性来扩展基数

时间:2014-03-13 08:46:44

标签: xml xsd complextype

我有以下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>

1 个答案:

答案 0 :(得分:2)

扩展总是添加东西,它不能删除东西。

删除东西的正常方法是限制。但限制只能删除原始中可选的内容(如果类型R是类型B的限制,那么R的每个有效实例也必须是B的有效实例)。

我认为您需要将现有的凭据类型定义为某种不包含“身份验证”属性的新类型的扩展。