第6章 Office Open XML Language Reference

スキーマ定義について

実際に機能する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が利用されます。

sequence
<xsd:complexType name="CT_Captions">
< xsd:sequence>
  <xsd:element name="caption" type="CT_Caption" minOccurs="1" maxOccurs="unbounded"/>
  <xsd:element name="autoCaptions" type="CT_AutoCaptions" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
choice
...
<xsd:choice>
  <xsd:element name="r" type="CT_RegularTextRun"/>
  <xsd:element name="br" type="CT_TextLineBreak"/>
  <xsd:element name="fld" type="CT_TextField"/>
</xsd:choice>

union

Simple Typeで「A型またはB型の値」といった複数の型の値を許容する型を定義するにはunionを使用します。

restriction、extension

restriction要素のbase属性に指定した型に、追加の制約を定義します。

OOXMLで頻出するのは、xsd:string型をbaseとして特定の文字列のみ指定可能にする制約です。

追加の制約の例
<xsd:simpleType name="ST_VerticalAlignRun">
  <xsd:restriction base="xsd:string">
  <xsd:enumeration value="baseline"/>
  <xsd:enumeration value="superscript"/>
  <xsd:enumeration value="subscript"/>
</xsd:restriction>

ST_VerticalAlignRunでは、xsd:stringに制約を追加し、指定可能な値がbaseline、superscript、subscriptに限られていることが分かります。他、patternでの指定、minLength、maxLengthによる長さの制限などが存在します。

既存の型定義を拡張して型を定義する場合、extension要素を使用します。

use

スキーマのuse属性は、その記述が必須(required)か任意(optional)かを定義しています。Language ReferenceにおけるUseのrequired、optionalと同義です。