Вложение элементов XML из разных пространств имен в XSD - PullRequest
0 голосов
/ 12 сентября 2018

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

В качестве примера предположим, что у нас есть файл foo.xsd :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="urn:foo-ns" targetNamespace="urn:foo-ns"
           xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:element name="foo" type="fooType"/>

  <xs:complexType name="fooType">
    <xs:attribute name="id" use="required"/>
  </xs:complexType>

</xs:schema>

, а также файл bar.xsd :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="urn:bar-ns"
           targetNamespace="urn:bar-ns"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:foo-ns="urn:foo-ns"
           elementFormDefault="qualified">

  <xs:import namespace="urn:foo-ns" schemaLocation="foo.xsd"/>

  <xs:element name="bar" type="barType"/>

  <xs:complexType name="barType">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element name="foo" type="foo-ns:fooType"/>
    </xs:sequence>
    <xs:attribute name="name" use="required"/>
  </xs:complexType>

</xs:schema>

Тогда я бы ожидал следующий файл bar.xml должен быть действительным XML:

<?xml version="1.0" encoding="UTF-8"?>
<bar name="myBar" xmlns="urn:bar-ns">
  <foo id="myFoo" xmlns="urn:foo-ns"/>
</bar>

Однако мой валидатор XML жалуется на объявление пространства имен элемента foo;вместо этого он настаивает на том, что следующий файл действителен:

<?xml version="1.0" encoding="UTF-8"?>
<bar name="myBar" xmlns="urn:bar-ns">
  <foo id="myFoo"/>
</bar>

Я неправильно объявляю файлы схемы?Как настроить XSD, чтобы начальная версия bar.xml была действительной?

1 Ответ

0 голосов
/ 12 сентября 2018

В bar.xsd вы должны ссылаться на элемент , а не на тип объявление foo, если вы хотите, чтобы foo было в urn:bar-ns пространство имен:

      <xs:element ref="foo-ns:foo"/>

Обновлен bar.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="urn:bar-ns"
           targetNamespace="urn:bar-ns"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:foo-ns="urn:foo-ns"
           elementFormDefault="qualified">

  <xs:import namespace="urn:foo-ns" schemaLocation="foo.xsd"/>

  <xs:element name="bar" type="barType"/>

  <xs:complexType name="barType">
    <xs:sequence minOccurs="0" maxOccurs="unbounded">
      <xs:element ref="foo-ns:foo"/>
    </xs:sequence>
    <xs:attribute name="name" use="required"/>
  </xs:complexType>

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