Как определить элементы в DTD, которые разделяют объявление?

StackOverflow https://stackoverflow.com/questions/1621735

  •  06-07-2019
  •  | 
  •  

Вопрос

Как я могу определить элементы в DTD, которые разделяют одно и то же объявление?

Я пробовал это, что приводит к синтаксической ошибке:

<!ELEMENT (expression|condition) (code-text+)>

Если выражение и условие имеют одно и то же объявление, это означает, что одни и те же подэлементы и атрибуты.

Это было полезно?

Решение

(Примечание: в принципе, я согласен с использованием XSD вместо DTD (в качестве альтернативы используйте RelaxNG , которая является хорошей стандартизированной альтернативой XSD и намного более короткой, а также намного более легкой для понимания и чтения). Не беспокойтесь слишком о расширенном коде. Он довольно прост для чтения и дает вам мощную выразительную силу. Вместо того чтобы блокировать эту технологию, она поможет вам создать то, что вам нужно. В таких средах разработки, как Visual Studio, Eclipse и другие, есть инструменты графического дизайна для построения вашей модели, что делает создание XSD проще простого.)

Но это не отвечает на ваш вопрос. Это довольно легко повторно использовать определение в DTD. Посмотрите на HTML DTD , это происходит все время. Ключ заключается в использовании параметров объектов. Вот простой пример:

<!-- the "model" -->
<!ENTITY % commoncontent
    "content | xxx">
<!ENTITY % commonattrs
    "att1  CDATA  #IMPLIED
     att2  CDATA  #IMPLIED">

<!-- elements -->
<!ELEMENT root ANY>
<!ELEMENT content ANY>
<!ELEMENT xxx EMPTY>

<!-- elements that share the same model -->
<!ELEMENT hello  (%commoncontent;)+>
<!ELEMENT world  (%commoncontent;)+>

<!-- adding the attributes to the elements with the same model -->
<!ATTLIST hello %commonattrs;>
<!ATTLIST world %commonattrs;>

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "multipleSharedDefinitions.dtd">
<root>
    <hello att1="bla">            
        <content />
    </hello>
    <world att1="bla" att2="blabla">
        <content />
        <xxx />
    </world>
</root>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top