- From: Lee Feigenbaum <lee@thefigtrees.net>
- Date: Mon, 07 May 2012 10:28:49 -0400
- To: Dan Brickley <danbri@danbri.org>
- CC: public-sparql-dev <public-sparql-dev@w3.org>
Hi Dan, I haven't tested this, but I think the following might be what you want using SPARQL 1.0: SELECT ?c ?l WHERE { ?x <http://schema.org/range> <http://schema.org/Text> . ?x <http://www.w3.org/2000/01/rdf-schema#label> ?l . ?x <http://schema.org/domain> ?c . OPTIONAL { ?x <http://schema.org/range> ?r2 . FILTER(?r2 != <http://schema.org/Text>) } . FILTER (!bound(?r2)) } Lee PS As Andy said, this would be easier to write with SPARQL 1.1 On 5/7/2012 8:37 AM, Dan Brickley wrote: > I'm stuck with a query, and #swig didn't know so I'm trying here! > > I'm using this dataset, > > https://dvcs.w3.org/hg/webschema/raw-file/feb8d27d0757/schema.org/drafts/alpha/_schema.nt > > ...which is from an experimental rdfa.html export of the Schema.org schema. > > My query goal, is to find all the properties (and the rdfs:domain > type(s) they're associated with, ultimately) which have an expected > value of "Text", but which do not also have any other expected types. > > Note that this 'expected type' notion is expressed using a repeatable > property, schema:range, which is a more relaxed cousin of rdfs:range > (i.e. it's a hint for expected properties, but doesn't have the strong > semantics of rdfs:range). > > So for example, there is a class<http://schema.org/JobPosting> > that defines a property "responsibilities" whose schema:range > expected value is text. The result set ought to contain this, only if > we don't have another schema:range pointing to a type like (the > fictional) ResponsibilityInfo. Use case is that I want to find > properties that are candidates for having their controlled values > externally enumerated, but which don't yet have a relevant schema.org > type defined. See > http://www.w3.org/wiki/WebSchemas/ExternalEnumerations if you're > interested. > > I've been trying this using Jena on the commandline, with variations > on things like > > SELECT ?c ?l where { ?x<http://schema.org/range> > <http://schema.org/Text> . ?x > <http://www.w3.org/2000/01/rdf-schema#label> ?l . ?x > <http://schema.org/domain> ?c . OPTIONAL { ?x > <http://schema.org/range> ?r2 } . FILTER ( ! (?r2 != > <http://schema.org/Text> && bound(?r2)) ) } > > SELECT ?c ?l where { ?x<http://schema.org/range> > <http://schema.org/Text> . ?x > <http://www.w3.org/2000/01/rdf-schema#label> ?l . ?x > <http://schema.org/domain> ?c . OPTIONAL { ?x > <http://schema.org/range> ?r2 } . FILTER ( !bound(?r2) ) } > > sparql --data _schema.nt 'SELECT ?x ?c ?l ?r1 ?r2 where { ?x > <http://schema.org/range> ?r1 . ?x > <http://www.w3.org/2000/01/rdf-schema#label> ?l . ?x > <http://schema.org/domain> ?c . OPTIONAL { ?x > <http://schema.org/range> ?r2 } . FILTER (?r1 = > <http://schema.org/Text> && ?r2 !=<http://schema.org/Text> ) } ' > > (these aren't right, but give some indication of what I was trying) > > I find !bound pretty hard to think about. Is this something that needs > SPARQL 1.1 maybe? > > cheers, > > Dan > >
Received on Monday, 7 May 2012 14:29:15 UTC