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 | 
    
makeEnglishPlural(value) | 
      make plural from singular word (car -> cars) | 
makeEnglishSingular(value) | 
      make singular from plural word (cars -> car) | 
makeEnglishPluralMultiword(value) | 
      make plural from singular word (NewCar -> NewCars) | 
makeEnglishSingularMultiword(value) | 
      make singular from plural word (NewCars -> NewCar) | 
replace(str,from,to) | 
      replace from in string to to value | 
    
endsWith(str,val) | 
      test if passed string ends with val | 
    
count(str,val) | 
      return number of occurances of val in str | 
    
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 | 


