Связь документа XML со своей схемой

Программе-анализатору, проверяющей соответствие документа XML его схеме, надо как-то указать файлы (один или несколько), содержащие схему документа. Это можно сделать разными способами. Во-первых, можно подать эти файлы на вход анализатора. Так делает, например, проверяющий анализатор XSV (XML Schema Validator) (ftp://ftp.cogsci.ed.ac.uk/pub/XSV/): $ xsv ntb.xml ntbl .xsd ntb2 .xsd

Во-вторых, можно задать файлы со схемой как свойство анализатора, устанавливаемое методом setProperty(), или значение переменной окружения анализатора. Так делает, например, проверяющий анализатор Xerces.

Эти способы удобны в тех случаях, когда документ в разных случаях нужно связать с разными схемами. Если же схема документа фиксирована, то ее удобнее указать прямо в документе XML. Это делается одним из двух способов.

1. Если элементы документа не принадлежат никакому пространству имен и записаны без префикса, то в корневом элементе документа записывается атрибут noNamespaceSchemaLocation, указывающий расположение файла со схемой в форме URI:

<notebook xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemabocation="ntb.xsd">

В этом случае в схеме не должно быть целевого пространства имен, то есть, не следует использовать атрибут targetNamespace.

2. Если же элементы документа относятся к некоторому пространству имен, то применяется атрибут schemaLocation, в котором через пробел перечисляются пространства имен и расположение файла со схемой, описывающей это пространство имен. Продолжая пример предыдущего раздела, можно написать:

<notbook xmlns="http://some. firm.com/2003/ntbNames"

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instarce xsi:schemaLocation="http://some. firm.com/sameNames A.xsd

http://some.firm.com/anotherNames В. xsd"

xmlns: pr1="http://some. firm. com/someNames"

xmlns:pr2="http: //some. firm.com/anotherNames">

После этого в документе можно использовать имена, определенные в схемах A.xsd и B.xsd, снабжая их префиксами prl и рг2 соответственно.