Объявление элемента: определение содержимого как #PCDATA и одного вхождения дочернего элемента - PullRequest
1 голос
/ 07 августа 2009

В спецификации xml написано:

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

Есть ли способ обойти это, чтобы сделать этот XML действительным:

<parent>
   A text node
   <child/>
</parent>

но этот xml недействителен:

<parent>
   A text node
   <child/>
   <child/>
</parent>

Кроме того, знаете ли вы причину, по которой это запрещено?

<!ELEMENT parent (#PCDATA,child)>

Ответы [ 2 ]

0 голосов
/ 30 октября 2009

DEFINE: (a, b, c) способ выразить упорядоченный список РАЗРЕШЕННЫХ ЭЛЕМЕНТОВ РЕБЕНКА. Вы не должны sequence text-content и некоторые элементы.

РЕШЕНИЕ: если вы хотите, чтобы этот текст находился в любом точном месте среди некоторых дочерних элементов, оберните его в новый определенный дочерний элемент и последовательность этого конкретного элемента среди других дочерних элементов.

ПОМНИТЕ: A = ЛЮБОЙ; Разрешение Текстовое содержимое (= PCDATA = строка без тегов с точки зрения DTD) обязательно разрешает ЛЮБОЙ текстовый контент.

Я верю, что я прав. , ура

0 голосов
/ 07 августа 2009

Alderath,

Предварительно, я не знаю, но я так не думаю, не в DTD ... и, если я могу так сказать, вам действительно следует использовать схемы XML (то есть XSD) вместо DTD ( они просто так 90-х; -).

XSD позволяют вам намного более жесткий контроль над содержимым документа, и я вполне уверен, что ограничение количества вхождений определенного дочернего элемента в сложный элемент "смешанного типа" возможно (даже легко) с использованием XSD; хотя мне никогда не приходилось (прикасаться к дереву) делать это самому ... так что относитесь к этому как к ереси.

Удачи с этим.

Приветствия. Кит.

...