DTD - можно ли объявить атрибут для нескольких элементов одновременно - PullRequest
0 голосов
/ 29 ноября 2018

Как объявить атрибуты для нескольких элементов?

Как:

<!ATTLIST foo,bar createdAt CDATA #IMPLIED>

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

С XML DTD это возможно только с использованием сущностей параметров, как объяснил Майкл (ср. спецификация XML ).OTOH, SGML DTD позволяют объявлять списки атрибутов для нескольких элементов в форме, очень близкой к тому, что вы имеете в виду:

<!-- only valid in SGML rather than XML DTDs: -->
<!ATTLIST (elem1|elem2|elem3) myatt CDATA #IMPLIED>

SGML также позволяет группам имен вместо одного имени вдругие объявления разметки.

Кроме того, WebSGML (ISO 8879: 1986 / Cor 2: 1999) также позволяет #ALL и #IMPLICIT вместо имени элемента применять объявление ко всем объявленным или подразумеваемым элементам,соответственноОни были включены в WebSGML для представления общих атрибутов XML, таких как xml:base, xml:lang и xmlns (но не xmlns:xyz).Однако, как и синтаксис группы имен , они не стали частью XML-подмножества SGML.

0 голосов
/ 29 ноября 2018

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

<!ENTITY % role.att
        'role                   NMTOKEN         #IMPLIED'>

<!ENTITY % common.att
        'id                     ID              #IMPLIED
        %role.att;'>

<!ATTLIST notice %common.att;>

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

...