Атрибут элемента должен существовать и быть одним из определенного списка в файле dtd. - PullRequest
2 голосов
/ 19 декабря 2011

В DTD-файле как мне объявить, что элемент должен иметь атрибут. Этот атрибут должен быть одним из следующих трех: si, sl или ii

<bla si="foo">
<bla ii="foo">
<bla sl="foo">

действительны и:

<bla> or
<bla somthing="foo"> or
<bla si="foo" ii="bar">

все должны быть недействительными

заранее спасибо

Edit:

это не сработает, но оно близко:

<!ATTLIST bla si CDATA #REQUIRED
                sl CDATA #REQUIRED
                ii CDATA #REQUIRED
 >

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

1 Ответ

4 голосов
/ 20 декабря 2011

В DTD Атрибуты не могут быть взаимозависимыми.Вы можете использовать #REQUIRED или #IMPLIED, чтобы сделать любой из атрибутов обязательным или необязательным, но в противном случае вы не можете принудительно указать количество атрибутов, которые должны присутствовать.

Обычно хорошей практикой проектирования является использованиеатрибуты только для того, чтобы детализировать свойства элемента, не изменять значение элемента и сохранять атрибуты независимыми друг от друга.Если это ваши цели, подумайте о том, чтобы сделать их (альтернативными) дочерними элементами или предоставить альтернативные версии вашего элемента «host», чтобы они могли, например, иметь разные наборы атрибутов.

...