2013-06-11 3 views
0

Я хотел бы иметь массив файлов в одном пространстве имен для простоты и потому, что они концептуально связаны между собой. У меня есть основной или центральный xsd, который будет включать в себя другие файлы схемы и в основном служит глобальным корневым элементом. Моя проблема лучше всего проиллюстрировать на примере, но я в принципе не могу получить нецентральную схему для проверки, и это проблема пространства имен:Как создать однородное пространство имен Конструктивные согласованные XSD?

Схема 1 (поддержка):

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.company.org" 
      xmlns="http://www.person.org" 
      elementFormDefault="qualified"> 

    <xsd:simpleType name="test"> 
     <xsd:restriction base="xsd:string"> 
     </xsd:restriction> 
    </xsd:simpleType> 

    <xsd:complexType name="PersonType"> 
     <xsd:sequence> 
      <xsd:element name="Name" type="test" /> 
      <xsd:element name="SSN" type="xsd:string" /> 
     </xsd:sequence> 
    </xsd:complexType> 

</xsd:schema> 

Схема 2 (центральной):

<?xml version="1.0" encoding="UTF-8"?> 

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      targetNamespace="http://www.company.org" 
      xmlns="http://www.company.org" 
      elementFormDefault="qualified"> 

    <xsd:include schemaLocation="http://www.person.org"/> 

    <xsd:element name="Company"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="Person" type="PersonType" 
          maxOccurs="unbounded"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

Схема 2 в порядке, схема 1 не подтверждает. «test» не имеет пространства имен, и я не знаю, как его отдать, не разрушая моего намерения использовать 1 пространство имен для всех моих файлов.

ответ

0

Непонятно, какой именно вопрос вы задаете, поэтому я угадаю, что вопрос: «Почему документ схемы 1 не проверяется, когда документ схемы 2 проверяет?»

Я не могу ответить на это, потому что я не могу воспроизвести ваши результаты. Оба документа вашей схемы поднимают ошибки в форме, в которой вы их предоставляете.

схемы документ 1 относится, в определении элемента (http://www.company.org, имя), локальной для сложного типа (http://www.company.org, PersonType), к типу с именем (http://www.person.org, тест). Но пространство имен http://www.person.org не было импортировано, поэтому ссылки на компоненты в этом пространстве имен не являются законными.

Спецификация type="test" интерпретируется как ссылка на (http://www.person.org, test), потому что, когда «test» интерпретируется как QName, его имя пространства имен считается пространством имен по умолчанию, если оно есть. Здесь пространство имен по умолчанию (объявленное в элементе схемы xsd:) - http://www.person.org.

Если - это просто предположение с моей стороны - вы хотите обратиться к типу, имя которого (http://www.company.org, test), которое объявлено в строках 7-10 документа схемы 1, тогда вам необходимо связать префикс пространства имен к пространству имен http://www.company.org и использовать этот префикс. Она будет работать, например, изменить декларацию Имени в

<xsd:element name="Name" type="tns:test" 
      xmlns:tns="http://www.company.org"/> 

или (с использованием пространства имен по умолчанию, для того, чтобы избежать необходимости думать о приставке):

<xsd:element name="Name" type="test" 
      xmlns="http://www.company.org"/> 

Обратите внимание, что простой тип, объявленный в строках 7-10, имеет расширенное имя (http://www.company.org, тест). Я не знаю, что вы подразумеваете под словом «test» не имеет пространства имен », но вы можете проверить свои предположения.

Schema документ 2 вызывает ошибку, потому что местоположение схемы указывается на XSD: включить в строке 6 производит, когда разыменовании документ, который не является документом XSD схемы (это HTML-страницы).

Надеюсь, это поможет.