XML名前空間 とは?ページ内リンク ↓ウィキペディア(Wikipedia)記事 ↓Yahoo!知恵袋Extensible Markup Language (エクステンシブルマークアップランゲージ、XML、拡張可能なマーク付け言語、JIS X 4159:2002) は、個別の目的に応じたマークアップ言語群を創るために汎用的に使うことができる仕様である。[1]。 World Wide Web Consortium (W3C) により勧告 (策定) されている国際標準の構造化文書の技術である。 1998年2月に XML 1.0 が勧告された。 2007年現在、W3C勧告の最新バージョンは XML 1.1 である。 XMLは現在、広く普及している技術である。 出典: 『ウィキペディア(Wikipedia)』 ウィキペディア(Wikipedia)記事
Extensible Markup Language (エクステンシブルマークアップランゲージ、XML、拡張可能なマーク付け言語、JIS X 4159:2002) は、個別の目的に応じたマークアップ言語群を創るために汎用的に使うことができる仕様である。[1]。 World Wide Web Consortium (W3C) により勧告 (策定) されている国際標準の構造化文書の技術である。 1998年2月に XML 1.0 が勧告された。 2007年現在、W3C勧告の最新バージョンは XML 1.1 である。 XMLは現在、広く普及している技術である。
概要基礎的概念と利用目的XMLは、個別の目的に応じたマークアップ言語群を創るために汎用的に使うことができる仕様である。 マークアップ言語とは、コンピュータ言語の一種で、文章の論理的な構造(段落など)や見栄え(フォントサイズなど)に関する指定を、文章とともにテキストファイルに記述するための言語である。 XMLは、拡張可能な言語の一つに分類されるが、その理由は、XMLを使うことで、使用者は自分たち自身で複数のタグを定義することができるからである。 XMLの文脈におけるタグとは、文書の断片に意味を付加するための印である。 XMLの最も重要な目的は、異なる情報システムの間で、特にインターネットを介して、構造化された文書や構造化されたデータの共有を、容易にすることである[2]。 XMLを使うと、文書を構造化して記述することもできるし、コンピュータのデータを直列化 (シリアライズ) することもできる。 データを直列化する用途でXMLを使う際には、XMLは、JavaScript Object Notation (JSON) やYAMLなどの、テキストを基にした他の直列化言語と比較衡量することができる[3]。 XMLを基盤とするマークアップ言語とスキーマ言語XMLで文書の論理的構造を規定する制約を追加することによって、XMLを適用したマークアップ言語を実装することができる。 XMLを適用したマークアップ言語は非常に多く存在している (#XMLの応用の節を参照) 。 例えば、Extensible HyperText Markup Language (XHTML)[4] 、DocBook、RSS、Mathematical Markup Language (MathML) 、ebXML、Scalable Vector Graphics (SVG) 、MusicXML などがある。 さらにXMLを、このような適用マークアップ言語のための仕様記述言語すなわちスキーマ言語として、使うことができる。 XMLで記述するスキーマ言語としては、RELAX NG 、W3C XML Schema などがある。 オープンな仕様XMLは、同じく汎用的に使うことができるマークアップ言語である Standard Generalized Markup Language (SGML) の、簡素化されたサブセットとして、人間にとっても比較的判読しやすいように、設計された (#歴史を参照) 。 XMLの仕様は、XMLワーキンググループなどにより設計が行われ、World Wide Web Consortium (W3C) により勧告 (策定) されている。 XMLは無償で使うことができるオープン標準の技術である。 XML仕様のW3C勧告ではXMLの文法とXMLプロセサ (XMLパーサ、XML文書の構文解析器) のための要件を定めている。 1998年2月に XML 1.0 が勧告された。 2007年現在、W3C勧告の最新バージョンは XML 1.1 である。 正当性水準についてXML文書の正当性の水準には、整形式XML文書と妥当なXML文書の、2つの水準がある (#整形式XML文書と妥当なXML文書を参照) 。 XML文書のマークアップ規則に従って記述されていることだけが問題とされる文脈で、スキーマ言語を使わずに、XML文書のマークアップ規則に従って記述された文書を、「整形式XML文書」 (well-formed XML document) という (#XMLの構文と整形式XML文書を参照) 。 さらに、XML文書をより厳密に構造化した文書やデータとして扱いたい場合は、XML文書の構造をスキーマ言語によって定義することができ、XMLプロセサでそのXML文書(XMLインスタンス)に対してその文書構造に従っていることを検証する(妥当性検証を行う)というように、XML技術を使うこともできる (#XML文書の論理的構造と妥当なXML文書を参照) 。 XML文書に対して妥当性検証を行うことにより、従来アプリケーションソフトウェアで行ってきた、XML文書の構造の検査や、XML文書に含まれるデータに対するデータ型のチェックや値の範囲のチェックが、可能となる。 スキーマ言語としては Document Type Definition (DTD、文書型定義) 、W3C XML Schema、RELAX NG (文書スキーマ定義言語: DSDL)などがある。 XML文書の構造がスキーマ言語によって定義され、XML文書の妥当性を検証するソフトウェアによって妥当性が検証されたXML文書のことを「妥当なXML文書」 (valid XML document) という。 整形式XML文書は、妥当なXML文書である場合と、妥当なXML文書ではない場合とがある。 スキーマ言語を採用して妥当性検証を行う方法でXMLを使うこともできるし、スキーマ言語を採用せず妥当性検証を行わないで手軽にXMLを使うこともできる。 幅広い人間言語のサポートXML勧告では、XMLプロセサがサポートすべき文字符号化方式(文字コード)としてUTF-8とUTF-16(Unicode)を定めているため、英語以外の言語も扱いやすくなっている (#多言語環境で使うを参照) 。また、UTF-8とUTF-16以外の文字コード(UCS-4、EUC-JP、Shift_JIS、EBCDICなど)を用いることも可能である[5]。 補完技術XMLだけでは最低限の書式しか決められていないため、XMLの力を引き出す各種の関連技術が別途標準化されている (#XMLの拡張および#XML文書をプログラムで処理する、#XML文書を視覚的に表示する、#XMLインフォメーションセットを参照) 。 現在も多くの関連技術の標準化作業が行われている。 例えば、プログラムからXML文書を処理する方法として、Document Object Model (DOM) や Simple API for XML (SAX) などのアプリケーションプログラミングインタフェース (API) が標準化されている[6]。 また、XML文書のスタイルを指定する技術(スタイルシート)として Extensible Stylesheet Language (XSL) や Cascading Style Sheets (CSS) などがある。 XMLの普及とXMLへの批評XMLは現在、広く普及している技術であるが、その技術的な有用性などについて、肯定的に評価する人々が多い一方で、批判的に評価する人々も多い (#XMLに対する支持と批判を参照) 。 整形式XML文書と妥当なXML文書XML文書の正当性の水準には、整形式XML文書と妥当なXML文書の、2つの水準がある。 なおXML文書に対して、整形式XML文書としての検査のみを行うXMLプロセサを非検証XMLプロセサといい、整形式XML文書としての検査に加えて妥当なXML文書としての検査を行うXMLプロセサを検証XMLプロセサという。
XMLの構文と整形式XML文書整形式XML文書が満たすべき構文の規則を説明する。 整形式XML文書としての条件が満たされることのみを考慮する場合 (スキーマ言語を使わずに手軽にXMLを使う場合) においても、XMLは、大量の文書やもしくは木構造として表現することができるデータを格納するための、一般的な枠組みとしての役割を果たすことができる。 XML文書は、要素 (element) と属性 (attribute) が複数集まって、構成されている。 要素は内部に子要素を含むことができる。 属性は要素に付随し、属性の内部に子要素を含むことはできない。 要素は開始タグと終了タグで内容を挟むことで表現する。 開始タグは「<要素名>」、終了タグは「</要素名>」で記述する。 一つの要素を記述するための基本的な構文を次に示す。 <要素名 属性="値">内容</要素名> ここで、<要素名 属性="値"> をこの要素の開始タグといい、</要素名> を終了タグという。 「内容」は何らかのテキストである。 次に示す例は整形式XML文書である。 <書籍 出版日="2007-10-31">これは書籍です.... </書籍> この例は、書籍という要素を一つもつXML文書である。 要素の内容を構成するテキストはまた、さらに任意の数の要素を含むことができる (なお、このように一つの要素内に文字列データと子要素が混在するものを、「混合内容」と呼ぶ[7]) 。 すなわち、一般的なXML文書は木構造をなす。 この点において、XMLはプログラミング言語LISPのS式と似ている。 S式でも木構造を記述する。 S式の木構造のおのおのの節は、自分自身のプロパティリストをもつことができる。 要素は内部に別の要素を含むことができる。 構造化したXML文書の例を示す。 <レシピ 名前="パン" 準備時間="5分" 調理時間="3時間"> <料理>基本的なパン</料理> <材料 量='3' 単位='カップ'>小麦粉</材料> <材料 量='0.25' 単位='オンス'>イースト</材料> <材料 量='1.5' 単位='カップ' 状態="温かい">水</材料> <材料 量="1" 単位="ティースプーン">食塩</材料> <要領> <手順>全ての材料を一緒にして混ぜます。</手順> <手順>十分にこねます。</手順> <手順>布で覆い、暖かい部屋で1時間そのままにしておきます。</手順> <手順>もう一度こねます。</手順> <手順>パン焼きの容器に入れます</手順> <手順>布で覆い、暖かい部屋で1時間そのままにしておきます。</手順> <手順>オーブンに入れて温度を180℃にして30分間焼きます。</手順> </要領> </レシピ> 要素の属性の値は、必ずシングルクォート (') かダブルクォート (") で括らなければならない。 そして要素内にある属性は、互いに属性名が異なっていなければならない。 XML文書では要素は正しく入れ子になっていなければならない。 要素はけっしてオーバーラップしていてはならない。 例えば、次の文書は整形式XML文書ではない。 なぜなら <!-- 正しくありません! 整形式XML文書ではありません! --> <書籍目録> <書名>XML入門<著者>筒井<書名>続・XML入門<著者>小松</書名></著者></書名></著者> </書籍目録> 次の2つの文書は整形式XML文書である。 <!-- 正しい整形式XML文書です --> <書籍目録> <書名>XML入門</書名> <著者>筒井</著者> <書名>続・XML入門</書名> <著者>小松</著者> </書籍目録> <!-- もう一つの正しい整形式XML文書です --> <書籍目録> <書名>XML入門</書名> <著者>筒井<書名>続・XML入門<著者>小松</著者></書名></著者> </書籍目録> 整形式XML文書においては、XML文書は正確に一つのルート要素 (文書要素; document element とも呼ばれる) をもたなければならない。 ルート要素とは、XML文書の要素の階層構造において最上位の要素のことをいう。 最上位の要素は一つでなければならない。 最上位の要素が複数ある文書は、整形式XML文書ではない。 整形式XML文書が一つのルート要素をもたなければならないという条件が意味することは、整形式XML文書のテキストは、ルート要素の開始タグと対応する終了タグの間に、収められなければならないということである。 ルート要素の開始タグと終了タグの間に収められたテキストは、任意の数の要素や文字列データを含むことができる。 ルート要素の前に、必要に応じて、XML宣言 (XML declaration) をおくことができる。 このXML宣言は、XMLのどのバージョンが使われているか (現時点ではバージョン1.0であることが多い) などを示す。 XML宣言では、XMLのバージョンの他に、文字符号化方式 (文字コード) の指定や、他のXML文書との依存関係についての指定を、行うこともできる。
XML宣言を含んだXML文書の例を示す。 <?xml version="1.0" encoding="UTF-8"?> <書籍 出版日="2007-10-31">これは書籍です.... </書籍> XML仕様では、XMLプロセサ (XMLパーサ、XML文書の構文解析器) が、Unicodeの文字符号化方式であるUTF-8およびUTF-16で記述されたXML文書を処理できることを、必須条件としている (UCS-4は必須条件ではない) 。 XMLプロセサは、UTF-8およびUTF-16の他にも、いくつかの任意の文字符号化方式の文書を処理できるようにして良い。 例えば、UCS-4、EUC-JP、Shift_JIS、EBCDICなどの文字符号化方式の文書を処理できるXMLプロセサが、広く普及し、使われている。 コメントはXML文書の木構造のどこにでもおくことができる。 コメントは、"<!--" で始まり、"-->" で終わる。 なお、コメント内に "--" を含むことはできない。 コメントを含むXML文書の例を示す。 <書籍 出版日="2007-10-31"> <!-- これはコメントです.... --> これは書籍です.... </書籍> 内容のない要素を空要素 (empty element) という。 XMLでは、空要素を表現するために特別な構文を使うことができる。 開始タグを書きその直後に終了タグを書くこともできるが、その代わりに空要素のタグを使うことができるのである。 空要素タグは開始タグと似ているが、閉じ括弧の直前にスラッシュをおく。 次の3つの例は、XMLでは同等である。 <foo></foo> <foo/> <foo /> 空要素タグは属性を含むことができる。
<情報 著者="小松左京" 分類="サイエンスフィクション" 日付="2009-01-01"/>
多言語環境で使うXML文書ではどのUnicodeの文字も (XMLで特別な意味をもつ、開き山括弧 "<" のような文字を除いて) 、要素名として、属性名として、コメント内容として、文字データとして、処理命令 (後述) として、直接に使うことができる。 このため、漢字とキリル文字を共に含む次の文書も、整形式XML文書である。 <?xml version="1.0" encoding="UTF-8"?> <俄語>Данные</俄語> 文書型宣言XML文書 (あるいはSGML文書、HTMLウェブページを含む) において、文書型宣言 (DOCTYPE宣言、Document Type Declaration) は、その文書を特定の Document Type Definition (DTD) のスキーマと関連づけることを記述するものである。 なお、Document Type Definition (DTD) は、XMLで使うことができるスキーマ言語の一つである。 文書型宣言は、その文書が特定のスキーマに準拠していることを宣言する。 XML文書では文書型宣言を記述してもよいし、記述しなくてもよい。 DTDをスキーマ言語として妥当性検証を行うことを想定しているのであれば、文書型宣言の記述は必須となるであろう。 DTDで妥当性検証を行わない場合でも、後述する実体参照などを文書中で使うのであれば、文書型宣言において文書中で使う実体を宣言することができる。 文書型宣言は、その文書が特定のスキーマに準拠していること (妥当なXML文書であること) を、保証しているわけではない。 文書型宣言に記されたスキーマに準拠しているかどうかを判断するには、検証XMLプロセサでその文書を検証する必要がある。 文書型宣言の一般的な構文は次のとおりである。 <!DOCTYPE ルート要素名 [SYSTEM もしくは PUBLIC 公開識別子] 外部サブセット参照 [ <!-- 随意に内部サブセットを記述する --> ]> ここで外部サブセットとは、そのXML文書のDTDを構成する (要素の型の宣言、後述する実体の宣言などの) 宣言群のうち、別ファイルに記述された宣言群のことである。また内部サブセットとは、そのXML文書のDTDを構成する宣言群のうち、文書型宣言内に直接記述された宣言群のことである[8]。 XHTML 1.0 Strict に準拠したXML文書での文書型宣言は、次のとおりである。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XML文書においては、ルート要素がその文書の最初の要素である (例えば、XHTMLではルート要素は
内部サブセットは必要に応じて記述する。 内部サブセットとして、DTDの一部分もしくはDTDの全体を記述することができる。 なお、内部サブセットとしてDTDの全体を記述する場合は、 実体参照実体参照 (entity reference) は、実体を表現するプレースホルダである。 XMLにおける実体 (entity) とは、SGMLにおける実体と同じように、名前の付けられたデータの本体である。 具体的には、ファイルもしくは置換文字列のように、何らかの形でXML文書の一部となるデータを格納しているもののことである[9]。 置換文字列を使う事例としては、次のような場合がある。
実体参照の構成は、まず最初にアンパサンド (" XMLには、事前宣言された実体として次の表に示す5つの実体がある。
「AT&T」の名前でアンパサンドを表現するために、事前宣言されたXMLの実体を使う例を示す。 <会社名称>AT&T</会社名称> 事前宣言された実体以外の実体を宣言する必要がある場合、XML文書の Document Type Definition (DTD、文書型定義) の内部で宣言する。 XML文書の内部に定義されたDTDを使って、置換文字列としての実体を宣言して、実体参照を使う例を次に示す。 宣言された実体は、一つの文字であっても良いし、テキストの断片であっても良いし、他の実体への参照を含むテキストであっても良い。 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE 例 [ <!ENTITY copy "©"> <!ENTITY copyright-notice "Copyright © 2007 平成新報社"> ]> <例> ©right-notice; </例> XMLに準拠したブラウザを使うと、先のXML文書は次のように表示される。
Copyright © 2007 平成新報社
ファイルの実体を参照するXML文書の例を示す。 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE 文章 [ <!ENTITY tsutsui-yasutaka SYSTEM "another-file.xml"> ]> <文章> <文>星新一はSF作家である。</文> <文>小松左京はSF作家である。</文> &tsutsui-yasutaka; </文章> なお、別ファイル <文>筒井康隆はSF作家である。</文> XMLに準拠したブラウザでこのXML文書を表示すると、次のようになる。 星新一はSF作家である。小松左京はSF作家である。筒井康隆はSF作家である。 文字参照文字参照 (character reference) は、文字をXML文書内でコード番号を指定して記述する記法である。 文字参照は、実体参照と似ているが、実体参照では名前を使うのに対し、文字参照ではその部分で始めに " 文字参照で使う数字は、符号化文字集合の国際規格である ISO/IEC 10646 (およびUnicode) のコード番号である。 文字参照で使うことができる数字は、十進数であるか " <会社名称>AT&T</会社名称> <会社名称>AT&T</会社名称> 文字参照も参照 処理命令処理命令 (processing instruction) は、XML文書の構成要素であり、XML文書を扱うソフトウェアに対する何らかの処理を行う命令を、記述するものである。 次に処理命令の構文を示す。
<?処理命令ターゲット 処理内容?>
処理命令は ?> の文字列を除き任意の処理内容を記述することができる。 処理命令には、処理内容として擬似属性 (pseudo attribute) を記述することがある。 擬似属性は、記述のしかたが属性名と属性値のペアに似ている。 しかしXMLプロセサは擬似属性を、属性として解釈せず、処理命令の処理内容として解釈する。 擬似属性を使った処理命令の例を次に示す。 これはXML文書にカスケーディングスタイルシート (CSS) と関連づけるという処理命令である。
<?xml-stylesheet type="text/css" href="monobook.css"?>
あるXML文書内に記述された特定の処理命令について、その処理命令の意図したとおりの処理を実行するためには、そのXML文書を処理するアプリケーションソフトウェア側がその処理命令に対応する必要がある。 CDATAセクションXML文書 (およびSGML文書) においてCDATAセクションとは、文字列データのみで構成されておりマークアップされたデータは含まれていないと、XMLプロセサが解釈するようマークされた、要素の内容を構成する文字列データの一部である。 CDATAセクションは、文字列データを表現するための単なる代替構文である。 CDATAセクションとして宣言された文字列データと、" CDATAセクションの構文と解釈CDATAセクションは次の記述で始まる。
そしてCDATAセクションの内容が続き、次の記述が最初に出現したところでCDATAセクションは終わる。
CDATAセクションの内容の文字列は全て文字列データとして解釈され、マークアップや実体参照や文字参照として解釈されることはない。 次の例で「送信者」の開始タグと終了タグはマークアップとして解釈される。
しかし次のように記述した場合は、
次のように記述したものと同等に解釈される。
すなわち、「送信者」タグは「星新一」の文字列と同列に位置づけられ、いずれも文字列データとして解釈される。 文字参照 整形式XML文書を書くために整形式XML文書は、とりわけ、次に示す規則に適合しなければならない。
要素の名前ではアルファベットの大文字と小文字とが区別される。 例えば、次の例は整形式である。
しかし次の例は整形式ではない。
XML文書のスキーマを設計する際に、XMLの要素の名前を注意深く選択すると、そのスキーマに準拠したXML文書のデータの意味を、第三者に伝えるために有効であろう。 XMLの要素の名前を注意深く選択することにより、そのスキーマに準拠したXML文書は、人間にとって読みやすいものとなる。 XMLの要素と属性の名前を、体が名を表すように注意深く選択することで、人間がXML文書を読む際に、要素と属性の意味を、外部の説明文書を参照することなく、よりよく理解できるようになる。 ただしこのようにすることは、XML文書の冗長性が増えることでもある。 人によっては、XML文書を書く際の労力が増えることを、好まない場合がある。 またファイルサイズも大きくなることになる。 ただし圧縮技術をXML文書に適用してファイルサイズを小さくすることは可能である。 整形式XML文書を正確に書くためには、ここまで述べたことよりずっと多くの規則にしたがう必要がある。 例えば、XML名前空間を使うことや、XMLでの「名前」として使うことができる正確な文字集合を使って、XML文書を書くことなどである。 とはいえ、ここまで述べた整形式文書に関する概略を理解しておけば、多くのXML文書を読み理解しあるいは多くのXML文書を書くために必要な基礎は、身についたといえる。 自動的に検査するXML文書の正当性を自動的に検査するための方法を説明する。 あるXML文書が、整形式XML文書としての条件のみを満たした文書であるか、それとも妥当なXML文書としての条件をも満たした文書であるかを、判別することは、比較的容易である。 というのも、整形式XML文書であるための規則と、XMLの妥当性検証のしくみについては、XML文書を扱うツールの移植性を考慮して設計されているからである。 この設計方針は、XML文書を扱うツールであれば、どのようなXML文書でも扱うことができるということである。 独立したツールを使い、XML文書の正当性を自動的に検査する例を示す。
irb> require "rexml/document"
irb> include REXML
irb> doc = Document.new(File.new("test.xml")).root
XML文書の論理的構造と妥当なXML文書妥当なXML文書について詳しく説明する。 XMLでは、要素に名前を付けることができ、階層構造をとることができ、スキーマ言語 (Document Type Definition など) により用途に沿うように定義されたスキーマを使うことで要素と属性の意味を公開し説明することができる。 XMLのこうした特徴により、目的に応じたXMLに準拠したマークアップ言語を創るための、構文的な基礎が成り立っている。 スキーマは、制約の集合を記述することにより、XML文書の構文上の規則を単に補足するのみである。 スキーマは、多くの場合、要素と属性の名前を限定し、各要素が内容とするものの階層構造を規定し、属性の内容を規定する。 例えば、「誕生日」という名前の要素では、「月」という名前の一つの要素と「日」という名前の一つの要素をもつことができ、「月」要素と「日」要素のそれぞれは文字列データのみをもつことができる。 スキーマに定義された制約には、データ型の割り当てを含むことができる場合がある。 データ型を割り当てることにより、データ型が割り当てられた情報がどのように処理できるかを、規定することができる。 例えば、「月」要素の文字列データは、そのXML文書で採用したスキーマ言語の機能に準拠して、「1」から「12」までの数字のみが妥当であるという形で、定義することができる可能性がある。 ここでスキーマ言語の (データ型に関する) 機能とは、おそらく特定の方法で形式にしたがって記述しなければならないということだけでなく、別のデータ型の値であるかのように処理されることを未然に防ぐことを、意味する。 何らかのスキーマに準拠したXML文書は、整形式であるということに加えて、妥当 (valid) であるということができる。 XMLのスキーマは、XMLの文書型 (文書の種類、文書の論理的構造) を記述したものである。 多くの場合スキーマは、その文書の構造と内容に関する制約という形で表現される。 XMLのスキーマは、XML仕様で規定されている、整形式XML文書としての基本的な制約に加え、それ以上の制約をXML文書に課すことができる。 XMLのスキーマ言語は、標準規格のものもプロプライエタリなものも含めて、こうしたスキーマを表現するという目的のもと、数多く存在している。 いくつかのスキーマ言語では、スキーマ自身をXML文書として記述する。 スキーマ言語の記述能力はスキーマ言語ごとにさまざまである。 例えばスキーマ言語の一つである Document Type Definition (DTD) では、XML文書がとるべき構造の主な規則として、そのDTDに準拠したXML文書で使うことができる要素の名前、要素の内容モデル、要素で指定できる属性の名前、属性の値のデータ型を、記述することができる[10]。 なお、要素の内容モデルとは、要素の内容に出現可能な要素やデータとその順番、および要素の出現回数を規定したもののことをいう[11]。 Standard Generalized Markup Language (SGML) やXMLなどの汎用的なデータ記述言語が世に出る前は、ソフトウェア設計者は、複数のプログラムの間でデータの受け渡しをするために、自分自身でファイルフォーマットを定義するか、ちょっとしたコンピュータ言語を定義しなければならなかった。 このため受け渡しするデータの詳細な仕様やその他の文書を書かなければならなかったし、文書の書き手を別途に確保しなければならないこともあった。 XMLが一定の構造をもち厳密な構文解析の規則をもつことで、ソフトウェア設計者は構文解析を標準的なソフトウェアツール (妥当性検証器、バリデータ) に任せることができる。 そしてXMLには、用途に特有の言語を開発するための一般的な、データモデル指向の枠組みがある。 このためソフトウェア開発者は、比較的高水準の抽象度において、自分たちが扱うデータの規則の開発に専念するだけでよい。 XML文書をスキーマに照らして妥当性検証を行うための、十分にテストされたツールが、数多く存在している。 XML文書をスキーマに照らして妥当性検証を行うためのツールを、妥当性検証器 (バリデータ) という。 妥当性検証器は、スキーマに表現された制約にXML文書が準拠しているかについて、自動的に妥当性検証を行う。 妥当性検証器は、XMLプロセサ (XMLパーサ) に含まれていることもあれば、XMLプロセサとは別に提供されていることもある。 これまでに述べたスキーマの使い方とは別の使い方も存在する。 例えば、XMLエディタは、XML文書の編集を支援するためにスキーマを使うことができる。 こうしたXMLエディタでは、妥当な要素名や妥当な属性名を提示することなどができる。 Document Type Definition (DTD)詳細はDocument Type Definitionを参照 XMLのための最も歴史の古いスキーマ言語は Document Type Definition (DTD、文書型定義) である。 DTDは、XMLの前身であるSGMLから引き継がれた。 DTDは XML 1.0 標準に含められているため、ほとんどあらゆるXMLプロセサがDTDを扱うことができる。 しかし2007年現在ではDTDを使うことは限定的な範囲にとどまっているようである。 その理由は次のとおりである。
DTDは、現在も多くの用途で使われている。 その理由は、一定の人々にとっては、DTDは他の新しいスキーマ言語よりも読みやすく書きやすいと、考えられているからである。 XML Schema詳細はXML Schemaを参照 XML Schema は、World Wide Web Consortium (W3C) により開発された、DTDの後継となる新しいスキーマ言語である。 非公式には、XSDと呼ばれることもある。 XSDは、XML Schema のインスタンス (スキーマ) を意味する "XML Schema Definition" の頭字語である。 XML Schema は、XMLによるマークアップ言語のスキーマの記述能力において、DTDと比べて非常に強力である。 XML Schema は、豊富なデータ型を扱うことができるスキーマ言語である。 XML文書の論理的構造について、DTDより詳細な制約を記述することができる。 そしてDTDより詳細な妥当性検証の枠組みのもとで、妥当性検証が行われる。 XML Schema はまた、XML Schema によるスキーマ自体を、XMLに準拠した形式を使って記述する。 XML Schema のスキーマ自体がXMLに準拠することで、スキーマを編集したりスキーマに何らかの処理を行うために、普通のXMLツールを使うことができるようになる。 ただし、XML Schema の妥当性検証器を実装する作業には、単にXML文書を読むことができる能力よりも、非常に多くの知識と能力を必要とする。 XML Schema に対しては賛否両論がある。 XML Schema に対する批判の一部を示す。
RELAX NG詳細はRELAX NGを参照 RELAX NG は、人気のあるもう一つの新しいスキーマ言語である。 最初にOASIS (構造化情報標準促進協会) で仕様が策定された。 RELAX NG は、現在ではISO (国際標準化機構) の国際標準となっている。 ISOでは、文書スキーマ定義言語 (DSDL) の一部分を構成する仕様として位置づけられている。 RELAX NG のスキーマの記述方法は、2つの形式がある。 XMLに準拠した構文 (XML構文、xml syntax) と、XMLに準拠しない短縮構文 (compact syntax) である。 短縮構文は、読みやくすることとより書きやすくすることを目指している。 ただし、短縮構文で記述されたスキーマをXML構文のスキーマに変換する方法と、その逆の変換を行う方法は、しっかり定義されているので、ジェームズ・クラークが開発した Trang conversion tool を使えば、標準のXMLツールを使う利便を享受することができる。 RELAX NG は、XML Schema よりも簡潔なスキーマ定義と簡潔な妥当性検証の枠組みを、備えている。 そのため RELAX NG は、XML Schema と比べて、使いやすく、また RELAX NG の妥当性検証器を実装することも容易になっている。 RELAX NG もまた、データ型フレームワークプラグインを使う能力を備えている。 RELAX NG でスキーマを記述する人は、例えば、XML文書で XML Schema のデータ型の定義に適合させたいと考えるかもしれない。 そして RELAX NG では、データ型フレームワークプラグインを使うことにより可能となっている。 ISO 文書スキーマ定義言語詳細は文書スキーマ定義言語を参照 ISO 文書スキーマ定義言語 (DSDL; Document Schema Description Languages) 標準は、小規模なスキーマ言語の広範なセットを共に提供する。 DSDL を構成する複数の仕様のそれぞれが、特定の問題に対応するために特化されている。 DSDL は、 RELAX NG のXML構文と短縮構文、スキマトロン、データ型ライブラリ言語、文字レパートリ記述言語、文書スキーマ再命名言語、名前空間に基づく検証委譲言語 (NVDL) を、含んでいる。DSDLスキーマ言語群は、XML Schemas を支持するベンダの支援は2007年の時点ではまだ受けていない。 DSDLは、出版のための機能が欠如していることに対する、出版業界の一定の草の根の反応でもある。 XML文書を検証する過程でXMLインフォメーションセットを変更することについていくつかのスキーマ言語では、特定のXML文書の構造を記述する能力に加えて、個々のXML文書をその特定のXML文書構造に適合するように変換する機能も、限定的ながら備えている。 DTDと XML Schema はこの変換機能を備えている。 DTDと XML Schema では、XML文書に属性の既定値を与えることができる。 RELAX NG とスキマトロンは、意図的にこの機能を外している。 例えば、XMLインフォメーションセットを正確に扱うことが、RELAX NG とスキマトロンの仕様策定時に変換機能を外した理由の一つである。 XML文書を視覚的に表示するXML文書を視覚的に表示するための方法を説明する。 XML文書は、その文書の内容をどのように視覚的に表示するかという情報を、含んでいない。 Cascading Style Sheets (CSS) や Extensible Stylesheet Language (XSL) のようなXMLのためのスタイルシート言語を使うのでなければ、ほとんどのウェブブラウザは普通のXML文書を生のXMLテキストとして描画する。 いくつかのウェブブラウザは「ハンドル」をつけて表示する (例えば、余白に + と - の符号を表示する) 。 ハンドルを使うことにより、XML文書構造の部分木を、マウスクリックで展開したり折りたたんだりすることができる。 CSSを使ってウェブブラウザでXML文書を描画するためには、XML文書は次のような要領でスタイルシートへの参照を含めなければならない (XMLの処理命令を使ってスタイルシートを使って描画する旨を指定している) 。
<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>
この方法は、HTML文書におけるスタイルシート指定の方法とは異なる。 HTML文書では XML文書を視覚的に表示するために、Extensible Stylesheet Language (XSL、拡張可能なスタイルシート言語) を使うこともできる。 XSLを使う場合は、XML文書をXHTML/HTML文書の構造に変換するか、もしくはウェブブラウザで視覚的に表示することができる他の文書の構造に変換する。 クライアント側で XSL Transformations (XSLT) のスタイルシートを指定するためには、XML文書に次のようにXSLTスタイルシートへの参照を含めることが、必要である (XMLの処理命令を使って実現している) 。
<?xml-stylesheet type="text/xsl" href="myTransform.xslt"?>
クライアント側のXSLTスタイルシート処理機能は、現在では多くのウェブブラウザが備えている。 別の方法として、このようなエンドユーザのウェブブラウザの能力に依存する方法を採らずに、サーバ側でXSLを使ってXML文書を視覚化可能な形式に変換する方法も、行われている。 エンドユーザは、「舞台の裏側で」何が行われているかを、意識する必要はない。 エンドユーザが目にするものは、よく整形され視覚化された文書だけである。 XMLの拡張XMLを拡張する技術を説明する。
MIMEタイプXML文書はさまざまなMIMEタイプで配布することができる。 RFC 3023 は、"application/xml" および "text/xml" のMIMEタイプを定義する。 "application/xml" と "text/xml" のMIMEタイプは、そのデータがXML文書の形式をとっているということのみを述べているだけであり、そのXML文書の論理的構造については何も述べていない。 "text/xml" を使うことに対しては、符号化に関する問題が生じる可能性があるとの批判があり、現在では非推奨とされている[12]。RFC 3023 では、加えて、XML文書を "application/" で始まり、"+xml" で終わるMIMEタイプで配布することを勧めている。 例えば、AtomのXMLデータに対しては、"application/atom+xml" のMIMEタイプで配布するのである。 XML名前空間XML名前空間 (Namespaces in XML) は、一つXML文書内で、異なる複数のボキャブラリ (スキーマ) に由来する要素と属性を、名前の衝突を発生させることなく、含めることができるようにするための仕様である。 World Wide Web Consortium (W3C) から、1999年1月14日に Namespaces in XML 1.0 が勧告された。 XML文書に異なる複数のボキャブラリに由来する要素と属性を含める場合、ボキャブラリのそれぞれに名前空間をわりあてることにより、要素名の衝突と属性名の衝突の問題を、解決することができる。 一つの名前空間において定義された要素の名前は、一意でなければならない。 顧客への参照と注文された商品への参照を含む、簡単なXML文書の例を考える。 顧客要素と商品要素は、ともに「識別番号」という名前の子要素をもつことがあるだろう。 識別番号要素への参照は、顧客要素の子要素の識別番号要素も、商品要素の子要素の識別番号要素も、同じ要素名をもつので、あいまいである。 しかし2つのボキャブラリを区別する2つの名前空間のもとで、識別番号要素を使う場合、顧客要素の子要素の識別番号要素と、商品要素の子要素の識別番号要素は、意味的に明確に異なる2種類の要素となる。 名前空間の宣言名前空間は、XMLの予約属性である 例を示す。 xmlns="http://www.w3.org/1999/xhtml" この例の "http://www.w3.o | ||||||||||||||||||||||||||||||||||||||