Hi!
I am overcome with the cabbage-nature today, because I can't find this in the docs.
I am convinced there's a way to go:
(//some-element/node()) ! fn:node-type(.)
and get a sequence of "element(),element(),text()..." but do not know what the actual function is called. (it's not node-type()!)
How ought I to be approaching this?
Thanks! Graydon
HI Graydon -
it isn't a builtin function, but maybe the functx:node-kind() and functx:sequence-type() functions are what you want[1,2]? Hope that helps.
Best, Bridger [1] http://www.xqueryfunctions.com/xq/functx_node-kind.html [2] http://www.xqueryfunctions.com/xq/functx_sequence-type.html
On Fri, Nov 9, 2018 at 12:40 PM Graydon Saunders graydonish@gmail.com wrote:
Hi!
I am overcome with the cabbage-nature today, because I can't find this in the docs.
I am convinced there's a way to go:
(//some-element/node()) ! fn:node-type(.)
and get a sequence of "element(),element(),text()..." but do not know what the actual function is called. (it's not node-type()!)
How ought I to be approaching this?
Thanks! Graydon
Hi Bridger --
Those are helpful, thanks!
I was hoping for a built-in (extenstion!) function on the (possibly mistaken) supposition that BaseX just knows that things are in the internal representation and would nigh-certainly be quicker to have something that returns that value directly.
-- Graydon
On Fri, Nov 9, 2018 at 1:10 PM Bridger Dyson-Smith bdysonsmith@gmail.com wrote:
HI Graydon -
it isn't a builtin function, but maybe the functx:node-kind() and functx:sequence-type() functions are what you want[1,2]? Hope that helps.
Best, Bridger [1] http://www.xqueryfunctions.com/xq/functx_node-kind.html [2] http://www.xqueryfunctions.com/xq/functx_sequence-type.html
On Fri, Nov 9, 2018 at 12:40 PM Graydon Saunders graydonish@gmail.com wrote:
Hi!
I am overcome with the cabbage-nature today, because I can't find this in the docs.
I am convinced there's a way to go:
(//some-element/node()) ! fn:node-type(.)
and get a sequence of "element(),element(),text()..." but do not know what the actual function is called. (it's not node-type()!)
How ought I to be approaching this?
Thanks! Graydon
Hi Graydon,
Bridger has already given you a perfect reference.
The XQuery Working Group decided it’s a cleaner solution to do node tests with typeswitch. If you want to do different things based on the node type, it should be a good alternative to the string-based approach:
declare function local:node-type( $node as node() ) as xs:string { typeswitch($node) case element() return 'element' case comment() return 'comment' case attribute() return 'attribute' case text() return 'text' case document-node() return 'document-node' case processing-instruction() return 'processing-instruction' default return error() }; for $node in (<a/>, <!-- x -->) return local:node-type($node)
Cheers, Christian
On Fri, Nov 9, 2018 at 7:17 PM Graydon Saunders graydonish@gmail.com wrote:
Hi Bridger --
Those are helpful, thanks!
I was hoping for a built-in (extenstion!) function on the (possibly mistaken) supposition that BaseX just knows that things are in the internal representation and would nigh-certainly be quicker to have something that returns that value directly.
-- Graydon
On Fri, Nov 9, 2018 at 1:10 PM Bridger Dyson-Smith bdysonsmith@gmail.com wrote:
HI Graydon -
it isn't a builtin function, but maybe the functx:node-kind() and functx:sequence-type() functions are what you want[1,2]? Hope that helps.
Best, Bridger [1] http://www.xqueryfunctions.com/xq/functx_node-kind.html [2] http://www.xqueryfunctions.com/xq/functx_sequence-type.html
On Fri, Nov 9, 2018 at 12:40 PM Graydon Saunders graydonish@gmail.com wrote:
Hi!
I am overcome with the cabbage-nature today, because I can't find this in the docs.
I am convinced there's a way to go:
(//some-element/node()) ! fn:node-type(.)
and get a sequence of "element(),element(),text()..." but do not know what the actual function is called. (it's not node-type()!)
How ought I to be approaching this?
Thanks! Graydon
Graydon -
That makes sense. Maybe parsing the output of index:facets() would work? If I'm understanding correctly, it will only work from the database level.
Bridger
On Fri, Nov 9, 2018 at 1:37 PM Christian Grün christian.gruen@gmail.com wrote:
Hi Graydon,
Bridger has already given you a perfect reference.
The XQuery Working Group decided it’s a cleaner solution to do node tests with typeswitch. If you want to do different things based on the node type, it should be a good alternative to the string-based approach:
declare function local:node-type( $node as node() ) as xs:string { typeswitch($node) case element() return 'element' case comment() return 'comment' case attribute() return 'attribute' case text() return 'text' case document-node() return 'document-node' case processing-instruction() return 'processing-instruction' default return error() }; for $node in (<a/>, <!-- x -->) return local:node-type($node)
Cheers, Christian
On Fri, Nov 9, 2018 at 7:17 PM Graydon Saunders graydonish@gmail.com wrote:
Hi Bridger --
Those are helpful, thanks!
I was hoping for a built-in (extenstion!) function on the (possibly
mistaken) supposition that BaseX just knows that things are in the internal representation and would nigh-certainly be quicker to have something that returns that value directly.
-- Graydon
On Fri, Nov 9, 2018 at 1:10 PM Bridger Dyson-Smith <
bdysonsmith@gmail.com> wrote:
HI Graydon -
it isn't a builtin function, but maybe the functx:node-kind() and
functx:sequence-type() functions are what you want[1,2]?
Hope that helps.
Best, Bridger [1] http://www.xqueryfunctions.com/xq/functx_node-kind.html [2] http://www.xqueryfunctions.com/xq/functx_sequence-type.html
On Fri, Nov 9, 2018 at 12:40 PM Graydon Saunders graydonish@gmail.com
wrote:
Hi!
I am overcome with the cabbage-nature today, because I can't find this
in the docs.
I am convinced there's a way to go:
(//some-element/node()) ! fn:node-type(.)
and get a sequence of "element(),element(),text()..." but do not know
what the actual function is called. (it's not node-type()!)
How ought I to be approaching this?
Thanks! Graydon
Hi Christian --
Thank you! That will be useful. (and might have been what dim memory was trying to recall, too.)
-- Graydon
On Fri, Nov 9, 2018 at 1:37 PM Christian Grün christian.gruen@gmail.com wrote:
Hi Graydon,
Bridger has already given you a perfect reference.
The XQuery Working Group decided it’s a cleaner solution to do node tests with typeswitch. If you want to do different things based on the node type, it should be a good alternative to the string-based approach:
declare function local:node-type( $node as node() ) as xs:string { typeswitch($node) case element() return 'element' case comment() return 'comment' case attribute() return 'attribute' case text() return 'text' case document-node() return 'document-node' case processing-instruction() return 'processing-instruction' default return error() }; for $node in (<a/>, <!-- x -->) return local:node-type($node)
Cheers, Christian
On Fri, Nov 9, 2018 at 7:17 PM Graydon Saunders graydonish@gmail.com wrote:
Hi Bridger --
Those are helpful, thanks!
I was hoping for a built-in (extenstion!) function on the (possibly
mistaken) supposition that BaseX just knows that things are in the internal representation and would nigh-certainly be quicker to have something that returns that value directly.
-- Graydon
On Fri, Nov 9, 2018 at 1:10 PM Bridger Dyson-Smith <
bdysonsmith@gmail.com> wrote:
HI Graydon -
it isn't a builtin function, but maybe the functx:node-kind() and
functx:sequence-type() functions are what you want[1,2]?
Hope that helps.
Best, Bridger [1] http://www.xqueryfunctions.com/xq/functx_node-kind.html [2] http://www.xqueryfunctions.com/xq/functx_sequence-type.html
On Fri, Nov 9, 2018 at 12:40 PM Graydon Saunders graydonish@gmail.com
wrote:
Hi!
I am overcome with the cabbage-nature today, because I can't find this
in the docs.
I am convinced there's a way to go:
(//some-element/node()) ! fn:node-type(.)
and get a sequence of "element(),element(),text()..." but do not know
what the actual function is called. (it's not node-type()!)
How ought I to be approaching this?
Thanks! Graydon
basex-talk@mailman.uni-konstanz.de