We propose to model alignments as metadata describing target locations. The
alignments of a given target location consist of source location identifiers. A
readible form of these are name paths like /resources/books/book
. A
straightforward representation of the alignments describing a document-to-document
transformation is a location tree of the target documents, augmented by additional
attributes on the location nodes which convey the name paths of the aligned source
locations. Such a document we call a SAAT – Source Alignment Annotated Target tree.
Here comes an example, in which the attributes supplying alignments are named
al
:
<z:saats xmlns:z="http://www.xsdplus.org/ns/structure"> <z:saat> <publications al="/resources/books"> <z:_attributes_> <updatedAt al="/resources/books/@lastUpdate"/> </z:_attributes_> <publication al="/resources/books/book"> <z:_attributes_> <publicationYear al="/resources/books/book/py" /> </z:_attributes_> <isbn al="/resources/books/book/isbn"/> <title al="/resources/books/book/title"/> <creator al="/resources/books/book/author"> <creatorRole/> <creatorName al="/resources/books/book/author"/> </creator> </publication> </publications> </saat> <saats>
Compare this to the SNAT tree specifying the transformation precisely, in which all attributes describing navigation are highlighted:
<z:snats xmlns:z="http://www.xsdplus.org/ns/structure"> <z:snat> <publications ctxt="books"> <z:_attributes_> <updatedAt src="@lastUpdate" alt=""/> </z:_attributes_> <publication for-each="book"> <z:_attributes_> <publicationYear src="py" alt=""/> </z:_attributes_> <isbn src="@isbn" dflt="'#MISSING'"/> <title src="title" dflt=""/> <creator for-each="author"> <creatorRole src="=Author" dflt=""/> <creatorName src="." dflt="'?'"/> </creator> </publication> </publications> </snat> <snats>
In a SNAT tree, navigation is described by expressions, to be evaluated at runtime in a current context implied by the preceding steps of navigation. Alignments, on the other hand, are static identifiers, not expressions (in spite of the apprearance). Nevertheless, the example exhibits a striking correspondence between the name paths describing alignments and navigation expressions.
Corresponding values of alignment and navigation are marked by a subset
relationship: the navigation leads to a set of nodes which is a subset of the nodes
represented by the corresponding alignment. So, for example, navigation
author
(which is short for child::author
) is evaluated
in the context of an individual book
element and selects all
author
nodes found under that book
node. This is a
subset of the nodes represented by the alignment
/resources/books/book/author
, which is the set of all
author
nodes found under any book
node.