Altova RaptorXML Server 2024

Erstellen von Python-Skripts

Zur Startseite Zurück Nach oben Weiter

In diesem Abschnitt werden folgenden Punkte beschrieben:

 

Python-Version

Speichern von Python-Skripts

Übergeben eines Python-Skripts an RaptorXML Server

Python-Eintrittspunktfunktionen

Vereinfachte Struktur eines Python-Skripts

Die Python-Eintrittspunktfunktion im Detail

 

Python-Version

Vom Benutzer erstellte Python-Skripts müssen mindestens mit Python 3.3.1 kompatibel sein.

 

Python-Skripts sicher machen

Wenn ein Python-Skript in einem Befehl über HTTP an RaptorXML Server adressiert ist, funktioniert das Skript nur, wenn es sich im vertrauenswürdigen Verzeichnis befindet. Das Skript wird vom vertrauenswürdigen Verzeichnis aus ausgeführt. Wenn Sie ein Python-Skript aus einem anderen Verzeichnis definieren, wird ein Fehler ausgegeben. Das vertrauenswürdige Verzeichnis wird in der server.script-root-dir Einstellung der Serverkonfigurationsdatei definiert. Wenn Sie Python-Skripts verwenden möchten, muss ein vertrauenswürdiges Verzeichnis definiert werden. Stellen Sie sicher, dass alle Python-Skripts, die verwendet werden sollen, in diesem Verzeichnis gespeichert werden.

 

Zwar werden alle vom Server für HTTP-Auftragsanforderungen generierten Ausgabedateien in das Auftragsausgabeverzeichnis (ein Unterverzeichnis von output-root-directory) geschrieben, doch gilt diese Einschränkung nicht für Python-Skripts, die in jeden Ordner geschrieben werden können. Der Server-Administrator muss die Python-Skripts im vertrauenswürdigen Verzeichnis auf potentielle Schwachstellen überprüfen.

 

Übergeben eines Python-Skripts an RaptorXML Server

Ein Python-Skript wird mit dem --script-Parameter der folgenden Befehle übergeben:

 

valxml-withxsd (xsi)

valxsd (xsd)

 

Diese Befehle können über die Befehlszeilenschnittstelle oder die HTTP-Schnittstelle verwendet werden. Ein Beispiel dazu finden Sie im Abschnitt Ausführen von Python-Skripts.

 

Python-Eintrittspunktfunktionen

Die Befehle, die Zugriff auf die Python-Schnittstelle gestatten (siehe Liste oben), sind Validierungsbefehle und das Python-Skript wird nur dann ausgeführt, wenn die mit dem Befehl übergebenen Dateien gültig sind. Nachdem die Validierung erfolgreich ausgeführt wurde, ruft  RaptorXML Server je nachdem, welcher Befehl ausgeführt wurde, eine bestimmte Funktion auf. Die aufgerufene Funktion (siehe Tabelle unten) muss daher im Python-Skript definiert sein. Sie muss mit zwei Parametern definiert sein: der erste ist das Auftragsobjekt, der zweite ist abhängig davon, welcher Befehl ausgeführt wurde (siehe Tabelle).

 

Befehl

Von RaptorXML Server aufgerufene Funktion

valxml-withxsd (xsi)

on_xsi_valid(job,instance)

valxsd (xsd)

on_xsd_valid(job,schema)

 

Vereinfachte Struktur des Python-Skripts

Ein Python-Skript, über das auf die Python-Schnittstelle zugegriffen wird, hat die folgende grundlegende Struktur. Beachten Sie, wie die Python-Eintrittspunktfunktion definiert ist.

 

1

import os

from altova import xml, xsd

2

def on_xsi_valid(job,instance):

filename = os.path.join(job.output_dir,'script_out.txt')

job.append_output_filename(filename)

f = open(filename,'w')

f.write(str(type(job))+'\')

f.write(str(job)+'\')

f.write(job.output_dir+'\')

f.close()

filename2 = os.path.join(job.output_dir,'script_out2.txt')

job.append_output_filename(filename2)

f2 = open(filename2,'w')

print_instance(f2,instance)

f2.close()

3

CodeBlock-1

  ...

CodeBlock-N

 

 

Beschreibung der Struktur des obigen Skripts:

 

1

Importiert das vordefinierte os Modul von Python und anschließend das xml, xsd-Modul der Altova-Bibliothek.

2

Die Python-Eintrittspunktfunktion (siehe unten). Dabei könnte es sich um eine der folgenden handeln:

on_xsi_valid(job,instance), on_xsd_valid(job,schema),
on_dts_valid(job,dts), on_xbrl_valid(job,instance).

3

Zusätzliche Codeblöcke, von denen jeder Funktionsdefinitionen oder anderen Code enthält.

 

Die Python-Eintrittspunktfunktion im Detail

In diesem Abschnitt werden anhand der folgenden Eintrittspunktfunktionsdefinition wichtige Punkte zur Python-Eintrittspunktfunktion erläutert.

 

def on_xsi_valid(job,instance):

filename = os.path.join(job.output_dir,'script_out.txt')

job.append_output_filename(filename)

f = open(filename,'w')

f.write(str(type(job))+'\')

f.write(str(job)+'\')

f.write(job.output_dir+'\')

f.close()

filename2 = os.path.join(job.output_dir,'script_out2.txt')

job.append_output_filename(filename2)

f2 = open(filename2,'w')

print_instance(f2,instance)

f2.close

 

Die Zeile def on_xsi_valid(job,instance): beginnt den Funktionsdefinitionsblock.

Die Funktion hat den Namen on_xsi_valid(job,instance) und erhält zwei Argumente: job und instance.

Dies ist die Funktion, die aufgerufen wird, nachdem RaptorXML Server den Befehl valxml-withxsd (xsi) erfolgreich ausgeführt und die angegebene(n) XML-Datei(en) als gültig validiert hat.

Die Werte der Argumente job und instance werden von RaptorXML Server bereitgestellt.

Der Wert der Variablen filename wird mit Hilfe von job.output_dir konstruiert. Der Wert  von job.output_dir ist bei Verwendung der HTTP-Schnittstelle in der Server-Konfigurationsdatei definiert. Bei Verwendung des CLI ist er im Arbeitsverzeichnis definiert.

Die Funktion job.append_output_filename hängt einen Dateinamen an die Auftragsausgabe an.

 

© 2018-2024 Altova GmbH