Understood. Thanks. Sent from my iPhone
> On Aug 22, 2015, at 1:27 PM, Andy Seaborne <[email protected]> wrote: > >> On 22/08/15 15:51, Mark Feblowitz wrote: >> Andy - >> >> I did try that in isolation, and also directly (not within a SERVICE block) >> and also directly at the dbpedia sites. Neither worked. >> >> I do see that this form is expensive and have tried it with a number of >> filters. I sent the very simplest to focus on the main question. > > If it's the retrieval costs of the query, filters don't help much. Only the > simple filters like FILTER (?x = <y>) can be used to making index scanning > more focused. > > As an alternative to BIND, you may find > > SELECT DISTINCT * where { > ?Player a do:BasketballPlayer. > ?Player ?r ?A. > ?Player2 ?r ?A > FILTER(?Player = <someURI>) > } > > helps. This is optimizable (ARQ does it!) to a BIND-like form > > > SELECT DISTINCT * where { > <someURI> a do:BasketballPlayer. > <someURI> ?r ?A. > ?Player2 ?r ?A > BIND (?Player AS <someURI>) > } > > now, the optimizer has a chance, not guaranteed though. An index join to > handle "?Player2 ?r ?A" means that it's a few probes (the number of > properties for subject <someURI>). A hash join without conditions however is > still very costly for that step. > > It's all down to the details of the version of Virtuoso at DBpedia. There is > an argument that this style of query is "unusual" - optimization is about > doing things for the likely cases. > > Andy > >> Thanks, >> >> Mark >> >>> On Aug 22, 2015, at 5:18 AM, Andy Seaborne <[email protected]> wrote: >>> >>> On 22/08/15 06:37, Nauman Ramzan wrote: >>>> Hi Mark >>>> Did you connect virtuoso with fuseki or you just import data into fuseki ? >>>> >>>> >>>>> On Aug 22, 2015, at 2:56 AM, Mark Feblowitz <[email protected]> >>>>> wrote: >>>>> >>>>> This seems like it should be a FAQ, but I’m not finding anything useful. >>>>> >>>>> I’m using SPARQL to explore linked data, which includes discovering >>>>> predicates. My understanding was that I could bind a subject and use >>>>> variables for predicate and object. >>>>> >>>>> It’s important to note that what I’m experiencing is when using dbpedia, >>>>> which is built on Virtuoso - perhaps my question should be posted >>>>> elsewhere? But I am doing this via a Fuseki endpoint, so there’s at least >>>>> some relevance :-? >>> >>> Yes - this is possible see below. >>> >>> Fuseki is just passing on the query and is not responsible for the results. >>> "common carrier" :-) >>> >>>>> >>>>> Here’s what I’m trying to do: >>>>> >>>>> I have some queries to a Fuseki endpoint that call out to dbpedia using >>>>> SERVICE blocks. Before entering the service I bind a value for ?Player, >>>>> and then with the service I pose the query; >>>>> >>>>>> PREFIX do: <http://dbpedia.org/ontology/> >>>>> ... >>>>>> {SELECT DISTINCT * where { >>>>>> ?Player a do:BasketballPlayer. >>>>>> ?Player ?r ?A. >>>>>> ?Player2 ?r ?A } >>> >>> Mark - did you test just >>> >>> SELECT DISTINCT * where { >>> ?Player a do:BasketballPlayer. >>> ?Player ?r ?A. >>> ?Player2 ?r ?A } >>> >>> in isolation (SERVICE call?) or as a nested SELECT in a larger query? >>> >>> It is possible, especially in the sub-query form, that the query plan is >>> expensive because property variables are uncommon (but correct) so less >>> work goes on into optimizing such plans. >>> >>> Also an internal timeout executing that part of the query would explain >>> what you are seeing. >>> >>> There are going to be a lot of answers - 14,818,205,957? - counting >>> non-DISTINCT. The DISTINCT version may be significantly more expensive >>> but >>> >>> SELECT (count(DISTINCT *) AS ?c) { >>> >>> is a syntax error for DBpedia though it is legal SPARQL. >>> >>> Andy >>> >>>>> >>>>> I expected to find a binding for ?r as do:team. And when I pre-bind ?r to >>>>> that, I see plenty of bindings for ?A and ?Player2. The one binding that >>>>> I do see when leaving ?r unbound is >>>>> >>>>>> http://www.w3.org/1999/02/22-rdf-syntax-ns#type >>>>> >>>>> (I notice that dbpedia virtuso is limited - it cannot handle a BIND >>>>> statement.) >>>>> >>>>> Is the case am I seeing universal behavior or behavior specific to >>>>> virtuoso? Either way, are there clever workarounds? >>>>> >>>>> I do know that I can “white-list in” some bindings for ?r, using a VALUES >>>>> statement. But that pretty much defeats the discovery purpose. Also, as >>>>> this is varied and often schema-less content, I can’t rely on an ontology >>>>> as a guide to defined predicates. >>>>> >>>>> Any suggestions? >>>>> >>>>> Thanks, >>>>> >>>>> Mark >
