一意のパーティクル属性の制約について
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」を参照してください。