Для ссылки на другую схему принято, чтобы эта схема была локальной по отношению к "основной" схеме, на которую вы ссылаетесь.Например, чтобы импортировать схему, которая определяет некоторые повторно используемые типы:
<xs:import namespace="http://CommonTypesNamespace/CommonTypes"
schemaLocation="CommonTypes.xsd"/>
Это в основном говорит о том, что существует схема с именем 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">
Это говорит о том, что я хочу сделать типы из моих общихсхема доступна в моей основной схеме с использованием префикса пространства имен "common".
Затем, например, для ссылки на общий тип "Address":
<xs:element name="DeliveryAddress" type="common:AddressType" />
Это говорит о том, что мой тип адреса доставкина самом деле это тот же тип, что и AddressType , определенный в схеме общих типов.
Примечание: schemaLocation также может использоваться с URI-адресами, абсолютными или UNC-путями или не использоваться вообще, потому что это совершенно необязательноприписывать.Если вы не используете schemaLocation, ваш синтаксический анализатор, скорее всего, будет сканировать локальные каталоги в поисках схемы с определенным правильным пространством имен, но это зависит от реализации.