XSD 限制和枚举只使用本地定义的类型?
XSD restriction and enumeration using only locally defined types?
我有XML,我想在
的同时拥有对简单元素account-no的属性和限制
<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..
我的问题是:我可以使用匿名方法编写它吗?
扩展和限制时不能完全消除对全局定义的引用。这是你能得到的最接近的:
<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
设置默认值,您必须将其设为可选。然后您可以通过 xs:attribute
:
上的 default
属性指定默认值
<xs:attribute name="account-type" default="saving">
我有XML,我想在
的同时拥有对简单元素account-no的属性和限制 <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.. 我的问题是:我可以使用匿名方法编写它吗?
扩展和限制时不能完全消除对全局定义的引用。这是你能得到的最接近的:
<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
设置默认值,您必须将其设为可选。然后您可以通过 xs:attribute
:
default
属性指定默认值
<xs:attribute name="account-type" default="saving">