すのふら

日々の備忘録

XMLについて勉強する

JSONは使用したことがあったけど、XMLの知見が全くなかったので、調べたことをメモしておく。

wikipediaベースで調べていったので、引用のURLがなければWikipediaから引用している。 Extensible Markup Language - Wikipedia

そもそもXMLとは

EXTENSIBLE MARKUP LANGUAGEの略称。

基本的な構文規則を共通とすることで、任意の用途向けの言語に拡張することを容易としたことが特徴のマークアップ言語の総称である。

基本概念

個別の目的に応じたマークアップ言語群を創るために汎用的に使える。


XMLはその「入れ子状にタグで囲まれたもの」という構文を共通としたことで、拡張が用意であるとして「extensible」と主張している


しばしば「あらゆる目的に使える」などと主張されるが、基本的に入れ子構造(木構造)であって、より入り組んだネットワーク構造(グラフ構造)を直接扱うことは不可能である(XLinkなどの提案はあるが)。

つまり、

  • XMLマークアップ言語である。
  • 基本的にHTMLタグと同じルールで<>...で囲う必要があるし、<body><h2></h2></body></span>みたいに入れ子にしないといけない。
  • XPathRSS*1等別規格を拡張することが可能である。

目的

インターネットを介して、構造化文書や構造化されたデータの共有を、容易にすることである。 XMLを使うと、文書を構造化して記述できるし、コンピュータのデータを直列化 (シリアライズ) できる。

XMLはファイル拡張子でもあるので、ファイルの共有が容易にしたいという点。
文書の書き方があるので構造化されていて、可読性があるしデータをひとつの固まりにできる。

結局、データの受け渡しを簡単にしたい、文書は構造化したい、ある程度タグ(構造)は自由にしたいという3点が目的のよう。
「データの受け渡しを簡単にしたい、文書は構造化したい」あたりはJSONとおなじようなもんだなーと。

スキーマ言語

XMLスキーマ言語を定義しなくてはいけない。

スキーマ言語というのは

「このXMLファイル(とかSGMLファイルとか)は、こんな構造になっていますよ」が書いてあるファイルの、書き方ルール

https://wa3.i-3-i.info/word13412.html

「ある程度タグ(構造)は自由にしたい」と記載した通り自由にやれるんだけど、可読性を考えたときにこれがどういうルールで書かれているのかが分からないとそもそも読めないので、事前にどういうルールなのかを記載しておこうねっていうもの。

そのスキーマ言語は Document Type Definition (DTD、文書型定義)、W3C XML SchemaRELAX NG (文書スキーマ定義言語: DSDL)などがあるよう。
メインはどころはDTDになるのかね。

Document Type Definition - Wikipedia

整形式XML文書と妥当なXML文書

書かれたXMLが正しいかどうかのチェック水準として2つの水準が存在。

整形式XML文書

整形式XML文書 (well-formed XML document) は、XMLの構文の規則のすべてに準拠している。例えば、文書中のある要素が開始タグが有るが対応する終了タグが欠落している場合、その文書は整形式 (well-formed) ではない。整形式ではない文書はXML文書とはみなされない。

要は文章内の構文チェックか。タグの記載がミスってるとコンパイルエラー起きるのでXML文書として扱わないよってことかな。

妥当なXML文書

妥当なXML文書 (valid XML document) は、整形式XML文書としての条件を満たしていることに加えて、文書の論理的構造を規定する何らかの規則に準拠している。このような規則は、RELAX NGXML Schema、Document Type Definition (DTD) などのスキーマ言語で定義されたスキーマで定める。例えば、あるXML文書がスキーマに定義されていない要素 (タグ) を含んでいた場合、検証XMLプロセサは、そのXML文書を処理することはできない。検証XMLプロセサによって検証されたXML文書は、妥当 (valid) であると位置づけられる。なお、妥当な文書であっても、非検証XMLプロセサでは実体の定義を確認しないため、仕様で定められている実体参照(<、>など)以外の私的な実体参照を用いている場合、非検証XMLプロセサは当該実体を参照できず致命的なエラーとなる。

これはタグの記載はミスっていないけど、DTD上のルールに沿っていない場合かな。
実行時のコンパイルは通るけど、いざ実行する際にDTDルールに沿っていないからうまく読み取れないので、XML文書として扱わない。

整形式XML文書と妥当なXML文書の範囲

各文書で記載している通り、整形式XML文書がきちんとできていて、次にその文書がちゃんとルール通りだよねという観点での確認となる。

図で表すと以下となる。
f:id:snofra:20180818123228g:plain
@IT:やさしく読む「XML 1.0勧告」 第4回 XML仕様書で使われる言葉の意味

XMLを読む

以下のサイトに記載されている例を見る限り

www.atmarkit.co.jp

<?xml version='1.0'?>
<!DOCTYPE document [ ... ]>
<document> 記載したい内容 </document>

この流れで構成されているよう。

DTD部の一般的な構成は以下のよう。

<!DOCTYPE ルート要素名 [SYSTEM もしくは PUBLIC 公開識別子] 外部サブセット参照 [ ]>

そのほか参照サイト

www.slideshare.net

kaihooo.com

slidesplayer.net

*1:Extensible HyperText Markup Language (XHTML)、DocBook、RSS、Mathematical Markup Language (MathML)、ebXML、Scalable Vector Graphics (SVG)、MusicXML etc