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) 要素によって拡張し、 ブックに検閲コメントを付ける方法を示します。
  • XML エディターの「設計」ビューで、opensource:reviewer 要素を選択します。 ポップアップ・メニューから、「子の 追加」 > 「コメント」を選択して、 検閲者用コメントを追加します。
  • 「検証」を実行します - 検閲者要素は Reviewer.xsd ファイルで定義された制約に準拠しているため、ドキュメントは有効です。
BookPub.xml は、xsi:schemaLocation 属性によって Book.xsd と Publisher.xsd の両方に関連付けられています。 これは、BookType を会社 (company) 要素で拡張し、 ブックにパブリッシャー情報を付ける方法を示します。
  • XML エディターの「設計」ビューで、pub:company 要素を選択します。 ポップアップ・メニューから、「除去」を選択して、それを除去します。
  • 「検証」を実行します - 任意の要素はオプションであるため、ドキュメントは有効です。

特定名前空間の使用

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 スキーマのインスタンスを作成する際に使用できます。 指定された名前空間 URI を持つ要素 (たとえば、specifiedNamespace ディレクトリー内の Book.xsd の BookType など) がスキーマに含まれている場合、ウィザードから、 これらの名前空間のスキーマ・ロケーションの入力を求めるプロンプトが出されます。
  • 「ナビゲーター」ビューで、「specifiedNamespace」ディレクトリーの Book.xsd オブジェクトを選択します。 Book.xsd を右クリックし、「生成」 > 「XML ファイル」を選択して、 「新規 XML」ウィザードを起動させます。
  • ウィザードの先頭ページで、 新規ファイル名を Book1.xml と指定します。 「次へ」をクリックします。
  • XML スキーマ情報グループ・ボックスに 2 つの名前空間を示すテーブルが入っていることが分かります。 最初は、Book.xsd に対応する名前空間です。 2 番目は、Book.xsd 内の任意の要素が参照する名前空間です。
  • 「終了」をクリックします。「http://www.wesley.com」 のロケーションを指定していないことを警告するメッセージが表示されます。
  • 「いいえ」をクリックします。
  • 表の「http://www.wesley.com」名前空間を選択し、「編集」をクリックします。
  • 「参照」をクリックし、anyElement/anyNamespace ディレクトリーから Publisher.xsd ファイルを選択します。
  • 「http://www.wesley.com」の会社 (company) 要素が、 「http://www.ibm.com」名前空間のブック (book) 要素の子として 生成されたことが分かります。

「新規 XML」ウィザードから、正しいコンテンツの生成に必要なスキーマ・ロケーションを求めるプロンプトが出されます。 上記のステップを繰り返した場合に、 「http://www.wesley.com」名前空間のスキーマ・ロケーションを 入力しないことを選択すると、会社 (company) 要素の 代わりに、ANY-ELEMENT プレースホルダー要素が生成されることが分かります。 希望する要素を組み込むには、ANY-ELEMENT の変更が必要になります。

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

XML エディターには、名前空間を XML 文書に追加する便利な手段があります。 名前空間を手動で追加 (ソース・ビューで入力) するとエラーになりやすく、スキーマ名前空間 URI の場合は簡単につづりを誤り、スキーマ・ロケーションの属性構文は扱いにくい場合があります。 作業の助けとなる役立つダイアログがあります。 「アウトライン」または「設計」ビューから、 このタスクを支援する「名前空間の編集」ダイアログにアクセスすることができます。
  • anyElement/anyNamespace ディレクトリーの下の BookPub.xml ファイルを開きます。
  • ルート要素を右クリックし、「名前空間の編集」メニュー項目を選択します。
  • 「追加」をクリックして、 新規名前空間の情報を入力するダイアログを起動させます。
  • 「新規名前空間の指定 (Specify New Namspace)」を選択します。 「参照」をクリックして、anyNamespace ディレクトリーの下の Reviewer.xsd ファイルを見つけます。
  • 「接頭部」フィールドと「名前空間名」フィールドに記入します。
  • 「OK」をクリックし、もう一度「OK」をクリックします。 xmlns:openSource 属性が追加され、xsi:schemalocation 属性値が更新されていることが分かります。
  • これで名前空間が追加されたので、 pub:company 要素を右クリックして、「前に追加」または 「後に追加」ポップアップを選択すると、 Reviewer.xsd 名前空間 (たとえば、http://www.apache.com) から 要素を追加できるようになります。

PurchaseOrder.xml の編集

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

オカレンス制約

PurchaseOrder.xsd では、item 要素 (複合タイプ項目 (Item) 下にある) は、 minOccurs=0 である shipDate 要素を、オプションとして持つことができます。
		<element name="shipDate" type="date" minOccurs="0"/>

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

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 要素の下にある 「州 (state)」テキスト・フィールドを選択します。 リストが表示され、そこで USState 単純型の列挙値によって限定された 3 つの値 (CA、PA、および AR) から選択できます。

インスタンス文書での派生型の使用 (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 型を選択できるように、リストがどのように使用可能になっているかに注意してください。 ガイドによる支援は、コンボ・ボックスで選択するタイプによって決まります。

複数のスキーマと名前空間の作業

季刊レポート・サンプルは、さまざまな名前空間からの複数のスキーマを処理する方法を示します。 このサンプルは、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 要素を 要約 (abstract) として宣言して、 Publication 要素がインスタンス文書内で直接使用されることを防ぎます。

親トピック: XML ファイルの編集および検証

フィードバック