一意のパーティクル属性の制約
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
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>
に一致します。 ただし、<xsd:element>
まで先行読み取りしないと <e1/>
が対応する <e3/>
を特定できないので、コンテンツ モデルは 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 を参照してください。