Altova XMLSpy 2024 Professional Edition

XPath 1.0-Ausdrücke

 

XPath 1.0-Funktionen müssen ohne Namespace-Präfix eingegeben werden.

Es werden die vier Node-Tests nach Typ unterstützt: node(), text(), comment() und processing-instruction().

 

XPath 2.0- und 3.1-Ausdrücke

 

Es werden String- (z.B. 'Hello') und numerische Literale (z.B. 256) unterstützt. Zum Erstellen anderer Literale auf Basis vom XML-Schema-Typen wird ein Konstruktor verwenden, dem ein Namespace vorangestellt wird (z.B. xs:date('2004-09-02')). Das für XML-Schema-Typen verwendete Namespace-Präfix muss an den XML-Schema-Namespace gebunden werden: http://www.w3.org/2001/XMLSchema und dieser Namespace muss in Ihrer XML-Datei deklariert sein.

Die vom XPath Evaluator verwendeten XPath 2.0- und 3.1-Funktionen gehören zum Namespace http://www.w3.org/2005/xpath-functions. Normalerweise ist das Präfix fn: an diesen Namespace gebunden. Da es sich bei diesem Namespace jedoch um den vom XPath Evaluator verwendeten Standard-Namespace für Funktionen handelt, müssen Sie bei Funktionen kein Präfix definieren. Wenn Sie ein Präfix verwenden, stellen Sie sicher, dass es an den Namespace für XPath-Funktionen gebunden ist, den Sie im XML-Dokument deklarieren müssen. Beispiele für die Verwendung einer Funktion: current-date() (wobei der Funktions-Namespace im XML-Dokument nicht deklariert ist); fn:current-date() (wobei der Funktions-Namespace im XML-Dokument nicht deklariert ist oder im XML-Dokument deklariert ist und an das Präfix fn: gebunden ist). Sie können das Namespace-Präfix sogar weglassen, wenn der Funktions-Namespace im XML-Dokument mit oder ohne Präfix deklariert ist; denn eine Funktion, die in einem XPath-Ausdruck so verwendet wird, befindet sich im Standard-Namespace. Dies ist der Standard-Namespace für Funktionen.

Die Altova-XPath-Erweiterungen befinden sich im Namespace http://www.altova.com/xslt-extensions.

 

Anmerkung: Zusammenfassend ist zu Namespaces zu sagen: Bei Verwendung von Konstruktoren oder Typen aus dem XML-Schema-Namespace müssen Sie den XML-Schema-Namespace im XML-Dokument deklarieren und im XPath-Ausdruck die korrekten Namespace-Präfixes verwenden. für XPath-Funktionen müssen Sie kein Präfix verwenden.

 

Datentypen in XPath 2.0 und 3.1

Wenn Sie einen XPath 2.0- oder 3.1-Ausdruck für ein XML-Dokument, das ein XML-Schema referenziert und gemäß diesem Schema gültig ist, auswerten, müssen Sie  Datentypen, die nicht durch eine Operation implizit in den benötigten Datentyp konvertiert werden, explizit konstruieren oder konvertieren. In dem vom integrierten XPath-Prozessor verwendeten XPath 2.0- und 3.1-Datenmodell werden alle atomisierten Node-Werte aus dem XML-Dokument dem Datentyp xs:untypedAtomic zugewiesen. Der Typ xs:untypedAtomic funktioniert gut bei impliziten Typkonvertierungen. So hat der Ausdruck xs:untypedAtomic("1") + 1 als Ergebnis den Wert 2, da der xs:untypedAtomic-Wert implizit durch den Additions-Operator in xs:double umgewandelt wird. Arithmetische Operatoren wandeln Operanden implizit in xs:double um. Vergleichsoperatoren wandeln Operanden vor dem Vergleich in xs:string um.

 

In einigen Fällen müssen Datentypen jedoch explizit in den benötigten Datentyp konvertiert werden. Wenn Sie z.B. zwei Elemente haben, startDate und endDate, die im XML-Schema als Typ xs:date definiert sind, wird z.B. bei Verwendung des XPath 2.0 Ausdrucks endDate - startDate ein Fehler angezeigt. Wenn Sie dagegen xs:date(endDate) - xs:date(startDate) oder (endDate cast as xs:date) - (startDate cast as xs:date) verwenden,  wird der Ausdruck korrekt zu einer einzigen Sequenz vom Typ xs:dayTimeDuration ausgewertet.

 

Anmerkung: Die XPath-Prozessoren, die vom XPath Evaluator verwendet werden, werden auch vom Altova XSLT-Prozessor verwendet. XPath 2.0- oder 3.1-Ausdrücke in XSLT Stylesheets, die nicht implizit in den erforderlichen Datentyp konvertiert werden, müssen explizit als der benötigte Datentyp konstruiert oder konvertiert werden.

 

Stringlänge der Zeichen- und Entity-Referenzen

Bei Verwendung von Zeichen- und Entity-Referenzen als Eingabestring für die Funktion string-length() können die Referenzen nicht aufgelöst werden und es wird die Länge des nicht aufgelösten Textstring zurückgegeben. In einer XSLT-Umgebung hätten diese Referenzen allerdings eine Bedeutung und es wird die Länge des aufgelösten String zurückgegeben.

 

Unterstützung von XPath 2.0- und 3.1-Funktionen

Siehe Anhänge.

 

© 2017-2023 Altova GmbH