В спецификации по XML Schema описаны три способа подключения XML Schema, каждый из которых имеет свои особенности, и свою область использования:
Атрибут schemaLocation содержит пару значений, первое их которых задает пространство имен XML Schema, а второе - конкретизирует, где непосредственно расположен документ схемы. Например, нам нужно в XML документе, описывающем структуру Тверского государственного университета, подключить XML Schema, которая находится на сайте университета. Фрагмент соответствующего XML документа представлен ниже:
<tgu xmlns="http://www.tversu.ru/Structure" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.tversu.ru/Structure http://www.tversu.ru/Structure.xsd"> . . . . . . </tgu>
В представленном примере строка xsi:schemaLocation="http://www.tversu.ru/Structure" задает пространство имен, в котором определена XML Schema, а местоположение схемы непосредственно указано в следующей строке: http://www.tversu.ru/Structure.xsd. Такое задание схемы позволяет приложению четко, однозначно проверить содержание XML документа.
Однако спецификация XML Schema не требует обязательного задания пространства имен для схемы. В случае задания схемы без указания пространства имен используется атрибут noNamespaceSchemaLocation. Пример такого задания представлен фрагментом, аналогичным предыдущему, но с использованием атрибута noNamespaceSchemaLocation.
<tgu xmlns="http://www.tversu.ru/Structure" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.tversu.ru/Structure.xsd"> . . . . . . </tgu>
Как видим в данном случае, схема Structure.xsd не имеет целевого пространства имен, а применяемые имена, описываемые в схеме, не будут иметь префиксов. Задание XML Schema без использования пространства имен может вызвать у приложения конфликтное толкование некоторых ситуаций. Если пространство имен, описывающее стандартные имена, которые приняты в XML Schema, например element, complexType и т.д., объявлено по умолчанию, т.е. без префикса, то возникает неоднозначность. К какому пространству имен отнести данные имена, поскольку в схеме без префикса используются имена стандартного и пользовательского пространства имен.
В спецификации XML Schema для разрешения такой ситуации настоятельно рекомендуется объявлять стандартное пространство с указанием префикса, т.е. не по умолчанию, и в XML Schema всегда добавлять префикс для имен, входящих в стандартное пространство имен. Пример фрагмента XML Schema для иллюстрации данной ситуации представлен ниже.
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> . . . <xsd:element name="title" type="xsd:string"/> . . . </xsd:schema>
Для определения местоположения вставляемой схемы в элементе include используется атрибут schemaLocation. Данный атрибут содержит URI ссылку, которая указывает на схему. Пример применения элемента include представлен ниже.
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tgu="http://www.tversu.ru/Structure"> . . . <xsd:element name="title" type="xsd:string"/> . . . <include schemaLocation="http://www.tversu.ru/postAddress.xsd"/> . . . </xsd:schema>
В данном примере в начальную схему с помощью оператора include добавлена схема postAddress, описывающая правила задания почтовых адресов.
Элемент import по принципу подключения схемы аналогичен элементу include, но функционально он может описать подключаемую схему точно так же, как она описывается при подключении к XML документу (см. предыдущий раздел).
Элемент import имеет атрибуты namespace и schemaLocation правила использования которых полностью аналогичны правилам использования аналогичных атрибутов, описанных в предыдущем разделе.
Однако спецификация не требует от приложений обязательно использовать схему, указанную атрибутом schemaLocation. По сути дела это указание является только подсказкой приложению. В спецификации XML Schema в качестве примера приводится редактор HTML, который может иметь встроенную HTML схему, а не обращаться к указанной ему внешней схеме.