RE: [wsbpel] Issue - 46 - Namespace for the document fragment representing a part

From
Ugo Corda <>
Date
2003-08-07T17:10:59+00:00
ID
Thread
RE: [wsbpel] Issue - 46 - Namespace for the document fragment representing a part
Title: Namespace for the document fragment representing a part

I disagree. Those 
elements are local elements and, according to Schema 1 (section 3.3.2), they are 
in no namespace (unless a elementFormDefault="qualified" has been specified for 
the corresponding schema).

 

Ugo

  
-----Original Message-----
From: Chris Keller 
  [mailto:]
Sent: Thursday, August 
  07, 2003 10:24 AM
To: Ugo Corda; 
  
Subject: RE: [wsbpel] Issue - 46 - 
  Namespace for the document fragment representing a part

  

  
I think that we 
  should assume that the elements under the part are fully qualified, meaning 
  that their QName is associated with the namespace in 
  the document fragment of the part.

  
 

  
-----Original 
  Message-----
From: Ugo Corda 
  [mailto:] 
Sent: Thursday, August 07, 
  2003 12:56 
  PM
To: ; 
  
Subject: RE: [wsbpel] Issue - 46 - 
  Namespace for the document fragment representing a part

  
 

  

  
Chris,

  

  
 

  

  
I don't think I agree with your 
  final conclusion.

  

  
 

  

  
If we decide, as 
  I proposed, to follow the BP 1.0 resolution, then a part 
  defined in terms of a type has no namespace (please notice: I am not talking 
  about default namespace here).

  

  
 

  

  
If the part has no namespace, 
  there is no prefix that can be used to identify the namespace of the top 
  element (as shown in the BP 1.0 example I pointed out below). This should 
  still be consistent with what XPath 1.0 says ("if the QName does not have a 
  prefix, then the namespace URI is null"). So a path starting with "/PO/..." 
  should be fine.

  

  
 

  

  
For what concerns the complete 
  path example you give, "/PO/tns:Header/tns:PONumber", I don't think the tns 
  prefix should be there. Assuming that elementFormDefault="unqualified" for the 
  corresponding schema (which is the default value), the local elements of 
  purchaseOrder should also be in no 
  namespace.

  

  
 

  

  
Ugo

  

  
 

  
    
-----Original 
    Message-----
From: Chris 
    Keller [mailto:]
Sent: Wednesday, August 06, 
    2003 7:50 
    PM
To: Ugo Corda; 
    
Subject: RE: [wsbpel] Namespace for the 
    document fragment representing a part

    
Ugo,

    
 

    
I 
    brought up the issue.  I believe 
    this requires clarification.  
    First in XPath 1.0 there is no default namespace for evaluation 
    meaning that all names need to be qualified with a prefix.  In XPath 2.0 there is the use of a 
    default namespace, but this specification is referencing 1.0.  Putting that aside for a moment in 
    both 1.0 and 2.0 no namespace is not equal to default namespace.  Let’s take an 
    example:

    
 

    
  <message 
    name="poMessage">

    
    <part 
    name="PO" 
    type="tns:purchaseOrder"/>

    
  
    </message>

    
 

    
  <bpws:property name="poNumber" 
    type="xsd:positiveInteger"/>

    
 

    
  <bpws:propertyAlias 
    propertyName="tns:poNumber"   
    

    
       
    messageType="tns:poMessage" part="PO" 
    

    
       
    query="/PO/Header/PONumber"/>

    
  
    </bpws:propertyAlias>

    
 

    
If as 
    you suggest we assume that the Part PO is included in the query (which I 
    agree with) and has no namespace (namespace URI is null) association.  This query in order to be correct in 
    XPath should be formulated as:

    
 

    
 /PO/tns:Header/tns:PONumber

    
 

    
Note 
    the section Node Tests from XPath 1.0 (http://www.w3.org/TR/xpath#node-tests 
    – section 2.3 Node Tests) 

    
 

    
“A 
    node test that is a QName is true if and only if the type of the node (see 
    [5 Data Model]) is the principal node type and has an expanded-name equal to 
    the expanded-name specified by the QName. For example, child::para selects 
    the para element children of the context node; if the context node has no 
    para children, it will select an empty set of nodes. attribute::href selects 
    the href attribute of the context node; if the context node has no href 
    attribute, it will select an empty set of 
nodes.

    
 

    
A 
    QName in the node test is expanded into an expanded-name using the namespace 
    declarations from the expression context. This is the same way expansion is 
    done for element type names in start and end-tags except that the default 
    namespace declared with xmlns is not used: if the QName does not have a 
    prefix, then the namespace URI is null (this is the same way attribute names 
    are expanded). It is an error if the QName has a prefix for which there is 
    no namespace declaration in the expression 
    context.”

    
 

    
-- 
    Note the statement “except that the default namespace declared with xmlns is 
    not used: if the QName does not have a prefix, then the namespace URI is 
    null”

    
 

    
Now in 
    XPath 2.0 it is slightly different (http://www.w3.org/TR/xpath20/#node-tests 
    – section 3.2.1.2 Node Tests)

    
 

    
“A 
    node test that consists of a QName is called a name test. A name test is 
    true if and only if the kind of the node is the principal node kind and the 
    expanded-QName of the node is equal to the expanded-QName specified by the 
    name test. For example, child::para selects the para element children of the 
    context node; if the context node has no para children, it selects an empty 
    set of nodes. attribute::abc:href selects the attribute of the context node 
    with the QName abc:href; if the context node has no such attribute, it 
    selects an empty set of nodes.

    
 

    
A 
    QName in a name test is expanded into an expanded-QName using the in-scope 
    namespaces in the expression context. It is a static error if the QName has 
    a prefix that does not correspond to any in-scope namespace. An unprefixed 
    QName, when used as a name test on an axis whose principal node kind is 
    element, has the namespaceURI of the default element namespace in the 
    expression context; otherwise, it has no 
    namespaceURI.”

    
 

    
-- 
    Note the statement: “An unprefixed QName, when used as a name test on an 
    axis whose principal node kind is element, has the namespaceURI of the 
    default element namespace in the expression context; otherwise, it has no 
    namespaceURI.”

    
 

    
-- So 
    in either case we need to qualify the namespace for your message part 
    declared as a type example.  And 
    if we are following the XPath 1.0 specification we should qualify all 
    elements that have a namespace since no default namespace is applied.  In this case basically every query 
    in the bpel specification is incorrect and should contain prefixes for all 
    element names associated with namespaces in the XPath 
    expressions.

    
 

    
I will 
    continue to submit the namespace in queries as a new issue unless we want to 
    address it as part of your original query clarification issue.  Please let me know your 
    thoughts.

    
 

    
Chris

    
 

    
-----Original 
    Message-----
From: Ugo 
    Corda [mailto:] 
Sent: Wednesday, August 06, 
    2003 9:50 
    PM
To: 
    
Subject: [wsbpel] Namespace for the 
    document fragment representing a part

    
 

    
During today's discussion of 
    item 39, somebody brought up the issue of which namespace is associated with 
    the document fragment representing a part. This is, of course, relevant to 
    writing path expressions in query attributes found in assignments and 
    property aliases declarations.

    
I imagine this should be an 
    issue only in the case where the part is defined in terms of a type. (If the 
    part is defined in terms of an element, I would assume the namespace should 
    be the same as the element's namespace).

    
In the case the part is defined 
    in terms of a type, I would follow what the WS-I Basic Profile 1.0 says in 
    section 5.6.20, Namespace for Part Accessors: 

    
"R2735 A MESSAGE described with 
    an rpc-literal binding MUST place the part accessor elements for parameters 
    and return value in no namespace".

    
(See also the example in the 
    following section 5.6.21). 

    
In other words, I would follow 
    the same direction and say that the top element of a document fragment 
    representing a part defined in terms of a type does not belong to any 
    namespace.

    
Ugo