Thanks Andy, that's exactly what I was looking for.
On Fri, Jan 21, 2011 at 12:16 PM, Andy Seaborne <[email protected]> wrote: > > > On 21/01/11 11:10, Robert Campbell wrote: >> >> I have this query: >> >> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> >> PREFIX c:<http://s.opencalais.com/1/pred/> >> SELECT ?company ?name ?ticker ?symbol WHERE { >> ?company rdf:type<http://s.opencalais.com/1/type/er/Company> . >> ?company c:name ?name . >> ?company c:ticker ?ticker . >> ?company c:symbol ?symbol >> } >> >> It only returns /Company types that contain a c:name, c:ticker, and >> c:symbol. I'd like only c:name to be required, with either "" or null >> being returned for a c:ticker or c:symbol is not present. To be clear, >> in the actual RDF, the entire<c:ticker></c:ticker> or >> <c:symbol></c:symbol> elements can be missing OR they can just be >> empty. >> >> Is this possible to express only in the query? Or do I have to perform >> some sort of pre/post processing on the RDF itself? I'm iterating >> through the ResultSet, calling QuerySolution.getLiteral("ticker"), >> etc. >> >> Rob > > Use OPTIONAL: > http://www.w3.org/TR/rdf-sparql-query/#optionals > > > PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> > PREFIX c: <http://s.opencalais.com/1/pred/> > SELECT ?company ?name ?ticker ?symbol WHERE { > ?company rdf:type <http://s.opencalais.com/1/type/er/Company> . > ?company c:name ?name . > OPTIONAL { ?company c:ticker ?ticker } > OPTIONAL { ?company c:symbol ?symbol } > } > > Missing values will cause ?ticker and ?symbol to unbound in a result set row > for ?company. > > Andy > >
