расширенный xsd для xml с несколькими пространствами имен - PullRequest
3 голосов
/ 12 февраля 2010

Эй, я пытаюсь открыть свою XML-схему для разных пространств имен, похоже, это работает, но все элементы пространства имен по умолчанию теперь недопустимы.

Заранее спасибо. Я пытаюсь добиться того же механизма расширения схемы, что и в Spring (то есть: spring-beans.2.5.xsd), они открывают определение bean также для ##other, и это работает!

Я добавил пример этих трех файлов для быстрого доступа к zip-архиву и загрузил его в Rapidshare одним щелчком мыши.

В чем моя вина?

пример-list.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.example.org/schema/list"
  xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/schema/list">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace" />

  <xs:complexType name="ExampleListModelType">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="ExampleListGroup" />
    </xs:choice>
  </xs:complexType>

  <xs:group name="ExampleListGroup">
    <xs:choice>
      <xs:element name="foo" type="xs:string" />
      <xs:element name="bar" type="xs:string" />
      <xs:element name="baz" type="xs:string" />
      <xs:any namespace="##other" processContents="strict" />
    </xs:choice>
  </xs:group>

  <xs:element name="action-list" type="ExampleListModelType" />
</xs:schema>

заказ пример-list.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 xmlns="http://www.example.org/schema/custom" elementFormDefault="qualified"
 targetNamespace="http://www.example.org/schema/custom">
  <xs:element name="eek" type="xs:string" />
</xs:schema>

пример-list.xml

<?xml version="1.0" encoding="UTF-8"?>
<action-list xmlns="http://www.example.org/schema/list" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:custom="http://www.example.org/schema/custom"
  xsi:schemaLocation="
    http://www.example.org/schema/list example-list.xsd
    http://www.example.org/schema/custom custom-example-list.xsd">
  <custom:eek></custom:eek>
  <bar></bar>
</action-list> 

Ошибка

Invalid content was found starting with element 'bar'. One of '{foo, bar, baz, WC[##other:"http://www.example.org/schema/list"]}' is expected

Ответы [ 2 ]

3 голосов
/ 19 февраля 2010

Ого, это было сложно.Прошло много времени с тех пор, как я просто продолжал вносить случайные изменения в xsd и проверял, что происходит.:)

Добавьте elementFormDefault="qualified" в качестве атрибута к вашему тегу <xs:schema> в example-list.xsd, и все это подтвердится.Я все еще немного сбит с толку относительно того, зачем это нужно.

0 голосов
/ 12 февраля 2010

Похоже, проблема в вашем custom-example-list.xsd . Вы определяете, что элемент "eek" не находится в пространстве имен.

Измените xmlns:balvi="http://www.example.org/schema/custom" на xmlns="http://www.example.org/schema/custom" в этой схеме.

Редактировать: Хорошо, так что, если вы исправили это, здесь это сложно. Единственное, о чем я могу думать, это то, что, поскольку вы указали ##other, там должен появиться только элемент из за пределами вашего целевого пространства имен. Но тогда у вас есть это в выборе с элементами из вашего целевого пространства имен. Я не вижу ничего в спецификации, которая устраняет эту ситуацию.

Возможно, вы захотите изменить этот выбор на простую последовательность и посмотреть, работает ли он тогда. Если это так, вы знаете, что не так. Если он все еще не работает, возможно, ваша схема не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...