XSLT Reference


http://www.inventic.eu/strings

String functions.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:axstr="http://www.inventic.eu/strings" extension-element-prefixes="... axstr">
  <xsl:value-of select="str:makeLower('XX')"/>
</xsl:stylesheet>
Function Description
makeLower(value) convert string to lower
makeUpper(value) convert string to upper
makeFirstCharUpper(value) convert first char to upper
makeFirstCharLower(value) convert first char to lower
convertCamelCaseToXmlStyle(value,separator='-') convert camel case to xml style
convertXmlStyleToCamelCase(value,firstLower,separator='-') convert xml style to camel case
convertStringStyle(value,style,defaultStyle) convert value based on style. If style is empty, use default style
replace(str,from,to) replace from in string to to value
endsWith(str,val) test if passed string ends with val
substringAfterLast(str,val) returns string after last occurance of val
substringBeforeLast(str,val) returns string before last occurance of val
firstNonEmpty(str1,str2,...) returns first non-empty value
namespaceGetPath(value) get namespace from full path
namespaceGetLocalName(value) get local name from fullpath
namespaceConcatPath(v1,v2) concate two paths as namespace
namespaceRemoveStartingSlash(v1) removes starting \ from namespace`
namespaceSubtractTwoPaths(ns1,ns2,direction) removes ns2 from ns1 from direction(“begin” or “end”). \a\b\c - \a\b = \c
namespaceRelativePath(ns1,ns2) returns relative path from ns1 to ns2. In case ns2 is independent NS, returns absolute NS2 path. \a\b, \a\b\c = c

http://www.inventic.eu/system

System functions.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:axsys="http://www.inventic.eu/system" extension-element-prefixes="... axsys">
  <axsys:call-template name="{$param}"/>
</xsl:stylesheet>
Element Description
<call-template name="{$param}"/> ability to call template with dynamic param name

http://www.skipper18.com/orm-attributes

Functions for manipulating with ORM Attributes.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xlns:ormd="http://www.skipper18.com/orm-attributes" extension-element-prefixes="... ormd">
  ...
</xsl:stylesheet>
Function Description
ConvertAttributesToOrmAttributes(encapsule,mask,xpath) convert attributes to orm attributes
ConvertXpathItemsToOrmAttributes(encapsule,mask,xpath) convert xpath items to orm attribute
CreateOrmAttributesFromValues(encapsule) create orm attributes from passed values
value(value,name) – inner element, attribute by value
xpath(select,name) – inner element, attribute by xpath
CreateAttributeFromOrmAttribute(attribute,orm-attribute) create attribute from orm attribute
ConvertOrmAttributesToAttributes(mask,xpath,class-kind-filter) convert orm attributes to attributes
ConvertOrmAttributesToChildElements(mask,xpath,class-kind-filter,type-kind-filter,last-as-attribute) convert orm attribute to child elements
ExistsOrmAttributeByFullName(full-name) test if exists specified orm attribute

Note: Each function attribute can be passed as xslt param, inner element and in some cases as inner-value.

Note2: class-kind-filter can have values: container,scalar,struct,value (based on orm attribute element class)

Note3: type-kind-filter can have values: container,scalar (based on orm attribute element type)

#this statement
<ormd:ConvertAttributesToOrmAttributes encapsule='true' mask='name()="attr1"'/>

#is equivalent to this one
<ormd:ConvertAttributesToOrmAttributes>
  <ormd:encapsule>true</ormd:encapsule>
  <ormd:mask>name()='attr1'</ormd:mask>
</ormd:ConvertAttributesToOrmAttributes>

http://www.skipper18.com/annotations

Functions for manipulation with annotations.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xlns:ann="http://www.skipper18.com/annotations" extension-element-prefixes="... ann">
  ...
</xsl:stylesheet>
Function Description
ConvertAttributesToAnnotationElement(*params) convert attributes to annotation
ConvertXpathToAnnotationElement(*params) convert xpath items to annotation
ConvertElementToAnnotationElement(*params) convert element to annotation element
[encapsule,mask,xpath,name,always-create,element,prefix,remove-prefix,annotation-element,ast-param,divider,encapsuler] *params
ConvertAnnotationElementToAttribute(attribute,full-name) create attribute from annotation element by name
ConvertAnnotationElementsToAttributes(*params) convert annotation elements to attributes
ConvertAnnotationElementsToChildElements(*params) convert annotation elements to child element
ConvertAnnotationElementsToChildElementsAndAttributes(*params) convert annotation elements to child element and attributes
[mask, child-mask, xpath, full-name, encapsuler, encapsuler-ns,default-value-element,default-value-attribute] *params (value-elem/value-attr is for default attr/elem for annotation-value)
ExistsAnnotationElementByFullName(full-name, sub-path) test if exists specified annotation (element)
ExistsAnnotationElementByFullNameFce(full-name, sub-path) test if exists specified annotation (function)
GetAnnotationValueAsString(full-name, sub-path) convert annotation element to single text value (sub-path by @name attribute) (element)
GetAnnotationValueAsStringFce(full-name, sub-path) convert annotation element to single text value (sub-path by @name attribute) (function)

Note: Each function attribute can be passed as xslt param, inner element and in some cases as inner-value. Note: When xpath contains “.”, function is evaluate on current element

#this statement
<ann:ConvertAttributesToAnnotationElement encapsule='true' mask='name()="attr1"'/>

#is equivalent to this one
<ann:ConvertAttributesToAnnotationElement>
  <ann:encapsule>true</ann:encapsule>
  <ann:mask>name()='attr1'</ann:mask>
</ann:ConvertAttributesToAnnotationElement>

http://www.skipper18.com/extensions-support

Functions for manipulation with complext extensions.

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:skext="http://www.skipper18.com/extensions-support" extension-element-prefixes="... skext">
  ...
</xsl:stylesheet>

common extension + behavior definition:

<skext:ConvertFromOrmAttributesToExtension extension="Gedmo" output="gedmo">
  <behavior name="Sluggable">
    <field name="slug" format="XmlYml" allow-empty="true">
       ...
    </field>
  </behavior>

  <behavior name="...">
		<entity name=""> ...
    <field name=""> ...
    <non-orm-field name=""> ...
    <field-list name="" storage-elements="entities" storage-element="entity" storage-params="auto"> ...
    <association-list name=""> ...
    <non-orm-field-list name=""> ...
  </behavior>
</skext:ConvertFromOrmAttributesToExtension>
Xslt attributes Description
allow-empty whether export this annotation if no parameter inside is filled [default false]
format for which export format use this export
output name of output element to convert behavior [default is lowecased extension name]
storage-elements name of element storing group of items
storage-element name of element storing single item
storage-params where to get referenced item name [auto,none,entity,field]. None/Entity/Auto+norules = inner element, field=Name attribute
Xslt element Description
extension group of extensions in orm-attributes (gedmo, custom-extensions,….)
behavior single behavior in group of extensions (sluggable in gedmo)
entity parameters stored inside entity annotation
field parameters stored inside field annotation

parameters of behaviors

<skext:ConvertFromOrmAttributesToExtension extension="Gedmo">
  <behavior name="...">
    <entity name="...">
       <parameter name="repository" alias="RepoAlias" type="string"/>
       <parameter name="callback-test" type="callback-value" from-template="xx" to-template="yy"/>
    </entity>
  </behavior>
</skext:ConvertFromOrmAttributesToExtension>
Xslt element Description
parameter string parameter
alias how to store this parameter in Orm attributes [default = name ]
type type of parameter [string,list,csv,elements,callback-value, callback-standalone]
from-template xslt template name to generate callback value in FROM direction
to-template xslt template name to generate callback value in TO direction