Можно ли записывать DTD, чтобы разрешить один или несколько атрибутов с любым именем? - PullRequest
2 голосов
/ 25 марта 2011

Я пишу DTD для структуры XML, которая допускает гибкие имена атрибутов, например:

<root_element>
    <child_element>
        <element_with_attrib iCouldbeAnything="value" defined="true" />
    </child_element>
</root_element>

Итак, вот простое DTD для этого:

<!ELEMENT root_element (child_element)*>
<!ELEMENT child_element (element_with_attrib)+>
<!ELEMENT element_with_attrib EMPTY>
<!ATTLIST element_with_attrib
    defined CDATA #IMPLIED
    iCouldbeAnything CDATA #IMPLIED
  >

Проблема в том, что для XML требуется, чтобы «iCouldBeAnything» был чем угодно. Можно ли описать это с помощью DTD или мне нужно полагаться на какой-то другой вид проверки XML?

1 Ответ

1 голос
/ 26 ноября 2011

AFAIK это нельзя сделать с помощью DTD.Вам нужно использовать другой язык схемы, например, XML-схема W3C позволяет использовать гибкие имена атрибутов при использовании <xs:anyAttribute>.

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

AttlistDecl  ::=  '<!ATTLIST' S Name AttDef* S? '>'
AttDef       ::=  S Name S AttType S DefaultDecl

Таким образом, спецификация допускает объявления атрибутов вроде <!ATTLIST element-name >, но кажетсяспецификация не определяет, как такое объявление должно интерпретироваться, имеет ли оно какое-либо влияние или может разрешить любое имя атрибута с любым типом.В любом случае, я не верю, что такая структура хорошо поддерживается из-за редкости и эксцентричности этой функции.

...