Angeben von Elementen und Attributen im XML-Baum

Der Name eines Sprach-, Gruppen- oder Datenelements wird mit einem Pfad zu dem entsprechenden Knoten im XML-Baum angegeben.

Dabei kann ein vollständiger Pfad ab dem Stammelement des XML-Baums, ein Teilpfad oder nur der Name des entsprechenden Elements angegeben werden. Die von SDL Passolo verwendete Notation zur Angabe von Knoten im XML-Baum ist an den XPath-Standard angelehnt. Im Vergleich zu XPath gibt es aber einige Einschränkungen und Modifikationen, die dabei zu beachten sind. Insbesondere ist darauf zu achten, dass für manche Knoten ein vollständiger Pfad angegeben werden muss.

Angeben von Pfaden und Knoten

Ein vollständiger Pfad beginnt mit einem / und enthält alle übergeordneten Knoten bis zum entsprechenden Element, wie z. B. /file/body/trans-unit/source. Wenn die XML-Datei trans-unit-Elemente auch unter anderen Knoten enthält, werden diese mit dem so angegebenen Pfad nicht gefunden. Dazu kann ein Teilpfad oder der einfache Elementname verwendet werden.

Manchmal kommen Datenelemente gleichen Typs in unterschiedlichen Teilabschnitten des XML-Baums vor. In diesem Fall müsste für jeden möglichen Pfad eine eigene Einstellung vorgenommen werden, um alle entsprechenden Datenelemente auszulesen. Es besteht aber auch die Möglichkeit, ein Element nur mit dem Namen bzw. mit einem Teil des Pfads anzugeben und dadurch die unterschiedlichen Pfade in einer einzigen Einstellung zu erfassen. Im einfachsten Fall kann der Name des zu extrahierenden Datenelements ganz ohne Pfad angegeben werden, etwa trans-unit. Damit wird jedes Element mit dem Namen trans-unit aus der XML-Datei ausgelesen, unabhängig davon, wo im XML-Baum es sich befindet.

Mit einem Teilpfad kann die Auswahl auf Datenelemente unterhalb eines bestimmten übergeordneten Elements eingeschränkt werden, wie z. B. mit group/trans-unit. In diesem Fall liest Passolo nur trans-unit-Elemente aus, die sich direkt unterhalb eines group-Elements befinden.

Weitere Pfadangaben können mithilfe der folgenden Variablen und Platzhalter definiert werden:

*Platzhalter für einen beliebigen Knotennamen innerhalb des Pfads
parent::Das übergeordnete Element des jeweiligen Datenelements
ancestor::Alle zum Pfad des jeweiligen Datenelements gehörenden übergeordneten Knoten, also das übergeordnete Element, dessen übergeordnetes Element usw. bis hin zum Stammelement der Baumstruktur.
child::Die untergeordneten Elemente des jeweiligen Datenelements
descendant::Alle vom jeweiligen Datenelement direkt abhängigen Knoten, also die untergeordneten Elemente, deren jeweiligen untergeordneten Elemente usw. bis zu den Endknoten.

Mit der Angabe .../element_name/attribute::attribute_name können Daten aus dem Wert eines Attributs statt aus dem Inhalt des Elements ausgelesen werden. Hier einige Beispiele für die Angabe von Attributwerten:

trans-unit/attribute::id – liest die Identifikationsnummer der Übersetzungseinheit aus, z. B. „4711“.

trans-unit/attribute::id  – liest den Ressource-Typ der Übersetzungseinheit aus, z. B. „string“.

Solche Attributwerte können als weitere Eigenschaften einer Übersetzungseinheit in Passolo eingelesen und damit auch zur Steuerung des Übersetzungsprozesses genutzt werden. So könnten solche Metadaten beispielsweise für die Kennzeichnung von Datenelementen genutzt werden, die nicht übersetzt werden sollen, etwa data/attribute::translate = "no".

Der Name des Attributknotens wird in Passolo als Name der Eigenschaft verwendet und der Wert des Knotens als Wert der Eigenschaft.

Mit dem Schlüsselwort „valueid“ besteht die Möglichkeit, spezielle Metadaten auszulesen, die nicht direkt als Attribut/Wert-Paar definiert sind, sondern getrennt als Attribut und als Inhalt des Datenelements angegeben werden. Dies könnte in XML z. B. so aussehen:
<context-group name="SPECIAL"> <context context-type="IGNORE_IT">YES</context> </context-group>

Mit dem folgenden Ausdruck wird das Attribut context-type, genauer gesagt der Wert dieses Attributs, als Name der Eigenschaft in Passolo verwendet und der Inhalt des Elements als Wert gesetzt:

context-group/context/attribute::context-type | context-group/context,valueid. Das Ergebnis ist eine benutzerdefinierte Eigenschaft mit dem Namen IGNORE_IT und dem Wert YES.

Übersetzen von Attributen

Es wird empfohlen, zu übersetzende Daten als Inhalt von Elementen zu definieren und nicht als Attribute. Zum einen lassen sich Elemente besser mit zusätzlichen Attributen versehen. Zum anderen verarbeiten XML-Parser Zeilenumbrüche in Attributen und Elementen unterschiedlich.

<string1 id="1"> Perferred way to store localizable data </string1> <string2 id="a" content="Not recommended way to store localizable data"/>

Müssen Attribute lokalisiert werden, geben Sie im Dialogfeld XML-Datenelement unter Name den dazugehörigen XPath-Ausdruck ein. Im obigen Fall lautet der Ausdruck: string2/attribute::content. Mit diesem Ausdruck wird string2 als das Element definiert, das die Daten enthält, und „attribute“ gibt an, dass die Daten nicht im Inhalt des Elements, sondern in einem der Attribute abgelegt sind.

Entsprechend sucht Passolo nach weiteren Metadaten im Element string2 und es reicht in diesem Beispiel, nur id in ID-Attribut anzugeben.

Soll die Übersetzung an eine andere Stelle in der XML-Datei geschrieben werden, muss in Element für Übersetzung nur das Element – in unserem Beispiel string2 – und nicht der gesamte XPath-Ausdruck angegeben werden.

Einen Knoten mehrfach auslesen

Passolo stellt eine Notation zur Verfügung, um Daten aus mehreren Elementen bzw. Attributen mit einer einzelnen Pfadspezifikation auszulesen. Dazu wird das Schlüsselwort „multiple“ an den Knotennamen angehängt. Im folgenden Beispiel werden die in einer XLIFF-Datei enthaltenen Alternativübersetzungen relativ zum aktuellen Knoten als Metadaten ausgelesen und dadurch als benutzerdefinierte Eigenschaften des entsprechenden Datenelements in Passolo übernommen.

In der XLIFF-Datei ist beispielsweise folgende Übersetzungseinheit enthalten:

<trans-unit id="5" restype="string" > <source> There was a failure in launching WordPad</source>  <alt-trans>  <source> There was a failure in launching WordPad</source>  <target> Beim Starten von WordPad ist ein Fehler aufgetreten</target>  <target> Beim Starten der Anwendung ist ein Fehler aufgetreten</target>  </alt-trans>  </trans-unit> 

Die Spezifikation des Datenelements (trans-unit/source) sieht in Passolo wie folgt aus:

Die alternativen Übersetzungen werden mittels der Metadaten-Spezifikation „parent::*/descendant::alt-trans/source | parent::*/descendant::alt-trans/target,multiple“ extrahiert und als benutzerdefinierte Eigenschaften des Datenelements eingegeben. Das Ergebnis sieht in Passolo dann so aus:

Beachten Sie bitte, dass die für die Alternativübersetzungen eingefügten Eigenschaften durchnummeriert sind. Durch die zusätzlichen Angaben von „multiple“ wird sichergestellt, dass die Namen der Eigenschaften auch bei einer Mehrfach-Referenzierung in Passolo eindeutig bleiben.