| サンプル | 説明 |
|---|---|
| anyElement | これは、XML スキーマ仕様の any 要素を使用して、XML 文書のコンテンツ・モデルを拡張する方法を示した拡張サンプルです。 |
| PurchaseOrder.xml の編集 | XML ファイル (PurchaseOrder.xml) の編集時に、XML スキーマ・ファイル (PurchaseOrder.xsd) を使用して編集の支援を行う方法を示しています。 international ディレクトリーでは、XML インスタンス文書での派生タイプのビルド方法と、xsi:type 属性の使用方法が示されています。 report.xsd サンプルは、名前空間が異なる複数のスキーマの処理方法を示しています。 |
| 置換グループの使用 | XML スキーマにおいて、複数要素からなる名前付きグループが他の要素をどのように置換できるかを示しています。 |
##any 名前空間の使用
anyNamespace ディレクトリー下の Book.xsd スキーマには、複合タイプの BookType があります。BookType のコンテンツは、タイトル、作成者、年、ISBN で、その後にオプションとして、次のような、any 要素で指定された任意の整形式 XML が続きます。<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>
つまり、1 つのインスタンス文書において、任意の XML 要素を挿入して、BookType の定義を拡張できるということです。このサンプルでは、この他に、Publisher.xsd と Reviewer.xsd という 2 つのスキーマがあります。これらのスキーマは、使用するインスタンス文書の BookType の定義を拡張するのに使用します。これら 2 つのスキーマの名前空間は異なることに注意してください。
特定の名前空間の使用
specifiedNamespace ディレクトリー下の Book.xsd スキーマには複合タイプの BookType があります。 BookType のコンテンツは、タイトル、作成者、年、ISBN で、その後にオプションとして、any 要素で指定された名前空間 http://www.wesley.com に属する任意の整形式 XML が続きます。<any namespace="http://www.wesley.com" minOccurs="0" maxOccurs="unbounded"/>
つまり、1 つのインスタンス文書において、任意の XML 要素を挿入して、BookType の定義を拡張できます。ただし、それらの要素は名前空間 http://www.wesley.com に属していなければなりません。この例では、Reviewer.xsd ファイルはこの名前空間に属しています。
Book.xml は、xsi:schemaLocation 属性によって Book.xsd と Reviewer.xsd の両方に関連付けられています。 reviewer 要素を持つ BookType を拡張して、その書籍のレビュー・コメントを提供する方法を示します。
Book.xml の場合、XML エディターの「設計」ビューで、rev:reviewer 要素を選択します。 ポップアップ・メニューで、を選択して、レビューアーのコメントを追加します。検証を実行して、文書が有効であることを確認します。
any 要素による複数スキーマからのインスタンスの生成
名前空間の XML 文書への追加
PurchaseOrder.xsd ファイルには、PurchaseOrder.xml ファイルのコンテンツを定義するための規則が入っています。これは、xsi:schemaLocation 属性によって PurchaseOrder.xml ファイルと関連付けられています。
オカレンス制約
<element name="shipDate" type="date" minOccurs="0"/>
PurchaseOrder.xml の場合、XML エディターの「設計」ビューで、items 要素の下にある最初の項目を選択します。その項目を右クリックして、を選択し、shipDate を item 要素に追加します。 値が現在日付に設定されている shipDate 要素が追加されます。「子の追加」ポップアップ・メニューからは「shipDate」オプションがなくなったことに注意してください。これは、表示できる shipDate 要素は 1 つだけであるという制約を満たすためです。
shipDate 要素を選択し、ポップアップから「削除」を選択してこの要素を削除すると、オプションが再び有効になります。
列挙型要素タイプ
<element name="state" type="po:USState"/>
<simpleType name="USState">
<restriction base="string">
<enumeration value="CA"></enumeration>
<enumeration value="PA"></enumeration>
<enumeration value="AR"></enumeration>
</restriction>
</simpleType>
PurchaseOrder.xml の場合、XML エディターの「設計」ビューで、shipTo 要素の下にある「状態」テキスト・フィールドを選択します。 リストが表示されるので、3 つの値 (CA、PA、AR) から選択できます。これらの値は、USState 単純タイプの列挙型値によって制限されています。
インスタンス文書の派生タイプの使用 (xsi:type 属性)
<element name="shipTo" type="ipo:Address"/>
<element name="billTo" type="ipo:Address"/>
address.xsd では、2 つの複合タイプ USAddress と UKAddress によって基本タイプ Address が拡張されています。
インスタンス文書 ipo.xml では、xsi:type 属性を使用して Address の別の派生タイプ (例: USAddress) を使用することもできます。
XML エディターの「設計」ビューで、shipTo 要素の下にある xsi:type 属性を選択します。どのようにリストを使って、使用する Address タイプを選択できるかに注目してください。ガイド付きアシスタンスは、このコンボ・ボックスで選択したタイプに基づいています。
複数のスキーマと名前空間の処理
年 4 回発行されるレポートの例では、名前空間が異なる複数のスキーマの処理方法が示されています。このサンプルには、PurchaseOrder/international フォルダーの下に、address.xsd、ipo.xsd、report.xsd、report.xml の各ファイルが入っています。
スキーマの規模が大きくなるにつれ、メンテナンス、再利用、読みやすさなどの観点から、スキーマのコンテンツを幾つかのスキーマ文書に分割するのが望ましい場合が少なくありません。XML スキーマはこの分割をサポートするために、include と import という 2 つの構文を定義します。include 要素は、組み込まれたスキーマから現行スキーマに定義と宣言を取り込みます。 組み込まれたスキーマのターゲットの名前空間は、組み込みスキーマのターゲット名前空間と同じでなければなりません。import 要素も同じように動作しますが、インポートされたスキーマは別の名前空間に属していても構わないという点が異なります。
include と import について詳しくは、XML スキーマ・エディターのオンライン・ヘルプを参照してください。
<element name="Book" type="Catalogue:BookType"
substitutionGroup="Catalogue:Publication"/>
<element name="Magazine" type="Catalogue:MagazineType"
substitutionGroup="Catalogue:Publication"/>
Catalogue のコンテンツとしては、置換グループ内にあるすべての要素が可能です。XML エディターの「設計」ビューの Catalogue 要素で、「子の追加」メニューを選択します。 Book と Magazine の両方が、Publication 要素のコンテンツとして置換可能であることに注意してください。 また、Publication 要素を抽象として宣言し、Publication 要素がこのインスタンス文書で直接使用されることがないようにしました。