私の意見では、現在の 1.0 仕様 (Michael の仕様では XSLT 2.0 以降が必要です) を使用する最善の方法は、xs:any ワイルドカードの代わりに置換グループの先頭を使用することです。バージョン 1.0 は、ソフトウェア スタックの可用性と比較して、より広い相互運用性を提供します。
xs:any とは異なり、置換グループでは、基本型で固定する必要があります。複合型にすることをお勧めします。「余分な」荷物を運ばないように、空のcomplexType定義にすることができます。
検証は、基本グループの代わりに置換グループのメンバーを含むスキーマをパーサーに指示するだけです。
更新: 説明するためにサンプル XSD を追加します。SubstitutionGroupExample.xsd として更新されたもの:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="AType">
<xs:sequence>
<xs:element name="B"/>
<xs:element ref="any" />
</xs:sequence>
</xs:complexType>
<xs:element name="A" type="AType"/>
<xs:complexType name="TAny" abstract="true"/>
<xs:element name="any" type="TAny" abstract="true"/>
</xs:schema>
拡張.xsd:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd/1" elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd/1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:base="http://tempuri.org/XMLSchema.xsd">
<xs:import namespace="http://tempuri.org/XMLSchema.xsd" schemaLocation="SubstitutionGroupExample.xsd"/>
<xs:element name="someAny" substitutionGroup="base:any">
<xs:complexType>
<xs:complexContent>
<xs:extension base="base:TAny">
<xs:sequence>
<xs:element name="new"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>
有効な XML (Extended.xsd に基づく):
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) -->
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/XMLSchema.xsd" xmlns:ext="http://tempuri.org/XMLSchema.xsd/1">
<B>anyType</B>
<ext:someAny>
<ext:new/>
</ext:someAny>
</A>