ファセット

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

ホーム >  ユーザーマニュアル > 編集ビュー > スキーマ ビュー > スキーマ ビューにおける入力ヘルパー >

ファセット

単純型の基底型 (既存の単純型) に制約を課すことで新たな単純型 (名前付き、または匿名型) が作成されます。このような制約は、基底型の値にファセットを追加することで達成されます。スキーマ ビューにあるファセット入力ヘルパーでは、単純型のファセットを簡単かつ視覚的に編集することができます (以下のスクリーンショットを参照)。利用可能なファセットは、以下のテーブルで示されるようにファセット入力ヘルパーのタブにて管理されます。

 

タブ

利用可能なファセット

ファセット

minInclusivemaxInclusiveminExclusivemaxExclusivelength, minLengthmaxLengthtotalDigitsfractionDigitswhiteSpaceexplicitTimezone

パターン

pattern

列挙

enumeration

アサーション

assertion

サンプル

altova:exampleValues はサンプルであり、ファセットではありません。サンプルは XMLSpy にて XML スキーマからインスタンス XML ドキュメントを生成する際のサンプル値として使用されます。

 

以下に、これらタブの詳細について記述します。

 

デザイン内にある単純型の選択

単純型 (名前付きまたは匿名型) は、以下のデザイン環境にて選択することができます:

 

スキーマ概要にて: グローバル コンポーネントのリスト、またはグローバル コンポーネントのリスト以下にある属性タブから。
コンテンツ モデル ビューにて: 図の中、またはデザイン下部にある属性タブから。

 

上記のデザイン環境にて単純型が選択されると、定義されているファセットがファセット入力ヘルパーに表示され、編集することができるようになります。

 

ファセット タブ

ファセット タブではデザインにて選択されている型に対して利用可能なファセットだけが表示されます。例えば制約を課されているのが xs:string 型の場合、totalDigits などの利用できないファセットは表示されません。

 

数値に関するファセット (minInclusivemaxInclusiveminExclusivemaxExclusive) は数値型と日付/時間型、そしてこれらの型から派生した型に対してだけ使用することができます。
長さに関するファセットは string を基底とした型、バイナリ型、そして anyURI に対してだけ使用することができます。
totalDigits ファセットは xs:decimal ならびに整数型と、これらの型から派生したすべての型に対して使用することができます。fractionDigits ファセットは xs:decimal に対してのみ適用されます。

EHFacetsFacetsEP

値を入力するには、(それが存在する場合には) コンボ ボックスのドロップダウン リストから値を選択、または値フィールドをダブルクリックして値を入力してください。無効な値や他の値と相反する値入力された場合、その値が赤色で表示され、妥当な値は青色で表示されます。例えば、minInclusive ファセットと maxInclusive ファセットは同時に定義することができないため、これらのうち後に入力された値が赤色で表示されます。

 

固定ファセット (fixed="true" の属性を持ったファセット) を指定するには、ファセットの右側にある鍵のシンボルをクリックして、シンボルを閉じた鍵に変更してください。上のスクリーンショットでは、totalDigits ファセットが固定ファセットとして定義されています。固定することのできるファセットの数に制限はありません。ファセットの固定を解除するには、閉じた鍵のシンボルをクリックしてください。

 

パターン タブ

パターン タブでは、1 つ以上の pattern ファセットを制約に追加することができます。pattern ファセットのパターンは正規表現の構文により指定されます。以下のスクリーンショットでは、電子メールアドレスのパターンが示されます。

EHFacetsPatternsEP

複数の pattern ファセットが指定されている場合、XML インスタンスの値が指定されたパターンの 1 つにマッチする必要があります。例えば、米国と欧州の郵便番号にマッチするパターンが与えられている場合、XML インスタンスの値を、そのうち 1 つに対してマッチさせる必要があります。

 

左上にある 「追加」 または 「挿入」 アイコンをクリックして、目的のパターンを定義する正規表現を入力することで、pattern アセットを追加することができます。パターンを選択して、右上にある 「削除」 アイコンをクリックすることで、そのパターンを削除することができます。

 

列挙タブ

列挙タブでは、enumeration ファセットを制約に加えることができます (以下のスクリーンショットを参照)。各 enumeration ファセットにより、その型に対して妥当となる値が指定されます。enumeration ファセットのセットにより、許されている値のセットを指定することができます。以下のスクリーンショットでは、enumeration ファセットにより許されている文字列のセットを確認することができます。

EHFacetsEnumerationsEP

左上にある 「追加」 または 「挿入」 アイコンをクリックして enumeration の値を入力することで、enumeration ファセットを追加することができます。enumeration ファセットを選択し、右上にある 「削除」 アイコンをクリックすることで、その enumearation ファセットを削除することができます。

 

アサーション タブ

アサーションは XSD 1.1 にて新たに追加された機能で、XSD 1.1 モードでのみ表示されます。ファセット入力ヘルパーのアサーション タブにて定義されたアサーション ファセットは、単純型に対するアサーションです (複合型に対するアサーションは、ファセット入力ヘルパーではなくスキーマ概要やコンテンツ モデル ビューにて定義ならびに編集されます)。

 

単純型 (要素または単純コンテンツの属性) がデザインで選択されている際にアサーション タブへ切り替え、左上にある 「追加」 または 「挿入」 アイコンをクリックし、assertion を定義するのに使われる XPath 2.0 条件式を入力することで、アサーションの指定を行うことができます。XPath 条件式では、$value という特別な変数を使用することで、単純型の値を参照することができます (1 つの値以外に評価する要素はないため、通常使用される self::node() パス (またはその省略形であるピリオド '.') を XPath 条件式内部で使用することはできません)。

 

例えば、string-length($value) = 6 という XPath 条件式により、単純型に含まれている値が 6 文字から構成されるかをチェックすることができます。インスタンス ドキュメント内に含まれている要素や属性の値が 6 文字から構成される場合、アサーションに従った妥当な値ということになります。

EHFacetsAssertionsEP

メモ:XPath 条件式における構文エラーは赤色により示されます。しかしデータ型はランタイムにて決定されるため、型に関するエラーは XPath 条件式の入力中に報告されません。そのため期待されたとおりに型の構築を行う必要があります。例えば上のスクリーンショットにある 3 番目の条件式では、数値の比較を行う前に、文字列の値 (アサーションが xs:string 単純型にて定義されたと仮定した場合) を数値型へ変換しています。

 

上のスクリーンショットの例にあるように、複数のアサーションを同じ単純型へ指定することもできます。この場合、指定されているすべてのアサーションに要素または属性の値をマッチさせる必要があります。上のスクリーンショットにあるアサーションでは、インスタンス ドキュメントの値が 6 文字から構成され、EU という文字から開始され、最後の 4 文字を 0000 から 4999 までの数値に収める必要があります。

AssertionMessageXSD

アサーションの詳細がこの定義と共に提供される場合とても役に立ちます。 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 属性 を編集するには、テキストビューを使用します。

 

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

 

メモ:可能な場合はアサーションよりもその他の種類のファセット使用する方が推奨されます。例えば、上のスクリーンショットにある最初のアサーションにより指定された制約は、(ファセット タブにある) length ファセットにより指定された方が良いでしょう。

 

サンプル タブ

サンプル タブでは、XML スキーマから XML インスタンス ファイルを生成する際のサンプル値として使用される値を指定することができます (以下のスクリーンショットを参照)。XML インスタンス ファイルの生成は、メニュー オプションの DTD/スキーマ | サンプル XML ファイルの生成から行うことができます。サンプル値が無効の場合、警告としてサンプル値がオレンジ色で表示されます。以下のスクリーンショットでは最初のサンプルが電子メールの pattern ファセットにマッチしないため、無効な値となります (上記のパターン タブを参照ください)。

EHFacetsSamplesEP

メモ: ツールバーにある 「検証の警告を表示」 アイコン icValWarnings をクリックすることで、無効なサンプル値の警告を確認することができます。無効なサンプル値により XSD ファイルの検証に失敗することはありません。

左上にある 「追加」 または 「挿入」 アイコンをクリックしてhttp://www.altova.com/ja/xml-schema-extensions内のサンプル値を入力することで、altova:example へサンプル値が入力されます。サンプル値を選択し、右上にある 「削除」 アイコンをクリックすることで、altova:example の値が削除されます。

 


(C) 2018 Altova GmbH