仅使用本地定义的类型的XSD限制和枚举?

时间:2015-11-12 17:57:51

标签: xml xsd xml-validation

我有XML,我希望在简单元素帐户中有属性和限制 - 不能同时

  <bank-cheque>
    <cheque-no>2345</cheque-no>
    <issue-date>2015-11-19</issue-date>
    <cheque-issued-for>john</cheque-issued-for>
    <account-no account-type="saving">sanjauli</account-no> <!-- This one here
        account-type is an enumeration having ( saving , current) and values are
        ( sanjauli , summerhill, dhalli ) -->
  </bank-cheque>

我完全为此写了一个XSD

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bank-cheque" type="bank-cheque-type"/>
    <xs:complexType name="bank-cheque-type">
        <xs:sequence>
            <xs:element name="cheque-no" type="xs:string"/>
            <xs:element name="issue-date" type="xs:date"/>
            <xs:element name="cheque-issued-for" type="xs:string"/>
            <xs:element name="account-no" type="accountNoType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="accountNoType1">
        <xs:restriction base="xs:string">
            <xs:enumeration value="saving"/>
            <xs:enumeration value="current"/>
            <xs:enumeration value="corporate"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="accountNoType">
        <xs:simpleContent>
            <xs:extension base="BranchType">
                <xs:attribute name="account-type" type="accountNoType1" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:simpleType name="BranchType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="sanjauli"/>
            <xs:enumeration value="summer hill"/>
            <xs:enumeration value="dhalli"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

并且一切正常,但现在我想使用匿名标记方法编写此XSD .. 我的问题是:我可以用匿名方法写它吗?

1 个答案:

答案 0 :(得分:1)

扩展和限制时,不能完全消除对全局定义的引用。这是尽可能接近:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="bank-cheque">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="cheque-no" type="xs:string"/>
        <xs:element name="issue-date" type="xs:date"/>
        <xs:element name="cheque-issued-for" type="xs:string"/>
        <xs:element name="account-no">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="BranchType">
                <xs:attribute name="account-type" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="saving"/>
                      <xs:enumeration value="current"/>
                      <xs:enumeration value="corporate"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="BranchType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="sanjauli"/>
      <xs:enumeration value="summer hill"/>
      <xs:enumeration value="dhalli"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

更新:要为account-type设置默认值,您必须将其设为可选。然后,您可以通过default上的xs:attribute属性指定默认值:

            <xs:attribute name="account-type" default="saving">
相关问题