Re: sparql for vocab management: theory vs practice

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