XML Schema(スキーマ) について
今回は、XML Schemaについて書きますXMLはタグを自由に書けますが、DTDやXML Schemaを使用することによりタグの記述に制限を掛けられます。
XML SchemaはXMLの構造情報が記述され、.xsdという拡張子で保存されるファイルです。
XMLの構造情報とは、
- 含まれる要素
- 要素の順番
- 要素の持つ属性
- 要素や属性の型(文字列、数値、引け・・・)
名前空間 について
XML Schemaの特徴として名前空間があります。例えば、株式会社Aが<code>~</code>とういうタグを定義したときに、株式会社Bも同じ<code>~</code>というタグを定義したとします。
この場合、<code>~</code>だけでは株式会社Aのものか株式会社Bのものか判断がつきません。
これを解決するのが名前空間です。
上記の例では、<株式会社A:code>~</株式会社A:code>、<株式会社B:code>~</株式会社B:code>とすればA社、B社のどちらのタグか判断が付きます。
実際に書くときは<株式会社A:code>とは書かず、<A:code>というように訳して書きます。
例① : 名前空間を指定するイメージ
<サンプル 株式会社Aの名前空間はAとする 株式会社Bの名前空間はabcとする 株式会社Cの名前空間は頭なしとする>
<A:code>ここは株式会社Aのコード</A:code>
<abc:code>ここは株式会社Bのコード</abc:code>
<code>ここは株式会社Cのコード</code>
</サンプル>
先に例が来てしまいましたが、名前空間は必ず頭になにかを指定する必要はなく、省略することが出来ます。 また頭の文字は何でも良いです。よくxsiとか、xsとか使われていますが、実は別の文字を使っても良いです。
それでは実際に使われている例を見てみましょう。
例② : Apache Tomcatのweb.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
~ 省略 ~
</web-app>
名前空間の指定は xmlns属性 で行います。 例①の書き方をすると名前空間の指定は次のようになります。
"http://www.w3.org/2001/XMLSchema-instance"の名前空間は xsi とする
"http://xmlns.jcp.org/xml/ns/javaee"の名前空間は頭なしとする
幾つか要素、属性がありますが、名前空間で分けると以下になります。
名前空間 | 頭 | 要素、属性 | コメント |
---|---|---|---|
http://www.w3.org/2001/XMLSchema-instance | xsi | xsi:schemaLocation | xsdファイル指定で使用 |
http://xmlns.jcp.org/xml/ns/javaee | 頭なし | web-app | Apache Tomcatで使用 |
※頭なしは要素のみ指定できます。属性には名前空間を指定する必要があります。
schemaLocation は重要な属性です。説明は下に書きます。
schemaLocation、noNamespaceSchemaLocationについて
上で1つのXMLファイルに複数の名前空間が指定出来ることを書きましたが、それぞれの名前空間に対し、xsdファイルを紐付けるのがschemaLocation、noNamespaceSchemaLocation属性になります。
schemaLocation、noNamespaceSchemaLocation属性は、名前空間:"http://www.w3.org/2001/XMLSchema-instance"で定義されています。
使用するには、xmlns属性で"http://www.w3.org/2001/XMLSchema-instance"を宣言します。
例:Apache Tomcatのweb.xmlから抜き出し
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
schemaLocation、noNamespaceSchemaLocationの違い
schemaLocationは名前空間毎にxsdファイルを指定し、noNamespaceSchemaLocationは名前空間を指定しないという違いがあります。■schemaLocationの書き方
"適用する名前空間① xsdファイル① 適用する名前空間② xsdファイル② 適用する名前空間③ xsdファイル③ "
→スペースで区切って複数指定
■noNamespaceSchemaLocationの書き方
"xsdファイル① xsdファイル② xsdファイル③ "
→スペースで区切って複数指定
最後にApache Tomcatのweb.xmlをもう一度見ています。
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
~ 省略 ~
</web-app>
デフォルトの名前空間は http://xmlns.jcp.org/xml/ns/javaee この名前空間にhttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdを紐付けます。
紐付けるために名前空間:http://www.w3.org/2001/XMLSchema-instanceを宣言し、schemaLocation属性で紐付けを行います。
その他の web-app はデフォルトの名前空間のものです。
ページのトップへ戻る