XML スキーマを XML 文書に取り込む - XML プログラミング
PROGRAM
XML スキーマを XML 文書に取り込む
XML 文書では、XML スキーマや DTD (Document Type Definition) を使用して、文書の構造を定義することができます。
ここでは、別ファイルとして用意した XML スキーマファイルを XML 文書に取り込む方法について記してみます。
XML スキーマファイルの作成方法については XML スキーマの書き方 などを参考にしてください。
XML スキーマを読み込む
XML スキーマファイルは、ルートタグに "http://www.w3.org/2001/XMLSchema-instance" 名前空間の "schemaLocation" 属性を使って読み込みます。
<?xml version="1.0" encoding="UTF-8"?>
<ルート要素 xsi:schemaLocation="http://xxx.xx.jp/ns/schema1 schema.xsd" xmlns="http://xxx.xx.jp/ns/schema1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</ルート要素>
最初の xsi:schemaLocation="http://xxx.xx.jp/ns/schema1 schema.xsd" では、名前空間 "http://xxx.xx.jp/ns/schema1" として定義されている XML スキーマファイル "schema.xsd" を読み込むという指定です。名前空間に指定する名前は "schema.xsd" ファイル内で定義されている名前空間と同じにする必要があるようでした。
スキーマファイルの指定は、上記の例では XML ファイルが保存されているのと同じところの "schema.xsd" ファイルという感じになりますが、ここでは http:// で始まる URL なども指定できる様子です。
続く xmlns="http://xxx.xx.jp/ns/schema1" のところは、既定の名前空間として "http://xxx.xx.jp/ns/schema1" を使用するという意味になります。
これによって、名前空間を指定せずに(普通に)タグを記載したときには、そのタグは名前空間 "http://xxx.xx.jp/ns/schema1" に定義されているタグとして扱われるようになります。
さらにその先の xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" は、XML スキーマを取り込むために使用する "schemaLocation" 属性を使用できるようにするための記述になります。
順番が逆な感もありますけれど、とりあえずこれで、名前空間 "http://www.w3.org/2001/XMLSchema-instance" に定義されている "schemaLocation" 属性を使用して、XML 文書に適用する XML スキーマを適用できるようになります。
このとき、xmlns に続けて ":" で接頭辞を指定しているので、この名前空間で定義されているタグや属性などを使用する場合には、その名前の頭に接頭辞をつける必要があります。ここでいう "xsi:schemaLocation" の頭の "xsi:" がそれになります。
複数の XML スキーマを適用する
XML スキーマは、ひとつの XML 文書に複数適用することができます。
<?xml version="1.0" encoding="UTF-8"?>
<ルート要素 xsi:schemaLocation="http://xxx.xx.jp/ns/schema1 schema.xsd http://xxx.xx.jp/ns/schema2 schema2.xsd" xmlns="http://xxx.xx.jp/ns/schema1" xmlns:sc2="http://xxx.xx.jp/ns/schema2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</ルート要素>
指定方法は 1 つの XML スキーマを読み込んだときとほとんど同じで、"http://www.w3.org/2001/XMLSchema-instance" 名前空間の "schemaLocation" 属性で指定する XML スキーマを、"名前空間1 ファイル1 名前空間2 ファイル2" というように、名前空間とファイルの対を、空白で区切って指定します。
同一の名前空間の別々の XML スキーマファイルでも大丈夫です。
そして、指定した XML スキーマファイルが所属するそれぞれの名前空間について、xmlns を指定します。
既定の名前空間には 1 つの名前空間しか設定できないので、複数の名前空間を使用する場合は、既定として指定した名前空間以外には、必ず接頭辞をつける必要があるようでした。上記の例では、名前空間 "http://xxx.xx.jp/ns/schema2" の接頭辞として "sc2" という接頭辞をつけています。
そのため、名前空間 "http://xxx.xx.jp/ns/schema2" に所属するタグや属性の名前には、必ず頭に接頭辞をつけて "sc2:タグ名" という感じで XML ファイルを作成することになります。
[ もどる ]