- From: Arnold, Curt <Curt.Arnold@hyprotech.com>
- Date: Tue, 2 Apr 2002 16:19:02 -0700
- To: "'www-dom@w3.org'" <www-dom@w3.org>
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. 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); };
Received on Tuesday, 2 April 2002 18:18:18 UTC