Wann sollte man xml:lang
verwenden und wann sollte man ein eigenes Element oder Attribut für Sprachangaben in einem XML-Dokument-Schema (DTD) definieren?
Manchmal enthalten Dokumente Texte in verschiedenen natürlichen Sprachen. In anderen Fällen sollen sie natürliche Sprachen
als Daten oder Metadaten über etwas Externes außerhalb des Dokuments angeben. Weil diese verschiedenen Anwendungsfälle ähnliche Formate verwenden, sind sich Schema-Entwickler
manchmal nicht sicher, wann sie xml:lang
verwenden sollten und wann sie ihr eigenes Element oder Attribut für Sprachangaben definieren sollten.
In XHTML 1.0 bspw. gibt es ein hreflang
-Attribut fürs a
-Element und auch ein xml:lang
-Attribut (bzw. lang
für HTML 4.0) für den Inhalt des a
-Elements:
<a xml:lang="en" href="xyz" hreflang="de">Click for German</a>
Das xml:lang
-Attribut gibt die Sprache innerhalb des a
-Elements an („Click for
German“), während das hreflang
-Attribut Metadaten angibt, in diesem Fall die Sprache eines externen Inhalts außerhalb dieser
Webseite.
xml:lang
verwenden sollteFür direkt mit dem XML-Dokument verbundenen Inhalt (der entweder direkt im Dokument enthalten ist oder zu einem Teil des Dokuments wird,
wenn dieses verarbeitet oder gerendert wird) sollte man das xml:lang
-Attribut zur Angabe der Sprache dieses Inhalts verwenden. xml:lang
sollte
Inhaltsautoren vorbehalten sein, um jede in ihrem Inhalt vorkommende natürliche Sprache zu kennzeichnen.
xml:lang
ist in XML 1.0 als Universalattribut definiert, das zur Angabe der Sprache des Inhalts von beliebigen
Elementen verwendet werden kann. Das beinhaltet jeglichen menschenlesbaren Text, aber auch andere Inhalte (bspw. eingefügte Objekte wie Bilder oder Sound-Dateien) in
dem Element, für das dieses Attribut gesetzt ist. Der Wert von xml:lang
gilt auch für alle Unterelemente des Elements. Er gilt auch
für Attributwerte dieses Elements und der Unterelemente. (Die Verwendung natürlicher Sprache in Attributen ist allerdings keine bevorzugte Vorgehensweise.)
Der Wert des xml:lang
-Attributs ist eine durch BCP 47 definierte Sprachkennzeichnung.
Hier z.B. xml:lang
für ein t
-Element:
<t xml:lang="de">
Dies ist ein Text in einem 't'-Element. Es wurde das
xml:lang-Attribut verwendet, um die Sprache anzugeben,
damit bspw. die richtige Schriftart zur Darstellung
oder die richtige Rechtschreibprüfung zur Überprüfung
des Dokuments verwendet wird. Wenn es xml:lang nicht
gäbe, würde es Probleme mit eingebettetem Inhalt in
anderer Sprache geben, wie bspw. <span xml:lang="fr">
C'est la vie</span>.
</t>
Dieses Beispiel zeigt, wie xml:lang
auf ein Attribut wirkt:
<para>Il faut utiliser <abbr title="Simple Object Access Protocol"
xml:lang="en">SOAP</abbr></para>
Wenn die Sprachangabe ein Attribut oder Metadaten von externem Inhalt ist, dann ist xml:lang
nicht geeignet. In diesen Fällen soll Sprachinformation abgelegt werden, wobei sich die Sprache aber nicht direkt auf den Inhalt des XML-Dokuments
bezieht (oder eingebundenen Inhalt wie Bilder, die als Teil des Dokuments verarbeitet werden). In diesem Fall sollte man ein Element oder ein Attribut
mit einem anderen Namen definieren und nicht das xml:lang
-Attribut verwenden. Der Wert des Elements oder Attributs sollte
BCP 47 entsprechen, wie bei xml:lang
.
Einige Beispiele dafür sind:
a
in XHTML), das auf eine Version dieses Dokuments in einer anderen
Sprache verweistEin eigenes Element (oder Attribut) kreiert man, um die Sprache als Datenwert (als Teil einer
Datenstruktur oder als Metadaten über ein externes Dokument) zu vermitteln; nicht, um die Sprache eines speziellen Teils des Dokuments anzugeben. Indem man nicht xml:lang
zur Angabe von externen Sprachen verwendet, vermeidet man Probleme für Inhaltsautoren, die auf die Angabe der Sprache des Inhalts
zum Zweck der Textverarbeitung angewiesen sind.
Ein XML-Dokument könnte bspw. so aussehen:
<item type="DVD">
<title xml:lang="fr">Cyrano de Bergerac</title>
<!-- gibt die Sprache des Filmtitels an -->
<runningTime value="137" />
<!-- keine Sprache betroffen -->
<dialogue>en</dialogue>
<!-- gibt die Dialogsprache an -->
<subtitles track="1" language="zh-Hant" />
<!-- diese Spur enthält Untertitel in traditionellem Chinesisch -->
<subtitles track="2" language="zh-Hans" />
</item>
In diesem Beispiel vermittelt das xml:lang
-Attribut Informationen über die natürliche Sprache des Texts, der in
diesem Dokument vorkommt. Das dialogue
-Element und das language
-Attribut des subtitles
-Elements sind im XML-Dokument-Schema definiert und vermitteln die natürliche
Sprache, die mit diesen Elementen verbunden ist. Es vermittelt z.B. die Information, dass die Untertitel auf Spur 1 in
traditionellem Chinesisch (zh-Hant
) sind.
Es ist wichtig zu bedenken, dass xml:lang
einen Geltungsbereich hat: Unterelemente erben das Sprachattribut. Dadurch kann
die Sprache für viel Inhalt angegeben werden (ohne redundante Sprachkennzeichnungen für jedes Element). Es ist bspw. empfohlene Vorgensweise, xml:lang
für das html
-Element am Anfang eines XHTML-Dokuments zu setzen und nur dann erneut zu verwenden,
wenn sich die Sprache des Texts ändert. Weitere Informationen gibt der Artikel Sprachkennzeichnungen
in HTML und XML.
xml:lang
auf ein Attribut anzuwenden ist problematisch, denn man kann nicht:
mehr als eine Sprache im title-Attribut angeben
<p title="französisch (français)">Bonjour</p>
für das Attribut und für das Element getrennt voneiander verschiedene Sprachen angeben.
<a title="anglais" href="qa-when-xmllang.en.html" lang="en"
xml:lang="en">English</a>
Die drei Schema-Sprachen (XML DTD, XML Schema und RELAX NG) unterscheiden sich darin, ob ein Anwender xml:lang erst definieren muss, bevor er es als Attribut verwendet. Im Einzelnen:
XML DTDs verlangen, dass für jedes Element, das xml:lang als Attribut verwendet, dies in der DTD deklariert ist
XML Schema verlangt, dass der xml-Namensraum deklariert und importiert wird, bevor xml:lang (und anderes aus dem xml-Namensraum) verwendet wird
Bei RELAX NG ist der xml-Namensraum wie in XML vordeklariert, so dass keine weitere Deklaration notwendig ist.
BCP 47 (Kennzeichnungen zur Identifikation von Sprachen) spezifiziert, welche Sprachkennzeichnungen als Wert für xml:lang zu verwenden sind.
Sprachkennzeichnungen in HTML und XML beschreibt, wie man Sprachkennzeichnungen verwendet.
Verwandte Links: XML verfassen