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

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

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

PurchaseOrder.xml の編集

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

international ディレクトリーでは、XML インスタンス文書での派生タイプのビルド方法と、xsi:type 属性の使用方法が示されています。

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

置換グループの使用 XML スキーマにおいて、複数要素からなる名前付きグループが他の要素をどのように置換できるかを示しています。

anyElement

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

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

BookRev.xml は、xsi:schemaLocation 属性によって Book.xsd と Reviewer.xsd の両方に関連付けられています。 reviewer 要素を持つ BookType を拡張して、その書籍のレビュー・コメントを提供する方法を示します。
  1. XML エディターの「設計」ビューで、opensource:reviewer 要素を選択します。 ポップアップ・メニューで、「子の追加」 > 「コメント」を選択して、レビューアーのコメントを追加します。
  2. 検証の実行 - 文書は有効です。Reviewer.xsd ファイルに定義されている制約に reviewer 要素が準拠しているからです。
BookPub.xml は、xsi:schemaLocation 属性によって Book.xsd と Publisher.xsd の両方に関連付けられています。company 要素を持つ BookType を拡張して、その書籍の発行元情報を提供する方法を示します。
  1. XML エディターの「設計」ビューで、pub:company 要素を選択します。 ポップアップ・メニューで、「削除」を選択してこの要素を削除します。
  2. 検証の実行 - 文書は有効です。any 要素はオプションだからです。

特定の名前空間の使用

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」ウィザードを使用すると、XML スキーマのインスタンスを作成できます。
  1. 「ナビゲーター」ビューで、specifiedNamespace ディレクトリーの Book.xsd オブジェクトを選択します。Book.xsd を右クリックして、「生成」 > 「XML ファイル」を選択して「新規 XML」ウィザードを起動します。
  2. ウィザードの最初のページで、新規ファイルに Book1.xml という名前を指定します。 「次へ」をクリックします。
  3. 「XML スキーマ情報」グループ・ボックスに、2 つの名前空間が示されたテーブルが表示されます。1 つ目は、Book.xsd に対応する名前空間です。2 つ目は、Book.xsd 内の any 要素が参照する名前空間です。
  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」を選択し、shipDateitem 要素に追加します。 値が現在日付に設定されている shipDate 要素が追加されます。「子の追加」ポップアップ・メニューからは「shipDate」オプションがなくなったことに注意してください。これは、表示できる shipDate 要素は 1 つだけであるという制約を満たすためです。

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

列挙型要素タイプ

PurchaseOrder.xsd では、USAddress 複合タイプには、タイプが単純タイプ USState である要素の状態が入っています。
		<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 つの複合タイプ USAddressUKAddress によって基本タイプ 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 要素で、「子の追加」メニューを選択します。 BookMagazine の両方が、Publication 要素のコンテンツとして置換可能であることに注意してください。 また、Publication 要素を抽象として宣言し、Publication 要素がこのインスタンス文書で直接使用されることがないようにしました。


フィードバック