読みやすくするために、以下は少し変更された XML です (答えの真実は変わりませんが、2 つの 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 制約を使用する必要があります。