Re: SPARQL puzzle

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