サンプルXMLを近似値として取り上げると、厳密に言えば、目的の効果を得る方法が1つあります。これはxsi:typeと呼ばれています。私は個人的にxsi:typeを嫌いです。だから私はこの答えをむしろ学問的なものと考えています。
あなたはこのXMLに同意する場合:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<sample-tag xsi:type="one">
<one></one>
</sample-tag>
<sample-tag xsi:type="two">
<two></two>
</sample-tag>
<sample-tag xsi:type="three">
<three></three>
</sample-tag>
<sample-tag xsi:type="onetwo">
<one></one>
<two></two>
</sample-tag>
</root>
...その後、このXSDは何をしたいあなたを与えるだろう:
<?xml version="1.0" encoding="utf-8"?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="sample-tag" type="sample-tag"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="sample-tag" abstract="true"/>
<xsd:complexType name="one">
<xsd:complexContent>
<xsd:extension base="sample-tag">
<xsd:sequence>
<xsd:element name="one"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="two">
<xsd:complexContent>
<xsd:extension base="sample-tag">
<xsd:sequence>
<xsd:element name="two"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="three">
<xsd:complexContent>
<xsd:extension base="sample-tag">
<xsd:sequence>
<xsd:element name="three"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="onetwo">
<xsd:complexContent>
<xsd:extension base="sample-tag">
<xsd:sequence>
<xsd:element name="one"/>
<xsd:element name="two"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
XSI場合:種類は問題外である、とXSD 1.1あなたは@ Pangeaの答えに行かなければなりません。