XSD с импортом и пространствами имен - PullRequest
6 голосов
/ 27 мая 2009

Привет. Я пытаюсь сосредоточиться на XSD, XML и пространствах имен, но не могу заставить вещи работать так, как я хочу.

У меня есть XSD, который в данный момент начинается так:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.example.com">
    <xs:import namespace="http://www.example.com" schemaLocation="Include.xsd" />

Как видите, он импортирует другой xsd-файл, который начинается следующим образом:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
           targetNamespace="http://www.example.com" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.example.com">

Тогда у меня есть несколько XML-документов на основе этой схемы:

<foobar>
    <whatever>....

По сути, мне все равно, что такое пространства имен, я просто хочу, чтобы эта чертова штука сработала. Раньше я не использовал никакого пространства имен, но мне кажется, что я должен использовать их, чтобы импортировать один XSD в другой. Чего я не хочу делать, так это добавлять префиксы ко всем элементам в моих XML-документах.

Чтобы достичь этого, какая комбинация значений мне нужна для различных атрибутов ( targetNamespace, namespace, xmlns, elementFormDefault и т. Д.) В документах XSD и XML?

В настоящее время любые элементы, определенные в импортированном документе XSD, требуют уточнения пространства имен в XML.

Ответы [ 2 ]

13 голосов
/ 27 мая 2009

Если вы не используете пространства имен или ваши схемы используют одни и те же пространства имен, вам будет гораздо лучше использовать xs: include, а не xs: import. Схема A может включать схему B, если B либо имеет то же пространство имен, что и A, либо не имеет объявленного пространства имен (если последнее имеет место, B «принимает» пространство имен включающего элемента, когда оно включено). Итак ... что-то вроде:

<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.example.com">
    <xs:include schemaLocation="Include.xsd" />

<!-- ... -->

</xs:schema>
1 голос
/ 27 мая 2009

Я бы подумал, что вам нужно установить свой elementFormDefault в "unqualified", если вы хотите избежать префиксов в ваших XML-элементах. Остальное должно быть в порядке, я думаю - пространство имен между вашим мастером и импортированным XSD одинаково - это нормально. Вы указываете xmlns = без префикса - это нормально. Вам должно быть хорошо идти.

Марк

...