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