条件型割り当て

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  ユーザーマニュアル > 編集ビュー > スキーマ ビュー > コンテンツ モデル ビュー >

条件型割り当て

条件型割り当ては XSD 1.1 に新たに追加された機能で、要素に含まれる属性値や属性が存在するかにより XML ドキュメント内にある要素の型が決定されます。以下の様な XML ドキュメントを例に考えてみましょう:

 

 <publication kind="magazine">

         ...

 </publication>

 

スキーマでは、インスタンス要素の kind 属性値により、複数の publictaion 要素の型を指定することができます。スキーマでは、XSD 1.1 にて新たに追加された alternative 要素が使用されます。各 alternative 要素では、それぞれ異なる型が指定されます。

 

以下のスクリーンショットでは、test 属性を含む alternative 子要素 (@kind eq 'magazine'@kind eq 'book') とともに Publication 要素が宣言されています。3 番目の alternative 要素には test 属性が含まれておらず、(詳細入力ヘルパーで割り当てられており、図の中には表示されていない) xs:error の単純型が割り当てられており、必要なときに XML 検証エラーが返されます。

CTAAlternatives01

上の宣言を以下に示します:

 

<xs:complexType name="PublicationType">

 <xs:sequence>

         <xs:element name="Title" type="xs:string"/>

         <xs:element name="Author" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>

         <xs:element name="Date" type="xs:gYear"/>

 </xs:sequence>

 <xs:attribute name="kind" type="xs:string"/>

</xs:complexType>

 

<xs:complexType name="MagazineType">

 <xs:complexContent>

         <xs:restriction base="PublicationType">

                 <xs:sequence>

                         <xs:element name="Title" type="xs:string"/>

                         <xs:element name="Date" type="xs:gYear"/>

                 </xs:sequence>

         </xs:restriction>

 </xs:complexContent>

</xs:complexType>

 

<xs:element name="Publication" type="PublicationType">

 <xs:alternative test="@kind eq 'magazine'" type="MagazineType"/>

 <xs:alternative test="@kind eq 'book'">

         <xs:complexType>

                 <xs:complexContent>

                         <xs:extension base="PublicationType">

                                 <xs:sequence>

                                         <xs:element name="ISBN" type="xs:string"/>

                                         <xs:element name="Publisher" type="xs:string"/>

                                 </xs:sequence>

                         </xs:extension>

                 </xs:complexContent>

         </xs:complexType>

 </xs:alternative>

 <xs:alternative type="xs:error"/>

</xs:element>

 

以下の点に注目してください:

 

複数ある alternative 要素の中で、最初に true と評価された alternative 要素が選択されるため、alternative 要素の順序は重要な意味を持ちます。コンテンツ モデル ビューでは、alternative 要素のボックスをドラッグすることで、その順序を変更することができます。
Publication 要素には型 (PublicationType) が含まれていることに注目してください。どの alternative 要素も使用されない場合、この型がデフォルトの型として使用されます。上の例では、最初の 2 つの alternativefalse を返した場合、xs:error 型の alternative 要素が使用されます。
どの alternative 要素条件も満たされず、デフォルトの型も定義されていない場合、要素は anyType 型に割り当てられます。これにより、XML コンテンツの整形式を保つことができる場合もあります。
alternative 要素と単純型の xs:erroor は XSD 1.1 に新たに追加された要素です。

 

コンテンツ モデル ビューでの編集

 

要素のコンテキスト メニューから子として alternative 型を要素宣言に追加することもできます (以下のスクリーンショットにあるコンテンツ モデルを参照)。

 

alternative 要素の型は詳細入力ヘルパーで指定されます。複合型の場合、それが alternative 要素の展開された長方形にて表示され、編集することができます (以下のスクリーンショットを参照)。単純型は図に表示されませんが、詳細入力ヘルパーの単純型タブにて定義することができます。

CTABoxExpandedCTADetailsEH

メモ:詳細入力ヘルパーでは、XPath 条件式の名前空間を xpathDefaultNamespace 属性にて指定することができます。XPath デフォルト名前空間に関する詳細については、以下の記述を参照ください。

 

 

 

xpathDefaultNamespace の使用

XML スキーマ ドキュメントで宣言されたデフォルト名前空間は、その XML スキーマ ドキュメントのデフォルト名前空間で、スキーマ ドキュメント内の接頭辞のない要素名に対して適用されますが、スキーマ ドキュメント内の接頭辞のない XPath 条件式に対しては適用されません。

 

XSD 1.1 にて新たに追加された xpathDefaultNamespace 属性は、XPath 条件式にて接頭辞のない要素の名前空間を指定するために使用されます。

 

XPath デフォルト名前空間は、それらが宣言された XML スキーマ要素をスコープとします。xpathDefaultNamespace 属性は、以下の XML Schema 1.1 要素内に記述することができます:

 

xs:schema
xs:assertxs:assertion
xs:alternative
xs:selectorxs:field (同一性制約にて)

 

XSD 1.1 モードでは、xs:schema 上の xpathDefaultNamespace がスキーマ設定ダイアログ (「スキーマ設計 | スキーマ設定」) にてセットされます。上に示されるその他の要素の場合、xpathDefaultNamespace 属性が詳細入力ヘルパーにてセットされます (以下のスクリーンショットを参照)。

 

AssertEHDetails02XPDNS

 

xs:schema 上で XPath デフォルト名前空間を宣言することで、スキーマ全体に対する XPath デフォルト名前空間が宣言されます。この宣言は、xpathDefaultNamespace 属性が許されている属性でオーバーライドすることができます (上のリストを参照ください)。

 

実際の名前空間を含める代わりに、xpathDefaultNamespace 属性には、以下のうちのどれかを含めることができます:

 

##targetNamespace: スキーマのターゲット名前空間と同じ名前空間が XPath デフォルト名前空間として使用されます。
##defaultNamespace: スキーマの名前空間と同じ名前空間が XPath デフォルト名前空間として使用されます。
##local: XPath デフォルト名前空間は指定されません。

 

ドキュメントに対して XPath デフォルト名前空間が宣言されなかった場合、XPath 条件式における接頭辞なしの要素は名前空間を持たない要素として扱われます。

 

メモ:XPath デフォルト名前空間宣言は属性に対して適用されません。

 


(C) 2018 Altova GmbH