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

サンプルの概要

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

サンプル 説明
anyElement これは、XML スキーマ仕様の任意のエレメントを使用して XML 文書のコンテンツ・モデルを拡張する方法を示す、拡張サンプルです。
Invoice DTD ファイル (Invoice.dtd) を、XML ファイル (Invoice.xml) の編集時に編集支援を提供するのに使用する方法を示します。
PurchaseOrder XML スキーマ・ファイル (PurchaseOrder.xsd) を、XML ファイル (PurchaseOrder.xml) の編集時に編集支援を提供するのに使用する方法を示します。

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

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

substitutionGroup このサンプルは、XML スキーマ・ファイルに substitutionGroup を定義してから、XML インスタンス・ドキュメントの置換を使用する方法を示します。


anyElement

このサンプルは、XML スキーマの任意のエレメントを使用して、XML 文書に拡張可能なコンテンツ・モデルを作成する方法を示します。 サンプルは、次の 2 つのディレクトリーに分かれます。

  1. anyNamespace - ## 任意の名前空間の使用方法を示します。
  2. specifiedNamespace -  特定の名前空間の使用方法を示します。

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

anyNamespace ディレクトリーの下の Book.xsd スキーマの複合タイプは BookType です。 BookType のコンテンツは、title (タイトル)、author (作成者)、year (年)、isbn、および then (次に) で、オプションで、以下の任意のエレメントが示す整形式の 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 属性によって both Book.xsd および Publisher.xsd に関連付けられています。 これは、BookType会社 (company) エレメントによって拡張し、ブックにパブリッシャー情報を付ける方法を示します。
  • XML エディターの「設計」ビューで、pub:company エレメントを選択します。 ポップアップ・メニューから、「除去」を選択して、それを除去します。
  • 「検証」を実行します - 任意のエレメントはオプションであるため、ドキュメントは有効です。

特定名前空間の使用

specifiedNamespace ディレクトリーの下の Book.xsd スキーマの複合タイプは BookType です。 BookType のコンテンツは、title (タイトル)、author (作成者)、year (年)、isbn、および then (次に) で、オプションで、以下の任意のエレメントが示す、名前空間 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」名前空間を選択して、「編集 (edit)」ボタンを押します。
  • ブラウズ (Browse)」ボタンを押し、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 ファイルを開きます。
  • ルート・エレメントを右クリックし、「スキーマ情報の編集」メニュー項目を選択します。
  • 新規」を押して、新規名前空間の情報を入力するダイアログを起動します。
  • ブラウズ (Browse)」を押して、anyNamespace ディレクトリーの下の Reviewer.xsd ファイルを見つけます。
  • この 3 つのフィールドには、現在スキーマからの情報が自動的に入力されていることに注意してください。
  • OK」を押し、もう一度「OK」を押します。 xmlns:openSource 属性が追加され、xsi:schemalocation 属性値が更新されていることが分かります。
  • 名前空間が追加されているため、pub:company エレメントを右クリックして、「前に追加」または「後に追加」ポップアップを選択すると、Reviewer.xsd 名前空間からエレメントを追加できるようになっていることが分かります (すなわち、http://www.apache.com) 。

Invoice

Invoice.dtd ファイルには、Invoice.xml ファイルのコンテンツを定義するためのルールがあります。 これは、DOCTYPE 宣言によって Invoice.xml に関連付けられています。.

シーケンス・コンテンツ・モデル

送り状 (Invoice) エレメントには、以下のようなコンテンツ・モデルがあります。

   <ELEMENT Invoice (Header, Items+)>

これは、送り状 (Invoice) エレメントが、1 つのヘッダー (Header) エレメントの後に複数の項目 (Items) を続けることができることを意味します。

XML エディターの「設計」ビューで、送り状 (Invoice) エレメントを選択します。 ポップアップ・メニューから、「子の追加」->「項目 (Item)」を選択して、項目 (Item)送り状 (Invoice) エレメントに追加します。 これを繰り返して、必要な数の項目 (Item)送り状 (Invoice) エレメントに追加できます。

コンテンツ・モデルの選択

日付エレメントには、以下に似たコンテンツ・モデルがあります。

   <ELEMENT Date ((Month, Day, Year) | (Day, Month, Year))>

これは、日付のフォーマットは、月 (Month) の後に日 (Day)、その後に年 (Year) であっても、日 (Day) の後に月 (Month)、その後に年 (Year) であってもかまわないことを意味します。

この 2 つのグループは、XML エディターの「設計」ビューで簡単に切り替えることができます。 最初に、複数の月 (Month)日 (Day)、および年 (Year) エレメントを選択します (これらを選択しながら Ctrl キーを押し続けます)。 次にポップアップ・メニューから、「置換」-> 「(日、月、年 (Day, Month, Year)」を選択して、それを 2 次グループに置き換えます。

列挙型属性タイプ

項目 (Item) エレメントには、その値を 上位変換 (promotion)通常 (regular) のいずれかに設定できる属性の割引 (discount) があります。 XML エディターの「設計」ビューで、割引 (discount) 属性を選択します。 コンボ・ボックスが表示され、この 2 つの値から選択できます。 あるいは、「ソース (Source)」ビューで、割引 (discount) 属性のコンテンツ・アシストを選択して、この 2 つの値から選択できます。


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.xsdipo.xsdreport.xsd および report.xml のファイルが組み込まれています。

スキーマが大きくなるにつれ、保守、再利用および読み易さなどの目的から、そのコンテンツをいくつかのスキーマ・ドキュメントに分割することがしばしば望まれます。 XML スキーマは、このサポートのために、インクルード (include) およびインポート (import) の 2 つの構成を定義します。 インクルード (include) エレメントは、組み込まれたスキーマからの定義および宣言を現在のスキーマに取り入れます。 これには、組み込まれたスキーマが組み込むスキーマと同じターゲット名前空間内にある必要があります。 インポート (import) エレメントの動作は、インポートされたスキーマが異なる名前空間からくることができる点を除き、類似しています。

インクルード (include) およびインポート (import) について詳しくは、XML スキーマ・エディターのオンライン・ヘルプを参照してください。


置換グループの使用

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) エレメントがインスタンス・ドキュメント内で直接使用されないようにしています。