How to get information of a specific Wikidata ID using SPARQL query? - sparql

I know how to find all movies in Wikidata. So, I get a list of IDs like "Q18644475". If I try to get all film info for every film in the database in one query, I get a timeout. So, I decided to get the film info in individual queries.
Is there an SPARQL query to get the title and release year(optionally all possible info) for this ID?

I find the hoops you have to jump through to use an entity ID in SPARQL to be quite nuts.
If anyone else stumbles across this question then an alternative is to download the complete entity information in JSON format.
For example:
https://www.wikidata.org/wiki/Special:EntityData/Q18644475.json

Related

SQL Query - multiple search terms, two columns

I'm wondering if someone could provide some guidance on an SQL query to return results from two columns using a varying amount terms. It's SQLite3 in Node.js. This is a music library search function, so I want to be able to type something like "Justin Peaches" or "Bieber Peaches" or "Justin Bieber Peach" which would return the same result. Currently, my SQL query is:
SELECT * FROM songs WHERE track LIKE '' or artist LIKE '' ORDER BY track LIMIT 12;
table: "songs"
track: Peaches (Clean) artist: Justin Bieber (featuring Daniel Caesar)
Obviously this only allows searching of artist OR song rather than both at the same time. I would like to be able to enter individual words of the artist, song, or a combination of both. It's very similar to the way you'd search pretty much any other music library wherein you can use a combination of artist, track, or some of each.
I'm not sure if this is something that can be accomplished directly in an SQL query or if there needs to be some additional handling in advance. Any help would be appreciated!

What is the appropriate use case in a REST API to use the ? Question Mark for parameters?

On this REST tutorial site,
When, if ever, is it appropriate to put something like
http://dev.m.gatech.edu/developer/USER_NAME/api/WIDGET_NAME/test?query=someparam
instead of
http://dev.m.gatech.edu/developer/USER_NAME/api/WIDGET_NAME/test/someparam
or
http://dev.m.gatech.edu/developer/USER_NAME/api/WIDGET_NAME/test/someparam/var1/param/var2/param
?
I've seen various things on SO.
All cases where you are performing a GET request and need to pass some parameters should be in the form of ?param=value.
So is that first link up top, they are just wrong? Man, who can you trust these days :).
No, they are not wrong. Take this example from that site
GET http://www.example.com/customers/33245/orders
Here, customers, 33245 and orders are not query parameters, they are resource endpoints, or uri nodes as they call them on your restapitutorial.com
If you do
GET http://www.example.com/customers you get all customers
GET http://www.example.com/customers/33245 you get customer 33245
GET http://www.example.com/customers/33245/orders you get customer 33245's orders
They all return 0 or more resources. If you were to apply a query to for example the first one and you wanted to GET all customers with John as first name, you would do this
GET http://www.example.com/customers?firstname=John
In the last example in your question, it would be written as GET http://www.example.com/customers/firstname/john instead, which is wrong in terms of restfulness. There is no customer resource 'firstname', and there is no firstname resource 'john'.
There are customers whose firstname is 'john' and you would GET them with
GET http://www.example.com/customers?firstname=John

Freebase API - listing a city's tourist attractions by relevance

I'm trying to use Freebase to list tourist attractions for cities by relevance.
Using the Topic API, it's simple to retrieve results for a certain city using its MID (e.g. "/m/04jpl" for London)
https:// www.googleapis.com/freebase/v1/topic/m/04jpl/?&filter=/travel/travel_destination/tourist_attractions
However, this gives a limited 10 results. The response ends with "count": 87.0". How do I get all 87? It's possible to click a "87 values total" link on London's Freebase page. Effectively, I want to do the same here.
I realise I could use MQL, but I want the results to be ranked by relevance, not by timestamp. Using the Search API, it's possible to rank by freebase, entity or schema, so I'd rather use that.
First, I looked at the Search Output schema for the Search API. However, even outputting "all" didn't produce Tourist Attraction results. Using metaschema with the Search API DID work. I used "part_of" to select London. However, it only works for some locations:
https:// www.googleapis.com/freebase/v1/search?limit=50&filter=(all%20type:/travel/tourist_attraction%20part_of:/m/04jpl)&indent=true
What I REALLY want to be able to do is make it work for a relatively unknown location like "Loughborough" (MID /m/01z21p). As you can see, substituting /m/04jpl for /m/01z21p produces no results:
https:// www.googleapis.com/freebase/v1/search?limit=50&filter=(all%20type:/travel/tourist_attraction%20part_of:/m/01z21p)&indent=true
Looking at "Loughborough", we see that its tourist attraction like "Loughborough Town Hall" has a "/travel/tourist_attraction/near_travel_destination" of "Loughborough". How would I compose this filter?
I want something like the following (that actually works):
https:// www.googleapis.com/freebase/v1/search?limit=50&filter=(all%20type:/travel/tourist_attraction)&filter=(/travel/tourist_attraction/near_travel_destination:/m/01z21p)&indent=true
Thanks!
NOTE: To enter the links into your browser you need to remove the space between the https:// and www. I would have done so, but I don't have the required permissions here yet to post more than 2 links.
I solved this problem using 2 Freebase API calls.
1) An MQL query that gets a list of all the tourist attractions for a particular MID. These results are not ranked in any useful way. I am also returning the result number to make processing a little easier later
https://www.googleapis.com/freebase/v1/mqlread?query={"mid":"/m/04jpl","/travel/travel_destination/tourist_attractions":[{"mid":null}],"resultnumber:/travel/travel_destination/tourist_attractions":[{"return":"count"}]}
The list of returned MIDs are then used to create a new query (using a for loop). You must enter all MIDs returned from the above query, so that they can all be ranked together.
2) https://www.googleapis.com/freebase/v1/search?limit=10&filter=(any%20mid:/m/0gsxw%20mid:/m/01d_0p%20mid:/m/07gyc)&scoring=entity
It's best to choose a return format that just returns MIDs, to ensure that loading times aren't extensive.
You then have a ranked list of MIDs! You'll need one final query to return whatever details you desire.
I hope this has proved helpful.

SPARQL - learning by example

In short, if someone instructs me, "Get a list of databases which include Oracle, Mysql, DB2, MSSQL, etc.," how can I actually establish which fields and information I need to create the query? I downloaded DBpedia and grepped the triples, e.g.,
$ `grep 'Oracle' * | grep 'Database'
article_categories_en.nt:<http://dbpedia.org/resource/Oracle_Database> <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Relational_database_management_systems> .`
How do I create a SPARQL query from that initial question?
Using that snippet above, I know Oracle is a company and one of its products is an RDBMS by the same name. I tried the lookup tool and searching the web but did not get far enough with this and need some direction.
In this particular case, I'd start by visiting the DBpedia page corresponding to one of the things that you know you'd like in your result. A good instance is http://dbpedia.org/page/MySQL. On that page, you can start to look for properties that might help you find other related systems. One property listed on the page is
dbpedia-owl:genre dbpedia:Relational_database_management_system
Then I'd go the DBpedia SPARQL endpoint and try searching for other things that have this same property and value. In this case, I can run the following query:
SELECT * WHERE {
?rdbms dbpedia-owl:genre dbpedia:Relational_database_management_system .
}
SPARQL results
The results are pretty promising; there are 38 results. The first few are:
rdbms
http://dbpedia.org/resource/MySQL_Cluster
http://dbpedia.org/resource/MSQL
http://dbpedia.org/resource/OpenEdge_Advanced_Business_Language
http://dbpedia.org/resource/Adaptive_Server_Enterprise
…
In general, I find it much easier to locate an instance of the sort of thing that I'm looking for in Wikipedia, then visit the corresponding DBpedia page and look at the properties, and then formulate some exploratory queries based on that.

Automatic SPARQL Query Generation for DBpedia

I am working on semantic web project where user will input text query like "Name the presidents of US who died under an age of 60 ? " and I have to generate automatic sparql query based on user's inputed text and this will be fired on http://dbpedia.org/snorql using DBpedia endpoint. I am confused how to select subject, predicate and object as we don't know all properties of specific resource.
Check out GATE (general architecture for text engineering).
I suppose you could analyze the natural query, and with Annie and JAPE, you might have a good start to transform your query into sparql.
Hope this helps