为了更容易阅读,下面是一个稍微修改过的 XML(它不会改变答案的真实性,只是让它更容易阅读,因为我不必列出两个 XSD)。
<Values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Value xsi:type="xs:int">1</Value>
<Value xsi:type="xs:string">I'm a string</Value>
<Value xsi:type="Point">
<X>10.2</X>
<Y>2.3</Y>
</Value>
</Values>
此 XSD 将验证上述内容:
<?xml version="1.0" encoding="utf-8"?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema xmlns:me="urn:tempuri-org" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="Values">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="Value"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Point" >
<xsd:sequence minOccurs="0">
<xsd:element name="X" type="xsd:decimal" />
<xsd:element name="Y" type="xsd:decimal" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
问题是,即使您不想要日期,它也是使用 xsi:type="xs:date" 的值。但这只是 XSD 1.0 的一个限制。
要约束允许的 xsi:type 属性列表,您必须迁移到 XSD 1.1 或在 XSD 1.0 处理器之上使用 Schematron 约束。