拡張概念: 任意のエレメントを使用した拡張可能コンテンツ・モデルの作成
このサンプルは、XML スキーマの任意のエレメントを使用して、XML 文書に拡張可能なコンテンツ・モデルを作成する方法を示します。
サンプルは、次の 2 つのディレクトリーに分かれます。
-
anyNamespace - ## 任意の名前空間の使用方法を示します。
-
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) 。