Hi Michael, The changes are committed to Xerces SVN, relating to the improvements to namespace bindings implementation, for PsychoPath XPath 2 static context, as per the explanation you gave at the bottom of this mail.
All my local tests for assertions and CTA pass as previously, and I am satisfied with functional completeness, for use case we are discussing in this thread. You and others could please verify these fixes, and suggest further improvements please. On Sun, Nov 15, 2009 at 10:32 AM, Michael Glavassevich <[email protected]> wrote: > Hi Mukul, > > I stand by what I said before. The namespace bindings for the schema and F&O > namespaces have no special standing. You may potentially need all of the > in-scope namespace at the assert element in order to process the XPath. If > PsychoPath is only made aware of those two namespaces how could it ever > process an XPath like "@my:length eq fn:count(./a:children/b:grandchildren)" > correctly (where "my", "a" and "b" are bound to other namespaces in the > user's schema)? PsychoPath can't know what those bindings are unless it's > explicitly told what they are. > > The static context does include all the in-scope namespaces. See section > 3.13.6.2 in the spec [1]: > > 2.2 The static context is given as follows: > ... > 2.2.2 The statically known namespaces is the {namespace bindings} of X. > 2.2.3 The default element/type namespace is the {default namespace} of X. > 2.2.4 The default function namespace is > http://www.w3.org/2005/xpath-functions. > ... > > where {namespace bindings} is defined [2] as: "A set of Namespace Binding > property records. Each member corresponds to an entry in the [in-scope > namespaces] of the host element, with {prefix} being the [prefix] and > {namespace} the [namespace name]." > > This has to be captured from the schema document and communicated to the > XPath processor in order to have a correct implementation. The opportunity > to retrieve the in-scope namespaces is in the traverser. For example: > > NamespaceSupport namespaceContext = schemaDoc.fNamespaceSupport; > Enumeration currPrefixes = namespaceContext.getAllPrefixes(); > while (currPrefixes.hasMoreElements()) { > String prefix = (String)currPrefixes.nextElement(); > String uri = namespaceContext.getURI(prefix); > // Store each prefix mapping on the XSAssert component. > ... > } > > Hoping that makes sense. > > Thanks. > > [1] http://www.w3.org/TR/2009/CR-xmlschema11-1-20090430/#sec-xpath-valid > [2] http://www.w3.org/TR/2009/CR-xmlschema11-1-20090430/#declare-assertion > > Michael Glavassevich > XML Parser Development > IBM Toronto Lab > E-mail: [email protected] > E-mail: [email protected] -- Regards, Mukul Gandhi --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
