Identity transform
Encyclopedia
The identity transform is a data transformation
Data transformation
In metadata and data warehouse, a data transformation converts data from a source data format into destination data.Data transformation can be divided into two steps:...

 that copies the source data into the destination data without change.

The identity transformation is considered an essential process in creating a reusable transformation library. By creating a library of variations of the base identity transformation, a variety of data transformation filters can be easily maintained. These filters can be chained together in a format similar to UNIX
Unix
Unix is a multitasking, multi-user computer operating system originally developed in 1969 by a group of AT&T employees at Bell Labs, including Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy, and Joe Ossanna...

 shell pipes.

Examples of recursive transforms

The "copy with recursion" permits, changing little portions of code, produce entire new and different output, filtering or updating the input. Understanding the "identity by recursion" we can understand the filters.

Using XSLT

The most frequently cited example of the identity transform (for XSLT version 1.0) is the "copy.xsl" transform as expressed in XSLT
XSLT
XSLT is a declarative, XML-based language used for the transformation of XML documents. The original document is not changed; rather, a new document is created based on the content of an existing one. The new document may be serialized by the processor in standard XML syntax or in another format,...

. This transformation uses the xsl copy command to perform the identity transformation:









This template works by matching all attributes (@*) and other nodes (node), copying each node matched, then applying the identity transformation to all attributes and child nodes of the context node. This recursively descends the element tree and outputs all structures in the same structure they were found in the original file, within the limitations of what information is considered significant in the XPath data model
Xpath data model
XPath is a language for selecting portions of an XML Document . XPath uses a specific conceptual interpretation of XML documents, referred to as the XPath Data Model. Technical documents on XML often use the same terminology as the XPath data model....

. Since node matches text, processing instructions, root, and comments, as well as elements, all XML nodes are copied.

A more explicit version of the identity transform is:









This version is equivalent to the first, but explicitly enumerates the types of XML nodes that it will copy. Both versions copy data that is unnecessary for most XML usage (e.g., comments).

Finally, note that markup details, such as the use of CDATA sections or the order of attributes, is not necessarily preserved in the output, since this information is not part of the XPath data model
Xpath data model
XPath is a language for selecting portions of an XML Document . XPath uses a specific conceptual interpretation of XML documents, referred to as the XPath Data Model. Technical documents on XML often use the same terminology as the XPath data model....

. To make sure CDATA markup is maintained in the output, the XSLT stylesheet that contains the identity transform template (not the identity transform template itself) should make use of the xsl:output attribute called cdata-section-elements. For example:


Using XQuery

XQuery
XQuery
- Features :XQuery provides the means to extract and manipulate data from XML documents or any data source that can be viewed as XML, such as relational databases or office documents....

 can define recursive functions. The following example XQuery function copies the input directly to the output without modification.

declare function local:copy($element as element) {
element {node-name($element)}
{$element/@*,
for $child in $element/node
return if ($child instance of element)
then local:copy($child)
else $child
}
};

The same function can also be achieved using a typeswitch-style transform.

xquery version "1.0";

(: copy the input to the output without modification :)
declare function local:copy($input as item*) as item* {
for $node in $input
return
typeswitch($node)
case element
return
element {name($node)} {

(: output each attribute in this element :)
for $att in $node/@*
return
attribute {name($att)} {$att}
,
(: output all the sub-elements of this element recursively :)
for $child in $node
return local:copy($child/node)

}
(: otherwise pass it through. Used for text, comments, and PIs :)
default return $node
};


The typeswitch transform is sometime preferable since it can easily be modified by simply adding a case statement for any element that needs special processing.

Using XSLT






Using XProc







Here one important note about the XProc
XProc
XProc is a W3C Recommendation to define an XML transformation language to define XML Pipelines.Below is an example abbreviated XProc file: This is a pipeline that consists of two atomic steps, XInclude and Validate...

identity, is that it can take either one document like this example or a sequence of document as input.

More complex examples

Generally the identity transform is used as a base on which one can make local modifications.

Using XSLT

The identity transformation can be modified to copy everything from an input tree to an output tree except a given node. For example the following will copy everything from the input to the output except the social security number:











Using XQuery


declare function local:copy-filter-elements($element as element,
$element-name as xs:string*) as element {
element {node-name($element) }
{ $element/@*,
for $child in $element/node[not(name(.)=$element-name)]
return if ($child instance of element)
then local:copy-filter-elements($child,$element-name)
else $child
}
};


To call this one would add:

$filtered-output := local:copy-filter-elements($input, 'PersonSSNID')

Using XProc






The source of this article is wikipedia, the free encyclopedia.  The text of this article is licensed under the GFDL.
 
x
OK