- From: Andy Seaborne <andy.seaborne@epimorphics.com>
- Date: Sun, 09 Sep 2012 12:29:31 +0100
- To: public-sparql-dev@w3.org
On 07/09/12 12:44, Barry Bishop wrote: > > Suppose you run a development team that builds an application that > interacts with some public sparql endpoint, say http://xyz.org/sparql - > then one day xyz.org start to have scalability problems and decide to > upgrade their RDF database to some expensive new thing. Both old and new > RDF databases are fully compliant with W3C, but after they upgrade your > application is completely broken only because the two database > implementations construct their RDF dataset differently when no FROM > clauses are given. I am sure you wouldn't find it so natural in this case. > > There are some workarounds as you say, but not in all cases. When you > are using someone else's database and don't get to decide how they > partition their data in to separate graphs, then you can be completely > stuck. As fabulous as the query language is (and I do think it is > tremendous achievement), this ambiguity over constructing a dataset when > there are no FROMs is a bit of a hole. I'd describe this situation a little differently. It's the relationship of graph store to dataset that is key here. Providing controls in the query may be too late in the process. If you import a dump that only mentions named graphs into a database, and then queries see triples in the default graph not mentioned in the dump then I'd characterise it as the engine as doing a transformation of the data and the dataset being queried is different. It may be a useful transformation, it may not - that's going to influence which engine to use. If SELECT * { { ?s ?p ?o } UNION { GRAPH ?g {?s ?p ?o}} } returns different answers, then it is a different dataset. It's the same if the engine canonicalises literals or URIs or applies RDFS inference. The dataset is a different value. If the dataset is the current value of the graph store then there isn't much wiggle room. Test case: PREFIX : <http://example/> CLEAR ALL ; INSERT DATA { :s1 :p1 :o1 GRAPH :g { :s2 :p2 :o2 . :s3 :p3 :o3 . } } then SELECT * { ?s ?p ?o } how many triples? err, 1, 2 or 3 are all possible from the descriptions of stores. But if the dataset at the endpoint is claimed to be: :s1 :p1 :o1 . :s2 :p2 :o2 :g . :s3 :p3 :o3 :g . then the query isn't ambiguous. Andy
Received on Sunday, 9 September 2012 11:30:01 UTC