アサーション

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

ホーム >  ユーザーマニュアル > 編集ビュー > スキーマ ビュー > 属性、アサーション、同一性制約 >

アサーション

このセクションでは複合型で使われるアサーションについて説明します。このようなアサーションは xs:assert 要素にて定義され、複合型の妥当性制約に使用されます (アサーションには xs:assertion 要素にて定義され、単純型のファセット入力ヘルパーにて作成ならびに編集されるアサーションも存在します)。

 

スキーマ ビューでは、以下の場所で複合型のアサーションを作成し、編集することができます:

 

スキーマ概要にて: 属性/アサーション/同一性制約 (AAIDC) ペインのアサーション タブにて (以下のスクリーンショットを参照)。

AssertAAIC01

コンテンツモデルビューにて: アサーションは図の中に表示されたアサーション タブにて編集することができます (以下のスクリーンショットを参照)。図の表示オプションを選択するには、スキーマ デザイン ツールバーにある 「アサーションを図に表示アイコンをクリックしてください。複合型や複合型の要素にあるアサーションのボックスを選択し、詳細入力ヘルパーにてアサーションの定義を編集してください。

AssertEHDetails01

icAssertionsToggle

アサーションを図に表示: コンテンツ モデル ビューが表示されている際に選択可能になります。アサーションの表示を図またはアサーション タブで行うか指定します。

 

メモ:アサーションは XSD 1.1 に搭載されている機能で、アサーションの編集機能は XSD 1.1 モードでのみ有効になります。

 

アサーションのスコープ

アサーションの制約を定義するために使用される XPath 条件式は、定義されている複合型のスコープ内にある必要があります。XPath 条件式が特定のノードへアクセスする必要がある場合、そのノードの祖先ノードにてアサーションを定義する必要があります。

 

アサーションの追加と削除

複合型には複数のアサーションを含めることができます。インスタンス ドキュメント内にある要素に対してすべてのアサーションの XPath 条件式が true と評価されることで、ドキュメントも妥当なものと評価されます。以下の操作により、複合型に対してアサーションを追加することができます:

 

スキーマ概要にて: 複合型を選択し、AAIDC ペインにあるアサーション タブの左上にある追加または挿入アイコンをクリックします (上のスクリーンショットを参照)。追加することのできるアサーションの数に制限はありません。アサーションを選択し、タブの右上にある削除アイコンをクリックすることで、そのアサーションを削除することができます。
コンテンツ モデル ビューにて (上のスクリーンショットを参照): 複合型を右クリックして、子の追加 | アサーション を選択します。図に表示されている既存のアサーションを右クリックして、コンテキスト メニューから 追加 | アサーションまたは 挿入 | アサーション を選択することもできます。追加することのできるアサーションの数に制限はありません。アサーションを選択して、「Delete」 キーを押下することで、そのアサーションを削除することができます。

 

アサーションの XPath 条件式を定義する

複合型アサーションの XPath 条件式により、インスタンス ドキュメント内にある複合型要素に対して適用される妥当性制約が定義されます。例えば上のスクリーンショットでは、複合型要素の team とアサーションの XPath 条件式 @region="US" が定義されています。XML スキーマ ドキュメントで、アサーションは以下のように記述されます:

 

 <xs:assert test='@region="US"'/>

 

アサーションにより、インスタンス ドキュメント内にある team 要素には、US という値を持った region 属性を含めなければならなくなります。この条件が満たされない場合、ドキュメントの検証に失敗します。

 

以下の点に留意してください:

 

XPath 条件式は XPath 2.0 に従ったかたちで記述される必要があります。
XPath 条件式で評価されるノードは、アサーションのスコープ内にある必要があります (上記を参照ください)。
条件式が booleantrue/false を評価しない場合、返された値が boolean 値に変換されます。空でないシーケンスは true に変換され、空のシーケンスは false に変換されます。
条件式における構文エラーは赤色で示されます。コンテキスト エラーは表示されません。例えば XPath 条件式にてある属性が評価され、その属性がスキーマ内部で定義されていなかったとしても、そのエラーは表示されません。

 

アサーションメッセージ

アサーションの詳細がこの定義と共に提供される場合とても役に立ちます。 XML インスタンス ドキュメントが検証される際、アサーションが満たされていない場合、適切な メッセージが表示されます。XML スキーマ 仕様は、このようなメッセージのために対応をしないため、  XMLSpy は、アサーションの定義と共にXML インスタンス ドキュメントの検証内で使用される Altova xml-schema-extensions 名前空間 http://www.altova.com/ja/xml-schema-extensions (または他の名前空間) 内でメッセージ を許可します。例えば:

 

<xs:assert test="count(//MyNode) ge 1altova:message="There must be at least one MyNode element"/> or

<xs:assertion test="count(//MyNode) ge 1altova:message="There must be at least one MyNode element"/>

 

アサーション内で指定された制約が満たされない場合、XMLSpy  の検証エンジンは、検証-エラーメッセージと共にヒントとしてのアサーションと関連したメッセージを表示します。  バリデーターは、 assert/@message 属性の値または、 message 属性が存在する名前空間に関わらず、 アサーション/@message 属性 を報告します。ですが、 スキーマビュー内では、 xml-schema-extensions 名前空間にある message 属性 のみを編集することができます。他の名前空間内の message 属性 を編集するには、テキストビューを使用します。

 

詳細に関しては、アサーションメッセージを参照してください。

 

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 デフォルト名前空間宣言は属性に対して適用されません。

 

アサーション内にある XPath 条件式アサーションの定義にて XPath デフォルト名前空間を定義することもできます。属性/アサーション/同一性制約 (AAIDC) ペインのアサーション タブにて、XPathDefaultNs フィールドのドロップダウン リストから目的のキーワードを選択してください。

AssertAAIC02XPDNS

選択された名前空間が、そのアサーションのスコープとなります。

 


(C) 2018 Altova GmbH