スキーマ定義について
実際に機能するOOXMLアプリケーションを作成する場合、付録であるスキーマ定義なども適宜参考にする必要が生じます。OOXMLのスキーマ定義の基本を紹介します。
OOXMLではRELAX NGでのスキーマ定義も用意されていますが、仕様としてはXML Schemaのものが正式です。
SimpleTypeとComplex Type
XML Schemaでは文書構造における型を、単一の型であるSimple Typeと、複数の型から成るComplex Typeによって表現します。Complex
Typeは複数のSimple Typeの他、複数のComplex Typeによって構成されます。
主に属性はSimple Type、子孫を持つような要素はComplex Typeで定義します。
OOXMLで定義されるスキーマの名称で、プレフィックスに「ST」の付くものがSimple Typeに属する型です。同様に「CT」の付く型はComplex Typeに属します。
element、attribute
記述可能な要素はelement、属性はattributeで示します。
Complex Typeに登場する要素については、記述順序も確認する必要があります。後述するsequence、choiceで順序については定義されます。
attributeの順序はXMLの仕様上ありません。
sequence、choice
子孫の要素の登場順が決まっている場合、sequenceで定義します。
要素のいずれかが登場する場合、choiceで定義します。自由な順序で登場する複数の要素がある場合にもchoiceが利用されます。
union
Simple Typeで「A型またはB型の値」といった複数の型の値を許容する型を定義するにはunionを使用します。
restriction、extension
restriction要素のbase属性に指定した型に、追加の制約を定義します。
OOXMLで頻出するのは、xsd:string型をbaseとして特定の文字列のみ指定可能にする制約です。
ST_VerticalAlignRunでは、xsd:stringに制約を追加し、指定可能な値がbaseline、superscript、subscriptに限られていることが分かります。他、patternでの指定、minLength、maxLengthによる長さの制限などが存在します。
既存の型定義を拡張して型を定義する場合、extension要素を使用します。