スキーマ言語
スキーマは任意の言語で記述しうる。しかし汎用言語を流用する場合、その言語仕様によってスキーマの自由度が下がる場合がある。例えばC言語の構造体定義を用いてスキーマを定義した場合、属性の型がC言語のデータ型に制約されてしまう。これを避けるためには既存言語から中立なスキーマ記述に特化した言語を用いればよい。これがスキーマ定義言語である。
「スキーマ」とは本来データベースの構造定義であり、関係データベースの場合はテーブルの各項目のデータ型、他のテーブルとの関連性などを定義したものを指す。XML文書等では、同様にXMLで作成された各要素の互いの関連性や個々の文書全体での位置付け等の定義を指す。
本来、文書は構成要素の集合体であるが、一定の構造を持たなければ単なる要素の寄せ集めでしかなく、規則性や体裁といった構造を得て初めて意味のある有用な文書となる。XMLやSGMLは文書の各要素を作成するメタ言語であり、文書構造自体を定義する事はできない為、このままでは扱いにくい。そこで構造を定義する言語が必要となり、開発されたのがスキーマ言語である。 例えば、SGMLではDTDがスキーマ言語として使用されていた。XMLがSGMLから派生した関係からXMLでもDTDが使用されていたが、DTDは文法がXMLと全く異なっている事や、要素のデータ型を定義する事ができない事等から、新たに XML Schema や、RELAX、RELAX NG が開発されている。