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

From
Ugo Corda <>
Date
2003-08-07T17:26:52+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

The only exception 
would be the case where the subelements are actually declared globally in the 
schema and then referenced within the type (see the example in BP 1.0, sec. 
5.6.21). But that is not the case for the BPEL example on page 
49.

 

Ugo

  
-----Original Message-----
From: Ugo Corda 
Sent: 
  Thursday, August 07, 2003 10:30 AM
To: 
  ; 
  
Subject: RE: [wsbpel] Issue - 46 - 
  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