- From: Jakub Kotowski <jakubkotowski@gmx.net>
- Date: Fri, 26 Feb 2010 13:18:23 +0100
- To: Tim Berners-Lee <timbl@w3.org>
- CC: jos.deroo@agfa.com, connolly@w3.org, public-cwm-talk@w3.org, public-cwm-talk-request@w3.org
Tim, at first I didn't understand why the behavior is different for blank nodes matched by a variable (as in my example) and blank nodes named explicitly in a rule (as in Dan's example) but then I went to look at your N3Logic paper and on page 10 you write: "N3 allows blank nodes in the conclusion of a rule, hence allowing the creation of new objects." So this is the reason for the difference if I am right? Whenever there's a blank node in the rule conclusion a new object will be created. There could also be another way to achieve this - by allowing variables in conclusion that do not occur in the rule body (i.e. variables that are not range restricted). For such variables a new blank node could be created and for a blank node named explicitly in the rule head it's name would be used so it would work the way Dan wanted it to. Is there some problem with this approach I don't see? Regards, Jakub Tim Berners-Lee schrieb: > Jakub, > > When adding new facts to the same graph, as you suggest, > the same blank node is used: > > > $ echo ':bob :likes _:s1. {:bob :likes ?X} => {:fred :likes ?X}.' | cwm --think --quiet > @prefix : <#> . > > @forAll :X. > @forSome :_g0 . > :bob :likes :_g0 . > :fred :likes :_g0 . > { > :bob :likes :X . > } <http://www.w3.org/2000/10/swap/log#implies> {:fred :likes :X . > } . > > > Tim > > > On 2010-02 -25, at 04:59, Jakub Kotowski wrote: > >> Jos and Dan, >> >> So it means that rule bodies match graphs and rule heads create >> different graphs...? Why is it so? Rule heads could well "create" >> triples in the same graph that matched the body and then the blank-node >> wouldn't and shouldn't have to be renamed. >> >> I am wondering what happens if a rule body variable binds to a >> blank-node and rule head creates a new triple with this binding. >> >> For example: >> >> :bob :likes _:somebody_1. >> {bob likes ?X} => {fred likes ?X} >> >> is the blank node in the new fred likes ... triple different from >> _:somebody_1 too? >> >> Regards, >> Jakub >> >> >> jos.deroo@agfa.com schrieb: >>> It took us 10 years to realize that the scope of blank nodes is the >>> graph in which they occur :-) >>> The answer we get from euler is the same as you got from cwm: >>> >>> eye --nope varscope1.n3 --pass >>> #Processed by $Id: euler.yap 3310 2010-02-24 21:31:52Z josd $ >>> >>> @prefix : <evarscope1#>. >>> @prefix var: <http://localhost/var#>. >>> @prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>. >>> @prefix r: <http://www.w3.org/2000/10/swap/reason#>. >>> @prefix n3: <http://www.w3.org/2004/06/rei#>. >>> >>> :bob :likes _:somebody_1. >>> :fred :likes _:somebody_1. >>> :alice :likes :trina. >>> :trina :likes _:sk0. >>> >>> >>> Kind regards, >>> >>> Jos De Roo | Agfa HealthCare >>> Senior Researcher | HE/Advanced Clinical Applications Research >>> T +32 3444 7618 >>> http://www.agfa.com/w3c/jdroo/ >>> >>> Quadrat NV, Kortrijksesteenweg 157, 9830 Sint-Martens-Latem, Belgium >>> http://www.agfa.com/healthcare >>> >>> >>> *Dan Connolly <connolly@w3.org>* >>> Sent by: public-cwm-talk-request@w3.org >>> >>> 02/23/2010 11:16 PM >>> >>> >>> To >>> public-cwm-talk@w3.org >>> cc >>> >>> Subject >>> scope of _:existentials in N3Logic? >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> I'm re-implementing N3Logic in scala... in particular, parsing >>> N3 syntax into Coherent formulas. I'm trying to figure >>> out how existential variables work in N3, and I'm surprised about >>> something. >>> >>> Consider: >>> >>> There's somebody that Bob likes and Fred likes. >>> And everybody that Alice likes also likes this somebody. >>> Also, Alice likes Trina. >>> >>> Does Trina like this somebody? >>> >>> Of course Trina does, but when I try to write the problem >>> down in N3, cwm doesn't handle it as I'd expect. cwm concludes >>> that Trina likes something, but not that Trina likes >>> the same somebody that Bob and Fred like. >>> >>> $ cat ...varscope1.n3 >>> @prefix : <evarscope1#>. >>> @keywords is, of, a. >>> >>> bob likes _:somebody. >>> fred likes _:somebody. >>> { alice likes ?X } => { ?X likes _:somebody }. >>> alice likes trina. >>> >>> $ cwm.py ...varscope1.n3 --think >>> #Processed by Id: cwm.py,v 1.197 2007/12/13 15:38:39 syosi Exp >>> # using base >>> file:///home/connolly/projects/rdfsem/src/test/resources/varscope1.n3 >>> >>> # Notation3 generation by >>> # notation3.py,v 1.200 2007/12/11 21:18:08 syosi Exp >>> >>> # Base was: >>> file:///home/connolly/projects/rdfsem/src/test/resources/varscope1.n3 >>> @prefix : <evarscope1#> . >>> @prefix va: <#> . >>> >>> @forAll va:X. >>> @forSome va:_g0 . >>> >>> :alice :likes :trina . >>> >>> :bob :likes va:_g0 . >>> >>> :fred :likes va:_g0 . >>> >>> :trina :likes [ >>> ] . >>> { >>> :alice :likes va:X . >>> >>> } <http://www.w3.org/2000/10/swap/log#implies> >>> {va:X :likes [ >>> ] . >>> } . >>> >>> #ENDS >>> >>> The surprise is bad news, but the good news is that cwm's >>> way of reading this formula does fit inside coherent logic, >>> which makes my coding goal straightforward... >>> >>> -- >>> Dan Connolly, W3C http://www.w3.org/People/Connolly/ >>> gpg D3C2 887B 0F92 6005 C541 0875 0F91 96DE 6E52 C29E >>> >>> >>> >>> >> >> > >
Received on Friday, 26 February 2010 12:19:01 UTC