3.3.7 XML Schemaのインクルード
xsd:include要素を定義することで,同じ名前空間に属するXML Schemaをインクルードできます。
XML Schemaのインクルードの概念を次の図に示します。
(1) xsd:include要素の有効範囲
XML Schemaをインクルードすることで,インクルード対象のXML Schemaの要素および属性を参照できます。XML Schemaの型定義を参照する場合,同じファイル内に参照する型定義がなくても,型定義を記述したXML Schemaのファイルをインクルードすれば参照できます。
XML Schemaの要素および属性を参照できる場合の例を示します。
対象となるXML Schemaをインクルードしない場合は,別のファイルに記述されたXML Schemaの要素および属性を参照できません。また,別のファイルを介して,間接的にXML Schemaの要素および属性を参照することはできません。
XML Schemaの要素および属性を参照できない場合の例を示します。
(2) xsd:include要素の書式
xsd:include要素の書式と属性を示します。
- 書式
<xsd:include schemaLocation="インクルード対象のXML Schemaのファイル名"/>
- 属性
-
-
schemaLocation
インクルード対象のXML Schemaのファイル名を定義します。この属性の定義は必須です。
schemaLocation属性に定義できるのは相対パスだけです。したがって,絶対パスや,http://やftp://などのプロトコルで始まるURIは定義できません。また,相対パスにショートカットを含めることはできません。
相対パスを記述するときは,「3.3.6(2) xsd:import要素の書式」に記載された「相対パスに指定する文字に関する注意」の内容に注意してください。
-
(3) xsd:include要素の構文
xsd:include要素の構文,および定義時の注意事項を示します。
(a) xsd:include要素の記述位置
xsd:include要素は,次に示す規則に従って記述してください。
-
xsd:schema要素の子要素として記述してください。
-
xsd:annotation要素よりもあとに記述してください。
-
xsd:annotation要素およびxsd:import要素を除く,ほかのすべての要素よりも前に記述してください。
(b) インクルード対象のXML Schemaの定義
インクルード対象のXML Schemaでは,ルート要素をxsd:schema要素にしてください。また,インクルード対象のxsd:schema要素のtargetNamespace属性には,インクルード元のtargetNamespace属性と同じ値を定義してください。
(c) 複数のXML Schemaのインクルード
xsd:schemaの子要素にxsd:include要素を複数行記述することで,複数のXML Schemaをインクルードできます。ただし,ファイル名(schemaLocation属性の値)が重複した場合はインクルードできません。
(4) xsd:include要素の定義例
XML Schemaをインクルードする場合の定義例を示します。
-
DataInfo.wsdl(インクルード元)
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://dictionary.com" xmlns:intf="http://dictionary.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <wsdl:types> <xsd:schema targetNamespace="http://dictionary.com"> ... <xsd:include schemaLocation="Data.xsd"/> ... </xsd:schema> </wsdl:types> ... </wsdl:definitions>
-
Data.xsd(インクルード対象)
<?xml version="1.0" ?> <xsd:schema targetNamespace="http://dictionary.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType name="Data"> <xsd:sequence> <xsd:element name="date" nillable="true" type="xsd:string"/> <xsd:element name="title" nillable="true" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>