XMLのDTDとスキーマについて

曖昧だったので再確認。

XML文書には、2つの形式があります。well-formedとvalidです。

well-formed 形式は、日本語で整形式とよばれます。XML宣言があり、要素がきちんと入れ子構造になっているなど、ごく基本的な形式が整えられているXML文書のことを指します。よって、well-formed XML文書には、DTDがない場合があります。
(略)
それでは、整形式のXML文書というものがなぜ、必要なのでしょうか。XMLの親言語であるSGMLにおいては、基本的に、DTDを明示することが原則でした。しかし、実際にSGMLでは、多くの事例において、互いに矛盾する経験的な規範が存在するなどの理由で厳密な規定を策定できないという問題がおきていました。そのため、DTDによる厳密な規定を必須とすることが弊害になっていました。また、XMLDTDが記述されている場合、XMLプロセッサは文書を解釈する前にXML文書の構造を把握することができ、DTDに従わない記述があった場合、エラーを返します。しかし、場合によっては、このような厳密な定義を逐一解釈するのは、冗長にも思われます。XMLでは、このような問題を、DTDを含まない文書も許すということで、解決しています。これにより、SGMLより柔軟な言語であるといえます。
DTDXMLの基本XML -TECHSCORE-

DTDは、 DOCTYPE宣言によって定義されます。

DOCTYPE宣言は ''で終わります。次にDOCTYPE、スペースに続いて、ルート要素の名前が記述されます。XMLプロセッサはこの記述よりルート要素を認識し、データの木構造の解析を行います。それに続くのが、XMLの構造を記述する部分となります。この部分は、マークアップ宣言と呼ばれ、以下の4つの種類があります。
DTDXMLの基本XML -TECHSCORE-

app engineのweb.xmlはDOCTYPE宣言がない=DTDがないので、上記の定義だとwell-formedに該当するようです。

たけち: そうだね。でも、これからはDTDに代わってSchema(スキーマ)が使われることになるんだ。
さらら: えぇ〜!! 何それ〜。せっかく勉強したのに・・・
たのしいXML: Schema(スキーマ)

たけち: XMLの応用を広く考えると、DTDにはいくつかのまずい点があるんでSchemaで改善されたんだ。

Schemaで改善した主な点

データ型を指定できる
DTDでは、#PCDATAという任意の文字列を示す型なのでデータ処理には不向きでしたが、数値型や日付型などの指定ができるようにしました。
要素の出現回数を細かく指定できる
DTDでは、0回以上・1回以上・・・でしたが、Schemaでは、1〜2回とか0〜99回というように指定できます。
XMLテキストとして表現する
DTDは、特別な書式でしたがSchemaはXMLテキストとして表現します。
namespace(名前空間)が使える
DTDではnamespaceが使えません。Schemaでは複数のnamespaceの要素を利用できるようにしました。
たのしいXML: Schema(スキーマ)

さらら: わかったわ!
xsi:schemaLocation="http://www.yuragi.jp/ns/manyouPoem mp.xsd"
 という属性の中にmp.xsdと書いてあるから、ここでスキーマファイルを指定しているのね。

たけち: そのとおりだよ(^ ^)
たのしいXML: Schema(スキーマ): xsi:schemaLocationとxsi:noNamespaceSchemaLocation(1)

名前空間によるスキーマの指定

これまでつくってきた XML Schema によるスキーマを見てみましょう。



...

スキーマXML文書ですから、名前空間を使うことができて、 実は名前空間の指定をしていました。 このスキーマでは、XML Schema の仕様で定められた要素を xsd:element などと xsd を前につけて使っていましたが、これが名前空間の指定です。



...

名前空間の指定は、root要素である xsd:schema 要素の xmlns 属性で行っています。 XML Schema名前空間の名前は http://www.w3.org/2001/XMLSchema で、 これは長いので xsd という別名をつけています。
XMLにおける名前空間 - データ記述とXML