Re: rdf list support

Yosi Scharf wrote:
> Quoting jos.deroo@agfa.com:
>
>> 
>> given
>> 
>> ### test-rules.n3
>> @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. 
>> @prefix : <test#>.
>> 
>> :Z :allOf (:A :B :C).
>> 
>> {?L rdf:first ?I} => {?L :item ?I}.
>> {?L rdf:rest ?R. ?R :item ?I} => {?L :item ?I}.
>> ###
>> 
>
> This is NOT a bug. This is just how cwm's foreward chainer works.
> ?L rdf:first ?I would run a builtin, and cwm will never simply
> try every node to see if the builtin will run. You need some way
> of narrowing down to select a node.
>
> These rules can become something like:
>
> :Z :allOf (:A :B :C).
> {?m :allOf ?x} => {:x a :NeedsItem}
> {?L a :NeedsItem; rdf:first ?I; rdf:rest ?x} => {?L :item ?I; ?x a 
:NeedsItem}.
> {?L a :NeedsItem; rdf:rest ?R. ?R :item ?I} => {?L :item ?I}.
>
> and then they should work.

OK
instead of :NeedsItem I tried with rdf:List

:Z :allOf (:A :B :C).

{?M :allOf ?X} => {?X a rdf:List}.
{?L rdf:rest ?X; a rdf:List} => {?X a rdf:List}.

{?L rdf:first ?I; a rdf:List} => {?L :item ?I}.
{?L rdf:rest ?R; a rdf:List. ?R :item ?I} => {?L :item ?I}.

and then query

[] q:select {?I :okFor ?Y}; q:where  {?Y :allOf ?L. ?L :item ?I}.

indeed gives

     @prefix : <test#> .
 
    :A     :okFor :Z .
 
    :B     :okFor :Z .
 
    :C     :okFor :Z .


> Yosi Scharf

-- 
Jos De Roo, AGFA http://www.agfa.com/w3c/jdroo/

Received on Sunday, 13 March 2005 12:48:02 UTC