- From: <bugzilla@jessica.w3.org>
- Date: Mon, 19 Sep 2016 14:15:16 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=29827 Bug ID: 29827 Summary: [XSLT 3.0] Error XTDE0045 revisited Product: XPath / XQuery / XSLT Version: Candidate Recommendation Hardware: PC OS: All Status: NEW Severity: normal Priority: P2 Component: XSLT 3.0 Assignee: mike@saxonica.com Reporter: mike@saxonica.com QA Contact: public-qt-comments@w3.org Target Milestone: --- (see also bug #29234, bug #29379 and bug #29475) I don't think we've got this right yet. Consider test case mode-1705a. declared-modes="yes" requires a declaration of all the modes that are used; fine, the stylesheet contains such declarations. But it's failing because we are using the unnamed mode as the entry point. The unnamed mode is not and cannot be public. But the way XTDE0045 is worded, invoking a stylesheet using the unnamed mode is impossible when declared-modes="yes". I don't believe that's what we intended, and it's not what the note underneath XTDE0045 says: <note>Or to put it another way: (a) if a named initial mode is specified, then it must exist as a public mode in the top-level package, declared implicitly or explicitly; (b) if the unnamed initial mode is specified and declared-modes="yes", then there must be an xsl:mode declaration for the unnamed mode.</note> Under condition (b), which I believe represents our intent, test cases mode-1705a is not an error. See also 6.6.1, which says "A /named/ mode [my emphasis] is not eligible to be used as the initial mode if its visibility is private." I think the correct rules are: (a) if the initial mode is a named mode: (a(i)) if declared-modes="yes": The named mode must be declared and must have visibility="public" or "final". (a(ii)) if declared-modes="no": The named mode must either be declared with visibility="public", or must be implicitly declared in the top-level package by virtue of it's appearance in an xsl:template/@mode attribute (b) if the initial mode is the unnamed mode: (a(i)) if declared-modes="yes": The unnamed mode must be declared. (a(ii)) if declared-modes="no": No constraints. ==== Without these changes, using declared-modes='yes' means that you can't invoke processing via the unnamed mode, and since that is how 95% of transformations are initiated today, everyone is going to set declared-modes='no' so they can continue working the way they are used to. -- You are receiving this mail because: You are the QA Contact for the bug.
Received on Monday, 19 September 2016 14:15:25 UTC