サンプル | 説明 |
---|---|
anyElement | これは、XML スキーマ仕様の任意の要素を使用して、XML 文書のコンテンツ・モデルを拡張する方法を示す、拡張サンプルです。 |
PurchaseOrder.xml の編集 | XML スキーマ・ファイル (PurchaseOrder.xsd) を、XML ファイル (PurchaseOrder.xml) の編集時に編集支援を提供するのに使用する方法を示します。 国際ディレクトリーは、派生型のビルド方法および XML インスタンス文書で xsi:type 属性を使用する方法を示します。 report.xsd サンプルは、さまざまな名前空間から複数のスキーマを処理する方法を示します。 |
置換グループの使用 | XML スキーマでは要素の名前付きグループをその他の要素に代替できることを、 示します。 |
## 任意の名前空間の使用
anyNamespace ディレクトリー下 にある Book.xsd スキーマの複合タイプは BookType です。 BookType のコンテンツは、title (タイトル)、 author (作成者)、year (年)、isbn (ISBN: 国際標準図書番号) です。 オプションで、任意の要素によって示される 整形式 XML (<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>) が続きます。
これは、インスタンス文書に任意の XML 要素を 挿入して、BookType 定義を拡張できることを意味します。 このサンプルには、ほかに Publisher.xsd と Reviewer.xsd の 2 つのスキーマがあります。 インスタンス文書では、これらを使用して BookType の定義を拡張します。 これら 2 つのスキーマは名前空間が異なることに注意してください。
特定名前空間の使用
specifiedNamespace ディレクトリー下 にある Book.xsd スキーマの複合タイプは BookType です。 BookType のコンテンツは、title (タイトル)、author (作成者)、year (年)、isbn (ISBN: 国際標準図書番号) です。 オプションで、名前空間 http://www.wesley.com に 属し、任意の要素によって示される、整形式 XML (<any namespace="http://www.wesley.com" minOccurs="0" maxOccurs="unbounded"/>) が続きます。
これは、インスタンス文書において、任意の XML 要素を 挿入して、BookType の定義を拡張できる (要素が名前空間 http://www.wesley.com に属している場合に限る) ことを意味します。 このサンプルで、Reviewer.xsd ファイルはこの名前空間に属しています。
Book.xml は、xsi:schemaLocation 属性によって Book.xsd と Reviewer.xsd の両方に関連付けられています。 これは、BookType を検閲者 (reviewer) 要素によって拡張し、 ブックに検閲コメントを付ける方法を示します。
Book.xml の場合、XML エディターの「設計」ビューで、rev:reviewer 要素を選択します。 ポップアップ・メニューから、
を選択して、 検閲者用コメントを追加します。「検証」を実行して、ドキュメントが有効であることを確認します。任意の要素のスキーマからのインスタンスの生成
名前空間の XML 文書への追加
PurchaseOrder.xsd ファイルには、PurchaseOrder.xml ファイルのコンテンツを定義するための規則が入っています。これは、xsi:schemaLocation 属性によって PurchaseOrder.xml ファイルと関連付けられています。
オカレンス制約
<element name="shipDate" type="date" minOccurs="0"/>
PurchaseOrder.xml の場合、XML エディターの「設計」ビューで、items 要素の下にある最初の項目を選択します。その項目を右クリックして、「子の追加」ポップアップ・メニューからは「shipDate」オプションがなくなったことに注意してください。これは、表示できる shipDate 要素は 1 つだけであるという制約を満たすためです。
を選択し、shipDate を item 要素に追加します。 値が現在日付に設定されている shipDate 要素が追加されます。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 要素がこのインスタンス文書で直接使用されることがないようにしました。