<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head profile="http://internetalchemy.org/2003/02/profile"> <link rel="foaf" type="application/rdf+xml" title="FOAF" href="http://www.openlinksw.com/dataspace/uda/about.rdf" /> <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" /> <meta name="dc.title" content="Function: xslt - Virtuoso Functions Guide" /> <meta name="dc.subject" content="Function: xslt - Virtuoso Functions Guide" /> <meta name="dc.creator" content="OpenLink Software Documentation Team ; " /> <meta name="dc.copyright" content="OpenLink Software, 1999 - 2009" /> <link rel="top" href="index.html" title="OpenLink Virtuoso Universal Server: Documentation" /> <link rel="search" href="/doc/adv_search.vspx" title="Search OpenLink Virtuoso Universal Server: Documentation" /> <link rel="parent" href="functions.html" title="Chapter Contents" /> <link rel="prev" href="appendixa.html" title="Appendix" /> <link rel="next" href="functions.html#.html" title="" /> <link rel="shortcut icon" href="../images/misc/favicon.ico" type="image/x-icon" /> <link rel="stylesheet" type="text/css" href="doc.css" /> <link rel="stylesheet" type="text/css" href="/doc/translation.css" /> <title>Function: xslt - Virtuoso Functions Guide</title> <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8" /> <meta name="author" content="OpenLink Software Documentation Team ; " /> <meta name="copyright" content="OpenLink Software, 1999 - 2009" /> <meta name="keywords" content="" /> <meta name="GENERATOR" content="OpenLink XSLT Team" /> </head> <body> <div id="header"> <a name="fn_xslt" /> <img src="../images/misc/logo.jpg" alt="" /> <h1>22. Virtuoso Functions Guide - xslt</h1> </div> <div id="navbartop"> <div> <a class="link" href="functions.html">Chapter Contents</a> | <a class="link" href="fn_xquery_eval.html" title="xquery_eval">Prev</a> | <a class="link" href="fn_xslt_format_number.html" title="xslt_format_number">Next</a> </div> </div> <div id="currenttoc"> <form method="post" action="/doc/adv_search.vspx"> <div class="search">Keyword Search: <br /> <input type="text" name="q" /> <input type="submit" name="go" value="Go" /> </div> </form> <div> <a href="http://www.openlinksw.com/">www.openlinksw.com</a> </div> <div> <a href="http://docs.openlinksw.com/">docs.openlinksw.com</a> </div> <br /> <div> <a href="index.html">Book Home</a> </div> <br /> <div> <a href="contents.html">Contents</a> </div> <div> <a href="preface.html">Preface</a> </div> <br /> <div> <a class="selected" href="functions.html">Virtuoso Functions Guide</a> </div> <br /> <div> <a href="functions.html#admin">Administration</a> </div> <div> <a href="functions.html#aggr">Aggregate Functions</a> </div> <div> <a href="functions.html#array">Array Manipulation</a> </div> <div> <a href="functions.html#bpel">BPEL APIs</a> </div> <div> <a href="functions.html#backup">Backup</a> </div> <div> <a href="functions.html#compression">Compression</a> </div> <div> <a href="functions.html#cursors">Cursor</a> </div> <div> <a href="functions.html#time">Date & Time Manipulation</a> </div> <div> <a href="functions.html#debug">Debug</a> </div> <div> <a href="functions.html#dict">Dictionary Manipulation</a> </div> <div> <a href="functions.html#encoding">Encoding & Decoding</a> </div> <div> <a href="functions.html#file">File Manipulation</a> </div> <div> <a href="functions.html#ft">Free Text</a> </div> <div> <a href="functions.html#hash">Hashing / Cryptographic</a> </div> <div> <a href="functions.html#ldap">LDAP</a> </div> <div> <a href="functions.html#localization">Locale</a> </div> <div> <a href="functions.html#mail">Mail</a> </div> <div> <a href="functions.html#misc">Miscellaneous</a> </div> <div> <a href="functions.html#number">Number</a> </div> <div> <a href="functions.html#phrz">Phrases</a> </div> <div> <a href="functions.html#rdf">RDF data</a> </div> <div> <a href="functions.html#rmt">Remote SQL Data Source</a> </div> <div> <a href="functions.html#repl">Replication</a> </div> <div> <a href="functions.html#soap">SOAP</a> </div> <div> <a href="functions.html#sql">SQL</a> </div> <div> <a href="functions.html#string">String</a> </div> <div> <a href="functions.html#txn">Transaction</a> </div> <div> <a href="functions.html#type">Type Mapping</a> </div> <div> <a href="functions.html#uddi">UDDI</a> </div> <div> <a href="functions.html#udt">User Defined Types & The CLR</a> </div> <div> <a href="functions.html#vad">VAD</a> </div> <div> <a href="functions.html#jvmpl">Virtuoso Java PL API</a> </div> <div> <a href="functions.html#bif">Virtuoso Server Extension Interface (VSEI)</a> </div> <div> <a href="functions.html#ws">Web & Internet</a> </div> <div> <a class="selected" href="functions.html#xml">XML</a> </div> <div class="selected"> <div> <a href="fn_XMLAGG.html">xmlagg</a> </div> <div> <a href="fn_XMLATTRIBUTES.html">xmlattributes</a> </div> <div> <a href="fn_XMLAddAttribute.html">xmladdattribute</a> </div> <div> <a href="fn_XMLAppendChildren.html">xmlappendchildren</a> </div> <div> <a href="fn_XMLCONCAT.html">xmlconcat</a> </div> <div> <a href="fn_XMLELEMENT.html">xmlelement</a> </div> <div> <a href="fn_XMLFOREST.html">xmlforest</a> </div> <div> <a href="fn_XMLInsertAfter.html">xmlinsertafter</a> </div> <div> <a href="fn_XMLInsertBefore.html">xmlinsertbefore</a> </div> <div> <a href="fn_XMLReplace.html">xmlreplace</a> </div> <div> <a href="fn_XMLType.XMLType.html">xmltype.xmltype</a> </div> <div> <a href="fn_XMLType.createNonSchemaBasedXML.html">xmltype.createnonsch...</a> </div> <div> <a href="fn_XMLType.createSchemaBasedXML.html">xmltype.createschema...</a> </div> <div> <a href="fn_XMLType.createXML.html">xmltype.createxml</a> </div> <div> <a href="fn_XMLType.existsNode.html">xmltype.existsnode</a> </div> <div> <a href="fn_XMLType.extract.html">xmltype.extract</a> </div> <div> <a href="fn_XMLType.getClobVal.html">xmltype.getclobval</a> </div> <div> <a href="fn_XMLType.getNamespace.html">xmltype.getnamespace</a> </div> <div> <a href="fn_XMLType.getNumVal.html">xmltype.getnumval</a> </div> <div> <a href="fn_XMLType.getRootElement.html">xmltype.getrooteleme...</a> </div> <div> <a href="fn_XMLType.getSchemaURL.html">xmltype.getschemaurl</a> </div> <div> <a href="fn_XMLType.getStringVal.html">xmltype.getstringval</a> </div> <div> <a href="fn_XMLType.isFragment.html">xmltype.isfragment</a> </div> <div> <a href="fn_XMLType.isSchemaBased.html">xmltype.isschemabase...</a> </div> <div> <a href="fn_XMLType.isSchemaValid.html">xmltype.isschemavali...</a> </div> <div> <a href="fn_XMLType.isSchemaValidated.html">xmltype.isschemavali...</a> </div> <div> <a href="fn_XMLType.schemaValidate.html">xmltype.schemavalida...</a> </div> <div> <a href="fn_XMLType.setSchemaValidated.html">xmltype.setschemaval...</a> </div> <div> <a href="fn_XMLType.toObject.html">xmltype.toobject</a> </div> <div> <a href="fn_XMLType.transform.html">xmltype.transform</a> </div> <div> <a href="fn_XMLUpdate.html">xmlupdate</a> </div> <div> <a href="fn_xper_right_sibling.html">xper navigation</a> </div> <div> <a href="fn_createXML.html">createxml</a> </div> <div> <a href="fn_isentity.html">isentity</a> </div> <div> <a href="fn_serialize_to_UTF8_xml.html">serialize_to_utf8_xm...</a> </div> <div> <a href="fn_tidy_html.html">tidy_html</a> </div> <div> <a href="fn_tidy_list_errors.html">tidy_list_errors</a> </div> <div> <a href="fn_updateXML.html">updatexml</a> </div> <div> <a href="fn_xml_add_system_path.html">xml_add_system_path</a> </div> <div> <a href="fn_xml_auto.html">xml_auto</a> </div> <div> <a href="fn_xml_auto_dtd.html">xml_auto_dtd</a> </div> <div> <a href="fn_xml_auto_schema.html">xml_auto_schema</a> </div> <div> <a href="fn_xml_create_tables_from_mapping_schema_decl.html">xml_create_tables_fr...</a> </div> <div> <a href="fn_xml_cut.html">xml_cut</a> </div> <div> <a href="fn_xml_doc_output_option.html">xml_doc_output_optio...</a> </div> <div> <a href="fn_xml_get_system_paths.html">xml_get_system_paths</a> </div> <div> <a href="fn_xml_load_mapping_schema_decl.html">xml_load_mapping_sch...</a> </div> <div> <a href="fn_xml_load_schema_decl.html">xml_load_schema_decl</a> </div> <div> <a href="fn_xml_namespace_scope.html">xml_namespace_scope</a> </div> <div> <a href="fn_xml_persistent.html">xml_persistent</a> </div> <div> <a href="fn_xml_set_ns_decl.html">xml_set_ns_decl</a> </div> <div> <a href="fn_xml_template.html">xml_template</a> </div> <div> <a href="fn_xml_tree.html">xml_tree</a> </div> <div> <a href="fn_xml_tree_doc.html">xml_tree_doc</a> </div> <div> <a href="fn_xml_tree_doc_media_type.html">xml_tree_doc_media_t...</a> </div> <div> <a href="fn_xml_uri_get.html">xml_uri_get</a> </div> <div> <a href="fn_xml_validate_dtd.html">xml_validate_dtd</a> </div> <div> <a href="fn_xml_validate_schema.html">xml_validate_schema</a> </div> <div> <a href="fn_xml_view_dtd.html">xml_view_dtd</a> </div> <div> <a href="fn_xml_view_schema.html">xml_view_schema</a> </div> <div> <a href="fn_xmlsql_update.html">xmlsql_update</a> </div> <div> <a href="fn_xpath_eval.html">xpath_eval</a> </div> <div> <a href="fn_xper_cut.html">xper_cut</a> </div> <div> <a href="fn_xper_doc.html">xper_doc</a> </div> <div> <a href="fn_xper_locate_words.html">xper_locate_words</a> </div> <div> <a href="fn_xpf_extension.html">xpf_extension</a> </div> <div> <a href="fn_xpf_extension_remove.html">xpf_extension_remove</a> </div> <div> <a href="fn_xquery_eval.html">xquery_eval</a> </div> <div> <a class="selected" href="fn_xslt.html">xslt</a> </div> <div> <a href="fn_xslt_format_number.html">xslt_format_number</a> </div> <div> <a href="fn_xslt_sheet.html">xslt_sheet</a> </div> <div> <a href="fn_xslt_stale.html">xslt_stale</a> </div> <div> <a href="fn_xte_head.html">xte_head</a> </div> <div> <a href="fn_xte_node.html">xte_node</a> </div> <div> <a href="fn_xte_node_from_nodebld.html">xte_node_from_nodebl...</a> </div> <div> <a href="fn_xte_nodebld_acc.html">xte_nodebld_acc</a> </div> <div> <a href="fn_xte_nodebld_final.html">xte_nodebld_final</a> </div> <div> <a href="fn_xte_nodebld_init.html">xte_nodebld_init</a> </div> <div> <a href="fn_xtree_doc.html">xtree_doc</a> </div> </div> <div> <a href="functions.html#XPATH">XPATH & XQUERY</a> </div> <br /> <div> <a href="functionidx.html">Functions Index</a> </div> <br /> </div> <div id="text"> <h2>xslt</h2> <div class="refpurpose">returns an XML document transformed by an XSLT stylesheet</div> <div class="funcsynopsis"> <span class="funcdef">xml_entity <span class="function">xslt</span> </span> (<span class="paramdef">in <span class="parameter">sheet_uri</span> varchar</span>, <span class="paramdef">in <span class="parameter">entity</span> any</span>, <span class="paramdefoptional">[in <span class="optional">sheet_params</span> vector]</span>); </div> <div class="refsect1"> <div class="refsect1title">Description</div> <p> This function takes the URI of a stylesheet and an XML entity and produces an XML entity representing the transformation result of the given entity with the given stylesheet. The result tree is separate from the argument tree and the only reference to it is the returned entity. Errors occurring in the transformation will be signalled as SQL states, with XML or XSLT specific conditions beginning with XS or XP. </p> <p> The stylesheet can be passed parameters by specifying a third argument to <span class="computeroutput">xslt()</span>. This will be a vector of name/value pairs. The values can be referenced from inside XPath expressions in the stylesheet. You may use any Virtuoso data type. The names in the parameter vector should appear without the '$' sign. If any of the parameter values is NULL the parameter will be ignored because NULL has no XPath counterpart. If the same name appears more than once in the vector, the last name/value pair is used and all preceding pairs with this name are silently ignored. Obviously, names should be strings that are valid XPath variable names. </p> <p> <span class="computeroutput">xslt()</span> applies the transformation in the sheet to the specified entity. The result is the root element of the result tree, an XML entity. This entity can be used as input to another transformation, can be serialized and sent to an HTTP client or stored, etc. </p> <p> The URI of the sheet is used to locate the stylesheet. The protocol can be http, file or virt. Once the stylesheet has been retrieved it is cached and not refetched until the cache is invalidated with <span class="computeroutput">xslt_stale()</span>. Included or imported style sheets will be fetched automatically, using the initial URI as base for any relative references. The <span class="computeroutput">sheet_uri</span> is the URI of a stylesheet. This should be an absolute URI resolvable with <span class="computeroutput">xml_uri_get()</span>. If the URI has previously been used as a stylesheet and has not been marked stale with <span class="computeroutput">xslt_stale()</span>, Virtuoso will use the cached data instead of fetching and parsing the stylesheet resource. </p> <p> When a resource with a .xsl extension is stored into the WebDAV, Virtuoso marks as stale any related cached resource. The URI for such stylesheets will be <span class="computeroutput">virt://WS.WS.SYS_DAV_RES.RES_FULL_PATH.RES_CONTENT:<path></span>. See the section about entity references in stored text for more on this type of URI. If the URI uses the file protocol, Virtuoso will compare the date of the file against the date of the cached stylesheet, automatically reloading the sheet if the file changes. This protocol is subject to the limitations on file system access imposed by the host operating system and the virtuoso.ini file system access control settings. </p> </div> <div class="refsect1"> <div class="refsect1title">Parameters</div> <div class="refsect2"> <span class="refsect2title">sheet_uri – </span> URI pointing to the location of an XSL stylesheet.</div> <div class="refsect2"> <span class="refsect2title">entity – </span> parsed XML entity such as that returned by the xtree_doc() function</div> <div class="refsect2"> <span class="refsect2title">sheet_params – </span> A vector of keyword/value parameters to be passed to the XSLT engine for use in the transformation.</div> </div> <div class="refsect1"> <div class="refsect1title">Return Types</div> <p>An XML entity resulting from transforming the given XML entity input with the given style sheet.</p> </div> <div class="refsect1"> <div class="refsect1title">Examples</div> <a name="ex_xslt" /> <div class="example"> <div class="exampletitle">Basic Use</div> <div> <pre class="programlisting"> declare sheet, xml varchar; declare xml_entity, myparams any; sheet := 'virt://WS.WS.SYS_DAV_RES.RES_FULL_PATH.RES_CONTENT:/DAV/stylesheets/mysheet.xsl'; xml := 'virt://WS.WS.SYS_DAV_RES.RES_FULL_PATH.RES_CONTENT:/DAV/xmlsource/myxml.xml'; xml_entity := xtree_doc(xml); myparams := vector('chapter', 'overview', 'imgroot', '/DAV/images/'); http_value(xslt(sheet, xml_entity, myparams)); </pre> </div> <p>This code will send the resultant transformation to the http stream. Note that the <span class="computeroutput">xml_entity</span> must be a parsed XML entity such as that produced by <span class="computeroutput">xtree_doc</span>.</p> <div> <pre class="programlisting"> <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:param name="chapter">default</xsl:param> <xsl:param name="imgroot"></xsl:param> <xsl:template match="/"> <xsl:text>Value of chapter: </xsl:text><xsl:value-of select="$chapter" /> <xsl:text>Value of imgroot: </xsl:text><xsl:value-of select="$imgroot" /> </xsl:template> </xsl:stylesheet> </pre> </div> <p> This style sheet illustrates using parameters. Note how default values can be provided in the style sheet when the parameters are declared using the <span class="computeroutput">xsl:param</span> tag. </p> </div> </div> <div class="refsect1"> <div class="refsect1title">See Also</div> <p> <a href="fn_xtree_doc.html">xtree_doc()</a> </p> <p> <a href="fn_xper_doc.html">xper_doc()</a> </p> <p> <a href="fn_xml_tree_doc.html">xml_tree_doc()</a> </p> <p> <a href="fn_xml_tree.html">xml_tree()</a> </p> <p> <a href="fn_xslt_stale.html">xslt_stale()</a> </p> <p> <a href="fn_XMLUpdate.html">XMLUpdate()</a> </p> </div> </div> <div id="footer"> <div>Copyright© 1999 - 2009 OpenLink Software All rights reserved.</div> <div id="validation"> <a href="http://validator.w3.org/check/referer"> <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /> </a> <a href="http://jigsaw.w3.org/css-validator/"> <img src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" height="31" width="88" /> </a> </div> </div> </body> </html>