We’re excited to release an alpha version of our new API. This is the first post in a series of blog posts, describing ways you can rapidly build impressive data intensive applications.
SemantiNet’s new API is designed for easy querying of a selected collection of useful Web Services, Wikipedia, Linked-Data, and the unstructured web. The API also provides a flexible templating language, for easy creation of semantic mashups and data intensive applications, directly from your browser.
To see what we mean – let’s start with a very simple querying of DBPedia (click the link to see this query in the playground):
The API returns a node that represents Bar Refaeli in DBPedia, with some of the data that is connected to this node. Quite simple so far. So, let’s devise a template that takes this node, and present information from this node, as an HTML:
<html>
<body>
<!-- label provides a nice representation of the node's name -->
<h1><%= label%/></h1>
<!-- personage calculates the age, based on information we have from the birth-date and the current time -->
Age: <%= personage/round(1)%/><br/>
<!-- We want a nice representation of the birthPlace, so we take dbpedia-owl:birthPlace/label -->
Born in: <%= dbpedia-owl:birthPlace/label%/><br/>
<!-- Take the first image returned from YahooBoss's images search -->
<img src="<%= yahooboss:images/first%/>" width="100px">
</body>
</html>
Click
here to see it live in the playground

What’s returned from a couple of examples:
Nice. We’ve seen how to query both LinkedData (from DBPedia in this case) and the web (through Yahoo Boss) – to get the picture.
Just to get a feeling of what’s possible, let’s play with these models’ place of birth.
This query, will return the 3 birth places:
/multy('dbpedia:Carolyn_Murphy','dbpedia:Marisa_Miller','dbpedia:Bar_Refaeli')/dbpedia-owl:birthPlace
Using this template – we will take the places, and put them on a map:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAkMzYJpqzT4X0Hj0W-xMFIhTkBdPb1_Y7shJWGA4g7zFU4DbUwRSRxPPUjb7uuS8U3pAZlGMUGn5Vww" type="text/javascript"></script>
</head>
<body>
<div id="mapdivid" style="float: left; height: 100%; width: 100%"></div>
<script type="text/javascript">
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("mapdivid"));
map.setCenter(new GLatLng(0, 0), 1);
<%foreach .[location]%>
map.addOverlay(new GMarker(new GLatLng(<%= /location/geo:lat%/>, <%= /location/geo:long%/>),{title:"<%= /label%/>"}));
</%foreach%>
}
</script>
</body>
</html>
Check it out “live”
here. In this example, we iterate over the birthplaces, using a ‘foreach’ directive, and for each place – we take the location’s latitude, longtitude and label.

The following query, will return a list of female models, include only those that we have data about their height, and order them by their height:
category:Female_models/deepinstances(3)[dbpedia-owl:height]/orderdesc(dbpedia-owl:height)
To show a table of the tallest 10 models, we’ll use this template:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<table style="float: left; clear: both">
<%foreach ./take(10)%>
<tr>
<td><img width='100px' src='<%= /yahooboss:images/first/%>'
onerror='this.onerror = null; this.src="http://static1.headup.com/images/placeholder.jpg"' />
</td>
<td><%= /label%/><br/>
<%= /dbpedia-owl:height%/>
</td>
</tr>
</%foreach%>
</table>
</body>
</html>
Check it out in the playground
here, or – for a more generic version of this table, check
this out:

Scraping pages from accross the web – is quite sweet as well. Let’s do a call to this page:
http://sportsillustrated.cnn.com/2010_swimsuit/models/
And now, let’s scrape the images from this page, using SemantiNet’s API:
/fetch('http://sportsillustrated.cnn.com/2010_swimsuit/models/')/htmlxpath('//div[@class="cnnIndexList"]//img/@src')/*
This gets us a list of photos. And if we put them in this template:
<%foreach .%>
<img src='<%= .%/>'/>
</%foreach%>
What this query results is a scraping of the site’s images:

In the following blogposts we’ll write about more characteristics of the SemantiNet’s API and language:
- Extensible – anyone can easily extend this language (we internally call it CSlang), building on top of existing predicates
- A rich NLP library for Entity extraction, contextual disambiguation, access to WordNet
- Powerful first-class-citizens of the language – graph querying primitives, lambda calculus
- Very short development feedback loop
- Piping
- Fuzzy ontology support – freeform queries allow quick trials and discovery
- Inference rules one-liners
- Enrich the ontholgy based on web-links
- Data mining primitives – map-reduce, grouping, histograms, order-by, max on lists
Want to get started? Take a spin in the playground, and check out our wiki: http://wiki.headup.com/index.php?title=Knowledge_Graph_API