Как сделать элемент дочерним по себе в XML-схеме? - PullRequest
6 голосов
/ 01 мая 2009

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

<path expr="/">
  <path expr="usr">
    <path expr="bin">
      <path expr="X11" />
    </path>
  </path>
  <path expr="var" />
</path>

Я пишу файл схемы XML, и я в растерянности относительно того, как представить это отношение родитель / потомок в схеме: вот что у меня есть, но это недопустимое определение схемы:

          <xs:element name="path">
            <xs:complexType>
              <xs:sequence>
                <xs:element ref="path" minOccurs="0" />
              </xs:sequence>
              <xs:attribute name="expr" type="xs:string" use="required" />
            </xs:complexType>
          </xs:element>

Обновление: спасибо за ответ. Я пробовал это, и я получаю следующую ошибку: Элемент 'w3.org/2001/XMLSchema:complexType' не поддерживается в этом контексте. Я должен упомянуть, что иерархия путей, как я описал, сама является дочерней по отношению к элементу под названием application, поэтому вся структура выглядит следующим образом:

<application name="test">
  <path expr="/">
    <path expr="usr">
      <path expr="bin">
        <path expr="X11" />
      </path>
    </path>
    <path expr="var" />
  </path>
</application>

Ответы [ 2 ]

5 голосов
/ 01 мая 2009

Следующее должно сделать трюк. С XSD довольно сложно работать напрямую, я всегда использую такой редактор, как Liquid XML Studio .

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.1.1206 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Path" type="PathType" />
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>

alt text
(источник: liquid-technologies.com )

XSD действителен. Для нового XML, который вы описали, вам нужно изменить его так, чтобы он выглядел следующим образом.

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid XML Studio - Developer Pro Edition 7.1.0.1135 (http://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Application">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="path" type="PathType" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:string" />
    </xs:complexType>
  </xs:element>
  <xs:complexType name="PathType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="path" type="PathType" />
    </xs:sequence>
    <xs:attribute name="expr" type="xs:string" use="required" />
  </xs:complexType>
</xs:schema>
0 голосов
/ 01 мая 2009

Лично я предпочитаю RelaxNG XML-схеме. Может быть, стоит потратить время, чтобы попробовать это.

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