Extensions |
All extensions are in the namespace http://www.gobosoft.com/eiffel/gobo/gexslt/extension.
The following extension attributes are available:
The value of "all" only takes effect on xsl:stylesheet and xsl:transform elements. It is treated as if "yes" was coded. Additionally, if this is the prinicpal stylesheet, then the instructions themselves, when compiled to an expression, have their compiled form displayed. (Only xsl:templates, top-level xsl:variables and xsl:params, and xsl:function definitions are displayed.)
This can produce a lot of output.
This attribute used to make gexslt non-compliant. It is now ignored. Use the gexslt:function extension instruction instead.
This may need to be dropped - I have to check the serialization specs, but I think they have been tightened to disallow some of this.
When the output method is "xml" or "xhtml"
(Hm.maybe xhtml should follow the html behaviour)
, this parameter only effects characters that are not representable in the selected encoding. It can take on the value "hex" or "decimal", and it determines whether the character is written out with a decimal character reference, or a hexadecimal character reference (the default).When the output method is "html", then the value may hold two strings, separated by a semicolon. The first string defines how non-ASCII characters within the character encoding will be represented, the values being "native", "entity", "decimal", or "hex". The second string defines how characters outside the encoding will be represented, the values being "entity", "decimal", or "hex". Here "native" means output the character as itself; "entity" means use a defined entity reference (such as "é") if known; "decimal" and "hex" refer to numeric character references. For example "entity;decimal" (the default) means that with encoding="iso-8859-1", characters in the range 160-255 will be represented using standard HTML entity references, while Unicode characters above 255 will be represented as decimal character references.
This parameter has no meaning when the output method is "text". For QName output methods, it's interpretation is up to the programmer of the method, but the possible values are those for the "html" method.
TODO: Change the default to indent with a single tab.
The fn:doc(), fn:collection() and fn:document() functions are defined to be stable by default. That is, repeated use of one of these functions on the same URI will result in the identical document node (or collection of document nodes in the case of fn:collection()). But to implement this the library is forced to lock the documents in memory for the duration of the transformation. This can cause severe performance problems, especially with large collections. For that reason, an implementation is allowed to provide options that allow other isolation levels (in the SQL sense - the default behaviour corresponds to SERIALIZABLE).
This option is provided through an experimental user-defined data element isolation-level, which is ignored unless it is a top-level element in the principal stylesheet module. This has a compulsory attribute (in the per-element partition, not in the gexslt namespace) isolation-level. This takes one of the four values:
The effect of this implementation, is that documents or collections specified as read-committed (or read-uncommitted) will not be locked in memory. If the same URI is passed to one of these functions a second time, then the document(s) will be read and parsed by the XML parser a second time. This will break the usual guarantee of node identity.
This user-defined data element is experimental. I intend to eventually move towards a more transaction-oriented solution. Support for this user-defined data element may then be dropped (note that this will not cause errors in stylesheets that use it - it will then have no effect (other than to issue a warning)).
There is also collation. This is intended for declaring collation-URI names, but as the only collation supported is the default one at the moment, it is not much use (I use it for binding additional URIs to the default collation, to test the collation-naming mechanism). When a tailorable collation based on the Unicode Collation Algorithm is available, then this will be used to bind URI names to tailored collations.
gexslt:function is identical in syntax to xsl:function. However it is implemented as a memo-function for performance.
If the function has any side effects (which can only occur if it uses user-written extension functions with side-effects), or if it access context information, such as position(), last() or the context item, then you may not get what you expect.
If the function constructs and returns a temporary tree, the same tree will be returned each time. The only consequence of this is if you compare node identities on that tree.
gexslt:serialize may be defined in the future. Or maybe not. Users can always use Evan Lenz's serializer written in XSLT 1.0. (I think an XSLT 2.0 html serializer has also been written).
The only supplied method is gexslt:chain, which delegates serialization to a further transformation, sepecified by the gexslt:next-in-chain attribute. Consquently all other attributes on the xslt:output element are ignored.
There is also an example provided to show Eiffel programmers how to write their own output methods. This is in the namespace http://www.gobosoft.com/eiffel/gobo/gexslt/extension/example, and has a local name of xml. It functions identically to the standard xml method, unless the extension attribute internal-subset (in the same namespace) is supplied. In which case, it's value is used as the text for a DTD internal subset. You must also supply doctype-system for this to work.
This function allows you to run an XSLT transformation from within your current XSLT transformation. Syntax is gexslt:transformation ($trans-uri as xs:string, $initial-context as node()?, $initial-template as xs:QName?, $initial-mode as xs:QName?, $parameter-names as xs:QName*, $parameter-values as item()*, $features as xs:string?) as item()+
or gexslt:transformation ($trans-uri as xs:string, $initial-context as node()) as item()+
The two-argument form is equivalent to passing () for all remaining arguments.
The meaning of the arguments is as follows:
If the stylesheet fails to compile, then the error return value will be COMPILE_FAILED in the gexslt namespace. If there is no initial template, and no initial context node, then the error return value will be NO_INITIAL_TEMPLATE in the gexslt namespace. If the number of parameter names and values are unequal, then the error return value will be PARAMETER_MISMATCH in the gexslt namespace. If an unrecognized feature name is supplied, then the error return value will be UNRECOGNIZED_FEATURE in the gexslt namespace. Otherwise, the error return value will be a standard XPath or XSLT error code, or a normal gexslt error code,
The result sequence has one of two forms:
Result documents can be serialized using the gexslt:serialize extension instruction (if I ever write it).
This function returns any available response data, as a single string, as a result of storing an xsl:result-document. It takes a single string argument (required), whose value must be the same as the (resolved) value of the href attribute on the xsl:result-document. If no such response data is available then the error return value will be NO_RESPONSE in the gexslt namespace.
This is principally intended for use with http URIs, but any scheme that supports responses to store requests can use it. Database requests spring to mind.
Copyright © 2004, Colin Adams and others mailto:colin@colina.demon.co.uk http://www.gobosoft.com Last Updated: Wednesday, November 24th, 2004 |