-
Die Erfindung betrifft die Transcodierung von
Markierungssprachen.
-
Für die Darstellung von Dokumenten im Internet wird meist die
Markierungssprache HTML verwendet. Dabei wird mittels HTML
die Dokumentenstruktur beschrieben, indem den Teilen des
Texts über HTML-Tags Attribute zugeordnet werden. Mittels
dieser Attribute erzeugt das Anzeigeprogramm (Browser) eine
angemessene Darstellung ('rendering') auf dem jeweils
benutzten Gerät, so daß ein HTML Dokument auf jedem Gerät
angemessen lesbar sein sollte.
-
Erweiterungen von HTML in Zusammenspiel mit der Dominanz
weniger Browser und erheblicher Nutzung auf Standard-PC mit
Standard-Bildschirmen haben jedoch dazu geführt, daß eine
Vielzahl von HTML-Seiten nur auf diesen Geräten vernünftig
lesbar sind. Mit dem Vordringen von Mobiltelefonen und
Taschencomputern mit graphischen Anzeigen wird es jedoch
wünschenswert, HTML-Seiten so zu gestalten, daß diese auch dort
verwendbar sind.
-
Zu diesem Zweck wurde u. a. eine alternative
Markierungssprache WML entwickelt, die auf die beschränkten
Möglichkeiten dieser Geräte Rücksicht nimmt. Syntaktisch sind sich
WML und HTML recht ähnlich; die zugrunde liegenden Modelle
für Anzeige und Interaktion sind hingegen wesentlich
unterschiedlich. Dennoch ist eine Umsetzung von HTML nach WML oder
Erzeugung aus einer gemeinsamen Quelle möglich. In dem
Artikel von M. Metter und R. Colomb, "WAP enabling existing HTML
applications", Proc. 1st Austr. User Interface Conference
AUIC 2000, IEEE 1999, pp. 49-57, ISBN 0-7795-0515-5, werden
informell Umsetzungen von HTML nach WML beschrieben. In der
Einleitung wird die Möglichkeit einer automatischen Umsetzung
angesprochen.
-
Hierfür bieten eine Reihe von Firmen wie IBM (WebSphere),
SpyGlass und Mobileways Produkte an. Von der Firma Spyglass
liegt die internationale Patentpublikation WO 00/39666 vor.
In dieser wird ein Prozessor für die Umwandlung von HTML in
WML beschrieben, der als spezielles Programm in einer
Programmiersprache wie C++ realisiert ist. Diese Lösung kann nur
aufwendig an geänderte Anforderungen oder andere
Ausgabeformate angepaßt werden.
-
Ferner ist die vom WWW-Consortium (W3C, http:/ / www.w3c.org/)
vorgeschlagene Transkription mittels XSLT bekannt, die sowohl
unter der angegebenen Adresse online als auch in einer
Vielzahl von Publikationen beschrieben ist. XSLT ist eine
Scriptsprache mit einem funktionalen Umfang, der in etwa dem einer
normalen Programmiersprache entspricht. Ähnlich wie bei einem
Makro-Prozessor werden alle nicht besonders markierten
Elemente in den Zieltext ausgegeben. Durch verschiedene XSLT-
Skripte kann ein und dieselbe Quelle in verschieden Ziele,
insbesondere in HTML und WML, umgesetzt werden.
-
Für die unterschiedliche Formatierung mit XSL/XSLT kann im
Anzeigeprogramm ('browser') über bedingte Auswahl von
Stilblättern ('style sheets') eine Client-abhängige Formatierung
erreicht werden, wie sie bereits in HTML 4.0 über 'media
types' (Schlüsselwort 'media=' im 'STYLE' Element) vorgesehen
ist.
-
Alternativ zu der Bereitstellung mehrerer Stilblätter und
deren Auswahl im Anzeigeprogramm kann auch eine Transcodierung
im Server bewirkt werden, wie es die oben angesprochenen
kommerziellen Lösungen durchführen. In dem nicht-kommerziellen
'cocoon' Prozessor des Apache-HTTP-Servers für XML Seiten
kann das Schlüsselwort 'media=' verwendet werden, um eine vom
Zielgerät abhängige Auswahl der die Transformation
bewirkenden XSLT-Skripte zu bewirken.
-
Der generelle Ablauf einer Transcodierung ist in Fig. 1
skizziert. Auf einem Client C wird eine Anfrage 10
bereitgestellt, die in der Regel ein URI 10a, meist in Form einer
URL, sowie Präferenzwerte 10b wie die bevorzugte Sprache,
Zeichensatz etc. enthält. Im Server S wird mittels des URI
eine Datei 11a in einem Dateisystem 11 lokalisiert und nach
Bearbeitung durch einen Transcodierer 13 als Dokument 14
zurück zum Client C geschickt. Mit Rücksicht auf die
vorliegende Erfindung wurde in Fig. 1 die Bearbeitung der beim Server
eingetroffenen Präferenzwerte 10b' durch einen eigenen
Qualifizierer 12 vorgesehen, der den Transcoder 13 beeinflußt. In
dem weit verbreiteten Apache HTTP Server ist ein Modul
'mod_negotiation' vorgesehen, der ähnliche Eigenschaften hat.
Dazu gehört insbesondere die Inhalts-Bestimmung ('content
negotiation', RFC 2295) und die Varianten-Auswahl ('variant
selection', RFC 2296). Hierbei können sowohl boolsche als auch
numerische Attribute zusammen mit Qualitätsfaktoren angegeben
werden. Durch Multiplikation der durch die Qualitätsfaktoren
bewerteten Angaben wird eine Auswahl bewirkt. Numerischen
Quantitäten können im Rahmen der Auswahl durch Vergleich in
boolsche umgewandelt werden.
-
In allen bislang bekannten Lösungen wird über letztlich
boolsche, ggf. bewertete Attribute bzw. Schlüsselbegriffe eine
Auswahl erreicht. Dabei können jedoch nicht mehrere
Eigenschaften des Zielgeräts in einander ausgleichender Weise
berücksichtigt werden.
-
Die Erfindung benutzt daher unscharfe Logik (Fuzzy logic), um
die Transcodierung zu steuern.
-
Ausgangspunkt sind dabei Präferenzwerte 10b, die vom
Anzeigegerät (Display, Client C) an den Server S übermittelt werden.
Dies kann im Rahmen der oben erwähnten, aus HTTP bekannten
'content negoatiation' erfolgen. Alternativ oder zusätzlich
können weitere Header gemäß dem HTTP-Protokoll verwendet
werden. Falls dieses nicht möglich ist, da die Browser nicht
verändert werden können, können die Präferenzwerte auch über
CGI-Parameter übergeben werden. Als Präferenzwerte werden im
folgenden alle Parameter verstanden, die die Darstellung
abhängig vom Client beeinflussen sollen. Das können sein
Charakteristika des Betriebssystems oder des Browsers, solche
der verwendeten Hardware (Bildschirmgröße und -art, Eingabe
via Tastatur oder Stift) oder auch Präferenzen des Benutzers.
Im folgenden wird daher davon ausgegangen, daß numerische und
boolsche Attribute als Präferenzwerte von dem Anzeigegerät C
übertragen wurden.
-
Stellt man als Beispiel eine Tabelle dafür auf, wann ein
Dokument in kleinere Teildokumente zerlegt werden sollte, so
ergibt sich folgendes:
Tabelle 1
-
Eine andere Anwendung bestimmt die Auswahl des visuellen
Anteils der Ausgabe mittels von Benutzer mitgeteilter
persönlicher Fähigkeiten und Eigenschaften des Anzeigegeräts:
Tabelle 2
-
Vielfach und hier bevorzugt werden Fuzzy-Mengen durch eine
Trapez-Funktion beschrieben, wie in Fig. 2 für die Variable
'PDA' dargestellt ist. In der bevorzugten Ausführungsform
wird dies wie folgt spezifiziert:
SET display:
Phone = 50, 70, 100, 120;
PDA = 140, 160, 620, 660;
WebPAD = 560, 640, 800, 1200.
-
Hier wird ein Fuzzy-Set 'display' definiert, der eine Anzahl
von auch als linguistischen Variablen bezeichneten
Ausprägungen hat, die mit 'Phone', 'PDA' und 'WebPAD' bezeichnet
sind.
-
Bei der 'Internet Assignend Numbers Authority' (IANA) ist der
Bezeichner 'pix-y' für die Anzahl der vertikalen Pixel eines
Bildschirms insbesondere bei der oben erwähnten 'content
negotiation' vorgesehen. Dieses ist im Sinne der Fuzzy-Logik
ein scharfer Wert, dessen Anwendung auf 'display'
beispielsweise durch Ermittlung der Funktionswerte an der Stelle
'pix-y' die Werte für die Variablen ergibt. Für das Beispiel
pix-y = 630 führt das zu
Phone = 0
PDA = 30/40 = 0,75
WebPad = 70/80 = 0,875
-
Verbal könnte das Ergebnis wie folgt ausgedrückt werden: Das
Display mit 'pix-y = 630' ähnelt mehr einem WebPAD als einem
PDA, aber gar nicht einem Phone. Werden diese Variablen, wie
später dargestellt, in einem Kontext verwendet, der boolsche
Werte benötigt, dann werden diese Fuzzy-Variablen geschärft,
im einfachsten Fall durch Bestimmung des Maximums, so daß
dann Phone = false, PDA = false und WebPad = true sind. Es ist
klar, daß dieses stark vereinfachte Beispiel genauso gut
durch Bereichsabfragen erreicht werden könnte, weil die drei
Variablen bei der Schärfung durch Maximumsbildung einfach
vorab in herkömmliche Bestimmungen umgerechnet werden können.
-
Wird jedoch eine Entscheidung ähnlich der nach Tabelle 1
benötigt, so wird dies syntaktisch folgendermaßen dargestellt:
RULE contentSplitting:
IF display == Phone && userPrefs == paging
THEN always;
IF display == Phone && userPrefs == someScrolling
THEN often;
IF userPrefs == noPaging
THEN never;
. . .
-
Die drei Punkte deuten dabei weitere Zeilen an, die der
Übersichtlichkeit halber fortgelassen sind.
-
Durch diese Regel werden die Steuervariablen
'contentSplitting.always', 'contentSplitting.often' und
'contentSplitting.never' definiert. Dies erfolgt zunächst als Fuzzy Sets;
die Operatoren sind gemäß den Regeln der Fuzzy Logik zu
lesen.
-
Nachdem die Bestimmung der Fuzzy-Variablen erfolgt ist,
werden diese 'geschärft' oder de-fuzzifiziert, da in der
weiteren Verwendung keine unscharfen Fuzzy-Variablen brauchbar
sind. Hierfür sind in der Literatur eine Reihe von Methoden
bekannt; die einfachste ist das Maximum-Verfahren. In diesem
Fall wird, wie oben bereits dargestellt, als scharfer Wert
das Maximum genommen. Sind durch Fuzzy Logik die scharfen
Äquivalente der Variablen bestimmt, so dienen diese zur
Auswahl der durchzuführenden Transcodierung. In den folgenden
Beispielen sind die Fuzzy-Variablen und ihre geschärften
Varianten nicht unterschieden; die Auswahl erfolgt durch den
Kontext.
-
In einer ersten Ausführungsform sind eine Anzahl von 'style
sheets' vorgesehen, die verschiedene Ansichten einer
Quelldatei bestimmen. Jedem 'style sheet' wird über einen
Selektionsausdruck eine Variable zugeordnet, deren boolscher Wert
nach der Fuzzy-Logik und finaler Schärfung bestimmt wird.
Dies entspricht der bekannten Lösung, bei der anstelle von
Fuzzy-Logik normale boolsche Ausdrücke und Vergleiche
verwendet werden.
-
In einer zweiten Variante wird ein einziges 'style sheet' der
XSLT-Syntax verwendet. Die geschärften Fuzzy-Variablen werden
als vordefinierte Variablen bereitgestellt. Dies kann
beispielsweise erfolgen, indem eine entsprechende Anzahl von
XSLT-Anweisungen der Form
<xsl:variable name = "contentSplitting_somtimes"> 1
</xsl:variable>
vor dem Aufruf als Ergebnis der Fuzzy-Bearbeitung in eine
Datei geschrieben werden und dann per <xsl:include> eingefügt
werden. Durch Steueranweisungen wie <xsl:if> und <xsl:choose>
kann dann ein von den Variablen abhängige Verarbeitung mit
beliebigen Mitteln von XSLT erfolgen. Anstelle von
<xsl:variable> wird bevorzugt <xsl:attribute-set> in
Verbindung mit <xsl:attribute> verwendet:
<xsl:attribute-set name = "contentSplitting">
<xsl:attribute name = "always">0</xsl:attribute>
<xsl:attribute name = "often">0</xsl:attribute>
<xsl:attribute name = "sometimes">1</xsl:attribute>
</xsl:attribute-set>
-
In der Regel wird man nur die Variable, die wahr ist, in dem
'attribut-set' definieren, wie das in dem Beispiel bereits
angedeutet ist, indem die anderen Attribute gar nicht
definiert sind, und auch die ersten beiden Zeilen wegfallen
lassen.
-
Besonders einfach und bevorzugt verwendet wird die Erfindung
mittels einer Transcodierung durch eine Methode, die im
folgenden als RDL/TT (Acronym für 'Rule Description Language for
Tree Transformations') bezeichnet wird.
-
RDL/TT ist eine Scriptsprache mit einem passenden Prozessor,
die die Transcodierung eines Dokuments beschreibt. Dabei
beschreibt RDL/TT Modifikationen des als Baum dargestellten
Dokuments. Ein leeres RDL/TT-Script bewirkt eine unveränderte
Ausgabe des Dokuments. Im Gegensatz dazu wird bei XSLT (und
DSSSL) nur die Ausgabe erzeugt, die explizit in dem Skript
angegeben ist.
-
Dies wird an Hand des folgenden Beispiels erläutert. Zu
transcodieren sei die folgende XML-Datei:
-
Eine Transcodierung nach HTML mittels XSLT könnte wie folgt
aussehen:
-
Das Ergebnis dieser Transcodierung sieht dann wie folgt aus:
-
Mittels RDL/TT wird diese Transcodierung durch folgendes
Script erreicht:
-
Hierbei folgt hinter dem auslösenden Tag "<CATALOG>" eine
Anzahl von RDL/TT Anweisungen, die die Transformation des
Baumes beschreiben und sich auf den Unterbaum, dessen Wurzel das
auslösende Tag ist. Die Anweisungen sind als
Funktionsaufrufe formuliert, wobei weitgehend die Syntax von JAVA
verwendet wird. Die Anweisungen werden in der Syntax von RDL/TT
durch das wörtliche Hinschreiben des Tags, also als
"<CATALOG>", ausgewählt, was der Notation "<xsl:template
match = "CATALOG">" in XSLT entspricht. In XSLT würde das
ungeschütze Tag "<CATALOG>" dessen Ausgabe bewirken.
-
Eine Umwandlung nach WML könnte in RDL/TT wie folgt aussehen:
-
Da RDL/TT funktional durch Modifikation des Baumes anstatt
dessen Neuerzeugung die Transcodierung bewirkt, ist eine
Funktion 'rename' vorgesehen, die einen Knoten umbenennt. Die
weiteren Funktionen in RDL/TT können als JAVA-Funktionen vom
Anwender hinzugefügt werden und entsprechen den aus der
mannigfaltigen Literatur bekannten Operationen an Graphen. Dies
umfasst das Löschen ('delete') von Knoten oder Teilbäumen,
das Einfügen ('insert', 'append') von Knoten oder Blättern
('insertText', 'appendText'), Umbenennen ('rename') von
Knoten, Ersetzen von Teilbäumen durch Verweise ('links') und
Auslagern ('replaceWithLink', 'replaceWithDokument') dieser
Teilbäume in eigene Dokumente. Dabei verweist in üblicher
Semantik 'this' auf den aktuellen Knoten.
-
Die Steuerung verschiedener Transformationen kann in RDL/TT
sehr einfach dargestellt werden, indem anstelle eines
Markierungs-Tags die Steuervariable gesetzt wird:
-
Die bisherige Beschreibung bezieht sich auf die Auswahl der
Transcodierung im Server, wenn eine Transcodierung durch
Skripte erfolgt. Obwohl bislang nicht benutzt, könnte eine
solche Transcodierung sicherlich auch im Client erfolgen und
dann auch dort über Fuzzy-Regeln bestimmt werden.
Realistischer erscheint die bislang über boolsche Variable bewirkte
Auswahl eines von mehreren im Dokument vorgesehenen
Stilblättern durch unscharfe Logik. Im Anzeigeprogramm des Clients
muss dann jedoch der Benutzer die Relationen der unscharfen
Logik angeben, sofern diese nicht beispielsweise als XML-
Datei abrufbar sind.
-
Eine Auswahl der Stilblätter im Server ist mit RDL/TT
besonders einfach darstellbar, da RDL/TT nur die Änderungen in der
Baumstruktur darstellt: