2009-05-27 3 views
6

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

У меня есть 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>.... 

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

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

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

+0

ли на самом деле начать свой документ с meaninging есть элемент «XML», определенный в одном из схем, или вы имеете в виду документ начинается с ? – Jherico

+0

Я имел в виду, что корень был xml - я исправил его, чтобы избежать путаницы. – cbp

ответ

13

Если вы не используете пространство имен или ваши схемы одни и те же пространства имен, то было бы гораздо лучше использовать хз: включать, а не хз: импорт. Схема 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> 
+0

ahhh прямо! благодаря – cbp

1

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

Марк

+0

Спасибо, ты прав. Я был ближе, чем думал. Однако я обнаружил, что когда я создаю свой XML-документ, элементы, определенные в импортированном XSD, требуют указать пространство имен (хотя и импортированный XSD, и фактический XSD каждый имеют значение elementFormDefault, установленное как «неквалифицированное»). – cbp

Смежные вопросы