XML スキーマ妥当性検査および無視できる空白文字
XML スキーマ妥当性検査では、無視できる空白文字が文書から除去されます。
XML 標準によれば、空白文字 とは、読みやすさを促進するために文書中に置かれたスペース文字 (U+0020)、復帰 (U+000D)、改行 (U+000A)、またはタブ (U+0009) のことを指します。 これらの記号がテキスト・ストリングの一部として出現する場合には、それは空白文字としては扱われません。
無視できる空白文字 は、XML 文書から除去できる空白文字です。 XML スキーマ文書は、どの空白文字が無視できる空白文字であるかを決定します。 XML 文書が要素のみの複合タイプ (他の要素だけを含む要素) を定義している場合、要素同士の間の空白文字は無視できます。 XML スキーマがストリング以外のタイプを含む単純な要素を定義している場合、その要素内の空白文字は無視できます。
例: サンプルの product.xsd XML スキーマ文書内にある
description 要素は、次のように定義されています。<xs:element name="description" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="0" />
<xs:element name="details" type="xs:string" minOccurs="0" />
<xs:element name="price" type="xs:decimal" minOccurs="0" />
<xs:element name="weight" type="xs:string" minOccurs="0" />
…
</xs:complexType>
</xs:element>description 要素は他の要素しか含んでいないので、要素のみの複合タイプとなります。 そのため、description 要素では、要素同士の間の空白文字は無視できる空白文字です。 price 要素も、ストリング以外のタイプを含む単純な要素なので、無視できる空白文字を含むことがあります。
スキーマ PRODUCT が XML スキーマ・リポジトリー (XSR) に登録されているとします。
次のように表 MYPRODUCT を作成すると仮定します。
CREATE TABLE MYPRODUCT (
PID VARCHAR(10) NOT NULL PRIMARY KEY,
NAME VARCHAR(128),
PRICE DECIMAL(30,2),
PROMOPRICE DECIMAL(30,2),
PROMOSTART DATE,
PROMOEND DATE,
DESCRIPTION XML) 以下の文書を MYPRODUCT 表の XML 列 DESCRIPTION に
挿入し、この XML データを MYPRODUCT 表と同じデータベース・サーバー上の
XML スキーマ・リポジトリーにある XML スキーマ文書 product.xsd と照合して
妥当性検査するとします。
<product xmlns="http://posample.org" pid="110-100-01" >
<description>
<name>Anvil</name>
<details>Very heavy</details>
<price> 9.99 </price>
<weight>1 kg</weight>
</description>
</product>保管されたデータを取り出すと、XML スキーマ妥当性検査処理で
無視できる空白文字を除去したことを確認できます。 取り出したデータは、次の内容の単一の行です。
<product xmlns="http://posample.org" pid="110-100-01"><description><name>Anvil
</name><details>Very heavy</details><price>9.99</price><weight>1 kg</weight>
</description></product>PRODUCT スキーマは、
name、details、price、
および weight エレメントの前後に空白文字を定義しており、
price エレメント内の空白文字も無視できる空白文字として定義しているため、XML スキーマ妥当性検査は空白文字を
除去します。