XML ファイルの編集および検証のサンプル詳細

これらのサンプルは、XML エディター内の一部のガイド付き編集機能を使用して XML ファイルの編集および検証を行う方法を示します。 DTD または XML スキーマの制約を伴う XML ファイルの編集についての詳細は、XML エディターのオンライン・ヘルプを参照してください。
サンプル 説明
anyElement

これは、XML スキーマ仕様の任意の要素を使用して、XML 文書のコンテンツ・モデルを拡張する方法を示す、拡張サンプルです。

PurchaseOrder.xml の編集

XML スキーマ・ファイル (PurchaseOrder.xsd) を、XML ファイル (PurchaseOrder.xml) の編集時に編集支援を提供するのに使用する方法を示します。

国際ディレクトリーは、派生型のビルド方法および XML インスタンス文書で xsi:type 属性を使用する方法を示します。

report.xsd サンプルは、さまざまな名前空間から複数のスキーマを処理する方法を示します。

置換グループの使用 XML スキーマでは要素の名前付きグループをその他の要素に代替できることを、 示します。

anyElement

このサンプルは、XML スキーマの任意の要素を使用して、XML 文書に拡張可能なコンテンツ・モデルを作成する方法を示します。 このサンプルは、次の 2 つのディレクトリーに分かれます。
  1. anyNamespace - ## 任意の名前空間の使用方法を示します。
  2. specifiedNamespace - 特定の名前空間の使用方法を示します。

## 任意の名前空間の使用

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 つのスキーマは名前空間が異なることに注意してください。

BookRev.xml は、xsi:schemaLocation 属性によって Book.xsd と Reviewer.xsd の両方に関連付けられています。 これは、BookType を検閲者 (reviewer) 要素によって拡張し、 ブックに検閲コメントを付ける方法を示します。
  1. XML エディターの「設計」ビューで、opensource:reviewer 要素を選択します。 ポップアップ・メニューから、「子の 追加」 > 「コメント」を選択して、 検閲者用コメントを追加します。
  2. 「検証」を実行します - 検閲者要素は Reviewer.xsd ファイルで定義された制約に準拠しているため、ドキュメントは有効です。
BookPub.xml は、xsi:schemaLocation 属性によって Book.xsd と Publisher.xsd の両方に関連付けられています。 これは、BookType を会社 (company) 要素で拡張し、 ブックにパブリッシャー情報を付ける方法を示します。
  1. XML エディターの「設計」ビューで、pub:company 要素を選択します。 ポップアップ・メニューから、「削除」を選択して、それを削除します。
  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」ウィザードを使用すると、XML スキーマのインスタンスを作成できます。
  1. 「ナビゲーター」ビューで、「specifiedNamespace」ディレクトリーの Book.xsd オブジェクトを選択します。 Book.xsd を右クリックし、「生成」 > 「XML ファイル」を選択して、 「新規 XML」ウィザードを起動させます。
  2. ウィザードの先頭ページで、 新規ファイル名を Book1.xml と指定します。 「次へ」をクリックします。
  3. XML スキーマ情報グループ・ボックスに 2 つの名前空間を示すテーブルが入っていることが分かります。 最初は、Book.xsd に対応する名前空間です。 2 番目は、Book.xsd 内の任意の要素が参照する名前空間です。
  4. 「終了」をクリックします。

名前空間の XML 文書への追加

XML エディターには、XML 文書に名前空間をさらに追加するのに役立つ機能が備わっています。「ソース」ビューに名前空間を入力して手動で追加すると、エラーになる可能性が高くなります。スキーマの名前空間 URI の入力時につづりを間違え、スキーマ・ロケーション属性の構文がエラーになることがあります。このタスクを実行するのに役立つダイアログが提供されます。「アウトライン」ビューまたは「設計」ビューで「名前空間の編集」ダイアログを使用すると、このタスクの実行が簡単に行えます。
  1. anyElement/anyNamespace ディレクトリーの下の BookPub.xml ファイルを開きます。
  2. ルート要素を右クリックし、「名前空間の編集」メニュー項目を選択します。
  3. 「追加」をクリックして、新しい名前空間の情報を入力するためのダイアログを呼び出します。
  4. 「新規名前空間の指定」を選択します。「参照」をクリックして、anyNamespace ディレクトリーの下の Reviewer.xsd ファイルを見つけます。
  5. 「接頭部」フィールドと「名前空間名」フィールドに記入します。
  6. 「OK」をクリックし、その後もう一度「OK」をクリックします。 xmlns:openSource 属性が追加され、xsi:schemalocation 属性値が更新されたことを確認します。
  7. これでこの名前空間が追加されたので、pub:company 要素を右クリックし、ポップアップで「前に追加」または「後に追加」を選択すると、Reviewer.xsd 名前空間 (例: http://www.apache.com) の要素を追加できます。

PurchaseOrder.xml の編集

PurchaseOrder.xsd ファイルには、PurchaseOrder.xml ファイルのコンテンツを定義するための規則が入っています。これは、xsi:schemaLocation 属性によって PurchaseOrder.xml ファイルと関連付けられています。

オカレンス制約

PurchaseOrder.xsd では、(複合タイプ「Items」の下にある) item 要素には、オプションの shipDate 要素 (minOccurs=0 を指定) があります。
		<element name="shipDate" type="date" minOccurs="0"/>

PurchaseOrder.xml の場合、XML エディターの「設計」ビューで、items 要素の下にある最初の項目を選択します。その項目を右クリックして、「子の追加」 > 「shipDate」を選択し、shipDate を item 要素に追加します。 値が現在日付に設定されている shipDate 要素が追加されます。「子の追加」ポップアップ・メニューからは「shipDate」オプションがなくなったことに注意してください。これは、表示できる shipDate 要素は 1 つだけであるという制約を満たすためです。

shipDate 要素を選択し、ポップアップから「削除」を選択してこの要素を削除すると、「子の追加」 > 「shipDate」オプションが再び有効になります。

列挙型要素タイプ

PurchaseOrder.xsd の USAddress 複合タイプには、 そのタイプが単純タイプ USState である 要素の「州 (state)」があります。
		<element name="state" type="po:USState"/>
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 属性)

ipo.xml ファイルは、英国に商品を発送し、米国の住所に請求書を送信する方法を示しています。ipo.xsd では、billTo 要素と shipTo 要素が Address タイプとして定義されています。
		<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 スキーマ・エディターのオンライン・ヘルプを参照してください。

置換グループの使用

Catalogue.xsd ファイルは、Book と Magazine が Publication の置換グループ内に入るように宣言します。
		<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 要素がこのインスタンス文書で直接使用されることがないようにしました。


フィードバック