別のスキーマを参照するには、そのスキーマを参照元の「メイン」スキーマのローカルスキーマにするのが一般的です。これは基本的に私のメインのスキーマと同じディレクトリにありますCommonTypes.xsdと呼ばれるスキーマが存在すると言っている
<xs:import namespace="http://CommonTypesNamespace/CommonTypes"
schemaLocation="CommonTypes.xsd"/>
:例えば、いくつかの再利用可能なタイプを定義するスキーマをインポートします。 schemaLocation
属性は、参照しているスキーマからの実際のスキーマファイルへの相対パスとして使用されます(注:これも完全にオプションです - この回答の下の私の注記を参照してください)。
CommonTypes.xsd内部のタイプを使用するには、私が最初に私のメインのスキーマ宣言で一般的なタイプの名前空間を追加します。
<xs:schema targetNamespace="http://MyNamespace/MyTypes"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:common="http://CommonTypesNamespace/CommonTypes">
これは私が私の中に私の共通のスキーマからの型を利用できるようにしたいと言っていますメインスキーマは、名前空間接頭辞「共通」を使用します。
<xs:element name="DeliveryAddress" type="common:AddressType" />
これは私の配信アドレスの種類が一般的なタイプのスキーマで定義されAddressTypeにと同じタイプが実際にあることを言う:
そして、例えば、「住所」、共通のタイプを参照します。
注:schemaLocationはURI、絶対パス、またはUNCパスでも使用できます。まったくオプションの属性であるため、まったく使用できません。 schemaLocationを使用しない場合、パーザは正しい名前空間を持つスキーマを検索するローカルディレクトリをスキャンしますが、これは実装に依存します。
実際、 'schemaLocation'は、その名前空間を持つスキーマの場所に関するオプションのヒントにすぎません。プロセッサーはそれが見えるように自由に無視します。 – skaffman
厳密な定義ではなく規約に基づいていますか?私はそれが以前何度もこのように行われてきたことを見てきました。 –
実装の中には他の実装よりも厳しいものもありますが、XML Schema仕様では非常にオプションです。 – skaffman