- From: Jon Crump <jjcrump@myuw.net>
- Date: Sat, 1 Nov 2008 13:59:58 -0700 (PDT)
- To: public-cwm-talk@w3.org
OK. In the extremely unlikely event that there is anyone reading this list who is as clueless and as at-sea as I am, I will answer my own question as search bait: The clue (after a ridiculous amount of trial and error) was when I finally asked cwm to serialize the results of my query as n3 thus: %cwm --rdf /path/to/rdf/model.rdf --sparql=/path/to/sparql/query.txt --n3 Doing this gave me sensible results, but they took the form of a "quoted" graph. In such a graph, the query variables I was searching for are expressed like this: { "Some Literal" :bound "label" . "2008-01-02"^^xsd:date :bound "start" . "2008-01-04"^^xsd:date :bound "end" . Event:case2 :bound "event" . } a :Result . This means that if the values you're searching for contain a literal, those literals are expressed as the SUBJECTS of the resulting triples and if you ask for --rdf output, cwm will complain: "ValueError: Bad subject of statement: Some Literal. RDF/XML cannot serialize a graph in which a subject is a literal." This is apparently the problem also if what you're searching for is a datatyped literal like "2008-01-04"^^xsd:date, in which case the somewhat less explicit runtime error: "RuntimeError: ('Unexpected subject', "(21, ('2008-01-04', u'http://www.w3.org/2001/XMLSchema#date'))")" Asking for --n3 output avoids this because, apparently, the "quoted graph" style of representing a sparql query result doesn't care if the subjects are literals. The solution, for my purposes at any rate, was to use a CONSTRUCT query, instead of a SELECT, thus: CONSTRUCT {?event ex:hasdate ?date; ex:hasstart ?start; ex:hasend ?end; ex:haslabel ?label.} This way, the literals that are bound to the query variables are forced to be objects of triples and can thus be serialized as either rdf/xml or n3: <rdf:Description rdf:about="http://temp.example.org/terms/Event#case2"> <hasend rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-04</hasend> <haslabel>Some Literal</haslabel> <hasstart rdf:datatype="http://www.w3.org/2001/XMLSchema#date">2008-01-02</hasstart> </rdf:Description> Though it's not exactly to the point, and though much of it is over my head, the discussion of design issues at: http://www.w3.org/DesignIssues/N3QL.html was helpful in clarifying some of the underlying issues for me. Open question: I still haven't worked out why, with this graph and this query, asking cwm to report with --sparqlResults gives me this Import Error: Traceback (most recent call last): File "/Applications/RDFapps/cwm-1.2.1/cwm", line 750, in <module> doCommand() File "/Applications/RDFapps/cwm-1.2.1/cwm", line 698, in doCommand from cwm_sparql import outputString, SPARQL_NS ImportError: No module named cwm_sparql Another Open question: I still haven't been able to coax the rdflib sparql implementation to give me similarly sensible results with this test query; but that's another story for another list I suppose. Best, Jon
Received on Saturday, 1 November 2008 21:00:40 UTC