Лучше меньше, да лучше
Листинг 3 - это включение отнюдь не всего файла. В данном примере для WSDL требуются определения элемента из файла схемы, и поэтому для извлечения этого подмножества из всей схемы в Листинге 3 используется XPointer. В XPointer определено несколько схем для таких извлечений. Схема xmlns(...) определяет отображение пространств имен, а схема xpointer(...) задает выражения, которые определяют, какое подмножество документа будет использоваться. XPointer опирается на XPath, и выражение /xs:schema/* означает тоже самое, что и в XPath - то есть выбираются только потомки элемента xs:schema.
Важное замечание. Данный синтаксис XPointer соответствует требованиям Рабочей версии спецификации XPointer от 10 ноября 2003г., однако, он отличается от прежнего способа выражения XPointer в XInclude. Автор выяснил, что инструментальные средства пока еще не поддерживают последний вариант, и поэтому читателю, возможно, какое-то время придется пользоваться более ранней редакцией. Листинг 4 - эквивалент Листинга 3, записанный в соответствии с прежним синтаксисом XPointer.
Листинг 4. Вариант Листинга 3, в котором используются более ранний синтаксис XPointer
<types xmlns:xi="http://www.w3.org/2001/XInclude"> <schema> <xi:include href="http://example.com/labels.xsd# xmlns(xs=http://www.w3.org/2001/XMLSchema) xpointer(/xs:schema/*)" /> </schema> </types>
Примечание. Часть, начинающаяся с "xmlns(", обычно располагается сразу после знака "решетка", а не со следующей строки, однако, для удобства восприятия отформатированного текста после этого знака был добавлен символ разрыва строки.