Dev:attributeSyntax

From railML 2 Wiki
Revision as of 09:00, 28 September 2011 by RailML Superseded Users (talk | contribs) (some indentation for better output)
Jump to navigation Jump to search

Correct Syntax for XML attributes (Delimiters)

Sometimes there is a little confusion about the correct XML syntax in attribute definitions. Which version is valid, which not?
Manchmal besteht Uneinigkeit über die richtige XML-Syntax für Attributdefinitionen. Welche der folgenden Varianten ist korrekt? Welche nicht?

  1. <element attribute="value"/>
  2. <element attribute='value'/>

W3C gives us the answer: both are correct!
W3C gibt uns die Antwort: Beide Varianten sind korrekt!

Definitions in the W3C XML specification

The following definitions use "a simple Extended Backus-Naur Form (EBNF) notation".
Die folgenden Definitionen nutzen die "einfache erweiterte Backus-Naur Form (EBNF)".

Definition 41 (de)

Attribute ::= Name Eq AttValue
"... the content of the AttValue (the text between the ' or " delimiters) as the attribute value."
"... der Inhalt des AttValue (der Text zwischen den '- oder "-Zeichen) der Attribut-Wert ist."

Definition 10 (de)

AttValue ::= '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'"

These "simple EBNF" is quite a bit difficult to understand, irrespective of this it allows both quotation marks as attribute delimiters. But the use should be consistent for each attribute definition. You may not mix both for one attribute.
Diese "simple EBNF" ist schon ein bißchen schwierig zu verstehen, unabhängig davon erlaubt sie beide Arten von Anführungszeichen für Attributdefinitionen zu verwenden. Man muss sie aber konsistent einsetzen und darf nicht bei einer Attributdefinition beide verschieden für Anfang und Ende verwenden.

Usage in XML parsers and XML processors

Thus each XML parser has to "accept" both versions (according to the W3C standard).
Somit muss jeder XML-Parser beide Varianten akzeptieren und verarbeiten (wenn er standard-konform ist).

Despite this you cannot demand your XML processor to output a preferred delimiters' version. The XML processors' implementation decides about this syntax.
Demgegenüber kann man von einem XML-Prozessor keine bevorzugte Variante abverlangen. Die Ausgabesyntax in der XML-Datei ist im Programmcode des XML-Prozessors festgelegt.

From current experience has to be noted that XML files with "double quotes" as attribute delimiters are much more common than XML file with "single quotes".
Aus der Erfahrung sollte angemerkt werden, dass XML-Dateien mit "doppelten Anführungszeichen" in Attributdefinitionen sehr viel häufiger vorkommen als XML-Dateien mit "einfachen Anführungszeichen".

Workaround in case of problems with single quotation marks

If you have troubles with the "single quotes" version than pipe your XML file through the following simple tool:
Falls es Probleme mit den "einfachen Anführungszeichen" im gewünschten XML-Parser gibt, kann man die XML-Datei einfach durch folgendes Programm schicken:

tr '\047' '\042' <input-file.xml >output-file.xml
  • It "translates" the character ' (047) into " (042).
Es "übersetzt" alle Zeichen ' (047) nach " (042).
  • "input-file.xml" is your XML file with single quotes.
"input-file.xml" ist dabei die XML-Datei mit "einfachen Anführungszeichen".
  • "output-file.xml" becomes your XML file with double quotes.
"output-file.xml" ist die zu erzeugende XML-Datei mit "doppelten Anführungszeichen".

This tool is very fast and doesn't get in troubles with really large uncompressed XML files.
Dieses Programm ist sehr schnell und hat keine Schwierigkeiten mit richtig großen unkomprimierten XML-Dateien.

But be aware that any character occurence will be changed:
Aber man sollte im Kopf behalten, dass wirklich _alle_ Zeichen, die in das Muster passen, ersetzt werden:

before vorher
<name>King's Cross St. Pancras</name>
thereafter nachher
<name>King"s Cross St. Pancras</name>

But regardless of this - diacritics stay unchanged:
Demgegenüber bleiben "Diakritische Zeichen" unverändert:

before vorher
<name>Kings Cross St. Pancras</name>
thereafter nachher
<name>Kings Cross St. Pancras</name>