[Bug 17173] New: Inconsistent is-id behavior for updated attributes

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