Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 470

Ильдар Шаукатович Хабибуллин

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

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

$ xsv ntb.xml ntb1.xsd ntb2.xsd

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

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

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

<notebook xmlns:xsi="" xsi:noNamespaceSchemaLocation="ntb.xsd">

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

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

<notebook xmlns=""

xmlns:xsi="" xsi:schemaLocation=

" A.xsd B.xsd" xmlns:pr1="" xmlns:pr2="">

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

Другие языки описания схем

Даже из приведенного ранее краткого описания языка XSD видно, что он получился весьма сложным и запутанным. Есть уже несколько книг, полностью посвященных этому языку. Их объем ничуть не меньше объема этой книги.

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

□ Schematron — ;

□ RELAX NG (Regular Language Description for XML, New Generation), этот язык возник как слияние языков Relax и TREX — relax-ng/;

□ Relax — ;

□ TREX (Tree Regular Expressions for XML) — ;

□ DDML (Document Definition Markup Language), известный еще как XSchema — .

Менее распространены языки DCD (Document Content Description), SOX (One's Schema for Object-Oriented XML), XDR (XML-Data Reduced).