2016-06-10 2 views
0

Ich frage mich, wenn Sie irgendwelche Ideen haben, wieWie die Attributliste ausfahrbare in DTD-Datei machen

<!ELEMENT Attribute (#PCDATA)> 
    <ATTLIST name (code | permission)> 

den Attributtyp frei in einer DTD-Datei zum Beispiel zu machen, wenn ich zum Beispiel verschiedene Arten von habe Attributname, den ich nicht alle in der ATTLIST-Deklaration angeben kann. Wie die ATTLIST Erklärung ändern, so wird die XML-Datei immer noch gültig, auch wenn ich habe nicht Danke in der DTD zum Beispiel

<Attribute name="code">30</Attribute> 
<Attribute name="non_declared_name_type>"value"</Attribute> 

im Voraus Aufzählungstyp.

Antwort

1

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> 
+0

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

+1

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. –

Verwandte Themen