FILTER

In previous queries we used the Q-Identifier to filter the results for a specific item. Some information does not have a Q-Identifier, like e.g. the publication date of a novel. With the FILTER-operation within the WHERE-part of the query we still can reduce the results to one (or some) information of interest. In order to get all authors that published a novel in 1800 we need to add P7 (date of publication). The operation FILTER(YEAR(?pubdate) = 1800) selects all publication dates where the YEAR is 1800 (as the dates are of “time datatype” it is important to only select the YEAR of it. All common operations like = > < can be used in the FILTER -part.

As we only want to retrieve the authors that published a novel in 1800 we will use the DISTINCT -Method to get each author once:

Example: Filter for all authors that published a novel in 1800

Another example for the FILTER would be searching for a substring within a string-Item (like the Label). If you are interested in all authors whose names contain “beau”, you need to retrieve the label of all authors and add the phrase FILTER(CONTAINS(LCASE(?authorName), "beau")). As the function CONTAINS is a String-Matching-Function that is sensible to upper and lower case strings, it is important to set the characters in ?authorName to lowercase characters.

Example: Get all authors whose name contains “beau”

In our graph the labels of authors are structured in SURNAME (in upper case) and first name (in lower case). So if you only want to retrieve authors whose surname contains “beau”, you also could replace the FILTER part as follows: FILTER(contains(?authorName, “BEAU”)). But be careful, you need to know the data in order to get the desired (or if any at all) output. FILTER(contains(?authorName, "beau"))would not give you any result, because the only author whose first name contains “beau” is “SAINT-AULAIRE, Yrieix Beaupoil, marquis de” and here the “B” in “Beaupoil” also is upper case so it is not a match.

If you are interested in other string functions, have a look at the section “Functions on strings” in the SPARQL Wikibook.

Filter
: FILTERs restrict solutions to those for which the filter expression evaluates to TRUE.

Previous Next

×
… MiMoTextBase: data.mimotext.uni-trier.de
… SPARQL-Endpoint: query.mimotext.uni-trier.de
… MiMoText project site: https://mimotext.uni-trier.de

If you are new to SPARQL, you can go through the (short)Tutorial,which will give you an overview of how to write basic queries based on examples inMiMoTextBase. It’s supposed to give newbies an introduction to SPARQL, but it cannot give you a deep knowledge of SPARQL – maybe theseresourcescan help you with that.

If you are interested in MiMoTextBase and its content onauthors,novels,spacesorthemesof the French novel in 1751-1800 with already some SPARQL knowledge, you can have a look at the links.

WithinGOING FURTHER there are some queries on the data containing overviews of items like dates of publication or themes changing over time and comparing the different sources of the data inMiMoTextBase together with some interpretation on the outcome which could show the potential of initial questions on further research.

If you want more detailed information about the structure and the aims of our tutorial, you can find it in theintroduction of the tutorial.Information on the infrastructure and the models behind MiMoTextBase you can findhere.

Having no results in the result table can have different reasons. A simple solution is to check whether the variables are spelled the same in the SELECT and the WHERE part of the query.

Another reason could be being too specific in the query. Not all items in MiMoTextBase contain all information on all properties due to its sources. So it can be helpful to add the OPTIONAL function on some of the properties in your query, seehere.

If you run into this error message, you probably have to group items. In the example below, we use the count function, but forgot to add GROUP BY.

Query to retrieve count of published works per author:

The solution is easy: We have to aggregate ?authorName by grouping. We can now get the results in descending order via order by desc(?count) and set a limit of 20 to get the top 20.

Query to retrieve authors with most novels published (top 20):

Sometimes you can get many results on a query which can slow down the result generation or impair the readability of some visualizations. In those cases you could add the LIMIT-operation (seehere)to only get the TOP x items or the HAVING COUNT-operation (seehere)if you want only results that lie above a certain threshold.

If some of the items appear more often in the results than they should, make sure you filter all labels for one language (FR, EN, DE) separately as the graph is multilingual and the output will represent all languages within the graph, seehere.

If you're looking for the right identifier for properties, novels, authors, themes or locations, the simplest way is to visitdata.mimotext.uni-trier.deand type in the label (for example “London” or “about” or “philosophy”) in the search bar. The numerical identifier of the property or the item is visible in the URL or behind the name of the item or the property.

You can also consult our lists of themes, locations and properties and their numerical identifier in the knowledge graph below.

List of properties

Query:Retrieve a list of all the properties used in this graph

List of themes

For a list of all thematic concepts in the graph, see thisquerywhich lists all thematic concepts and their Q-identifier, ordered by occurrence:

List of locations

For a list of all narrative places in the graph, see thisquerywhich lists all narrative places and their Q-Identifier, ordered by occurrence:

These queries list themes or locations ordered by occurrence. We recommend using items or properties which have a certain number of connections in the graph, in order to get good results (with enough data points).

There are several possible reasons for a slowdown or a timeout of your query. It could be that the quantity of results is very high, so you might limit the results to check if the syntax of the query is OK. This is done by using theLIMITparameter. The LIMIT tells the algorithm where to stop, so if you insert for example LIMIT 100 at the end of your query, it will stop after 100 results. This can be helpful for debugging.

Parameters which potentially slow down the query are DISTINCT or ORDER BY. A strategy might be to comment them out to see if these slow down your query.

If you have not used Wikidata, the SPARQL syntax or the RDF format before, we can recommend the Wikidata SPARQL Tutorial, Wikidata:SPARQL queries examples, the SPARQL Playground or this Wikidata Query Service Tutorial by Wikimedia Israel as helpful resources. Furthermore, we can recommend Bob du Charme’s book "Learning SPARQL" as well as his blog:

DuCharme, Bob. Learning SPARQL. Sebastopol, UNITED STATES: O’Reilly Media, 2013. http://ebookcentral.proquest.com/lib/uni-trier/detail.action?docID=1250020.