您可以定義degType
和radType
是這樣的:
<xs:simpleType name="degType">
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="360"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="radType">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="6.28318530718"/>
</xs:restriction>
</xs:simpleType>
然後在XSD 1.1,您可以使用條件類型分配:
<xs:element name="angle" type="xs:anyType">
<xs:alternative test="@unit='DEG'" type="degType"/>
<xs:alternative test="@unit='RAD'" type="radType"/>
<xs:alternative test="@unit" type="xs:error"/>
<xs:alternative type="xs:string"/>
</xs:element>
在XSD 1.0,你可以
- 在
angle
的angle
上使用xsi:type
,它指的是degType
或radType
。
- 使用不同的元素名稱(
angleDeg
/angleRad
)。
每個操作的請求......
的xsi:type
技術的XSD 1.0的示例如下:
此XML文檔實例:
<?xml version="1.0" encoding="utf-8"?>
<Angles xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="try.xsd">
<angle xsi:type="degType">45</angle>
<angle xsi:type="radType">0.7854</angle>
</Angles>
Val與此XSD 1.0架構成功idates:
<xs:schema version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="degType">
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="360"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="radType">
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="6.28318530718"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="Angles">
<xs:complexType>
<xs:sequence>
<xs:element name="angle" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
使用的Xerces2 Java的2.11.0。
您能否提供XSD 1.0的選項一的例子? Visual Studio 2005 xsd編輯器抱怨說我不能在同一個作用域中聲明具有不同類型的相同名稱的元素 – sblandin
@sblandin:當然,回答使用'xsi:type'技術更新示例。 – kjhughes