Definieren einer XPath-Funktion

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  SPS-Datei: Zusätzliche Funktionen > Benutzerdefinierte XPath-Funktionen >

Definieren einer XPath-Funktion

Eine benutzerdefinierte XPath-Funktion benötigt (i) einen Namen (einen Text-String) und (ii) eine Definition (einen XPath-Ausdruck).

 

Darüber hinaus können Sie für die Funktion einen oder mehrere Parameter definieren. Eine benutzerdefinierte XPath-Funktion kann auch einen optionalen Rückgabetyp haben (wird durch Auswählen eines Typs aus der Dropdown-Liste des Listenfelds Rückgabetyp angegeben). Ein Rückgabetyp kann sinnvoll sein, wenn Sie  sicherstellen möchten, dass der Datentyp des Rückgabewerts mit dem ausgewählten Datentyp übereinstimmt. Beachten Sie, dass der Rückgabewert nicht in den ausgewählten Datentyp konvertiert wird. Wenn die Typen nicht übereinstimmen, wird eine Fehlermeldung ausgegeben. Wenn kein Rückgabewert angegeben wird, wird der Datentyp nicht überprüft.

 

Nachdem eine benutzerdefinierte XPath-Funktion erstellt worden ist, kann sie an einer beliebigen Stelle des Designs verwendet werden. Im XSLT-Stylesheet wird sie als xsl:function-Element erstellt, das ein Child des Elements xsl:stylesheet ist, wie im unten stehenden Listing gezeigt wird.

 

<xsl:stylesheet>

   ...

   <xsl:function name="sps:Stock">

 <xsl:sequence select="$XML/Trades/Stock[@name=$XML/Trades/Selection/Stock]"/>

   </xsl:function>

   <xsl:function name="sps:Average" as="xs:decimal">

 <xsl:param name="a" as="xs:integer"/>

 <xsl:param name="b" as="xs:integer"/>

 <xsl:param name="c" as="xs:integer"/>

 <xsl:sequence select="avg( ($a, $b, $c) )"/>

  </xsl:function>

</xsl:stylesheet>

 

Die in der unten stehenden Abbildung und im obigen Listing gezeigte sps:Stock-Funktion gibt das Element /Trades/Stock zurück, das ein name-Attribut mit einem Wert hat, der dem Inhalt des Elements /Trades/Selection/Stock entspricht. Die oben aufgelistete Funktion sps:Average gibt den Mittelwert der drei Eingabeparameterwerte zurück. Die Funktionsdefinition verwendet die Funktion avg() von XPath 2.0/3.0. Der Rückgabedatentyp ist auf den Typ xs:decimal festgelegt, das ist der Datentyp, der von der Funktion avg()zurückgegeben wird, wenn Eingabewerte des Datentyps xs:integer überprüft werden. Wenn der Rückgabetyp angegeben wird, wird der Datentyp des Rückgabewerts dahingehend überprüft, ob er mit dem angegebenen Typ übereinstimmt. Falls dem nicht so ist, wird eine Fehlermeldung ausgegeben.

 

XPFxDlg01

 

Definieren der Funktion

Um eine Definition zu definieren, klicken Sie in der Schema-Struktur oder in der Design-Struktur auf das Symbol Plus des Elements "XPath-Funktionen". Dadurch erscheint das Dialogfeld "XPath-Funktionen" (Abbildung oben). Wenn Sie eine Funktion bearbeiten möchten, die bereits erstellt worden ist, doppelklicken Sie ihren Eintrag in der Liste der XPath-Funktionen. Geben Sie dann einen Namen für die Funktion und im Bereich Funktionsrumpf eine Definition ein. Parameterdefinitionen können, falls nötig, eingegeben werden (Details dazu finden Sie in den nächsten beiden Abschnitten Parameter und Sequenzen und Parameter und Nodes). Ein Rückgabetyp für die Funktion kann ebenfalls angegeben werden (siehe oben).

 

Der wichtigste Punkt, den Sie beim Schreiben des XPath-Ausdrucks, der die XPath-Funktion definiert, beachten müssen, ist, dass es keinen Kontext-Node für den XPath-Ausdruck gibt. Wenn der XPath-Ausdruck einen Node lokalisieren muss, dann kann der Kontext-Node auf eine der folgenden Arten festgelegt werden:

 

1.Der XPath-Ausdruck beginnt mir der Root des Dokuments. Die Dokument-Root wird im ersten Lokalisierungsschritt des XPath-Ausdrucks als $XML angegeben. Der XPath-Ausdruck $XML/Trades/Stock[1] findet zum Beispiel das erste Stock Child-Element des Elements /Trades. Die Variable $XML (die die Dokument-Root des Hauptschemas lokalisiert) wird von StyleVision global in allen SPS-Designs definiert.
2.Der Kontext-Node kann als Parameter ausgegeben werden. Eine Erklärung dazu finden Sie weiter unten im Abschnitt Parameter und Nodes.

 

In den folgenden Fällen werden Fehlermeldungen zurückgegeben:

 

Wenn ein Parameter definiert ist, aber im Rumpf der Definition nicht verwendet wird.
Wenn der Datentyp eines Werts, der von der Funktion zurückgegeben wird, nicht dem Rückgabetyp entspricht, der für die Funktion definiert wurde.
Wenn eine beliebige Funktion im SPS einen Fehler enthält, wird ein XSLT-Fehler für das gesamte Design generiert, selbst wenn die Funktion, die den Fehler enthält, nicht aufgerufen wird. Beachten Sie jedoch, dass eine Funktion deaktiviert werden kann, indem ihr Kontrollkästchen in der Liste der benutzerdefinierten XPath-Funktionen deaktiviert wird. Wenn die Funktion im Design deaktiviert ist, wird sie nicht in das XSLT-Dokument aufgenommen, das aus dem Design generiert wird. Auf diese Weise kann ein XPath-Ausdruck, der einen Fehler enthält vom XSLT ausgeschlossen werden und es wird kein XSLT-Fehler generiert.

 


© 2019 Altova GmbH