Hi Thad,

I think it's not being returned because Q24033349 has no wdt:P31 property
and thus the part:

  ?item wdt:P31 ?instance .
  FILTER(?instance != wd:Q13442814).

while excluding all items being wd:Q13442814 will also exclude all items
not having a P31 property.
You can rewrite your query to take this into consideration using the MINUS
keyword: https://w.wiki/Yzt .

Hope it helps,

David.

On Thu, Aug 6, 2020 at 11:26 PM Thad Guidry <[email protected]> wrote:

> Hi David Causse,
>
> Curious why https://www.wikidata.org/wiki/Q24033349 is not being returned
> in the below SPARQL?
>
> https://w.wiki/YwL
>
>
> SELECT ?item ?itemLabel WHERE {
>   ?item wdt:P31 ?instance .
>   FILTER(?instance != wd:Q13442814).
>   SERVICE wikibase:mwapi {
>       bd:serviceParam wikibase:endpoint "www.wikidata.org";
>         wikibase:api "EntitySearch";
>         mwapi:search "front matter";
>         mwapi:language "en".
>       ?item wikibase:apiOutputItem mwapi:item.
>   }
>   SERVICE wikibase:label {bd:serviceParam wikibase:language "en".}
> }
> LIMIT 100
>
> Thad
> https://www.linkedin.com/in/thadguidry/
>
>
> On Fri, Jul 17, 2020 at 12:37 PM Thad Guidry <[email protected]> wrote:
>
>> Thank you so much David!
>>
>> This was such a great example that I had to add this to our SPARQL
>> Examples page in a new section "Mediawiki API":
>> *https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries/examples#Mediawiki_API
>> <https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries/examples#Mediawiki_API>*
>>
>> The community thanks you sincerely!
>>
>> Thad
>> https://www.linkedin.com/in/thadguidry/
>>
>>
>> On Mon, Jul 13, 2020 at 2:26 AM David Causse <[email protected]>
>> wrote:
>>
>>> On Sat, Jul 11, 2020 at 7:12 PM Thad Guidry <[email protected]>
>>> wrote:
>>>
>>>> This query times out:
>>>>
>>>> SELECT ?item ?label
>>>> WHERE
>>>> {
>>>>   ?item wdt:P31 ?instance ;
>>>>     rdfs:label ?label ;
>>>>     rdfs:label ?enLabel .
>>>>   FILTER(CONTAINS(lcase(?label), "Soriano")).
>>>>   FILTER(?instance != wd:Q5).
>>>>   SERVICE wikibase:label {bd:serviceParam wikibase:language "en".}
>>>> }
>>>> LIMIT 100
>>>>
>>>> I have this feeling that it's not actually using an index or even
>>>> asking the right question and so is slow and times out?
>>>>
>>>>
>>> Indeed, none of the criteria in your query allows the triple store to
>>> determine an index to follow to extract the results in a timely manner.
>>> The sole non negative criterion would be FILTER(CONTAINS(lcase(?label),
>>> "Soriano")) but being in a FILTER and moreover a function it cannot be used
>>> to determine an index to work on.
>>> The only way to speed-up your query would be to introduce a discriminant
>>> "matching" criterion.
>>>
>>> However the MediaWiki wbsearchentities API does seem to use an index and
>>>> is performant for label searching:
>>>>
>>>> https://www.wikidata.org/w/api.php?action=wbsearchentities&search=soriano&language=en
>>>>
>>>>
>>> wbsearchentitiies is backed by elasticsearch which is optimized for such
>>> lookups.
>>>
>>> How can I get my SPARQL query to be more performant or asking the right
>>>> question?
>>>>
>>>>
>>> Unfortunate I don't see an obvious way to adapt your sparql query and
>>> keep exactly the same semantic but to illustrate the problem:
>>>
>>> SELECT ?item ?label WHERE {
>>>   ?item wdt:P31 ?instance ;
>>>         rdfs:label "Soriano"@en .
>>>   FILTER(?instance != wd:Q5).
>>> }
>>> LIMIT 100
>>>
>>> will return results in a timely manner, only because we helped the graph
>>> traversal with an initial path on ?item rdfs:label "Soriano"@en.
>>>
>>> But by combining the query service and the wikidata API[0] baked by
>>> elasticsearch I think you can extract what you want:
>>>
>>> SELECT ?item ?itemLabel WHERE {
>>>   ?item wdt:P31 ?instance .
>>>   FILTER(?instance != wd:Q5).
>>>   SERVICE wikibase:mwapi {
>>>       bd:serviceParam wikibase:endpoint "www.wikidata.org";
>>>         wikibase:api "EntitySearch";
>>>         mwapi:search "soriano";
>>>         mwapi:language "en".
>>>       ?item wikibase:apiOutputItem mwapi:item.
>>>   }
>>>   SERVICE wikibase:label {bd:serviceParam wikibase:language "en".}
>>> }
>>> LIMIT 100
>>>
>>> This query will first contact EntitySearch (an alias to wbsearchentities)
>>> which will pass the items it found to the triple store which in turn can
>>> now query the graph in a timely manner. Obviously this solution only works
>>> if the number of items returned by wbsearchentities remains reasonable.
>>>
>>> 0:
>>> https://www.mediawiki.org/wiki/Wikidata_Query_Service/User_Manual/MWAPI
>>> --
>>> David C.
>>> _______________________________________________
>>> Wikidata mailing list
>>> [email protected]
>>> https://lists.wikimedia.org/mailman/listinfo/wikidata
>>>
>> _______________________________________________
> Wikidata mailing list
> [email protected]
> https://lists.wikimedia.org/mailman/listinfo/wikidata
>
_______________________________________________
Wikidata mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikidata

Reply via email to