- From: Seaborne, Andy <Andy_Seaborne@hplb.hpl.hp.com>
- Date: Thu, 23 May 2002 17:38:30 +0100
- To: "'Patrick Stickler'" <patrick.stickler@nokia.com>, "ext Thomas B. Passin" <tpassin@comcast.net>, RDF Interest <www-rdf-interest@w3.org>
Patrick,
Does REGS allow queries to have variables for properties? Example: "get all
the properties and their values for a resouirce specified by URI" I find
myself doing this to extract structured RDF graphlets (e.g. vCards) from
databases where the properties of the vCard might not all be present.
----------------------------------
<thinking out loud>
Starting with:
SELECT ?x
WHERE (?x, <person:firstName>, "John") ,
(?x, <person:lastName>, "Doe") ,
(?x, <person:age>, ?age) ,
(?x, <person:spouse>, ?y) , (?y, <person:firstName>, "Jane")
AND
?age > 50
It would be nicer to inline the expression:
SELECT ?x
WHERE (?x, <person:firstName>, "John") ,
(?x, <person:lastName>, "Doe") ,
(?x, <person:age>, ?age) , [ ?age > 50 ],
(?x, <person:spouse>, ?y) , (?y, <person:firstName>, "Jane")
also better to get rid of that intermediate variable ?y:
SELECT ?x
WHERE (?x, <person:firstName>, "John") ,
(?x, <person:lastName>, "Doe") ,
(?x, <person:age>, ?age) , [ ?age > 50 ],
(?x, <person:spouse>, <person:firstName>, "Jane")
and that SELECT is unnecessasry so is that WHERE. And the list commas are a
nuisance when building a query:
(?x, <person:firstName>, "John")
(?x, <person:lastName>, "Doe")
(?x, <person:age>, ?age) [ ?age > 50 ]
(?x, <person:spouse>, <person:firstName>, "Jane")
Better. Beginning to look like XPath for RDF. Or an N-triples derived
query format. Its more than QEL-1 but only part of QEL-2. A set of
conditions (graph patterns and expessions) that must be fulfilled.
But lets get all the person:* properties for the thing we find (so return a
collection of RDF graphs or one big graph depending on choice of caller):
(?x, <person:firstName>, "John")
(?x, <person:lastName>, "Doe")
(?x, <person:age>, ?age) [ ?age > 50 ]
(?x, <person:spouse>, <person:firstName>, "Jane")
(?x, <<person:*>>, ?z)
where <<>> is a URI expression.
And also an optional item to extract:
(?x, <person:firstName>, "John")
(?x, <person:lastName>, "Doe")
(?x, <person:age>, ?age) [ ?age > 50 ]
(?x, <<person:*>>, ?z)
(?x, <person:spouse>, <person:firstName>, "Jane")
(?x, <person:spouse>, <person:age>, ?spouseAge) ?
Trailing ? makes the pattern match if present but not to fail the whole
query if it does not. Maybe not the best syntax ever for that - kind of
gets lost.
-----------
</thinking out loud>
Andy
-----Original Message-----
From: Patrick Stickler [mailto:patrick.stickler@nokia.com]
Sent: 23 May 2002 14:44
To: ext Thomas B. Passin; RDF Interest
Subject: Re: Innovation, community and queries
On 2002-05-23 9:03, "ext Thomas B. Passin" <tpassin@comcast.net> wrote:
> I think that it will become increasingly important to be able to deal
> with patterns of statements rather than single statements or single
> types of statements. Think of 5-way joins in a relational database,
> for example. Or a simple case would be to retrieve statements where
> there is a specific predicate and the object is also the subject of a
> statement whose predicate is a label and whose value is specified.
>
> I think of stereotyped structures of statements like these as idioms.
> There will be a great many idioms, and applications may well be
> specialized for specific ones. A reified statement could be
> considered a kind of simple idiom.
>
> A query language will be needed that can effectively work with idioms.
> Simple idioms, with little depth, can be handled already by some query
> langaguages (I think, but haven't tried any of them), but I think more
> support for stereotyped structures will be necessary.
I agree, and if those idioms are expressed in RDF, then why not also the QL?
Property values may be recursively defined by anonymous node, e.g.
Target must have a dc:creator which has a first name of "John", a last name
of "Doe" and have an age that is greater than 50 and a spouse who's first
name is "Jane":
<regs:Query>
<dc:creator>
<rdf:Description>
<person:firstName>John</person:firstName>
<person:lastName>Doe</person:lastName>
<person:age>
<regs:QValue>
<regs:gt>50</regs:gt>
</regs:QValue>
</person:age>
<person:spouse>
<rdf:Description>
<person:firstName>Jane</person:firstName>
</rdf:Description>
</person:spouse>
</rdf:Description>
</dc:creator>
</regs:Query>
Such a QL could support idioms of arbitrary depth, where
the query is simply a template to match against the RDF graph.
And folks who already know RDF can easily learn and use the ontology to
express such queries without having to learn yet-another-language -- not to
mention the benefits of being able to use RDF and XML tools to express/view
their queries.
Cheers,
Patrick
--
Patrick Stickler Phone: +358 50 483 9453
Senior Research Scientist Fax: +358 7180 35409
Nokia Research Center Email: patrick.stickler@nokia.com
Received on Thursday, 23 May 2002 12:38:52 UTC