- From: <bugzilla@jessica.w3.org>
- Date: Thu, 24 May 2012 21:21:57 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=17173
Summary: Inconsistent is-id behavior for updated attributes
Product: XPath / XQuery / XSLT
Version: Recommendation
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: Update Facility
AssignedTo: jonathan.robie@gmail.com
ReportedBy: josh.spiegel@oracle.com
QAContact: public-qt-comments@w3.org
Group: XSLXQuery_WG
Whenever an XDM attribute is brought into the world, the XQuery and XDM
specifications ensure that if its name is xml:id:
(a) the is-id property is set to true and
(b) the attribute value has undergone xml:id processing.
Example 1: XDM Attribute Conversion
http://www.w3.org/TR/xpath-datamodel/#const-infoset-attribute
is-id "If the attribute is named xml:id and its [attribute type] property does
not have the value ID, then [xml:id] processing is performed. This will assure
that the value does have the type ID and that it is properly normalized"
Example 2: Attribute construction
http://www.w3.org/TR/xquery/#id-attributes (bullet 5)
"If the attribute name is xml:id, then xml:id processing is performed as
defined in [XML ID]. This ensures that the attribute has the type xs:ID and
that its value is properly normalized. "
It looks like the XQuery Update Facility also tries to maintain this policy.
Example 3:
http://www.w3.org/TR/xquery-update-10/#id-upd-rename (bullet 2. c.)
"If $newName is xml:id, the is-id property of $target is set to true."
Example 4:
http://www.w3.org/TR/xquery-update-10/#id-upd-set-to-untyped (bullet 2. d.)
"is-id is set to false if the attribute name is not xml:id."
But, I think there might be some holes in the XQUF specification with respect
to this.
Problem 1: It is possible to cause an attribute named xml:id to have is-id set
to false.
----------------------------------------
copy $doc := document { <e xml:id="bar"/> }
modify replace value of node $doc/e/@xml:id with "foo"
return fn:id("foo", $doc)
I think that the result of this query should be <e xml:id="foo"/> but according
to the spec the answer should be (). The replace expression will create a
upd:replaceValue primitive which in turn will use upd:removeType on the
attribute node. upd:removeType will set is-id to false, creating an attribute
named xml:id with is-id false.
Problem 2: It is possible to produce an attribute named xml:id with is-id set
to true where the value has not undergone xml:id processing
----------------------------------------
copy $e := <e a="foo bar"/>
modify rename node $e/@a as xs:QName("xml:id")
return $e
Possibly the result of this query should be <e xml:id="foo bar"/> but currently
I think it would be <e xml:id="foo bar"/>. That is, the XQUF does not
specify that xml:id processing should be performed on the value.
And you can also combine problem 1 and problem 2 (an attribute named xml:id
with is-id set to false and no xml:id normalization):
copy $e := <e xml:id="x"/>
modify replace value of node $e/@xml:id with "foo bar"
return $e
--
Configure bugmail: https://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
Received on Thursday, 24 May 2012 21:22:00 UTC