Hitachi

Cosminexus V11 アプリケーションサーバ SOAPアプリケーション開発の手引


3.3.6 XML Schemaのインポート

xsd:import要素を定義することで,同じWSDL内のXML Schema,および別ファイルのXML Schemaをインポートできます。XML Schemaのインポートでは,異なる名前空間に属するXML Schemaをインポートできます。

XML Schemaのインポートの概念を次の図に示します。

図3‒10 XML Schemaのインポート

[図データ]

なお,名前空間「http://www.w3.org/2001/XMLSchema」はインポートしないでください。

〈この項の構成〉

(1) xsd:import要素の有効範囲

XML Schemaをインポートすることで,インポート対象のXML Schemaの要素および属性を参照できます。XML Schemaの型定義を参照する場合,同じファイル内に参照する型定義がなくても,型定義を記述したXML Schemaのファイルをインポートすれば参照できます。

XML Schemaの要素および属性を参照できる場合の例を示します。

図3‒11 XML Schemaの要素および属性を参照できる場合(インポート)

[図データ]

対象となるXML Schemaをインポートしない場合は,ほかの名前空間に属するXML Schemaの要素および属性を参照できません。また,別のファイルを介して,間接的にXML Schemaの要素および属性を参照することはできません。

XML Schemaの要素および属性を参照できない場合の例を示します。

図3‒12 XML Schemaの要素および属性を参照できない場合(インポート)

[図データ]

(2) xsd:import要素の書式

xsd:import要素の書式と属性を示します。

書式
<xsd:import namespace="インポートする名前空間のURI"
           [schemaLocation="インポート対象のXML Schemaのファイル名"]/>

注 [ ]は定義を省略できることを表します。

属性
  • namespace

    インポート対象のXML Schemaが属する名前空間のURIを定義します。この属性の定義は必須です。

  • schemaLocation

    インポート対象のXML Schemaのファイル名を定義します。同じWSDLファイル内のXML Schemaをインポートする場合,および次のURIをインポートする場合は,この属性の定義を省略します。

    ・http://schemas.xmlsoap.org/soap/encoding/

    ・http://www.w3.org/2003/05/soap-encoding

    ・http://xml.apache.org/xml-soap

    ・http://ws-i.org/profiles/basic/1.1/xsd

    schemaLocation属性に定義できるのは相対パスだけです。したがって,絶対パスや,http://やftp://などのプロトコルで始まるURIは定義できません。また,相対パスにショートカットを含めることはできません。

相対パスに指定する文字に関する注意
  • 相対パスに指定する文字の使用可否を次の表に示します。次の表にない文字を使用する場合は,パーセントエンコードする必要があります。

    表3‒7 相対パスに指定する文字の使用可否

    分類

    文字

    そのまま使用できる文字

    (指定時にパーセントエンコード不要)

    半角英数字(A〜Z,a〜z,0〜9)および次の文字

    - . _ ~ /

    使用できない文字

    (パーセントエンコードしても指定不可)

    半角スペースおよび次の文字

    ? : * % | < > " [ ] & +

  • 「#」はパーセントエンコードすると指定できます。ただし,ファイル名の先頭には指定できません。

  • 相対パスに指定した文字は,大文字と小文字は区別されません。

  • パーセントエンコードした文字の16進コード(%xx)のAからFは,大文字を使用してください。

  • パーセントエンコードする場合,正しくパーセントエンコードされているか確認してください。不完全な文字列は指定できません。

(3) xsd:import要素の構文

xsd:import要素の構文,および定義時の注意事項を示します。

(a) xsd:import要素の記述位置

xsd:import要素は,次に示す規則に従って記述してください。

  • xsd:schema要素の子要素として記述してください。

  • xsd:annotation要素よりもあとに記述してください。

  • xsd:annotation要素およびxsd:include要素を除く,ほかのすべての要素よりも前に記述してください。

(b) インポート対象のXML Schemaの定義

インポート対象のXML Schemaでは,ルート要素をxsd:schema要素にしてください。また,インポート対象のxsd:schema要素のtargetNamespace属性は,次に示す規則に従って記述してください。

  • インポート元のxsd:import要素のnamespace属性と同じ値を定義してください。

  • インポート元のtargetNamespace属性と異なる値を定義してください。

(c) 複数のXML Schemaのインポート

xsd:schemaの子要素にxsd:import要素を複数行記述することで,複数のXML Schemaをインポートできます。

schemaLocation属性の値が異なれば,namespace属性の値がそれぞれ同じ場合でも,異なる場合でもインポートできます。schemaLocation属性の値が同じ場合は,どちらもインポートできません(schemaLocation属性の値が同じxsd:import要素は複数行記述できません)。schemaLocation属性を省略する場合は,namespace属性の値が同じxsd:import要素を複数行記述できません。

(4) xsd:import要素の定義例

別ファイルのXML Schemaをインポートする場合,および同じWSDL内のXML Schemaをインポートする場合の定義例を示します。

(a) 別ファイルの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:import namespace="http://date.dictionary.com" schemaLocation="Date.xsd"/>
          ...
        </xsd:schema>
      </wsdl:types>
      ...
    </wsdl:definitions>
  • Date.xsd(インポート対象)

    <?xml version="1.0" ?>
    <xsd:schema targetNamespace="http://date.dictionary.com"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     
      <xsd:complexType name="DateInfo">
        <xsd:sequence>
          <xsd:element name="fromDate" nillable="true" type="xsd:string"/>
          <xsd:element name="toDate" nillable="true" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
     
    </xsd:schema>

(b) 同じWSDL内のXML Schemaをインポートする場合

<?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"
     xmlns:tns2="http://date.dictionary.com"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
      <xsd:import namespace="http://date.dictionary.com"/>
 
      <xsd:complexType name="Data">
        <xsd:sequence>
          <xsd:element name="date" nillable="true" type="tns2:DateInfo"/>
          <xsd:element name="title" nillable="true" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
 
    <xsd:schema targetNamespace="http://date.dictionary.com"
     xmlns="http://www.w3.org/2001/XMLSchema">
      <xsd:complexType name="DateInfo">
        <xsd:sequence>
          <xsd:element name="fromDate" nillable="true" type="xsd:string"/>
          <xsd:element name="toDate" nillable="true" type="xsd:string"/>
        </xsd:sequence>
      </xsd:complexType>
    </xsd:schema>
  </wsdl:types>
  ...
</wsdl:definitions>