一意のパーティクル属性の制約
XSD では、UPA (一意のパーティクル属性) 制約の規則によって、複雑なコンテンツ モデルが制約を受けます。 この規則では、あいまいさを排除し、インスタンス ドキュメント内の各要素が、その親のコンテンツ モデル内の <xsd:element> パーティクルまたは <xsd:any> パーティクルの 1 つに正確に対応することが必要です。 あいまいなコンテンツ モデルになる可能性のある型を含むスキーマは拒否されます。
あいまいさの最も一般的な原因は、<xsd:any> のワイルドカード文字や、minOccurs < maxOccurs のような可変の出現範囲を持つパーティクルです。 たとえば、次のコンテンツ モデルでは、<e1> 要素は <xsd:element> 要素または <xsd:any> 要素のどちらにも一致するので、あいまいになります。
<xsd:element name="root">
<xsd:complexType>
<xsd:choice>
<xsd:element name="e1"/>
<xsd:any namespace="##any"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
また、次のコンテンツ モデルもあいまいです。
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="e1" maxOccurs="2"/>
<xsd:element name="e2" minOccurs="0"/>
<xsd:element name="e1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<root><e1/><e2/><e1/></root> などのドキュメントは明確に検証できますが、<root><e1/><e1/></root> などのドキュメントは明確に検証できません。これは、2 番目の <e1/> がどの <xsd:element> に対応するかが明確でないためです。 一部のドキュメントを明確に検証できても、あいまいさが残る可能性があるため、スキーマは拒否されます。
コンテンツ モデルが有効であるためには、先行読み取りを行わなくても、インスタンスを明確に検証できる必要があります。 たとえば、次のコンテンツ モデルについて考えてみます。
<xsd:element name="root">
<xsd:complexType>
<xsd:choice>
<xsd:sequence>
<xsd:element name="e1"/>
<xsd:element name="e2"/>
</xsd:sequence>
<xsd:sequence>
<xsd:element name="e1"/>
<xsd:element name="e3"/>
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<root><e1/><e3/></root> などのドキュメントの場合、シーケンス <e1/><e3/> が 2 番目の <xsd:sequence> に明確に一致します。 ただし、<e3/> を先行読み取りしないと、<e1/> が対応する <xsd:element> を決定できないので、コンテンツ モデルは UPA 制約規則に違反することになります。
詳細情報
次のドキュメントは W3C (World Wide Web Consortium) が発行したもので、一意のパーティクル属性の制約に関する技術的な説明が含まれています。
「XML Schema Part 1:Structures Second Edition, W3C Proposed Edited Recommendation」:
Section 3.8.6:Constraints on Model Group Schema Components
Appendix H:Analysis of the Unique Particle Attribution Constraint (non-normative)
ドキュメントについては、http://www.w3.org/TR/xmlschema-1 を参照してください。