Запретить элемент быть дочерним в XML-схеме - PullRequest
0 голосов
/ 03 марта 2010

Я пишу схему XML для проекта. Я не могу решить следующую проблему:

Элемент не может быть вложенным сам по себе, например:

<document>
   <text>
      <b>
         <i>
            <a link="http://wikipedia.org">
               <b />
            </a>
         </i>
      </b>
   </text>
</document>

Этот пример не должен быть разрешен, потому что b вложен сам. Итак, мой вопрос к вам: «Можно ли запретить элементу для его самостоятельного вложения, и если да, то какова процедура, чтобы выполнить трюк?»

Спасибо за преимущество!

\ Мортен Мёллер

Edit: До сих пор я только удостоверился, что элемент может быть дочерним для себя, но не для того, чтобы элемент не мог иметь потомка, который сам по себе.

<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:xs="http://cs.au.dk/dWebTek/WikiXML"
        targetNamespace="http://cs.au.dk/dWebTek/WikiXML"
        elementFormDefault="qualified">

<element name="wiki">
    <complexType>
            <choice maxOccurs="unbounded">
                <!-- A lot of other element is listed here -->
                <element name="bold" type="xs:boldnest"/> <!-- Missing nest function -->
            </choice>
    <complexType>
</element>

<complexType name="boldnest">
    <choice maxOccurs="unbounded">
        <element name="bold" minOccurs="0" maxOccurs="0" type="xs:boldnest"/>
        <!-- All the other element is copy pasted in here -->
    </choice>
</complexType>

1 Ответ

0 голосов
/ 05 марта 2010

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

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

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

...