Основы обращения к схеме xsd из другой схемы - PullRequest
16 голосов
/ 19 ноября 2011

Мы пишем новую схему xsd, которая будет основана на другой схеме и ссылается на нее (которая является отраслевым стандартом де-факто для данных GPS под названием GPX). Наша схема будет использоваться при проверке документов, сгенерированных нашими клиентами, и при тестировании. Мне нужно лучше понять, как ссылаться на базовую схему из нашей новой схемы, особенно с учетом того, что наши системы не должны иметь подключение к Интернету.

Насколько я понимаю, ссылки на документы xsd на каком-либо другом сервере, как правило, существуют, чтобы разработчик мог получить документ во время разработки, но во время проверки во время выполнения системы было бы разумно иметь локальную копию схемы, поскольку это не стоит благоразумно зависать на производстве просто потому, что удаленный сервер был недоступен. Это правильно?

Итак, если это так, ожидает ли xsd, что я буду ссылаться как на удаленную базовую схему xsd, так и на имя и расположение некоторой локальной копии схемы? Или такая ссылка не нужна в моем новом файле схемы? Надеюсь, что это имеет смысл. Благодарю.

1 Ответ

28 голосов
/ 20 ноября 2011

Для ссылки на другую схему принято, чтобы эта схема была локальной по отношению к "основной" схеме, на которую вы ссылаетесь.Например, чтобы импортировать схему, которая определяет некоторые повторно используемые типы:

<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, ваш синтаксический анализатор, скорее всего, будет сканировать локальные каталоги в поисках схемы с определенным правильным пространством имен, но это зависит от реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...