Tim Berners-Lee
Decentralized Information Group
MIT Computer Science and Artificial Intelligence Laboratory
Shorthand: Paths and Lists
DanC, Sandro, and TimBLAn N3 expression for George's mother's assistant's home's address' zipcode:
[is con:zipcode of [ is con:address of [ is con:home of [ is off:assistant of [ is rel:mother of :George]]]]]
Shorter version of George's mother's assistant's home's address' zipcode using N3 path syntax:
:George!rel:mother !off:assistant !con:home !con:address !con:zipcode
kinda like javascript, python, and other object-oriented programming langauges
You can do backward traversal, using "^" instead of "!" as punctuation. For example, if we know Dan's mailbox...
:dan con:mailbox <mailto:connolly@w3.org>
then we can write this expression for Dan:
<mailto:connolly@w3.org>^con:mailbox
Note: This is rather unlike javascript, python, and other object-oriented programming langauges
Joe, Joe's mother, and somebody whose boss is Joe's mother:
If somebody has a mailbox whose URI ends with w3.org, then they're a W3C person:
{ ?x a con:Person. ?x!con:mailbox!log:uri!str:endsWith "@w3.org" } => { ?x a :W3CPerson}
Note that there isn't necessarily only one match for a path - often there are many, when it is used on the left side of a rule.
:me!rel:parent
would be "Some x such that I have parent x", and
:me!rel:parent^rel:parent
would mean "Some y such that for some x, I had parent x and y had parent x", or loosely, some sibling of mine.
Cwm doesn't currently use paths on output, so getting cwm to input and output a file will turn it into the form of N3 you already know.
(:x :y) ( :cust!bus:order!bus:number :cust!bus:order !bus:referncedPurchaseOrder !bus:number )
()
rdf:nil
("y")
[ rdf:first "y"; rdf:rest () ]
("x" "y")
[ rdf:first "x"; rdf:rest ("y") ]
( "Monday" "Tuesday" "Wednesday" )
short for
especially cwm built-ins:
( "Dear " ?name " "," ) string:conatenation ?salutation.