- From: Erik Bruchez <erik@bruchez.org>
- Date: Tue, 7 May 2013 14:48:17 -0700
- To: public-forms@w3.org, "public-xformsusers@w3.org" <public-xformsusers@w3.org>
All,
I had a slightly deeper look at the "XSLT and XQuery Serialization 3.0
- Serialization Parameters" section [1].
Based purely on the spec, it seems that the main reason that a tree of
elements is used is the `use-character-maps` serialization parameter,
which requires a list of pairs, as in the following example:
<output:serialization-parameters
xmlns:output="http://www.w3.org/2010/xslt-xquery-serialization"
xmlns:ext="http://example.org/ext">
<output:method value="ext:jsp"/>
<output:use-character-maps>
<output:character-map character="«" map-string="<%"/>
<output:character-map character="»" map-string="%>"/>
</output:use-character-maps>
</output:serialization-parameters>
Each `character-map` element maps from a single character to a string
of characters.
Character maps are an XSLT 2 feature, which is now making it more
generally to the separate serialization spec. Character maps are
discussed in more details here [2] (XSLT 2) and here [3] (XSLT 3).
Now this is a bit of a drag because if we want to support this, then
simple name/attribute values don't work anymore: one of the values
needs to be itself a map of character -> string.
I see a few possibilities:
1. Just follow the XSLT/XQuery 3 format
- Benefits: less spec work for us, leveraging existing knowledge
(although almost nobody yet knows anything about XSLT 3 I suppose).
- Drawback: the format is heavy and hideous.
2. Define our own format
We could have a serialization attribute called `character-map`, with a
space-separated list of character/string pairs in even number:
character-map="« <% » %>"
(Note that, in attributes, whitespace character other than space
(#x20) must be encoded as character references or they will be
normalized by the parser.)
Another possible format uses a JSON object as attribute value. In our
product, we have a configuration property (in a context different from
serialization but very similar) which uses JSON maps as follows:
<property as="xs:string"
name="oxf.xforms.filter.input"
value='{ "‘": "'",
"’": "'",
"“": "\"",
"”": "\"",
"–": "-",
"—": "-",
"∙": "-",
"•": "-",
"¿": "?",
"…": "..." }'/>
3. Support both
If the element passed is `output:serialization-parameters`, then we
use the XSLT 3 format. Otherwise, we use name/values attributes.
I don't have a fully defined opinion on this at this point.
Feedback welcome,
-Erik
[1] http://www.w3.org/TR/xslt-xquery-serialization-30/#serparam
[2] http://www.w3.org/TR/xslt20/#character-maps
[3] http://www.w3.org/TR/xslt-30/#character-maps
Received on Tuesday, 7 May 2013 21:49:06 UTC