- 8.1 Namespaceとは
- 8.2 Target Namespace
- 8.3 スキーマの指定
- 8.4 schemaLocation、noNamespaceSchemaLocation
- 8.5 まとめ
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属性を使用する