2010-02-16 15 views
8

Ich erstelle eine DTD für ein XML-Dokument. Ich habe eine Enumerated attribute für ein XML-Element. Meine Frage ist: Kann das Attribut Typ Leerzeichen haben?Können XML-Attribute Leerzeichen enthalten?

zB:

<!ELEMENT Link (#PCDATA)> 
    <!ATTLIST Link Type (Amendment|Reference|Superseded|Modified| 
    Corrigendum|Corresponds|Endorsement|Equivalent|Identical|Modified| 
    Not Equivalent|Note taken of|Related|Similar) "Reference"> 

Also, was ich möchte, ist:

<Link Type="Not Equivalent" \> 

Aber das scheint zu kotzen.

Gibt es einen magischen Voodoo, den ich für Räume machen muss? Oder ist es nur Pech?

sah ich in einem fewspots aber

Dank Jeder Verweis nicht sehen konnte!

aktualisiert

Sorry - wenn ich auf BARF sage, meine ich, dass, wenn ich versuche, das Dokument (zB Open es in einem Web-Browser) ich eine Fehlermeldung zu bestätigen: gefunden Ungültige Zeichen in ATTLIST Aufzählung. Fehler beim Verarbeiten der Ressource 'file: /// C: /myxmldocument.xml'. ...

+1

Wenn Sie gerade dabei sind, die DTD selbst zu erstellen, dann schlage ich ernsthaft vor, dies zu überdenken und stattdessen ein XML-Schema zu schreiben. Es ist sehr viel flexibler und gleichzeitig genauer darüber, was erlaubt ist und was nicht. – skaffman

Antwort

10

Die kurze Antwort ist nein. Xml-Attribute sind Namenstoken und Namenstoken dürfen keine Leerzeichen enthalten. Die entsprechenden Spezifikationen sind verbunden:

Attributes

Attribute Types (see NotationType)

Names (See 4a - NameChar)

Das ungültige Zeichen der Raum ist. Sie können '.' oder '-' als Trennzeichen, wenn Sie möchten.

+5

XML selbst unterstützt Leerzeichen in Attributen, die gut sind - es ist die DTD-Spezifikation, die es in 'ATTLIST'-Aufzählungen nicht erlaubt. – skaffman

+2

Nur um zu klären - Leerzeichen in Attributnamen sind immer ungültig. Leerzeichen in Attributwerten sind OK, ABER für eine aufgeführte Attributdeklaration müssen alle Token in der Enumeration nur aus Sequenzen von Namenszeichen bestehen, also keine Leerzeichen. Du könntest 'Not_Equivalent' (oder 'Equivalent' ist OK, obwohl das kein gültiger Name ist) verwenden. – Max