XPath 2.0-Operatorfunktionen

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)

Bei den strikt formalen Operatorfunktionen von XPath 2.0, formal gekenn­zeichnet durch das Präfix op:, handelt es sich um Beschreibungen in Funkti­onsform, die den eigentlichen in XPath 1.0 und XPath 2.0 verwendeten Opera­toren (Operatorsymbolen) als Definition hinterlegt sind.

Kein Namensraum für das Präfix op:
Das Präfix op: der Operatorfunktionen ist nicht an einen Namensraum gebun­den (!), da diese nicht dafür vorgesehen sind, direkt vom Benutzer verwendet zu werden, sondern lediglich die Wirkungsweise der XPath-Operatoren in Bezug auf verschiedene Datentypen klarstellen sollen.

Es ist von den Spezifikationen ausdrücklich nicht gefordert, dass eine Anwen­dung die Funktionen in irgendeiner Form real zur Verfügung stellen muss.

Unterstützte Operatorsymbole

In der folgenden tabellarischen Übersicht sind diejenigen XPath-Operatoren aufgeführt, für die Operatorfunktionen existieren. Eine ausführliche Übersicht über die Operatorfunktionen selbst ist in diesem Rahmen nicht erforderlich.

Unäre Operatoren

Operator Bezeichnung Anwendungsbereich

+

unäres Plus

Zahlen

+numeric

-

unäres Minus

Zahlen

-numeric

Tabelle: Übersicht über unäre Operatoren.

Binäre Operatoren

Operator Bezeichnung Anwendungsbereich

+

Addition

Zahlen, Datumswerte

numeric numeric
-> numeric

xs:date xs:yearMonthDuration 
->xs:date

xs:date xs:dayTimeDuration 
->xs:date

xs:time xs:dayTimeDuration 
->xs:time

xs:datetime xs:yearMonthDuration 
-> xs:dateTime

xs:datetime xs:dayTimeDuration 
-> xs:dateTime

xs:yearMonthDuration xs:yearMonthDuration 
-> xs:yearMonthDuration

xs:dayTimeDuration xs:dayTimeDuration
-> xs:dayTimeDuration 

-

Subtraktion

Zahlen, Datumswerte

numeric – numeric 
-> numeric

xs:datexs:date 
-> xs:dayTimeDuration

xs:date – xs:yearMonthDuration 
-> xs:date

xs:date – xs:dayTimeDuration 
-> xs:date

xs:timexs:time 
-> xs:dayTimeDuration

xs:time – xs:dayTimeDuration 
-> xs:time

xs:datetime – xs:datetime 
-> xs:dayTimeDuration

xs:datetime – xs:yearMonthDuration 
-> xs:dateTime

xs:datetime – xs:dayTimeDuration 
-> xs:dateTime

xs:yearMonthDuration – xs:yearMonthDuration
-> xs:yearMonthDuration

xs:dayTimeDuration – xs:dayTimeDuration 
-> xs:dayTimeDuration

*

Multiplikation

Zahlen, Datumswerte

numeric numeric
-> numeric

xs:decimal xs:yearMonthDuration 
-> xs:yearMonthDuration

xs:decimal xs:dayTimeDuration 
-> xs:dayTimeDuration

div

Division

Zahlen, Datumswerte

numeric div numeric
-> numeric

xs:integer div xs:integer
-> xs:decimal

xs:yearMonthDuration xs:decimal
-> xs:yearMonthDuration

xs:dayTimeDuration xs:decimal
-> xs:dayTimeDuration

idiv

Int-Division

Ganzzahlen (Integer)

xs:integer idiv xs:integer -> xs:integer

to

Int-Bereich

Ganzzahlen (Integer)

xs:integer to xs:integer -> xs:integer*

mod

Modulo

Zahlen

numeric mod numeric -> numeric

eq

Gleichheit

Zahlen, boolesche Werte, Strings, Datumswerte, Binärwerte, URI-Strings, QNames, Notationen

numeric eq numeric
-> xs:boolean

xs:boolean eq xs:boolean
-> xs:boolean

xs:string eq xs:string
-> xs:boolean

xs:date eq xs:date
-> xs:boolean

xs:time eq xs:time
-> xs:boolean

xs:dateTime eq xs:dateTime
-> xs:boolean

xs:yearMonthDuration eq xs:yearMonthDuration
-> xs:boolean

xs:dayTimeDuration eq xs:dayTimeDuration
-> xs:boolean

Gregorian eq Gregorian
-> xs:boolean

xs:hexBinary eq xs:hexBinary
-> xs:boolean

xs:base64Binary eq xs:base64Binary
-> xs:boolean

xs:anyURI eq xs:anyURI
-> xs:boolean

xs:QName eq xs:QName
-> xs:boolean

xs:NOTATION eq xs:NOTATION
-> xs:boolean

ne

Ungleichheit

Zahlen, boolesche Werte, Strings, Datumswerte, Binärwerte, URI-Strings, QNames, Notationen

numeric ne numeric
-> xs:boolean

xs:boolean ne xs:boolean
-> xs:boolean

xs:string ne xs:string
-> xs:boolean

xs:date ne xs:date
-> xs:boolean

xs:time ne xs:time
-> xs:boolean

xs:dateTime ne xs:dateTime
-> xs:boolean

xs:yearMonthDuration ne xs:yearMonthDuration
-> xs:boolean

xs:dayTimeDuration ne xs:dayTimeDuration
-> xs:boolean

Gregorian ne Gregorian
-> xs:bool ean

xs:hexBinary ne xs:hexBinary
-> xs:boolean

xs:base64Binary ne xs:base64Binary
-> xs:boolean

xs:anyURI ne xs:anyURI
-> xs:boolean

xs:QName ne xs:QName
-> xs:boolean

xs:NOTATION ne xs:NOTATION
-> xs:boolean

gt

größer als

Zahlen, boolesche Werte, Strings, Datumswerte

numeric gt numeric
-> xs:boolean

xs:boolean gt xs:boolean
-> xs:boolean

xs:string gt xs:string
-> xs:boolean

xs:date  gt xs:date
-> xs:boolean

xs:time gt xs:time
-> xs:boolean

xs:yearMonthDuration gt xs:yearMonthDuration
-> xs:boolean

xs:dayTimeDuration gt xs:dayTimeDuration
-> xs:boolean

lt

kleiner als

Zahlen, boolesche Werte, Strings, Datumswerte

numeric lt numeric
-> xs:boolean

xs:boolean lt xs:boolean
-> xs:boolean

xs:string lt xs:string
-> xs:boolean

xs:date lt xs:date
-> xs:boolean

xs:time lt xs:time
-> xs:boolean

xs:yearMonthDuration lt xs:yearMonthDuration
-> xs:boolean

xs:dayTimeDuration lt xs:dayTimeDuration
-> xs:boolean

ge

größer gleich

Zahlen, boolesche Werte, Strings, Datumswerte

numeric ge numeric
-> xs:boolean

xs:boolean ge xs:boolean
-> xs:boolean

xs:string ge xs:string
-> xs:boolean

xs:date ge xs:date
-> xs:boolean

xs:time ge xs:time
-> xs:boolean

xs:yearMonthDuration ge xs:yearMonthDuration
-> xs:boolean

xs:dayTimeDuration ge xs:dayTimeDuration
-> xs:boolean

le

kleiner gleich

Zahlen, boolesche Werte, Strings, Datumswerte

numeric le numeric
-> xs:boolean

xs:boolean le xs:boolean
-> xs:boolean

xs:string le xs:string
-> xs:boolean

xs:date le xs:date
-> xs:boolean

xs:time le xs:time
-> xs:boolean

xs:yearMonthDuration le xs:yearMonthDuration
-> xs:boolean

xs:dayTimeDuration le xs:dayTimeDuration
-> xs:boolean

is

ist ein

Nodes

node() is node() -> xs:boolean

isnot

ist nicht ein

Nodes

node() isnot node() -> xs:boolean

except

Ausschluss

Nodes

node()* except node()* -> node()*

intersect

Schnittmenge

Nodes

node()* intersect node()* -> node()*

union

Vereinigung

Nodes

node()* union node()* -> node()*

|

Vereinigung

Nodes

node()* node()* -> node()*

<<

voriger Knoten

Nodes

node() << node() -> xs:boolean

>>

folg. Knoten

Nodes

node() >> node() -> xs:boolean

,

Itemtrenner

Items (Sequenzen)

item()* item()* -> item()*

Tabelle: Übersicht über binäre Operatoren.

Erläuterung anhand des +-Operators

Hinter dem +-Operator stehen mehrere Operatorfunktionen, die diesen – außer auf die üblichen numerischen Datentypenintuitiv auch auf Datumswerte anwendbar machen. Die zustän­dige Operatorfunktion steht dabei lediglich als Definition des Verfahrens mit den jeweiligen Datentypen im Hintergrund.

Der Vollständigkeit halber ist eine Operatorfunktionen auch für die bereits in XPath 1.0 übliche numerische Anwendung des +-Operators deklariert. Hier drei Beispiele für Definitionen:

op:add-dayTimeDuration-to-date($srcval1 as xs:date,
              $srcval2 as xs:dayTimeDuration)
              as xs:date

op:add-dayTimeDuration-to-dateTime($srcval1 as xs:dateTime,
              $srcval2 as xs:dayTimeDuration)
              as xs:dateTime

op:numeric-add($operand1 as numeric,
               $operand2 as numeric)
               as numeric

Weiterhin sind auf den +-Operator noch Funktionen wie op:add-dayTimeDu­ration-to-time, op:add-dayTimeDurations, op:add-yearMonthDuration-to-date und op:add-yearMonthDuration-to-dateTime bezogen. Ähnliches gilt für die anderen Operatoren in der obigen Tabelle.

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn