トッカンソフトウェア

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 はデフォルトの名前空間のものです。


ページのトップへ戻る
��フトウェア All Rights Reserved.