- From: Jeen Broekstra <jeen@aduna.biz>
- Date: Tue, 10 May 2005 10:12:33 +0200
- To: conor dowling <conor@the325project.org>
- Cc: semantic-web@w3.org
conor dowling wrote:
> first off, thx very much for the info Jeen. One last question on
> "rdf:about" or rather the value of "?subject" ...
>>
>>> 2) rdf:about value and value of "?subject"
>>> # can I get the "rdf:about" from every resource
>>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>>> SELECT ?subject
>>> WHERE { ?subject rdf:about ?about }
>>
>>
>> No.
>>
>> rdf:about is not an actual property, but is simply a bit of syntax in
>> the RDF/XML serialization that is used to denote the subject of a
>> triple. It does not occur in the RDF graph and can not be queried
>> through SPARQL (or any other RDF query language that I know of).
>
>
> but is the value returned in ?subject is equivalent to rdf:about in
> RDF/XML?
>
> SELECT ?subject
Ah, maybe I misunderstand but you seem to be under the impression that
'?subject' is some sort of "special" variable that is always bound to
the subject of triples. This is not the case. There are no special
variables in SPARQL. The name of the variable is simply something the
writer of the query comes up with. Binding of a variable to a value
always happens by matching it through a graph pattern in the where-clause.
To illustrate:
SELECT ?subject
WHERE { ?subject ?predicate ?object }
is exactly equivalent to:
SELECT ?foo
WHERE { ?foo ?bar ?foobar }
> Let's say I assign it to a variable "subjectIdentifier". Then can I say ...
>
> SELECT ?name
> WHERE {subjectIdentifier dc:title ?name}
>
> (assuming of course that dc:title is supported by that subject ...).
I'm afraid I don't quite follow this example. Let's take that bit of
RDF/XML I posted earlier again:
<rdf:RDF
...
xmlns:ex="http://example.org/colors/">
...
<rdf:Description rdf:about="#myCar">
<ex:hasColor>red</ex:hasColor>
</rdf:Description>
...
</rdf:RDF>
This encodes a single RDF triple. The subject is "#myCar", or rather,
the full URI that comes from resolving the "#myCar" against the base
URI of the document. Supposing the document is at
http://example.org/cars/, the full triple becomes:
http://example.org/car/myCar http://example.org/hasColor "red" .
Now if you want to query for all color values in SPARQL, you'd do:
@PREFIX ex: <http://example.org/colors/>
SELECT ?color
WHERE { ?x ex:hasColor ?color }
If you wanted to query for the color of that specific car "myCar",
you'd do:
@PREFIX ex: <http://example.org/colors/>
SELECT ?color
WHERE { <http://example.org/car/myCar> ex:hasColor ?color }
Note that if you have a triple with a blank node (for example, when
you specify one in XML without an rdf:about attribute) you can not do
this last type of query. You will have to identify such subjects by
means of the property values that they have.
> In
> other words, can I use the subject id's across queries to that data
> source? Is the subject id data source dependent, nothing more than a
> convenient resource identifier for use within that data source?
The subject of an RDF triple is either a full URI, in which case it is
source-independent and can be referenced across queries, or a blank
node in which case it only has a source-dependent identifier (a "blank
node id") which can not be referenced directly in queries at all.
I hope this clarifies it!
Regards,
Jeen
--
Jeen Broekstra Aduna BV
Knowledge Engineer Julianaplein 14b, 3817 CS Amersfoort
http://aduna.biz The Netherlands
tel. +31 33 46599877
Received on Tuesday, 10 May 2005 08:10:30 UTC