目次へ

8.4 schemaLocation、noNamespaceSchemaLocation

XML 文書がどのXML Schemaに沿って記述されているか、Namespaceを使用して指定します。しかし、Namespaceを示すURIはXML Schemaのファイルの場所を示すものではありません。よって、いくらTarget Namespaceが"http://www.example.com/PO1"のXML Schemaを作成して、XML 文書のNamespaceを"http://www.example.com/PO1" に設定したとしても、XML パーサが"http://www.example.com/PO1"という名前のスキーマを知らない限り、スキーマに沿っているか解析することは出来ません。

そのような場合のために、Namespaceを規定するスキーマファイルの所在を示すための属性が用意されています。それがschemaLocationです。

schemaLocation="NamespaceのURI1   スキーマファイルの所在を示すURI1
                NamespaceのURI2  スキーマファイルの所在を示すURI2
                ... "

schemaLocationの属性値の書式について、説明しましょう。情報はURIの組で表されます。最初にNamespaceの名前(URI)を記述します。次に、スペースや改行文字で区切って、XML Schemaファイルの場所を示すURIを記述します。属性値には、複数のNamespaceの情報を記述することも可能です。

schemaLocationは、"http://www.w3.org/2001/XMLSchema-instance"という名前のNamespaceに属しています。XML Schemaでは、XML 文書中で使用する属性をいくつか規定しています。そのひとつが、schemaLocation属性です。ただし、XML 文書中で使用する属性に関しては、XML Schemaとは別のNamespaceを用意しています。これが、"http://www.w3.org/2001/XMLSchema-instance"にあたります。(スキーマを記述する際に使用するXML SchemaのNamespaceは "http://www.w3.org/2001/XMLSchema"です。)

以下に例を示します。

 
  <?xml version="1.0"?>
  <purchaseReport
       xmlns="http://www.example.com/Report"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.example.com/Report
                           http://www.example.com/Report.xsd"
       period="P3M" periodEnding="1999-12-31">
     ...
 </purchaseReport>

上のXML 文書では、デフォルトNamespaceとして"http://www.example.com/Report"を指定しています。その後にschemaLocation属性の値で、Namespaceの構成を記述しているXML Schemaファイルの場所を指定しています。Namespace "http://www.example.com/Report"の情報が記述しあるXML Schemaファイルは、"http://www.example.com/Report.xsd"であると指定されています。

それでは、Target Namespaceが設定されていないXML Schemaを参照するには、どうすればよいでしょう。このような場合には、noNamespaceSchemaLocationという属性を使用します。書式は、以下の通りです。

 
noNamespaceSchemaLocation="スキーマファイルの所在を示すURI1
                           スキーマファイルの所在を示すURI2
                           ... "

属性値に参照したいスキーマファイルのURIを記述します。noNamespaceSchemaLocation属性も"http://www.w3.org/2001/XMLSchema-instance"Namespaceに属する属性です。

以下に例を示します。

 
<?xml version="1.0"?>
  <purchaseReport
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:noNamespaceSchemaLocation="http://www.example.com/chameloen.xsd"
       period="P3M" periodEnding="1999-12-31">
     ...
 </purchaseReport>

以上の例では、noNamespaceSchemaLocation属性が指定されています。属性値は"http://www.example.com/chamelon.xsd"です。これより、XMLパーサは、XML文書が妥当であるか判断するための情報が、"http://www.example.com/chamelon.xsd"ファイルに記述されている、と判断できます。

さて、XML Schemaの勧告には、schemaLocationやnoNamespaceSchemaLocationの情報は、XML 文書の作成者がXMLパーサにスキーマに関する"hint"を示すものであると記述されています。つまり、schemaLocation、noNamespaceSchemaLocationの情報よりスキーマファイルを読み取り、ファイルの情報を基にXML文書を解析するかどうかは、XML パーサの実装方法に委ねられているのです。実際、例えば、既にXHTMLのスキーマについて知っている、ブラウザーなどは、schemaLocationが記述してあったとしても、スキーマファイルを参照しません。自身が記録しているXHTMLの情報を基にXML文書を解析していきます。

8.5 まとめ

  • Namespaceとは、要素や属性の名前の集合である
  • Namespaceはスキーマをモジュール化し、再利用することを目的として作成された概念である
  • XML Schemaでは、Target NamespaceによりどのNamespaceのスキーマを規定しているか指定する
  • XML文書が記述されているスキーマを記述する場合は、NamespaceにTargetNamespaceを指定する
  • XML文書にXML Schemaファイルの所在を明記したい場合は、schemaLocation属性、またはnoNamespaceSchemaLocation属性を使用する

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp