- 1.1 DTDの問題
- 1.2 XML Schema とは
- 1.3 schema要素
- 1.4 まとめ
1.3 schema要素
XML Schemaのルート要素は、schema要素です。schema要素内のコンテンツでは、以下のものを定義します。
型定義 |
要素の内容や、属性値等のデータ型の定義を行う |
要素宣言 |
要素宣言を行う |
属性宣言 |
属性の宣言を行う |
属性グループ定義 | 属性型宣言をグループにして、定義したもの。モジュール化して再利用することを目的としている |
モデルグループ定義 |
子供要素の出現回数や出現順、子供要素のデータ型など、要素の内容をグループにして定義したもの。モジュール化して再利用することを目的としている |
記法宣言 |
記法の宣言を行う |
コメント |
文書をわかりやすくするために挿入する注釈 |
例えば、8.2で示したスキーマ、PO1では、element要素で、要素宣言をしています。また、complexType要素およびsimpleType要素で型定義をしています。さらに、annotation要素がコメントになります。
schema要素の子供要素で宣言・定義されるものには、それぞれ名前があるものがあります。例えば、要素宣言で宣言されている要素には要素名が、型定義で定義されている型には、型の名前があります。そして、それらの名前は、すべて「Target Namespace」に属しています。 Target Namespaceは、schema要素の属性です。以下に例を示します。
以上の例は、8.2で示したスキーマ、PO1のNamespaceを図に表したものです。まず、ルート要素であるschema要素のTargetNamespace属性値にURI 「http://www. example.com/PO1」が設定されています。これにより、このschema要素内の「名前」はすべて、「http://www.example.com/PO1」という名前のNamespaceに属していることになります。 注意しなければいけないのは、URI 「http://www.example.com/PO1」は、言語のスキーマを定義している、XML schemaファイルの場所を表しているわけではない、ということです。これは、「日本語」「英語」のように、XML文書が「http://www.example.com/PO1」という名前の言語でかかれていることを示しています。
上の図は、Namespaceの区分も表しています。例えば、上記図の濃い緑色の部分に含まれている4つの名前、「purcahseOrder」要素、「ZIP」型、「USAddress」型、「PurchaseOrderType」型は、schema要素の直下の子供要素で指定されている名前です。これらはGlobal Nameと呼ばれます。Global Nameは他の「言語」で記述されたXML文書より参照可能です。対して、PurchaseOrderTypeの下の四角や、USAddressの下の四角の中に区分されている名前はLocalNameと呼ばれます。Local Nameは、他の言語で記述された言語から直接参照することはできません。そのかわり、例えば、PurchaseOrderType内とUSAddress内で、別のデータ型で同じ名前の要素を定義することが可能です。XML Schemaにおける、Namespaceの取り扱いに関して、詳細なことは、後ほど説明します。
その他、schema要素の属性の意味について、以下に記します。
version | 本スキーマのバージョン |
---|---|
xml:lang | 本スキーマの記述言語 |
targetNamespace | スキーマを記述するNamespaceのURI |
elementFormDefault | Localに属する要素に関して、XML文書中にNamespaceを明示的に記述する必要があるかどうか、指定する属性。 |
attributeFormDefault | Localに属する属性に関して、XML文書中にNamespaceを明示的に記述する必要があるかどうか、指定する属性。 |
blockDefault |
既存の型を拡張および制限して、新たな型を作成した場合に、それを既存の型の代わりとして、使用していいか、決定するもの。 |
finalDefault | 既存の型を拡張および制限して、新たな型を作成できるかどうか、指定するもの。 |
id | XML1.0におけるID型属性 |
さらに、ひとつの言語のスキーマを複数のファイルに分割することができます。以下に例を示します。
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/IPO"> <include schemaLocation="http://www.example.com/schemas/address.xsd> </xsd:schema>
ipo.xsd
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/IPO"> ... </xsd:schema>
address.xsd
以上の例では、スキーマを定義しているファイルが2つ存在しています。つまり、schema要素が2つ、存在します。2つのschema要素のtargetNamespace属性の値を確認してください。両方とも、同じURI「http://www.example.com/IPO」を示しています。
1.4 まとめ
- DTDには、Namespaceに対応していない、データ型が貧弱、XMLの構文に従っていない、などの問題がある
- XML SchemaはXMLの究極のスキーマ言語として、W3Cより勧告されたスキーマ言語
- XML Schemaのルート要素はschema要素
- schema要素の内容では、要素、属性、記法の宣言、型の定義、モデルグループの定義、属性グループの定義をおこなう
- schema要素の属性では、Namespaceや、派生する型に関する情報を定義する。