cpimg_cat_to_web.pl


Übersicht

cpimg_cat_to_web.pl --help | --version

cpimg_cat_to_web.pl [ --verbose ... | --no_verbose ]
[ --catalog CATALOG ] [ --webdir WEBDIR ] [ --wdepattern WDEPATTERN ]
[ --wsdtemplate WSDTEMPLATE ] [ --wsddeffname WSDDEFFNAME ]
[ --cattemplate CATTEMPLATE ] [ --ifntemplate IFNTEMPLATE ] [ --overwrite ]
KENNUNG ...

Optionen

--help

Gibt eine kurze Hilfe aus und zeigt die Voreinstellungen an.

--version

Gibt kurze Hinweise zum Programm und die Version aus.

--verbose

Kopierte Bilddateien und Meldungen über den Programmablauf werden nach STDOUT ausgegeben.

--no_verbose

Diese Option hebt die Wirkung der Option --verbose auf.

--catalog CATALOG

Der "Katalog" der Bildergeschichten ist ein Verzeichnis, in dem für jede Bildergeschichte ein Unterverzeichnis liegt. CATALOG ist der Verzeichnispfad des Katalogs. Die zu kopierenden Bilder liegen in Unterverzeichnissen der Verzeichnisse der Bildergeschichten.

--webdir WEBDIR

Im Verzeichnis WEBDIR liegen die Bildergeschichten für das WWW in einzelnen Unterverzeichnissen, die Bilddateien in deren Unterverzeichnissen.

--wdepattern WDEPATTERN

WDEPATTERN ist ein Muster für Verzeichnis- oder Dateinamen im WWW-Verzeichnis WEBDIR, die Bildergeschichten entsprechen. Diese Einstellung wird nur benutzt, wenn keine KENNUNG in der Befehlszeile angegeben ist. In diesem Fall werden alle Einträge in WEBDIR mit dem Muster WDEPATTERN abgeglichen. Das Muster extrahiert aus dem Eintrag eine Kennung.

Wenn der zum Muster passende Verzeichniseintrag (nachfolgend DATEI genannt) eine Datei (kein Unterverzeichnis) ist, dann bestimmt die Vorlage WSDTEMPLATE den Namen eines Unterverzeichnisses (nachfolgend UVN genannt), der zu der Kennung passt. Wenn es keinen Verzeichniseintrag mit dem Namen UVN gibt, legt das Programm das Unterverzeichnis an. Wenn es dann ein Unterverzeichnis UVN gibt, aber in diesem Unterverzeichnis keine Datei mit dem Standard-Namen WSDDEFFNAME, dann wird DATEI nach UVN/WSDDEFFNAME kopiert. Wenn andernfalls UVN/DATEI nicht existiert, wird DATEI nach UVN/DATEI kopiert.

Das folgende Beispiel erläutert die Vorgabe-Einstellungen: Das Verzeichnis WEBDIR enthält die Datei s4711.xml. Der Name entspricht dem Muster für Bildergeschichten. Das Programm entnimmt aus dem Dateinamen die Kennung 4711. Der passende Unterverzeichnis-Name ist s4711. Wenn weder eine Datei noch ein Unterverzeichnis mit diesem Namen existieren, legt das Programm das Unterverzeichnis s4711 an. Wenn dann das Unterverzeichnis s4711 existiert, aber nicht die Datei s4711/story.xml, dann wird s4711.xml nach s4711/story.xml kopiert. Wenn andernfalls s4711/story.xml existiert, aber nicht s4711/s4711.xml, dann wird s4711.xml nach s4711/s4711.xml kopiert.

--wsdtemplate WSDTEMPLATE

WSDTEMPLATE ist die Vorlage für den Namen des Unterverzeichnisses der Bildergeschichte im Verzeichnis WEBDIR mit einer vorgegebenen Kennung. Der Name des Unterverzeichnisses wird gebildet, indem der Platzhalter ${key} in WSDTEMPLATE durch die Kennung ersetzt wird.

--wsddeffname WSDDEFFNAME

WSDDEFFNAME ist der Standard-Dateiname einer Bildergeschichte in den Unterverzeichnissen von WEBDIR. WSDDEFFNAME wird nur benutzt, wenn keine KENNUNG in der Befehlszeile angegeben ist und der Name einer Datei im Verzeichnis WEBDIR dem Muster WDEPATTERN entspricht.

--cattemplate CATTEMPLATE

Der Name des Unterverzeichnisses der Bildergeschichte mit einer vorgegebenen Kennung im Verzeichnis CATALOG ergibt sich, indem in der Vorlage CATTEMPLATE der Platzhalter ${key} durch die Kennung ersetzt wird.

--ifntemplate IFNTEMPLATE

Aus den Bildergeschichten (XML-Dateien) im WWW-Verzeichnis WEBDIR liest das Programm die Kennungen der benötigten Bilddateien (jpg/@src). Der Dateiname der zugehörigen Bilddatei wird gebildet, indem in der Vorlage IFNTEMPLATE der Platzhalter ${img} durch die Kennung des Bildes ersetzt wird. Bilddateien mit dem passenden Namen werden in allen Unterverzeichnissen des Bildgeschichten-Unterverzeichnisses (s. CATTEMPLATE) gesucht und in das gleichnamige Unterverzeichnis der Bildgeschichte im WWW-Verzeichnis kopiert. Unterverzeichnisse werden erzeugt, falls nötig. Existierende Bilddateien werden nur dann überschrieben, wenn die Option --overwrite gesetzt ist.

--overwrite

Existierende Bilddateien überschreiben

Existierende Bilddateien in Unterverzeichnissen des WWW-Verzeichnisses WEBDIR werden nur dann ersetzt, wenn diese Option gesetzt ist.

KENNUNG

KENNUNG ist die Kennung einer Bildergeschichte. Wenn die Befehlszeile eine oder mehrere Kennungen von Bildergeschichten enthält, werden nur die Unterverzeichnisse von WEBDIR verarbeitet, deren Namen sich aus den Kennungen und der Vorlage WSDTEMPLATE ergeben.

Andernfalls werden zunächst zu allen Dateien in WEBDIR, deren Name dem Muster WDEPATTERN entspricht, bei Bedarf entsprechende Unterverzeichnisse erzeugt und dann alle Unterverzeichnisse verarbeitet, deren Name dem Muster WDEPATTERN entspricht.

Beschreibung

Das Programm cpimg_cat_to_web.pl liest Bildergeschichten (XML-Namensraum http://herbaer.de/xmlns/20080705/imgshow, imgshow.rng) in der Vorlage für den Webserver und kopiert die Bilder, auf die diese verweisen, aus dem umfassenden „Katalog” in die passenden Unterverzeichnisse der Vorlage.

Wesentliche Programmteile und Funktionen

Der erste Parameter $args der Funktionen ist die HASHREF der Befehlszeilen-Argumente.

JpgTagsProcessor

Das package JpgTagsProcessor kapselt einen SAX-Behandler, der bei der öffnenen Markierung eines jpg-Elements eine Funktion aufruft. Der aufgerufenen Funktion wird eine HASHREF als Parameter übergeben, deren Schlüssel die Namen der Attribute des jpg-Elements sind und deren Werte die Werte der Attribute. Qualifizierten Attributname wird der Namensraum in geschweiften Klammern vorangestellt.

my $filename = "datei.xml";
my $num_jpg_elements = 0;
my $code = sub {++$num_jpg_elements};
new JpgTagsProcessor ($code) -> parse_file ($filename);
print "$filename enthält $num_jpg_elements jpg-Elemente\n";
process_keys ($args, $keys)

$keys ist eine ARRAYREF von Kennungen von Bildergeschichten. Die Funktion ruft ermittelt für jede Kennung den Pfad des zugehörigen Unterverzeichnisses von WEBDIR (s. WSDTEMPLATE) und ruft process_websubdir auf.

process_webdir ($args, $webdir, $catalog)

$webdir ist die Vorlage für den WWW-Server (WWW-Verzeichnis), $catalog ist das "Katalog"-Verzeichnis, aus dem Bilddateien kopiert werden.

Die Funktion verarbeitet zunächst alle Dateien im Verzeichnis $webdir, deren Name dem Muster WDEPATTERN entspricht. Sie legt, falls nötig und möglich, das entsprechenden Unterverzeichnis an (s. WSDTEMPLATE) und kopiert die Datei in dieses Verzeichnis, falls möglich, mit dem Standard-Namen WSDDEFFNAME.

Dann ruft sie für alle Unterverzeichnisse von $webdir, deren Name dem Muster WDEPATTERN entspricht, die Funktion process_websubdir auf.

process_websubdir ($args, $key, $wsdp, $catalog)
$key

Die Kennung einer Bildergeschichte. Sie bestimmt zusammen mit der Vorlage CATTEMPLATE den Namen des Unterverzeichnisses von $catalog, aus dem die Bilddateien kopiert werden.

$wsdp

Der Pfad eines Unterverzeichnisses des WWW-Verzeichnisses. Alle Dateien in diesem Verzeichnis werden nach Bildverweisen (jpg/@src - Attributen) durchsucht. Die Bilddateien werden in Unterverzeichnisse dieses Verzeichnisses kopiert.

$catalog

Das Katalog-Verzeichnis.

Die Funktion ermittelt zunächst das Unterverzeichnis von $catalog zur Kennung $key und von diesem Verzeichnis eine Liste aller Unterverzeichnisse.

Sie definiert dann einen Behandler für jpg-XML-Elemente. Aus dem Bildschlüssel (Attribut src) und der Vorlage IFNTEMPLATE bestimmt der Behandler den Namen der Bilddatei. Er sucht die Dateien dieses Namens in allen Unterverzeichnissen der Liste und kopiert sie in die gleichnamigen Unterverzeichnisse von $wsdp. Unterverzeichnisse von $wsdp werden bei Bedarf erzeugt.

Die Funktion JpgTagsProcessor::parse_file verarbeitet alle Dateien in $wsdp und ruft für jedes jpg-Element die Behandlungsfunktion auf. Ob die verarbeitete Datei überhaupt eine "richtige" XML-Datei ist, wird hier gar nicht beachtet. Wenn die Datei nicht als XML-Datei verarbeitet werden kann, dann ist es auch keine.

Software-Voraussetzungen

Das Programm ist mit 5.10 entwickelt. Es benutzt die Standard-Module Fcntl, File::Spec::Functions und File::Copy, das CPAN-Module XML::SAX::ParserFactory und das Modul Herbaer::Readargs. Es muss auch ein SAX-Parser eingerichtet sein, den XML::SAX::ParserFactory findet.