6.XMLバリデーション

 

 

XMLバリデーション: DTDXML Schema

XMLはデータの表現において柔軟性を提供しますが、その柔軟性ゆえにデータの構造が乱れがちになることがあります。この問題を解決し、XML文書が特定の構造に従っているか確認するためには、XMLバリデーションが役立ちます。XML文書の構造やデータ型を定義し、それに基づいて文書が妥当であるかどうかを検証することができます。ここでは、DTD(Document Type Definition)とXML Schemaに焦点を当ててXMLバリデーションについて掘り下げていきます。

DTD(Document Type Definition)とは?

DTDは、XML文書の構造やデータ型を定義するための規格です。DTDを使用すると、文書が特定の要素や属性を持つか、それらがどのような階層構造で組み合わさるかなどを明示的に指定できます。以下に、シンプルなXML文書の例とそれに対するDTDの例を示します。

XML文書の例

<bookstore>
  <book>
    <title>XML for Beginners</title>
    <author>John Doe</author>
    <price>19.99</price>
  </book>
  <book>
    <title>Advanced XML Techniques</title>
    <author>Jane Smith</author>
    <price>29.99</price>
  </book>
</bookstore>

DTDの例

<!DOCTYPE bookstore [
  <!ELEMENT bookstore (book+)>
  <!ELEMENT book (title, author, price)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT price (#PCDATA)>
]>

このDTDでは、bookstoreは複数のbook要素を持ち、booktitleauthorpriceの子要素を持つことを定義しています。各要素はテキストデータを持つことができる(#PCDATA)としています。

XML Schemaの使用

DTDは有用ですが、より強力で柔軟なバリデーションを行いたい場合はXML Schemaが選択肢となります。XML SchemaXML文書の構造やデータ型をより詳細に定義でき、文書のバリデーションをより制御できます。

XML文書の例

<bookstore>
  <book>
    <title>XML for Beginners</title>
    <author>John Doe</author>
    <price>19.99</price>
  </book>
  <book>
    <title>Advanced XML Techniques</title>
    <author>Jane Smith</author>
    <price>29.99</price>
  </book>
</bookstore>

XML Schemaの例

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="bookstore">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="book" type="bookType" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="bookType">
    <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="author" type="xs:string"/>
      <xs:element name="price" type="xs:decimal"/>
    </xs:sequence>
  </xs:complexType>

</xs:schema>

このXML Schemaでは、bookstoreは複数のbook要素を持ち、booktitleauthorpriceの子要素を持つことを定義しています