Как импортировать XSD-типы в корневую схему? - PullRequest
8 голосов
/ 18 января 2012

Это моя существующая схема XSD в foo.xsd, которая объявляет только тип:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
  targetNamespace="foo">
  <xs:complexType name="alpha">
    <!-- skipped -->
  </xs:complexType>
</xs:schema>

Это еще одна схема, которая объявляет элемент:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"
  targetNamespace="foo">
  <xs:import schemaLocation="foo.xsd" namespace="foo" />
  <xs:element name="RootElement" type="alpha"/>
</xs:schema>

Вот что я получаю от SAX-парсера в Java:

"The namespace attribute 'foo' of an <import> element information 
item must not be the same as the targetNamespace of the schema it exists in."

Что я делаю не так?

1 Ответ

15 голосов
/ 18 января 2012

Когда атрибуты targetNamespace (tns) участвующих XSD указаны и совпадают, разрешается только xsd: include (атрибут targetNamespace не может иметь пустую строку в качестве значения).

Однако можно включить схему (s1) без tns из схемы (s2), которая имеет tns;чистый эффект - компоненты s1 принимают пространство имен схемы s2.Это использование часто упоминается как хамелеоновая композиция.

Ссылка на SO, описывающая разницу между ними, - здесь .

...