- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Sun, 26 Mar 2006 18:07:30 +0100
- To: Dan Brickley <danbri@danbri.org>
- Cc: Steve Harris <S.W.Harris@ecs.soton.ac.uk>, public-sparql-dev@w3.org, public-swbp-wg@w3.org
Dan Brickley wrote:
> * Steve Harris <S.W.Harris@ecs.soton.ac.uk> [2006-03-26 17:15+0100]
>> On Sun, Mar 26, 2006 at 10:38:47 -0500, Dan Brickley wrote:
>>> >From a blog post I wrote yesterday, http://danbri.org/words/
>>> (where I'm having some connectivity and dns hosting woes, it seems)
>>>
>>> There's a question buried in here: how do we ask SPARQL for the URIs
>>> of properties that appear in FOAF files yet aren't defined in the spec?
>>>
>>> Suggestions welcomed :)
>> I think it can be done with something like:
>
> Thanks :)
>
>> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
>> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
>> PREFIX foaf: <http://xmlns.com/foaf/0.1/>
>> SELECT DISTINCT ?p
>> WHERE {
>> ?s ?p ?o
>> OPTIONAL { GRAPH foaf: { ?p rdf:type ?prop }
>> FILTER(?prop = rdfs:Property) }
>> FILTER(REGEX(?p, "^http://xmlns.com/foaf/0.1/") && !BOUND(?prop))
>> }
Passes the SPARQLer validator : http://www.sparql.org/validator.html
>>
>> However when I tried to test it SPARQLer told be it would allow dataset
>> building (when I tried to use FROM) and the rasqal demo gave a parse
>> error on the FOAF schema.
>
> Sparqler (the online demo) won't allow FROM?
Yes, it does.
It does depend on which service you use. Joseki allows deployment of a SPARQl
service in two ways: one if a general purpose query service, the other is a
service for a single, fixed dataset.
The service <http://www.sparql.org/sparql> accepts any SPARQL query and
expects the dataset description in the protocol or in the query. I just
tested it.
The service <http://www.sparql.org/books> does not allow it to be specified
and only queries the backing dataset.
There different forms for these : see http://www.sparql.org/
You'll want http://www.sparql.org/sparql.html
I checked by trying this query to verify ARQ attempts content negotiation stuff:
----
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?p
FROM <http://xmlns.com/foaf/0.1/>
{ ?p a rdf:Property .
FILTER regex(str(?p), "name")
}
----
=====>>>>>>
{
"head": {
"vars": [ "p" ]
} ,
"results": {
"distinct": false ,
"ordered": false ,
"bindings": [
{
"p": { "type": "uri" , "value": "http://xmlns.com/foaf/0.1/givenname" }
} ,
{
"p": { "type": "uri" , "value": "http://xmlns.com/foaf/0.1/name" }
} ,
{
"p": { "type": "uri" , "value": "http://xmlns.com/foaf/0.1/surname" }
} ,
{
"p": { "type": "uri" , "value": "http://xmlns.com/foaf/0.1/family_name" }
}
]
}
}
JSON being useful to avoid line wrap of tables :-)
>
> Rasqal's at least didn't
> used to, either. Re parse error, maybe ARQ sends a content
> negotiation preference for application/rdf+xml while Redland is stuck
> looking for RDF inside the XHTML FOAF spec?
>
> I tried it on commandline with ARQ, and get:
>
> org/apache/oro/text/regex/MalformedPatternException
>
> Do we need to escape those '/' chars somehow? or the ':', the '.'?
> After some quick experiments, it seems not. Hmm. Hmm.
BTW : Old version alert : ARQ does not use ORO now.
>
> So you can run a regex directly against ?p, without casting it to a
> string? That's handy/grungy...
No - you will need the str() or else get runtime exceptions (causing no
results). See example above:
You can try out expressions with ARQ with the command line arq.qexpr
arq.qexpr 'regex(<http://example>, "example")'
==>
Exception: REGEX: <http://example> evaluates to <http://example>, which is not
a string.
arq.qexpr 'regex("example", "example")'
==>
true
You can use it as an arbitrary precision calculator (patience helps).
Some namespaces are built in for convenience.
Andy
>
> On the query itself, once this part works, I guess I can scope the
> ?s ?p ?o part to a set of named graphs, rather than the default graph?
> (I need this in a real app, where we're checking healthcare records are
> all using properly defined properties).
>
> I would have expected there'd be some way to express all of this in
> terms of named graphs and !bound(), rather than relying on string
> matching against property URIs. But I've not spent much time with
> this corner of SPARQL yet. Is it inexpressible?
>
> cheers,
>
> Dan
>
>> - Steve
>
Received on Sunday, 26 March 2006 17:08:40 UTC