假设有一个这样的XML文档:
<?xml version="1.0" encoding="utf-8"?>
<Angles>
<angle unit="DEG">45</angle>
<angle unit="RAD">0,7854</angle>
</Angles>
是否可以定义一个xsd模式,该模式根据相应的范围验证角度数? (即0到360度为0度 - 2pi为rad)。
答案 0 :(得分:1)
您可以定义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 中,您可以
xsi:type
或angle
的XML中的degType
上使用radType
。angleDeg
/ angleRad
)。根据OP的要求......
XSD 1.0的xsi:type
技术示例如下:
此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>
使用此XSD 1.0架构成功验证:
<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。