FactGrid:Sample queries

From FactGrid
Revision as of 08:28, 18 November 2024 by Bruno Belhoste (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Help:



Looking for people

  • Search all people of the same family name, sort by given names, state everyone with information about life dates and family details. Table
  • Name of people who ever were residents of a given place with basic personal information. Table

Looking for documents

  • All documents written by N.N. with corresponding documents. Table
  • All documents sent to N.N. with corresponding documents. Table
  • All documents mentioning N.N. with corresponding documents. Table
  • All documents of a file listed in sequence. Table
  • All documents sent from (place) by date. Table
  • All documents of a specific archive and research interest by date. Table

Looking for dates

Dates are still a problem with wikibase. The manual input is very sophisticated. You can set the precision of date and you can define the calendar format. The QuickStatements mass input allows a definition of precision with a defining component on each date (for instance "/9" precision year, "/11" precision day...) but regular searches as formulated with the Query Service's Query Helper do not grab these additional details. A 1650 year input is downloaded as a "1 January 1650" value unless you specifically ask for the precision:

Maps

Dots

Lines

Tables

  • no functional query yet, but a first attempt is here, modelled after the "academic tree" graph in Scholia's author aspect

Graphs

Timelines

Statistics

Bubble chart of books on animal magnetism in 1784-1785, pro, contra and indifferent; indifferent replacing empty value

Prevent double listings

Especially important if you are working with the wdt:P2/wdt:P3* switch that can lead to double hits of the same object - the DISTINCT command:

Grammatically intricate searches

Wikimedia sources

Statements with sources

Statements with unit information

Get information from connected items

Search for specific Qualifiers on a Statement

Search for all the Qualifiers on Statements with the same property

You already know one related value

  • all the lodges of Saint Domingue/Haiti the intricate part is, that the lodges only have information on places, the places have information on the territorial affiliation - we ask for Q176240 (Haiti) as the must have value. The bracket can also have more countries.

Looking for a statement - give it with all the qualifying statements

This search is especially useful if the data model needs to be changed. It searches the database for a particular statement and gives all the instances with the respective qualifying sub-statements:

SELECT * WHERE {
  ?s wdt:P2 wd:Q7.
  ?s p:P266 ?st. # ?st is the the statement node
  ?st ps:P266 ?o. # that simulates the predicate
  ?st ?qualifier ?value. # this is an attribute (a qualifier)
}

Missing Statements

These searches are most practical to see where work has to be done or where one has forgotten to make a certain statement.

Missing connections

Wildcards

State all statements that are made on an item

Filters

Filter based on strings

Filtering results containing certain strings (texts) can be archieved with `FILTER()`

SPARQL patterns for reuse

GROUP_CONCAT Bring several values in one cell (to avoid the repetition of lines)

Count properties

Get all properties of an item

SELECT ?p ?o WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
  wd:Q406029 ?p ?o
 }

count statements per item within a certain project

or within any other property-object relation

 SELECT DISTINCT ?item ?itemLabel ?statementcount WHERE {
   SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
   # change property item relation
   ?item wdt:P131 wd:Q400012 .
   ?item wikibase:statements ?statementcount.
 }

Get popular items

Considering outcoming, incoming and sitelinks as proxys for popularity, one can formulate this query.

E.g. for Lodges:

 SELECT ?item ?itemLabel ?outcoming ?sitelinks ?incoming {
     ?item wdt:P2 wd:Q11211.
     ?item wikibase:statements ?outcoming .
     ?item wikibase:sitelinks ?sitelinks .
        {
        SELECT (count(?s) AS ?incoming) ?item WHERE {
            ?item wdt:P2 wd:Q11211.
            ?s ?p ?item .
            [] wikibase:directClaim ?p 
        } GROUP BY ?item
  }
   SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }.  
 } ORDER BY DESC (?incoming)

Federated Queries

Federated queries are those that gather data from multiple data sources. Factgrid can request data from Wikidata and DBpedia.


Get Factgrid IDs that don't have a Wikidata QID, but can be found in Wikidata via its Factgrid ID

Try it

 #defaultView:Table
 # Prefixes
 PREFIX fg: <https://database.factgrid.de/entity/>
 PREFIX fgt: <https://database.factgrid.de/prop/direct/>
 PREFIX wdt: <http://www.wikidata.org/prop/direct/>
 PREFIX wd: <http://www.wikidata.org/entity/>
 PREFIX wikibase: <http://wikiba.se/ontology#>
 PREFIX bd: <http://www.bigdata.com/rdf#>
 PREFIX schema: <http://schema.org/>
 SELECT DISTINCT ?fg_item ?fg_itemLabel ?fg_item_as_string ?wd_item where {
   # labels from Factgrid
   SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } 
   # maybe filter to prevent timeout
   #?fg_item fgt:P131 fg:Q400012.
   # get those Factgrid IDs that don't have a Wikidata QID
   FILTER NOT EXISTS {
     ?link schema:about ?fg_item .
     ?link schema:isPartOf <https://www.wikidata.org/> . #Targeting Wikipedia language where subjects has no article.
   }
   # Convert Factgrid ID from IRI to string
   BIND(REPLACE(STR(?fg_item), "https://database.factgrid.de/entity/", "") as ?fg_item_as_string) 
   # get those Items from Wikidata that have that corresponding Factgrid ID
   SERVICE <https://query.wikidata.org/sparql> {
     ?wd_item wdt:P8168 ?fg_item_as_string
   }
 }

Wishful thinking

Notes

  1. Adapted from here.