Today I Learned: The different uses of <p:input> in XProc 1.0

XProc 1.0 uses p:input for three distinct purposes:

  1. to declare the document input ports of a step
  2. to declare the parameter input ports of a step
  3. to connect document input ports of a declared step
The following examples illustrate the distinction between a document input port declaration and a document input port connection.

<p:declare-step version="1.0"> <p:sink> <p:input port="source"> <p:inline> <foobar/> </p:inline> </p:input> </p:sink> </p:declare-step>

The pipeline has a single step p:sink whose source input port is connected to a p:inline that provides an inline document. The p:input acts as a document input port connection.

<p:declare-step version="1.0" name="main"> <p:input port="source"> <p:inline> <foobar/> </p:inline> </p:input> <p:sink> <p:input port="source"> <p:pipe step="main" port="source"/> </p:input> </p:sink> </p:declare-step>

Here we have two p:input elements. The first is a document input port declaration with a default connection to an inline document provider. The second input is a document input port connection and connects the source input port of the p:sink to the pipeline's declared input port, i.e. the first p:input. Observe that this required the pipeline to have a name to specify the connection target in p:pipe.

One practical difference between the two is, that the inlined document is fixed in the first case, while it can be overridden in the second. It might also be worth noting that there are two other pipeline elements that as document input port connection, p:iteration-source and p:viewport-source.

Im Nachgang zur XML Prague 2017: Schematron

Still und leise wurde bereits Anfang 2016 der ISO-Standard ISO-19757-3 aka ISO Schematron aktualisiert. Auf dem Schematron Users Meetup wurden die wesentlichen Neuerungen kurz umrissen. Neben der expliziten (normativen) Definition der Abfragesprache XSLT2 wurden die Möglichkeiten verbessert, menschen- und maschinenlesbare Berichte zu erstellen. Für komplexere Validierungsszenarien können nun im pattern-Element innerhalb eines documents-Attribut IRIs der Dokumente angegeben werden, für die in der pattern definierten Regeln geprüft werden.

Von praktischem Interesse für größere Editionsprojekte dürfte das von Nico Kutscherauer entwickelte Schematron Quickfix (SQF) sein. SQF ist eine in Schematron eingebettete Sprache, mit der interaktive Korrekturmöglichkeiten für Validierungsfehler beschrieben werden. Mit Hilfe von XML-Editoren wie <oXygen/>, die SQF nativ unterstützen, könnte die Dateneingabe oder Datenkorrektur bequemer gestaltet werden, wenn Bearbeiter eine Fehlerkorrektur auf Knopfdruck veranlassen können. Einrichtung und Anwendung von SQF setzt allerdings qualifiziertes Personal in angemessenen Umfang voraus, lohnte sich daher erst in größeren Projekten.

Zu guter Letzt wurde noch wichtige Aufklärungsarbeit über das Schemtron-Maskottchen geleistet. Es ist nicht etwa ein Hase oder Kaninchen, sondern eine Mischung aus einem Bilby und einem Bettong, zwei australischen Beuteltieren.

Folien Werkstattgespräch 15. Dezember 2016

Meine Folien vom Werkstattgespräch zum Wolfenbütteler Katalog der Lutherdrucke nun auch online. Die Folien sind mit Eric Meyers exzellentem Simple Standards-Based Slide Show System (S5) herstellt. Die Navigation erfolgt mit Hilfe der Cursor-Tasten.

FYI: Calling Bullshit, A course to teach you how to think critically

callingbullshit.org

The world is awash in bullshit. Politicians are unconstrained by facts. Science is conducted by press release. So-called higher education often rewards bullshit over analytic thought. Startup culture has elevated bullshit to high art. Advertisers wink conspiratorially and invite us to join them in seeing through all the bullshit, then take advantage of our lowered guard to bombard us with second-order bullshit. The majority of administrative activity, whether in private business or the public sphere, often seems to be little more than a sophisticated exercise in the combinatorial reassembly of bullshit.

Our aim in this course is to teach you how to think critically about the data and models that constitute evidence in the social and natural sciences.

Welche Möglichkeiten gibt es, ein XML Dokument mit einem Schema zu verknüpfen?

Wenn es um das Validieren von XML-Dokumenten geht, gibt es nicht nur verschiedene Schematechnologien, sondern auch verschiedene Mechanismen, ein einzelnes XML-Dokument (Dokumentinstanz) mit Schemadateien zu verknüpfen.

Die untenstehenden Mechanismen beruhen alle darauf, die Verknüpfung eines Dokumentes mit einem oder mehreren Schemata im jeweiligen Dokument festzuhalten. Das ist für sich genommen weder gut noch schlecht, allerdings auch nicht die einzige und nicht immer die beste Variante. Der grundsätzliche Nachteil liegt darin, dass die Verknüpfung zwischen Dokumentinstanz und Schemadatei Teil der Dokumentinstanz ist und eine Änderung der Verknüpfung eine Änderung der Dokumentinstanz erforderlich macht. Eine Änderung der Verknüpfung kann aus verschiedenen Gründen erfolgen:

Während eine Anpassung der Dokumentinstanz bei einem, zwei oder vielleicht auch noch zehn Dokumenten halbwegs handhabbar ist, wird die Sache bei mehreren dutzend oder gar hunderten von XML-Dokumenten zu einer echten Herausforderung.

Hinzu kommt, dass nur die Verknüpfung über xml-model sowohl die gleichzeitige Verwendung verschiedener Schemadateien, als auch die gleichzeitige Verwendung verschiedener Schematechnologien erlaubt. Die Verwendung der Document Type Declaration ebenso wie die Verwendung der Schema Locating Hints bindet an die jeweils unterstützte Technologie.

Lange Rede, kurzer Sinn: Wenn ich die Verknüpfung von Dokumentinstanz und Schema in das Dokument einbetten muss, dann bevorzuge ich xml-model, weil sie mir die größte Flexibilität hinsichtlich der Schematechnologien lässt. Wenn ich es frei entscheiden kann, dann definiere ich die Verknüpfung außerhalb der Dokumentinstanz.

Document Type Declaration

Schematechnologien
  • Document Type Definition
Mehrere Schemadateien
Nein
Beispiel
<!DOCTYPE TEI SYSTEM "http://example.com/tei-transcript.dtd">
Literatur

Schema Locating Hints

Schematechnologien
  • W3C XML Schema
Mehrere Schemadateien
Bedingt
Anmerkung
Die Schema Locating Hints verknüpfen je einen XML Namensraum mit je einem Schema.
Beispiel
<TEI xsi:schemaLocation="http://www.tei-c.org/ns/1.0 http://example.com/tei-transcript.xsd"></TEI>
Literatur

xml-model Processing Instruction

Schematechnologien
  • Document Type Defintion
  • W3C XML Schema
  • RelaxNG
  • Schematron
  • ...
Mehrere Schemadateien
Ja
Beispiel
<? href="http://example.com/tei-transcript.rnc" type="application/relax-ng-compact-syntax"?> <? href="http://example.com/tei-transcript.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
Literatur

Schritte gruppieren mit <p:group>

p:group ist ein zusammengesetzer Schritt (compound step) mit dessen Hilfe sich andere Schritte zu einer Subpipeline zusammenfassen lassen. Innerhalb von p:group können Ausgabeports definiert werden, mit denen (Zwischen-)Ergebnisse der Subpipeline nach außen geleitet werden können.

<p:group name="subpipeline"> <p:output port="result"> <p:pipe step="last-step" port="result"/> </p:output> <p:output port="other"> <p:pipe step="intermediate-step" port="result"/> </p:output> </p:group>

Qualifizierte und unqualifizierte Attribute in XML Schema

Im Rahmen des Projektes Linked Open Emblem Data nehme ich gerade das für Emblembuchbeschreibungen verwendete Emblem Schema unter die Lupe. Um einen Eindruck davon zu bekommen, wie eine Emblembuchbeschreibung aussieht, die von allen Optionen des Schemas gebraucht macht, habe ich mit Hilfe von <oXygen/> ein Beispieldokument auf Basis des Schemas erstellen lassen. Zu meinem Erstaunen enthielt das Beispieldokument ein einzelnes, mit dem Namensraum des Emblem Schemas qualifiziertes Attribut.

Screenshot des Beispieldokuments

Stellt sich heraus, dass die Regel für den Namensraum von Attributdefinitionen sich danach unterscheiden, wo ein Attribut deklariert wird. Wird es direkt als Kindelement des schema-Elements als sogenanntes "globales Attribut" deklariert, dann wird immer der im targetNamespace-Attribut des Schemas angegebenen Namensraum verwendet. In allen anderen Fällen kann mit Hilfe des Attributs form angegeben werden, ob es qualified, also mit, oder unqualified und damit ohne Namensraum definiert ist. Wird das Attribut form weggelassen, dann entscheidet der im Attribut attributeFormDefault des Wurzelelements angebene Wert.

Das heisst, dass in folgendem Schema das Attribut byReferenceQualified mit, das Attribute byReference jedoch ohne Namensraum definiert ist:

<xs:schema elementFormDefault="qualified" attributeFormDefault="unqualified" targetNamespace="http://example.org/"> <xs:element name="root"> <xs:complexType> <xs:attribute ref="byReferenceQualified"/> <xs:attributeGroup ref="byReference"/> </xs:complexType> </xs:element> <xs:attribute name="byReferenceQualified"/> <xs:attributeGroup name="byReference"> <xs:attribute name="byReference"/> </xs:attributeGroup> </xs:schema>

Und siehe da: Im Emblem Schema ist genau das der Fall.

Screenshot der Attributdeklaration im Emblem Schema 1.2

Das fragliche Attribut key wird in die Attributgruppe standardAttrib über eine Referenz auf die globale Attributdeklaration eingebunden, während die anderen Attribute entweder von Haus aus qualifiziert sind (xml:id, xml:lang, xlink:href) oder direkt in der Attributgruppe deklariert werden (page). Umgekehrt heisst das aber auch, dass keines der anderen global deklarierten Attribute im Schema verwendet wird.