Question

Comment définir des éléments dans une DTD qui partagent la même déclaration?

J'ai essayé ce qui a entraîné une erreur de syntaxe:

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

Où expression et condition ont la même déclaration, cela signifie les mêmes sous-éléments et attributs.

Était-ce utile?

La solution

(Remarque: en principe, je suis d'accord pour utiliser XSD au lieu de DTD (sinon utilisez RelaxNG , qui est une bonne alternative standardisée à XSD, beaucoup plus brève et beaucoup plus facile à comprendre et à lire.) Ne vous inquiétez pas trop du code étendu, il est assez facile à lire et vous donne un puissant pouvoir d’expression. Au lieu d'être bloqués par la technologie, ils vous aideront à créer ce dont vous avez besoin. Les IDE tels que Visual Studio, Eclipse et autres disposent d'outils de conception graphique pour la construction de votre modèle, ce qui facilite grandement la création de XSD.)

Mais cela ne répond pas à votre question. Il est assez facile de réutiliser une définition dans une DTD. Regardez la DTD HTML , tout se passe bien. le temps. La clé consiste à utiliser des entités paramètres. Voici un exemple simple:

<!-- 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;>

qui fait que les éléments hello et world contiennent exactement le même ensemble d’attributs et de contenu. J'ai utilisé une définition d'éléments non obligatoires et non ordonnés en tant que contenu, ce qui rend le document XML suivant valide avec la DTD ci-dessus:

<?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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top