Wenn Sie das name
Attribut auf dem Attribute
Element wollen alle code
oder permission
oder einer beliebigen XML-Namen übereinstimmen, dann beträgt das zu sagen Sie es jede XML-Namen übereinstimmen soll. Die nächste Annäherung DTDs mit würde
<!ATTLIST Attribute name NMTOKEN #REQUIRED>
sein Diese Erklärung geht davon sollte das Attribut erforderlich.
Für solche 'semi-closed' Listen von Werten, die einige aufgezählte Werte haben, aber andere akzeptieren können, gibt es im Allgemeinen zwei Ansätze, wenn DTDs verwendet werden.
(a) Man kann sie wie oben gezeigt deklarieren und sicherstellen, dass die Benutzer der DTD die aufgezählten Werte kennen, so dass sie diese gegebenenfalls verwenden, und erfinden keine neuen Schreibweisen dieser Namen, durch die aufgezählten Werte in der Dokumentation Protokoll und/oder das Hinzufügen eines Kommentars in dem DTD selbst:
<!--* Expected values include
*
* 'code' (to be used when ... or ...)
* 'permission' (to be used for ... and ...).
*
* Use other values only if necessary. *-->
<!ATTLIST Attribute name NMTOKEN #REQUIRED>
(b) kann man das Attribut in zwei Teile gespalten: ein für die bekannten Werte sowie einen besonderen Stellenwert wie ‚andere und für andere Werte.
<!ATTLIST Attribute
name (code | permission | other) #REQUIRED
other_name NMTOKEN #IMPLIED >
Dies wird die aufgezählten Werte in die DTD explizit und ermöglicht es Software, die Aufzählungen verwendet, sie zu finden (und legt sie zum Beispiel in Auswahllisten in einer Benutzeroberfläche), während noch andere Werte möglich ist. Die Verwendung von nicht deklarierten Werte dann
<Attribute name="other" other_name="non_declared_name_type"
>"value"</Attribute>
Vielen Dank für Ihre Antwort Sperberg wird, benutzte ich diese Syntax und es funktionierte für mich: können Sie von Ihrer Erfahrung sagen Sie mir, was ist der Unterschied und was ist besser zu verwenden? (Mürrisch, aber Sie möchten Vorteile kennen und verstehen, warum) – Sara
Jede gute Einführung in XML sollte Ihnen ein gutes Verständnis der Unterschiede zwischen CDATA (die jede Sequenz von XML-Zeichen akzeptiert) und NMTOKEN (das nur Zeichen erlaubt, die in XML-Namen zulässig sind) vermitteln. . Für CDATA gelten Werte wie "Hallo, Mama!" Und "34 * 27 + 3.4". für NMTOKEN sind sie nicht, weil Leerzeichen, Komma, Ausrufezeichen, Sternchen und Plus keine Namenszeichen sind. Meine Vermutung, dass Sie NMTOKEN besser helfen würden, basiert auf der Annahme, dass das Attribut Attribut/@ Name ist. –