XML
XML(Extensible Markup Language)は、データの表現や交換に広く使用されるマークアップ言語です。XMLは、テキストベースのフォーマットであり、データを構造化して保存することができます。この言語は、異なるプラットフォームやアプリケーション間でデータをやり取りするための標準的な形式として広く採用されており、特にWebサービスやデータベースの転送などで活用されています。 XMLは、シンプルで柔軟性があり、拡張性に優れています。また、テキストファイルとして扱えるため、コンピュータ上での処理が容易であり、多くのツールが開発されています。このため、XMLは多様な分野で利用されており、情報共有やデータ交換に欠かせない技術の1つとなっています。本書では、XMLの基礎的な概念や使い方について詳しく解説します。
はじめに
[編集]XMLは、1998年にW3C(World Wide Web Consortium)によって策定されたマークアップ言語であり、当初はWeb上の文書表示を目的としていました。しかし、XMLは柔軟性があり、汎用性が高いため、Web以外の分野でも広く利用されるようになりました。
しかし、JSONやYAMLなどの近年のデータ交換フォーマットの台頭により、XMLに対する需要は低下しています。これらのフォーマットは、XMLよりもシンプルで、データ表現に必要なマークアップを最小限に抑えられるため、ファイルサイズが小さくなることが多く、高速な処理が可能です。また、XMLのようなタグベースの表現よりも、JSONやYAMLのようなキーと値のペアの表現がプログラマーにとっては直感的であると考えられています。
一方で、XMLの利点としては、汎用性が高く、構造化されたデータを表現できることが挙げられます。また、XMLは標準化されたフォーマットであるため、異なるプラットフォームやアプリケーション間でのデータのやり取りに適しています。
XMLは、SGMLというマークアップ言語に基づいて設計されており、タグ表現が冗長であるという欠点があります。また、XMLは、データ表現に必要なタグや属性などの情報を含めたテキスト形式で表現するため、ファイルサイズが大きくなることがあります。
現在では、XMLはJSONやYAMLなどの新しいデータフォーマットに比べて、マーケットシェアが低下していますが、依然として多くの分野で利用されています。例えば、WebサービスのAPI設計や、企業間のデータ交換など、柔軟性が求められる分野では、XMLが依然として有用な技術であるといえます。
XMLの基礎
[編集]XMLの構文
[編集]XMLの構文は、タグで囲まれた要素とテキストで構成されています。要素は、開始タグと終了タグで囲まれ、その間にテキストや他の要素を含むことができます。
要素
[編集]例えば、以下のようなXML文書があります。
<book> <title>XMLの概論</title> <author>Anonymous</author> <publisher>Wikibook出版</publisher> </book>
この例では、<book>
と</book>
で囲まれた要素に、<title>
や<author>
、<publisher>
の要素が含まれています。
属性
[編集]XMLでは、要素に属性を追加することができます。属性は、要素に付与された情報であり、以下のように表現されます。
<book isbn="1234567890"> <title>XMLの概論</title> <author>Anonymous</author> <publisher>Wikibook出版</publisher> </book>
この例では、<book>
要素にisbn
属性が追加され、id="1234567890"
という値が指定されています。
コメント
[編集]XMLでは、コメントを追加することができます。コメントは、で囲まれたテキストとして表現されます。
<!-- この要素は無視されます --> <book> <title>XMLの概論</title> <author>Anonymous</author> <publisher>Wikibook出版</publisher> </book>
この例では、で囲まれた
がコメントとして追加されています。
エンコーディング
[編集]XMLでエンコーディングを明示するには、XML文書の先頭にXML宣言を追加します。XML宣言は、以下のような形式で記述されます。
<?xml version="1.0" encoding="エンコーディング"?>
ここで、version
属性には、XMLのバージョン番号を指定します。一般的には、1.0
が使用されます。encoding
属性には、テキストのエンコーディングを指定します。例えば、UTF-8を指定する場合は、以下のように記述します。
<?xml version="1.0" encoding="UTF-8"?>
このようにXML宣言を追加することで、XMLパーサーは、正しいエンコーディングでXML文書を解析することができます。また、XML文書がエンコーディングを明示的に指定している場合は、デフォルトのエンコーディングを使用することができなくなります。
名前空間
[編集]XMLで名前空間を使用するには、要素や属性に対して、名前空間を識別する識別子を付与します。一般的には、以下のような形式で記述されます。
<要素名 xmlns:プレフィックス="名前空間URI"> <!-- ここに要素の内容を記述 --> </要素名>
ここで、xmlns
属性は、XML文書内で使用する名前空間の定義を示します。プレフィックス
には、名前空間を識別するためのプレフィックスを指定します。一般的には、ns
やx
などが使用されます。名前空間URI
には、名前空間を一意に識別するURIを指定します。
例えば、以下のようなXML文書で、xmlns:ns
属性を使用して、http://example.com/namespace
という名前空間を定義しています。
<?xml version="1.0" encoding="UTF-8"?> <ns:要素 xmlns:ns="http://example.com/namespace"> <ns:子要素 ns:属性="値">子要素の内容</ns:子要素> </ns:要素>
ここで、ns
プレフィックスが名前空間http://example.com/namespace
を示しています。ns:子要素
要素には、ns
プレフィックスを付与して、http://example.com/namespace
名前空間内の要素であることを示しています。同様に、ns:属性
属性にも、ns
プレフィックスを付与しています。
XMLのバージョン
[編集]XMLのバージョンは、XML文書の先頭にXML宣言を追加することで指定します。XML宣言のversion
属性に、使用するXMLのバージョンを指定します。以下に、XML 1.0とXML 1.1の例を示します。
- XML 1.0
<?xml version="1.0" encoding="UTF-8"?> <!-- XML 1.0の文書 -->
- XML 1.1
<?xml version="1.1" encoding="UTF-8"?> <!-- XML 1.1の文書 -->
XML 1.1では、XML 1.0に比べて、文字エンコーディングに関する扱いが厳密になっています。また、一部の制御文字について、XML 1.0とは異なる扱いが定義されています。
どちらを使用するべきかは、使用するシステムやアプリケーションによって異なります。XML 1.0が広くサポートされており、多くのシステムで使用されているため、XML 1.0を使用することが一般的です。ただし、XML 1.1の追加の機能が必要な場合や、文字エンコーディングに関する厳密な制御が必要な場合には、XML 1.1を使用することが適している場合があります。
XMLにおけるスキーマー
[編集]XMLにおけるスキーマとは、文書の構造や内容を定義するための規則や制約を記述するものです。XML文書を解析するときに、その文書がスキーマに適合しているかどうかをチェックすることができます。
XMLにおけるスキーマは、主にDTDとXML Schema言語の2種類があります。また、XSLTという言語は、XML文書を別のXML文書に変換するための言語であり、スキーマ定義にも使用されます。
以下に、DTD、XML Schema、XSLTのそれぞれのスキーマ定義の例を示します。
DTDの例:
<!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
上記のDTDは、"note"要素が必須であり、その中に"to"、"from"、"heading"、"body"要素が含まれることを定義しています。また、"to"、"from"、"heading"、"body"要素は、それぞれテキストデータを持つことができます。
XML Schemaの例:
<xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element>
上記のXML Schemaは、DTDの例と同様に"note"要素が必須であり、その中に"to"、"from"、"heading"、"body"要素が含まれることを定義しています。ただし、XML Schemaでは、各要素に型情報が含まれています。
XSLTの例:
<xsl:template match="note"> <note> <to><xsl:value-of select="to"/></to> <from><xsl:value-of select="from"/></from> <heading><xsl:value-of select="heading"/></heading> <body><xsl:value-of select="body"/></body> </note> </xsl:template>
上記のXSLTは、"note"要素を"note"要素に変換するためのテンプレートを定義しています。テンプレート内で、"to"、"from"、"heading"、"body"要素を取得し、それぞれ"note"要素内に挿入しています。
XMLの用途
[編集]XMLの用途は様々であり、以下に代表的な用途を紹介します。
- データの交換、データの保存: XMLは、データを構造化して表現することができるため、データの交換や保存に利用されます。例えば、業務システムで扱うデータや、Webページのコンテンツ、文書フォーマットなどがあります。
- ウェブサービス、RSS、SOAP、REST: XMLは、ウェブサービスや情報配信のための形式としても広く利用されています。ウェブサービスの標準規格であるSOAPや、Webコンテンツの配信形式であるRSSなどがあります。また、REST APIでもXMLを利用することができます。
- XHTML、SVG、MathML: XMLは、Webコンテンツを表現するための言語としても利用されています。例えば、Webページのマークアップ言語であるXHTMLや、ベクターグラフィックスの表現に使われるSVG、数式の表現に使われるMathMLなどがあります。
これらの用途によって、XMLは広く使われる一方で、JSONやYAMLなどのよりシンプルで扱いやすいデータ形式に置き換えられるケースもあります。使用する場面や目的によって、最適なデータ形式を選択する必要があります。
- 変更の大きさ:XHTMLは、HTMLをXMLに基づいて再定義することで、多数の変更を必要としました。これにより、既存のHTML文書に対しての互換性が低下し、HTMLの普及を阻害する結果になりました。
- コストと利益のバランス:XHTMLによって生じる変更や、XMLに基づく規約の厳格性に対する適合性を維持することには、HTMLに比べて高いコストがかかりました。一方で、その努力による利益は、特にHTMLが広く普及している場合には限定的でした。
- 開発者の関心と能力:XHTMLに基づく文書を開発するためには、XMLの知識やツールが必要であったため、開発者の関心や能力を必要以上に引き上げてしまいました。
以上のような理由から、XHTMLはHTMLの普及を妨げることになり、代わりにHTML5が開発されることになりました。HTML5は、XHTMLの失敗から学び、HTMLの強みを維持しながら、より強力な機能やAPIを追加し、より簡単に開発できるように設計されています。
HTML5は、DOCTYPEにDTDを含まないので、もはやSGMLに基づいた技術とも言えません。XMLのツール
[編集]XMLエディタ、バリデータ
[編集]XSLT、XPath、XQuery
[編集]SAX、DOM、StAX
[編集]XMLの応用
[編集]XMLとデータベース、XMLとプログラミング言語
[編集]XMLとセマンティックウェブ
[編集]XMLとビッグデータ、XMLとクラウドコンピューティング
[編集]まとめ
[編集]XMLの重要性と将来の展望
[編集]XMLを使ったシステムの例
[編集]XMLの学習におけるヒントやリソース
[編集]附録
[編集]チートシート
[編集]以下がXMLのチートシートになります。XMLの基本的な構文、要素、属性、コメント、エンコーディング、名前空間、バージョンについての情報が含まれています。
基本構文:
<?xml version="1.0" encoding="UTF-8"?> <!-- これはコメントです --> <rootElement> <childElement attribute1="value1" attribute2="value2">Text Content</childElement> <emptyElement attribute="value" /> </rootElement>
- XML宣言:
<?xml version="1.0" encoding="UTF-8"?>
- 要素:
<要素名>要素の内容</要素名>
- 空要素:
<要素名 属性="値" />
- コメント:
属性:
<要素名 属性1="値1" 属性2="値2">要素の内容</要素名>
- 属性値はダブルクォートまたはシングルクォートで囲むことができる。
名前空間:
- 名前空間の宣言:
xmlns:接頭辞="名前空間URI"
- 名前空間を持つ要素:
<接頭辞:要素名>要素の内容</接頭辞:要素名>
- 名前空間を持つ属性:
<要素名 接頭辞:属性名="属性値" />
バージョン:
- XMLバージョン1.0:
<?xml version="1.0"?>
- XMLバージョン1.1:
<?xml version="1.1"?>
エンコーディング:
- UTF-8エンコーディング:
<?xml version="1.0" encoding="UTF-8"?>
- UTF-16エンコーディング:
<?xml version="1.0" encoding="UTF-16"?>
- ISO-8859-1エンコーディング:
<?xml version="1.0" encoding="ISO-8859-1"?>
以上がXMLのチートシートになります。
用語集
[編集]- 要素 (Element): XML文書の構成要素。要素は開始タグ、終了タグ、その間にある要素の値から構成されます。
- 属性 (Attribute): XML要素に付随する情報のこと。属性は、属性名と属性値から構成されます。
- タグ (Tag): XML文書内で、要素や属性などを示すために使用される文字列のこと。開始タグ、終了タグ、空要素タグなどがあります。
- 名前空間 (Namespace): 要素や属性の名前をグループ化するための機能。異なる名前空間で同じ名前を持つ要素や属性を区別することができます。
- コメント (Comment): XML文書内で、人間が理解するためのメモや説明を記述するための機能。
- ドキュメント (Document): XML文書全体を表す要素のこと。通常はルート要素と呼ばれます。
- パーサー (Parser): XML文書を解析して、プログラム内で扱いやすい形式に変換するためのソフトウェアツール。
- スキーマ (Schema): XML文書の構造やデータ型、制約などを定義するための言語。DTDやXML Schemaが代表的なスキーマ言語です。
- XSLT (eXtensible Stylesheet Language Transformations): XML文書を別の形式に変換するための言語。XML文書からHTMLやテキストファイルなどの形式に変換することができます。
- XHTML (eXtensible Hypertext Markup Language): HTMLをXMLで書き直したもの。XMLのルールに従った文書構造となっており、より正確な文書構造を表現することができます。