http://www.xmlprague.cz/
Ja, der Abstand dieses Beitrags zum vorherigen ist der Beweis, wie wenig auf dieser Domain passiert…
Ausflüge in X-Richtung
http://www.xmlprague.cz/
Ja, der Abstand dieses Beitrags zum vorherigen ist der Beweis, wie wenig auf dieser Domain passiert…
Ich freue mich auf interessante 3 Tage!
Am zweiten Tag der diesjährigen tekom-Jahrestagung kam ich nicht in so viele Vorträge – meinen eigenen habe ich natürlich besucht! – aber ein paar Notizen sind es dennoch geworden. Den Freitag habe ich in diesem Jahr erstmalig nicht mehr besucht.
Wichtig: Risiken durch fehlendes Wissensmanagement. Es kann nicht oft genug wiederholt werden: Wissensmanagement ist kein Luxus, sondern eine Notwendigkeit. Bei bestimmten Informationen reicht es nicht, dass es (derzeit!) in der Firma Leute gibt, die das wissen. Sind diese Personen auf ewig verfügbar, werden die nie krank?
Ulrike Parson und Marion Bröer (parson AG) warnen nicht so eindringlich wie ich hier, sondern präsentieren praktikable Vorgehensweisen, wie man zu einem funktionierenden Wissensmanagement kommt. Unterlage
Jetzt den Entwurf des Standards für eine herstellerübergreifende Übersetzungsschnittstelle laden und kommentieren: http://www.dercom.de
Frau Dr. Witte von Cognitas stellt das Erstellen von Powerpoint-Foliensötzen (im .pptx-Format) aus COSIMA vor. Für den Kunden des Doku-Dienstleisters bietet sich dadurch die Chance für flexible und modulare Trainingsunterlagen mit allen Vorteilen, die ein Redaktionssystem bietet. Darunter natürlich die vorhandenen Übersetzungsprozesse, wodurch die Übersetzung von PowerPoint-Dateien komplett entfällt.
DOCUFY wird zitiert: „Wenn Sie Pilotkunde sein wollen, dann probieren wir das aus.“
Das Projekt stellt gewisse Herausforderungen an Redaktion und Redaktionssystem:
Am ersten Tag der diesjährigen tekom-Jahrestagung konnte ich einige Vorträge besuchen. Hier meine kurzen Notizen.
Gregor Fellenz (bekennender Fan von XML-basiertem Publishing mit umfangreichen Erfahrungen nicht nur mit der Verlagsbranche, zudem Autor von »InDesign automatisieren«) und Tobias Fischer berichten über den Stand er Layoutmöglichkeiten von CSS3. Und haben die mit Beispieldaten auch durchexerziert.
Dieter Gust berichtet über ISO-Normen 82079 und 9241. Es geht ihm im Kern um Beurteilungskriterien zur Ergonomie von elektronischen Medien. „Gebrauchstauglichkeit“ – was bedeutet das? Er verweist auf vorhandene und fehlende Aspekte im Normen-Kanon und versucht sich an einer Annäherung mit konkreten Projekten auf »mobile devices«. Fazit: Es bleibt noch einiges zu tun, und ohne intensive Beschäftigung mit der Materie geht es gar nicht.
Thomas Meinicke stellt den aktuellen Stand dieser (mittlerweile als OpenSource verfügbaren) Lösung von XSLT-Guru Dr. Michael Kay vor. Auch er kann sich dem Fazit anderer nicht ganz entziehen:
»Great solution, now looking for a problem to solve…«
Susan Griffin, u.a. Wiki-Gärtner bei Atlassian (Produzent von JIRA und Confluence), betont die Notwendigkeit des Aufräumend, Unkraut-jätend etc. wenn in einem kollaborativen System wie einem Wiki geschrieben und gearbeitet wird. Das gilt nicht nur für Textschaffende, sondern insbesondere auch wenn so ein Stetem als Wissenspool genutzt werden soll.
Guten Morgen aus Prag, gerade beginnt die 8. Konferenz XML Prague, aufgrund des Erfolgs jetzt zum zweiten Mal in großen Hörsaal der wirtschaftswissenschaftlichen Fakultät. Als Single Track Conference ist es (für mich) äußerst entspannend, mich nicht zwischen verschiedenen, parallelen Vorträgen entscheiden zu müssen.
Der Tag beginnt mit der Vorstellung der Sponsoren: MarkLogic, ExistSolutions, Oxygen (Version 14.2. kommt nächste Woche).
Warum sollten wir am Server statisches XML bereitstellen und im Browser mittels XSLT 2.0 aufbereiten? Michael Kay zeigt ein technologisches cooles Beispiel der Saxon-Dokumentation. Aber all dies könnte auch von Server-side Code erledigt werden?
Warum sollten wir XSLT verwenden, wenn wir auch gleich JavaScript verwenden können?
Es gibt einen offensichtliche Vorteil immer dann, wenn die Quelldaten in XML vorliegen, aber auch dann stellt sich die Frage, inwieweit ich dem Browser XML statt XHTML anbieten möchte, inwieweit ich Teile meiner Lösung (letztlich die XSLT-Programmierung) quasi öffentlich machen möchte.
Wow, der kommende Standard! Und »Effizienz«, eines meiner Lieblingsworte. Und »closures«, über die ich schon gehört habe… Was bedeutet das alles in einer Welt, in der nur wenige (wenn überhaupt) XSLT-2.0-Funktionen angekommen sind?
„?“ als neuer Operator zur Inline-Definition neuer Funktionen – wer hätt gedacht, dass es so einfach sein kann, die Syntax bestehender Umgebungen mit einem Zeichen so mächtig zu erweitern?
Spannend: Abrasoft wird dieses Jahr einen distributed streaming XSLT 3.0 processor veröffentlichen. Es wird interessant sein, wie sich weitere Mitspieler im doch übersichtlichen Markt der XSLT-Prozessoren auswirken. Und was distributed in diesem Zusammenhang bedeutet.
Wie verwaltet eine Software-Firma die notwendigen, unterschiedlichen End User License Agreements? Natürlich per XML. Neben einem recht einfachen Schema für die Dokumente gibt es natürlich die zwei Typen von Wiederverwendung:
Die nötigen Ergänzungen für OxygenXML zur Bearbeitung gibt es bei GitHub.
Q: Warum wurde nicht einfach DITA verwendet? A: Es wäre sehr viel aufwändiger gewesen, DITA geeignete anzupassen als eine Lösung mit 10 Elementen zu erstellen.
Die Beiträge von Gerrit Imsieke in der XSL List sind immer lesenswert!
Ein Zwischenformat für die Vermittlung von n Eingabeformaten zu m Ausgabeformaten reduziert den Bedarf an Konvertern von n×m auf n+m. Dabei müssen aber bestimmte (z.B. Layout-) Informationen „gerettet“ werden. Um das in der XML-Umgebung umzusetzen, sind XML-Attribute geeignet. In dem Zwischenformat, dass le-tex verwendet, landen diese Informationen in Elemente und Attribute in einem eigenen Namespace css:.
Die Erzeugung von IDML (das XML-Format für InDesign-Dokumente) lobt er zu Recht. Alles in allem ein überzeugender Use-Case für den Einsatz der X-Technologien.
Ich dachte, es würde auch ein Projekt gezeigt, aber es war nur eine abstrakte Vorstellung der Bausteine des im Titel genannten Frameworks. Am Ende – und das ich nicht abwertend gemeint – war dieser Vortrag eine weitere Werbung für XProc zum Aufbau von XML-basierten Verarbeitungs-Prozesse.
Jetzt geht es um XSL-FO++, also nicht XSL-FO, sondern das Tool basiert auf LuaTEX.
Die Aufgabe maximize page usage ist komplex für automatisch erzeugte PDF-Dokumente und mit XSL-FO nur schwer oder gar nicht möglich. Für derartige und andere „dynamische“ Regeln muss der Layout-Prozessor mit dem Renderer „reden“. Im Produkt speedata Publisher wird das Input-XML auf Basis spezieller Layoutbefehle (in XML formuliert) verarbeitet. Dabei kommen interaktive Konzepte zum Einsatz, die adaptives Layout ermöglichen.
In der Frage-Session geht es scheinbar primär darum, dass die XSL-FO Working Group beim W3C mangels Interesse eingeschlafen sei…
Änderungsmarkierung ist schon länger eine Herausforderung und es ist mehr als nur die Änderungsanzeige nach dem Vergleich zweier Dokumente. Auf jeden Fall gibt es derzeit keinen Standard, wie Änderungen in Dokumenten markiert werden. So ein Standard, d.h. unabhängig von einem bestimmten XML-Vokabular, böte ein Vielzahl von Möglichkeiten. http://www.w3.org/community/change/ ist die Webseite der »Change Tracking Markup Community Group«.
DeltaXML zeigt neue Konstrukte um einen Hierachiewechsel abzubilden. Wenn zum Beispiel ein Wort im Text fett dargestellt wird, ergab sich bislang immer folgende umständliche Abbildung:
In diesem Satz ist ein fettesfettes Wort.
Aber wie soll eine derartig hinterlegte Änderung dann angezeigt werden?
Im Kern geht es um das „semantische Web“, in dem durch bestimmte Auszeichnungen die Inhalte beliebiger Webseiten besser auswertbar werden. Die hier empfohlene Technik dazu ist RDFa. Die Beispiele zeigen auch die Möglichkeit Bilder in einer regelbasierenden Form zu kommentieren.
Die Versuche der Organisatoren, den Vortragenden zu langsameren Sprechen zu motivieren, waren nicht besonders erfolgreich.
Und noch einmal RDF – jetzt ohne „a“. Ein Tweet:
Uche Ogbuji @uogbuji Aah! A dozen years after the self-inflicted wound of #RDF-#XML, I’m finally at a conference where everyone uses a saner syntax 🙂
Uche beginnt – nach einem „Happy Birthday“ für XML – mit einem Rückblick, welche Formate als Konkurrenten zu XML in Stellung gebracht wurden. Die MicroXML Community reduziert die Optionen der XML-Spezifikation auf ein Minimum, im Kern bleibt well-formed XML ohne Namespaces übrig. Und daran entzündet sich die Diskussion, denn z.B. xsl: scheint so unvermeidbar zu sein…
So, für wen ist µXML dann gedacht? »It’s for those who just don’t give a damn anymore!« Also für alle, die genug Probleme mit den Komplikationen von XML hatten…
Vorschläge zur Abbildung z.B. des xsl-Namespace sind xsl.template oder xsl-template
Nach dem Appell zur Reduktion vom XML mehr oder weniger auf die 1.0-Recommendation folgt nun ein Beitrag, der einen Blick in die Zukunft verspricht. Natürlich beginnt es mit einem Rückblick… der in eine Vorstellung akademischer Konzepte führt, die auf XML mit mehr oder weniger Kompatibilität basieren. Der Vergleich des 15-jährigen XML-Standards mit einem Teenager war noch unmittelbar einsichtig, die Besonderheiten von XStandoff, LMNL, FtanML etc. sind wohl Lösungen für ganz bestimmte Herausforderungen.
(Leider musste ich mich um aktive Projekte kümmern, so dass ich die weiteren Beiträge nicht zusammenfassen konnte.)
Jeder Topf hat vier Eigenschaften:
Es sollen genau drei Töpfe so ausgewählt werden, dass für jede der vier Eigenschaften alle Töpfe entweder den gleichen Wert oder alle unterschiedliche Werte haben.
Die Eigenschaften sind Attribute (zur Vereinfachung nenne ich diese a, b, c und d) und jedes Attribut muss einen von drei möglichen Werten annehmen (1, 2, 3).
<pots>
<pot a="1" b="1" c="3" d="2" />
<pot a="1" b="1" c="3" d="3" />
<pot a="3" b="2" c="1" d="2" />
<pot a="1" b="3" c="2" d="1" />
<pot a="1" b="1" c="1" d="1" />
<pot a="2" b="2" c="1" d="2" />
<pot a="3" b="2" c="2" d="1" />
<pot a="3" b="2" c="1" d="1" />
<pot a="3" b="1" c="3" d="2" />
<pot a="3" b="1" c="1" d="1" />
<pot a="2" b="1" c="3" d="2" />
<pot a="3" b="2" c="3" d="3" />
</pots>
Lässt sich die Lösung mit einem XPath-Ausdruck angeben? Nein, wohl nicht, und ich bin auch nur auf eine brute force-Lösung gekommen, die mir wenig elegant erscheint:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:my="my"
exclude-result-prefixes="#all">
<xsl:output indent="yes" />
<xsl:template match="pots">
<xsl:variable name="a" as="node()*" select="my:triples(*, 'a')" />
<xsl:variable name="b" as="node()*" select="my:triples(*, 'b')" />
<xsl:variable name="c" as="node()*" select="my:triples(*, 'c')" />
<xsl:variable name="d" as="node()*" select="my:triples(*, 'd')" />
<result>
<!-- only triples which are present for all attributes are returned -->
<xsl:for-each select="$a[. = $b][. = $c][. = $d]">
<xsl:sequence select="." />
</xsl:for-each>
</result>
</xsl:template>
<!-- this function returns all valid triples for a single attribute -->
<xsl:function name="my:triples" as="node()*">
<xsl:param name="nodes" as="node()+" />
<xsl:param name="attr" as="xs:string" />
<!-- look for common values -->
<xsl:for-each select="$nodes">
<xsl:variable name="t1" select="." />
<xsl:for-each select="$t1/following-sibling::*[@*[name() eq $attr] eq $t1/@*[name() eq $attr]]">
<xsl:variable name="t2" select="." />
<xsl:for-each select="$t2/following-sibling::*[@*[name() eq $attr] eq $t1/@*[name() eq $attr]]">
<triple>
<xsl:value-of select="(my:pos($nodes, $t1), my:pos($nodes, $t2), my:pos($nodes, .))" />
</triple>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
<!-- look for distinct values -->
<xsl:for-each select="$nodes">
<xsl:variable name="t1" select="." />
<xsl:for-each select="$t1/following-sibling::*[@*[name() eq $attr] ne $t1/@*[name() eq $attr]]">
<xsl:variable name="t2" select="." />
<xsl:for-each select="
$t2/following-sibling::*[@*[name() eq $attr] ne $t1/@*[name() eq $attr]
and
@*[name() eq $attr] ne $t2/@*[name() eq $attr]]">
<triple>
<xsl:value-of select="(my:pos($nodes, $t1), my:pos($nodes, $t2), my:pos($nodes, .))" />
</triple>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:function>
<xsl:function name="my:pos" as="xs:string">
<xsl:param name="nodes" as="node()+" />
<xsl:param name="node" as="node()" />
<xsl:value-of select="count($nodes[$node >> .]) + 1" />
</xsl:function>
</xsl:transform>
Wer kann eine elegantere Lösung anbieten?
Ich habe das Tool XTC = XML Tree Compare von Martin Achtziger http://www.xmldifftool.com/ schon auf der tekom-Tagung vorgestellt und in meinem Blog erwähnt. Im praktischen Einsatz in Projekten geht es mittlerweile nicht um so banale Dinge wie die Performance (die mit der aktuellen Version 3.x gefühlt doppelt so schnell ist) sondern um die Feinheiten, die letzten Details.
Ein automatisch erstellter Vergleich ist immer um ein Vielfaches wirtschaftlicher als jedes vorstellbare manuelle Verfahren. Mit der einmaligen Anker-Technik verfügt das Tool über eine Funktion, die es ermöglicht, dass Blöcke anhand eindeutiger Kennungen einander sauber zugeordnet werden, und nicht ein neu eingeschobener Abschnitt 1.3 verzweifelt mit dem alten 1.3 verglichen wird, der ja jetzt die 1.4 ist. Auf diese Weise können auch größere Umstellungen erkannt werden und die Änderungsanzeige hält sich nicht mit Irrelevantem auf.
Bleibt die Anzeige gelöschtem, geändertem und neuem Text. Hier ist der Automat im Nachteil, weil er nicht weiß, wie wir tatsächlich geändert haben, was die Absicht war. Er kann nur den alten und neuen Satz (eigentlich: Textknoten) betrachten und technisch analysieren. Zum Einsatz kommt hier zunächst ein bekannter Algorithmus: Longest common substring.
V1: Der Absatz enthält ganz und gar nichts.
V2: Der Absatz enthält gar nichts.
Diff: Der Absatz enthält ganz und gar nichts.
Der längste gemeinsame Text ist der Textanfang bis einschließlich »ga«. Ideal wäre natürlich dies gewesen: Der Absatz enthält ganz und gar nichts. Aber dies ist für den Computer wohl kaum zu erkennen.
V1: Datentyp des Feldes, sofern Ausprägungen vorgebbar.
V2: Datentyp des Feldes, genau dann wenn Ausprägungen vorgebbar.
Diff: Datentyp des Feldes, sofergenau dann wenn Ausprägungen vorgebbar.
Natürlich erschwert es auch hier die Lesbarkeit, dass vom Ende sowohl »sofern« als auch »wenn« mit einem »n« enden. Ideal wäre hier ein die Ausdehnung auf ganze Wörter: Datentyp des Feldes, soferngenau dann wenn Ausprägungen vorgebbar.
Aber die Ausdehnung auf ganze Wörter kann auch unerwünscht sein, wenn zum Beispiel nur Anfangs- oder Endbuchstaben ergänzt oder Tippfehler korrigiert wurden:
V1: Die Erklärung war nicht hinrecihend.
V2: Die Erklärungen waren nicht hinreichend.
Diff: Die Erklärungen waren nicht hinreciichend.
Hier wäre die Ganzwortmethode wohl eher hinderlich: Die ErklärungErklärungen warwaren nicht hinrecihendhinreichend.
In meinen Augen stellen sich zwei Fragen:
Auch als Sudokulino ist mir diese Form eines Sudoku begegnet. Naben den üblichen Bedingungen – jede Ziffer nur einmal pro Reihe und Spalte – gilt hier noch: Rechts, links, oben, unten benachbarte Zahlen dürfen keine Nachbarzahlen sein, sie müssen sich um mehr als 1 unterscheiden.
In Erinnerung an Michael Kays XSLT-Lösung des Rösselsprungs (»Knight’s Tour«) fassen wir das XML ganz einfach, indem wir alle Felder einfach der Reihe nach angeben.
<fields max="6">
<field val="5"/><field /><field /><field /><field /><field val="2" />
<field /><field /><field /><field /><field val="4" /><field val="6" />
<field /><field val="5" /><field val="3" /><field /><field /><field />
<field val="4"/><field /><field /><field /><field val="5" /><field />
<field val="2"/><field val="6" /><field /><field /><field /><field />
<field /><field /><field /><field /><field val="1" /><field val="3" />
</fields>
Jetzt benötigt es Methoden, um für ein beliebiges Feld festzustellen, welche Ziffern gültig sind. Damit lassen sich alle eindeutigen Zuordnungen durchführen und nach ein paar Runden ist das Quiz gelöst. Was aber, wenn es einmal keine eindeutige Lösung gibt?
Ich muss mal sehen, um was es hier gehen wird…