- From: Philippe Le Hegaret <plh@w3.org>
- Date: 02 Apr 2002 19:02:05 -0500
- To: "Arnold, Curt" <Curt.Arnold@hyprotech.com>
- Cc: "'www-dom@w3.org'" <www-dom@w3.org>
On Tue, 2002-04-02 at 18:19, Arnold, Curt wrote: > You would need to separate the value datatype enums (NUMBER, BOOLEAN, > STRING, NODE) from the collection type enums > (UNORDERED_VALUE_ITERATOR_TYPE, ORDERED_VALUE_ITERATOR_TYPE, > UNORDERED_VALUE_SNAPSHOT_TYPE, > ORDERED_VALUE_SNAPSHOT_TYPE,ANY_UNORDERED_VALUE_TYPE) since they now > overlap. In your sample code, how would the implementation determine if you > were asking for a ORDERED_VALUE_ITERATOR_TYPE or a BOOLEAN_VALUE. One solution would be to request the type in the XPath expression itself: evaluate(".//h1") returns XPathResult.XPathSequenceResult evaluate(".//h1[1]") returns XPathResult.XPathSingletonResult(nodeValue) evaluate("string(.//h1)") returns XPathResult.XPathSingletonResult(stringValue) evaluate("strings(.//h1)") returns XPathResult.XPathSequenceResult // strings function would return a sequence of strings. didn't check // the appropriate syntax in XPath 2.0 > The current draft combines several things into the one result type argument: > > Type of the value or values > Whether the caller desires result order to be maintained > Whether the caller is only interested in one value > Whether the user wants a snapshot or an iterator > > The last three will still be applicable with XPath 2.0, though they could > now be qualifying a sequence of values instead of a sequence of nodes. > However, the value "type" part of the "resultType" will be obviously > inadequate. If you want to make it XPath 2.0 and schema datatype friendly, > I'd remove the value type from the characterization of the iterator/snapshot > and represent it by a namespaceURI and localName for the corresponding > schema datatypes. So evaluate might be: > > XPathResult evaluate(in Node contextNode, > in unsigned short iteratorType, > in DOMString valueTypeNS, > in DOMString valueTypeLocalName, > in XPathResult result) > raises(XPathException, > DOMException); > > Where, for Xpath 1.0, valueTypeNS would have to be null, > "http://www.w3.org/2001/XMLSchema" or > "http://www.w3.org/2001/XMLSchema-datatypes" (?), and valueTypeLocalName > would be null (for a node), "boolean", "double", or "string" . > > interface XPathResult { > > // XPathResultType > const unsigned short ANY_TYPE = 0; > const unsigned short VALUE_TYPE = 1; > const unsigned short NODE_TYPE = 2; > // would be nice if the values could be combinations > // of NODE_TYPE | ORDERED | > // (ITERATOR | SNAPSHOT) | ONLY_ONE_REQUIRED bits > const unsigned short UNORDERED_NODE_ITERATOR_TYPE = X; > const unsigned short ORDERED_NODE_ITERATOR_TYPE = X; > const unsigned short UNORDERED_NODE_SNAPSHOT_TYPE = X; > const unsigned short ORDERED_NODE_SNAPSHOT_TYPE = X; > const unsigned short ANY_UNORDERED_NODE_TYPE = X; > const unsigned short FIRST_ORDERED_NODE_TYPE = X; > > readonly attribute unsigned short resultType; > // > // maybe memberType instead > // (null, null) for nodes in Xpath 1.0 > // ("http://www.w3.org/2001/XML-Schema", "double" | "boolean" | > "string") > // for double, boolean and string > readonly attribute DOMString valueTypeNamespaceURI; > readonly attribute DOMString valueTypeLocalName; > readonly attribute double numberValue; > // raises(XPathException) on > retrieval > > readonly attribute DOMString stringValue; > // raises(XPathException) on > retrieval > > readonly attribute boolean booleanValue; > // raises(XPathException) on > retrieval > > readonly attribute Node singleNodeValue; > // raises(XPathException) on > retrieval > > readonly attribute boolean invalidIteratorState; > readonly attribute unsigned long snapshotLength; > // raises(XPathException) on > retrieval > > // > // The returned XPathResult would always be a singleNodeValue for > Xpath 1.0 > // > XPathResult iterateNext() > raises(XPathException, > DOMException); > XPathResult snapshotItem(in unsigned long index) > raises(XPathException); > }; Agree with the approach of valueTypeNamespaceURI/valueTypeLocalName. However, I still note that this solution forces the implementation to encapsulate the Nodes into XPathResult objects in case of a node set. Philippe
Received on Tuesday, 2 April 2002 19:02:08 UTC