目次へ

8.3 スキーマの指定

DTDでは、そのXML文書のスキーマを表しているDTDはどこにあるのか、DOCTYPE宣言で指定しました。では、スキーマ言語がXML Schemaの場合、XML文書のスキーマはどのように指定すればよいのでしょう。XML Schemaでは、Namespaceを使用して、どのスキーマで書かれたXML文書であるか判別するのです。XML 文書中では、適用するXML SchemaのTarget Namespaceを指定します。

ここで、復習します。XML文書の要素や属性がどこのNamespaceに属しているか、指定する方法には、以下の2つがあります。

  • Namespace接頭辞を使用する方法
  • デフォルトNamespaceを設定する方法

Namespace接頭辞を使用する場合は、まず、その接頭辞がどこのNamespaceを示すものなのか、定義します。

 xmlns:Namespace接頭辞 = "名前空間を示すURI" 

接頭辞を使用する場合は、要素名や属性名の前に、Namespace接頭辞をコロンで区切って記述します。これで、要素や属性はNamespace接頭辞に関連付けられたNamespaceに属している、ということを表しています。

<Namespace接頭辞 : 要素名 Namespace接頭辞 : 属性名="属性値"/> 

以下に例を示します。

 
<paper:paper xmlns:paper="http://www.4dd.co.jp/paperinfo">
 &ltpaper:title>連続曲線箱桁の解法&lt/paper:title&gt
 <paper:author>
    <people:name xmlns:people=":http://www.4dd.co.jp/peopleinfo">後藤茂夫<people:name>
    <peopletitle>教授</people:title>
  </paper:author>
</paper:paper>

上の例では、"paper"という接頭辞を"http://www.4dd.co.jp/paperinfo"というNamespaceに対応させています。2行目のtitle要素には、"paper"という接頭辞がついています。これは、2行目のtitle要素は"http://www.4dd.co.jp/paperinfo"というNamespaceに属していることを表します。また、peopleというNamespace接頭辞も定義されています。people接頭辞は、"http://www.4dd.co.jp/peopleinfo"という名前のNamespaceに対応されています。5行目のtitle要素には"people"というNamespace接頭辞がついています。これは、5行目のtitle要素は"http://www.4dd.co.jp/peopleinfo"というNamespaceに属していることを表します。

もうひとつの方法が、デフォルトNamespaceを使用する方法です。デフォルトNamespaceはxmlns属性を使用して定義します。

<要素名 xmlns="デフォルトNamespaceのURI"/> 

以上のように宣言した場合、Namespaceの指定がない子供要素、孫要素はデフォルトNamespaceに属するものと認識されます。以下に例を示します。

 
<?xml version="1.0"?>
  <html xmlns='http://www.w3.org/TR/REC-html-40'>
     <head>
        <title>Frobnostication</title>
     </head>
     <body>
        <p>Moved to <a href='http://frob.com'>here.</a></p>
     </body>
   </html>

ルート要素である、html要素の開始タグでデフォルトNamespaceを定義しています。デフォルトNamespaceは"http://www.w3.org.TR.REC-html-40"です。Namespace接頭辞が設定されている要素や属性はありません。これより、html、head、title、body、p、aの要素はすべて"http://www.w3.org.TR.REC-html-40"という名前のNamespaceに属していることがわかります。

では、XML 文書よりXML Schemaを参照する方法を、例を挙げて説明します。以下のように、XMLのスキーマを作成しXML Schemaで記述したとします。

 
<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       targetNamespace="http://www.example.com/PO1"
            xmlns:po="http://www.example.com/PO1">

 ...

 <xsd:element name="purchaseOrder" type="po:PurchaseOrderType"/>

 <xsd:element name="comment" type="xsd:string"/>

 ...

</xsd:schema>

上のXML SchemaのTarget Namespaceは、"http://www.example.com/PO1" です。そこで、上のスキーマに沿ったXML文書を記述したとします。XML 文書に「上のスキーマに沿った文書である」ことを明示するには、Namespaceによって指定します。

 
<?xml version="1.0"?>
  <purchaseOrder orderDate="1999-10-20" xmlns="http://www.example.com/PO1">
    <shipTo country="US">
     ...
    </shipTo>

     ...

    <comment>Hurry, my lawn is going wild!</comment>

     ...

 </purchaseOrder>

上のXML文書のデフォルトNamespaceは"http://www.example.com/PO1"です。よって、Namespace接頭辞を持たないpurchaseOrder要素やcomment要素は 、 "http://www.example.com/PO1"という名前のNamespaceに属していることがわかります。そして、"http://www.example.com/PO1"は、先ほどのXML SchemaのTarget Namespaceでもあります。これにより、XML パーサは、XML 文書中のpurchaseOrderやcommentの要素が上のXML Schemaで作成されたスキーマに従っているか、チェックを行います。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp