- From: Randall Leeds via GitHub <sysbot+gh@w3.org>
- Date: Wed, 04 Nov 2015 21:45:57 +0000
- To: public-annotation@w3.org
What I was missing was the `string` function and the fact that the
string-value of an element includes the concatenation of the
string-value of each of its children.
Using a construction like `string(/html/body/article/p[1])` would
fulfill my use case.
So, for instance, the range that encompasses the text between the 10th
character of the first paragraph and the 8th character of the third
paragraph, each of the article:
```json
{
"type": "XPathRangeSelector",
"startPath": "substring(string(//article/p[1]), 10)",
"endPath": "substring(string(//article/p[3]), 0, 8)"
}
```
The only problem with this in practice for DOM selections is that the
path expressions would have to be tokenized manually first since the
standard XPath APIs would give you a string result for each of these.
For example, to process this example for the use case of highlighting
the resulting range, one would need to write code to parse out the
`//article/p[n]` references and the substring function offsets, use
the DOM XPath APIs to look up the node references and then iterate
text nodes to find the container/offset suitable for constructing a
DOM `Range`.
That's doable, but the first step could be avoided if the startPath
and endPath are each selectors that point to a node with sub-selectors
that specify the text offsets within. It avoids the need to tokenize
the paths.
I could live with it, though.
--
GitHub Notif of comment by tilgovi
See
https://github.com/w3c/web-annotation/issues/95#issuecomment-153876212
Received on Wednesday, 4 November 2015 21:45:59 UTC