[Allegro] Altes von Janas

Thomas Berger ThB at Gymel.com
Mi Okt 5 18:12:04 CEST 2011


Lieber Herr Eversberg, liebe Liste,

alle Jahre wieder denke ich, Janas muesse doch eigentlich nuetzlich
sein: Eine Browseroberflaeche, die z.B. Buttons und Checkboxes
erlaubt, scriptfaehig ist und ausserdem mit a99 interagieren kann.

Konkret wollte ich aus einem OAI-Repository, in dem Identnummern der lokalen
allegro-Datenbank in den Datensaetzen hinterlegt sind, gewisse
Zusatzinformationen abgreifen und in die lokale Datenbank uebertragen
(Kontext ist ein Digitalisierungsprojekt: Nach der Bereitstellung von MAB-Daten
ueber OAI sind Katalogisate, Strukturdaten und Scans zusammengefuehrt worden,
das OAI-Repository der Digitalisierungsanwendung stellt nun METS-Daten
zur Verfuegung, in denen sowohl die Identnummer im Katalog als auch
die URL der Digitalisierung hinterlegt sind, letztere soll dann natuerlich
den Katalog anreichern).

Es handelt sich um eine typische Harvesting-Aufgabe: Man will alle
(bis zum jeweils selbstgewaehlten Zeitpunkt fertigen) Digitalisate
in der eigenen Datenbank nachweisen. Es handelt sich auch um eine
triviale Uebung in XSLT: Pro Datensatz zwei Elemente herausgreifen und
in der Textform
#003 Identnummer
#013g URL
fuer ein a99-Update aufbereiten.

Ich musste dann allerdings feststellen, dass es aus Schutz vor
XSS (Cross-Site-Scripting) in keinem Browser (die haben ja alle
XSLT eingebaut) moeglich ist, einer fremden Seite ein eigenes
Stylesheet aufzuzwingen und auch AJAX-Methoden sind aus diesem
Grund nicht einsetzbar. HTML5 wird da nicht viel Besserung bringen,
da die vorgeschlagenen Standards alle das deklarierte Einverstaendnis
der Zielseite voraussetzen (klingt zunaechst etwas widersinnig, denn
*ich* bin doch einverstanden damit, die per HTTP angeforderten
Daten aufzubereiten, aber wenn man sich vorstellt, dass das Skript
nebenbei auch noch Verbindungen zu meiner Bank aufnimmt, ohne
dass "ich" das merke...) Aus dem gleichen Grund ist es aus dem
Browser heraus auch nicht moeglich, solche Resultate abzuspeichern
oder auch nur in die Zwischenablage zu speichern (ausser man weicht
auf Java- oder Flash-Plugins zurueck).

Gaengiges Workaround gegen solche Cross-Site-Skripting-Probleme
ist der Einsatz eines Proxies: Dessen Adresse spreche ich an
und er leitet die Requests an das OAI-Repository weiter, schreibt
das Ergebnis so um, dass mein Stylesheet wirken soll und liefert
dieses Stylesheet auch aus: Mein Browser unterhaelt sich dann nur
mit diesem Proxy und alles ist gut. Leider ist die Anforderung,
dass das Harvesten auf einem Terminal-Server-Arbeitsplatz durch
technisch nicht versierte Anwender zu erfolgen hat: Kein Proxy
weit und breit.

Sicher ist es nun mit Visual Basic oder der Windows-Power-Shell
auch moeglich, die geforderte Aktion durchzufuehren, aber irgendwie
war ich auf "lass' es den Browser machen" fixiert und habe daher
eine Loesung implementiert, die janas als Browser und a99 als
Proxy einsetzt:

Der Anwender startet in a99 den Flex,

a99 leitet an Janas ueber, das ein Formular mit auszufuellenden
Parametern (URL des Repositories, Metadatenformat, Set, From,
Until) bereitstellt, beim betaetigen von Submit landen diese
Formulareingaben als Anwendervariable in a99

a99 baut daraus die konkrete Abfrage-URL, schickt die ab,
schreibt das Ergebnis leicht um (Austausch der xsl-Stylesheet-
Information) und uebergibt an Janas

Janas wandelt die XML-Datei dank des eingebundenen Stylesheets
automatisch um, ein Textarea-Feld enthaelt die extrahierten
Daten, ausserdem muss das Resumption-Token (Parameter fuer
die Fortsetzung der Anfrage bei portionierten Ergebnissen)
erkannt werden, ein Submit-Button  leitet das wieder an a99.

a99 haengt die extrahierten Daten, an eine Datei an und
konstruiert aus dem Resumption-Token eine neue Anfrage, etc.

Ist alles abgearbeitet (der letzte Request hat kein Resumption-
Token mehr geliefert), bietet a99 das Update der geharvesteten
Daten in die Datenbank an. Eine Beschleunigung bietet sich an,
indem durch eingebettetes Javascript direkt nach der Umwandlung
in HTML durch den Browser der Submit-Button betaetigt wird,
solange zumindest, wie es Resumption-Tokens gibt.


In dem Zusammenhang ist mir folgendes aufgefallen, einiges ist
womoeglich schon vor Jahren gemeldet worden, aber in Vergessenheit
geraten:

1.
"get I" bringt nur die ersten 64kB in die iV, xget.rtf verspricht
hingegen 255.000 Bytes und xvar.rtf 4MB (das ist wohl jeweils die
Maximalgroesse der iV zum Redaktionsstand der Seite gewesen).
Moeglicherweise ist es ein Messfehler, 64kB ist die Groesse der Datei
nach "write", evtl. kann das Kommando nicht die komplette iV)

2.
htmform.flx, jax.htm funktionieren nicht mehr.
Es scheint so (Windows 7 x64), dass man im Flex stets das Janas-Fenster
mit "janas 0" abschiessen muss, sonst fuehrt ein erneuter Aufruf
"janas ..." fast immer zu einer Browser-Fehlermeldung

3.
das "act" im von janas generierten Flex nervt, wenn man - wie in
jax.htm z.b. vorgesehen - janas als Bedienoberflaeche praesent
halten will. Ist das undokumentierte "@" in den flex-URLs das
Steuerzeichen zum Ausschalten?

4.
Es ist ziemlich irritierend, dass in Janas die Shortcuts Strg-C,
Strg-V und Strg-A nicht aktiviert sind.

5.
Ich hatte einige Links mittels der in janas.htm beschriebenen Form
<a href="flex:x befehlsfolge"> angelegt (einige 'var' und 'ins',
um mehrere Werte ohne Formular zu uebertragen), auf Position 64
kam dann in a99 dann nicht "ins #uab" sondern "ins#uab" an, das
ist also derzeit nicht brauchbar.

6.
Aufgepasst: Auch wenn janas ja keine URL produziert, sondern alles in
eine Datei schreibt, muss man bei groesseren Datenmengen im Formular
im <form>-Element method="post" angeben, sonst wird nicht alles
uebergeben. Dann allerdings sind noch irgendwelche Schmutzzeichen
am Ende der uebergebenen Werte, Abhilfe durch ein
<input type="hidden" name="uxx" value=""/>
als letztes Element im Formular, dann landet der Schmutz in #uxx
und ist nicht an wichtige Werte angeflanscht.

7.
Beobachtung:
mit <input type="text" name="$Abc" ...> lassen sich auch $-Variable
setzen, weil der von janas generierte Flex aber typischerweise an
andere Flexe weiterleitet, nur die mit den Grossbuchstaben. Allerdings
pflastert Janas grosszuegig mit Spatien, so dass in a99 am Anfang
der $-Variablen ein paar ueberfluessige Leerzeichen zu stehen kommen.

8.
Formulardaten (etwa in textareas) koennen Zeilenumbrueche enthalten,
janas setzt vor die erste Zeile den Variablennamen, und eliminiert
Durchschuesse. Das mag ganz nett sein in der Beispielanwendung, wo
der Benutzer Kategorienummern plus Inhalte in ein Textarea schreibt,
fuer beliebige Eingaben (die in einer $-Variablen landen koennen
und sollen) macht es das aber sehr umstaendlich: Das eigentliche
Textarea muss aus dem Formular herausgehalten werden, das Submit
im Formular muss dann durch einen Event-Handler geleitet werden, der
\r\n durch "^J" ersetzt, in a99 dann erfolgt die umgekehrte Behandlung
mittels "ins _^~J_^J_".

9.
Das oben beschriebene Wechselspiel von a99 und janas ist wegen der
Macke bei 2 derzeit nicht optimal, waehrend es ablaeuft, kann man
auf dem Rechner nichts anderes machen, weil die beteiligten Fenster
staendig den Focus an sich ziehen. Auch ist es so, dass oefters
a99 (und seltener Janas) eine bis zu zweistellige Anzahl von Sekunden
in halbinitialisiertem Zustand (Menue da, ansonsten alles fliedrige
Flaeche) dahinvegetiert, bis es dann unvermittelt die Arbeit
aufnimmt. Aehnliches beim manuellen Schliessen eines Janas-Fensters:
a99 ist dann oft einige Zeit "ohne Rueckmeldung".

10.
(Derzeit) typisch fuer Janas-Nutzung sind ja oft on-the-fly
durch a99 produzierte HTML-Dateien (irgendwie muessen die
konkreten Datensaetze ja in die Browser-Umgebung transportiert
werden), insofern ist es unguenstig, dass ohne Pfad angegebene
Dateien in einem Unterverzeichnis der Programmverzeichnisses
gesucht werden: Man ist im Flex auf sich allein gestellt, aus
dem Pfad eine file-URL fuer Janas herzustellen:

var "file:///" W "/oaitemp.xml"
ins _:\\_|\\_
ins _\\_/_
janas



11.
Eine Frage: Hat jemand in Janas schon einmal ausprobiert, ob AJAX-
Ansaetze oder jQuery funktionieren: Also vor allem ob auch da
XMLHTTPRequest-Objekt mit flex-URLs umgehen kann?




(Alles getestet mit v31.8, Janas behauptet bei "?" allerdings,
es handele sich um Version 30.6)


Fazit: Sowohl XSLT-Transformationen von XML-Dateien als auch
CSS und (zumindest einfaches) JavaScript funktionieren in Janas so,
wie man es vom IE kennt und man kann es daher nutzen, um etwas
holprige GUI-Anwendungen "auf a99 drauf" zu setzen. Es gibt aber
einiges, was repariert werden muesste.


viele Gruesse
Thomas Berger


P.S.: Beim Aufpolieren und alles konfigurierbar machen ist mir aufgefallen,
dass "update" arg eingeschraenkt dadurch ist, dass man den Dateinamen
hart in die Anweisung codieren muss. Den "Tip", die Datei vorher
umzukopieren, halte ich fuer eher fragwuerdig, denn sie koennte gleich
heissen oder sehr gross sein, was dann jeweils Probleme mit sich fuehrt.



Mehr Informationen über die Mailingliste Allegro