XML-последовательность с произвольным количеством комментариев - PullRequest
0 голосов
/ 09 сентября 2010

Хорошо, поэтому я использую XML-схему для проверки XML-файла следующего типа: (просто представьте, что парены - это угловые скобки).

<root>
   <A>
      <B></B>
      <C></C>
   </A>
</root>

довольно просто -> за исключением того, что уловЯ также хочу иметь элемент комментария, который может встречаться неограниченное количество раз в любом порядке (при условии, что это не комментарий в другом комментарии).Таким образом, следующий пример кода также будет действителен:

<root>
   <comment />
   <A>
      <comment />
      <B>
         <comment />
      </B>
      <comment />
      <C></C>
      <comment />
   </A>
      <comment />
</root>

Первоначально у меня была жесткая структура, наложенная на исходное дерево - то есть B и C должны появиться один раз, а B должен стоять первым.Ни один из способов, с помощью которых я могу придумать эту шкалу для работы на более сложных примерах.есть идеи?

Большое спасибо

1 Ответ

0 голосов
/ 09 сентября 2010

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

<xs:element name="comment" type="xs:string"/>
<xs:complexType name="commentable">
    <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="comment"/>
    </xs:sequence>
</xs:complexType>
<xs:element name="root">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="commentable">
                <xs:sequence>
                    <xs:element ref="A"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:element name="A">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="commentable">
                <xs:sequence>
                    <xs:element ref="B"/>
                    <xs:element ref="C"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:element name="B">
    <xs:complexType mixed="true">
        <xs:complexContent>
            <xs:extension base="commentable"/>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
<xs:element name="C">
    <xs:complexType mixed="true">
        <xs:complexContent>
            <xs:extension base="commentable"/>
        </xs:complexContent>
    </xs:complexType>
</xs:element>
...