- From: Abel Braaksma <abel.braaksma@xs4all.nl>
- Date: Fri, 24 Jun 2016 19:01:35 +0200
- To: "Public XSLWG" <public-xsl-wg@w3.org>
Taking this discussion first offline, to prevent cluttering the bug entry too much, and with the intent to gather some more understanding of the issue. I'm curious about stripping spaces/annotations from input sequences when these sequences are the initial match selection. It is my understanding that stripping spaces only applies to elements. Then you proposed the following: > <quote> > If the stripping process strips a whitespace text node that is present in the > sequence provided as the initial match selection, or in the sequence that > forms the result of the collection function, then the relevant node is > removed from this sequence. > </quote> This seems to suggest that "the node is removed from the sequence". I don't see how that can happen. 1) if the sequence contains a whitespace-only text node, the NameTest will never match against this node 2) if the sequence contains a document node containing a whitespace-only text node child, the NameTest will never match against this node 3) the text seems to suggest that if any ws-only text node (however deep) is removed from a node in the supplied sequence, the whole node is removed Proposal: Remove this part, I don't think it can happen in practice (or can it?) and it may be confusing to readers. Or replace it with something like: <quote> Note: If the sequence provided as the initial match selection contains items that are single whitespace text nodes, these nodes are not affected by this process. Document nodes that contain a single whitespace text node child will not be stripped either. This is a consequence of the mapping process: a NameTest can never match a single text node or the document node. Furthermore, stripping space or annotations only applies to elements. </quote> Unless of course we want to give users freedom to remove text-nodes in a supplied sequence if such text-nodes are whitespace-only. But then we should change the requirement of NameTest and make it a NodeTest. Cheers, Abel > -----Original Message----- > From: bugzilla@jessica.w3.org [mailto:bugzilla@jessica.w3.org] > Sent: Friday, June 24, 2016 4:04 PM > To: public-qt-comments@w3.org > Subject: [Bug 29692] xsl:strip-space and packages > > https://www.w3.org/Bugs/Public/show_bug.cgi?id=29692 > > --- Comment #5 from Michael Kay <mike@saxonica.com> --- I propose the > following changes: > > 1. Merge sections 4.4 and 4.5 into a single section (4.4 Preprocessing Source > Documents) with the current sections as subsections, and put shared > material in the introduction to this new section. Specifically: > > <quote> > Source documents supplied as input to a transformation may be subject to > preprocessing. Two kinds of preprocessing are defined: stripping of type > annotations (see 4.4.1), and stripping of whitespace text nodes (see 4.4.2). > > Stripping of type annotations happens before stripping of whitespace text > nodes. > > The source documents to which this applies are as follows: > > * The document containing the global context item if it is a node > > * Any documents containing nodes present in the initial match selection > > * Any document containing a node that is returned by the functions > document, docFO30, or collectionFO30 > > * Any document read using xsl:stream. > > Note: this list excludes documents passed as the values of stylesheet > parameters or parameters of the initial template or function, trees created > by functions such as parse-xmlFO30, parse-xml-fragment, analyze- > stringFO30, or json-to-xml, and values returned from extension functions. > > If a node other than a document node is supplied (for example as the global > context item), then the preprocessing is applied to the entire document > containing that node. If several nodes within the same document are > supplied (for example as nodes in the initial match selection, or as nodes > returned by the collection function), then the preprocessing is only applied > to that document once. > > The rules determining whether or not stripping of annotations and/or > whitespace happens are defined at the level of a package. Declarations > within a library package only affect the handling of documents loaded using a > call on the document, docFO30, or collectionFO30 functions or an evaluation > of an xsl:stream instruction appearing lexically within the same package. > Declarations within the top-level package also affect the processing of the > global context item and the initial match selection. > > The semantics of the doc, document, and collection functions are formally > defined in terms of mappings from URIs to document nodes maintained > within the dynamic context. The effect of the declarations that control > stripping of type annotations and whitespace is therefore to modify this > mapping (so it now maps the URI to a stripped document). The modification > applies to the dynamic context for calls to these function appearing within a > particular package; each package therefore has a different set of mappings. > This means that when two calls to the doc function appear in different > packages, specifying the same absolute URI, then in general different > documents are returned. An implementation MAY return the same > document if it is able to determine that the effect of the annotation and > whitespace stripping rules in both packages is the same. > > The effect of dynamic calls to the doc, document, and collection functions is > defined in the same way as for other functions with dependencies on the > dynamic context. As described in 5.3.4, named function references (such as > doc#1) and calls on function-lookupFO30 (for example, function- > lookup("doc", 1)) are defined to retain the XPath static and dynamic context > at the point of invocation as part of the closure of the resulting function item, > and to use this preserved context when a dynamic function call is > subsequently made using the function item. > > </quote> > > 2. In 4.4, delete this paragraph: > > <quote> > The source trees to which this applies are the same as those affected by > xsl:strip-space and xsl:preserve-space: see 4.5 Stripping Whitespace from a > Source Tree. As with whitespace stripping, the rules for stripping of type > annotations may vary from one package to another, and have the effect of > modifying the mapping from URIs to document nodes defined in the XPath > dynamic context; this means that two calls to the docFO30 function (for > example) supplying the same URI may produce different document nodes if > the calls appear in different packages. > </quote> > > 3. Inn 4.5, delete the following paragraphs: > > <quote> > For the purposes of this section, the term source tree means the document > containing the global context item if it is a node, any documents containing > nodes present in the initial match selection, any document returned by the > functions document, docFO30, or collectionFO30, and any document read > using xsl:stream. It does not include documents passed as the values of > stylesheet parameters or parameters of the initial template or function, > trees created by functions such as parse-xmlFO30, parse-xml-fragment, > analyze-stringFO30, or json-to-xml, nor values returned from extension > functions. > > Each source tree is associated with a package: the relevant package for the > global context item is the top-level package; the relevant package for a call > on document, docFO30, or collectionFO30; is the package in which that call > appears; and the relevant package for evaluation of xsl:stream is the package > in which that instruction appears. > </quote> > > Change the following paragraph: > <quote> > Formally, the stripping process modifies the mapping from URIs to document > nodes defined in the XPath dynamic context. This mapping can therefore > vary from one package to another. The mapping that applies to a particular > call on document, docFO30, or collectionFO30, or a particular evaluation of > xsl:stream, is affected by the xsl:strip-space and xsl:preserve-space > declarations within the package in which that construct appears. This means > that two calls on the > docFO30 function (for example) may return different nodes if the calls > appear in different packages. > </quote> > > to > <quote> > The stripping process that applies for a particular package is determined by > the xsl:strip-space and xsl:preserve-space declarations within that package. > </quote> > > After > <quote> > The xml:space attributes are not removed from the tree. > </quote> > > add: > <quote> > If the stripping process strips a whitespace text node that is present in the > sequence provided as the initial match selection, or in the sequence that > forms the result of the collection function, then the relevant node is > removed from this sequence. > </quote> > > Delete the following paragraph: > <quote> > The effect of xsl:strip-space and xsl:preserve-space is local to the package in > which they appear. Declarations within a library package only affect the > handling of documents loaded using a call on the document, docFO30, or > collectionFO30 functions or an evaluation of an xsl:stream instruction > appearing lexically within the same package. Declarations within the top-level > package also affect the processing of the main input document. > </quote> > > -- > You are receiving this mail because: > You are the QA Contact for the bug.
Received on Friday, 24 June 2016 17:02:14 UTC