finally a bnode with a uri

Posts tagged with: sparql templates

SPARQLBot - Your Semantic Web Commandline

SPARQLBot is now officially launched
Update: I added a Ubiquity script after a suggestion by Gautier.

SPARQLBot - Your Semantic Web Commandline SPARQLBot, the weekend project we started at SemanticCamp London, is now finally online at a proper home, and with a more solid toolset. I've ported the essential commands from the old site, and the "Getting Started" manual should be online later today as well.

What is SPARQLBot?

SPARQLBot is a web-based service that reads and writes Semantic Web data based on simple, human-friendly commands received via IRC or the Web. The command base can be freely extended using a browser-based editor. SPARQLBot can process microformats, RSS, several RDF serializations, and results from parameterized SPARQL queries.

New Features

SPARQLBot was more or less rewritten from scratch. Compared to the earlier version, things have become much more powerful, but also more simple and stable in many cases. The system can now:
  • operate on multiple freenode IRC channels (just send "join #channel" to "sparqlbot"),
  • reply to private IRC messages,
  • be accessed via the Ubiquity plugin
  • reuse other commands,
  • call web APIs via GET or POST,
  • access arbitrary SPARQL endpoints,
  • help you cut your way through the growing Linked Data cloud,
  • use a single command to combine results from federated SPARQL endpoints and datasets such as DBPedia, DBLP, the SemWeb Conference Corpus, GeoNames , CrunchBase, or flickr wrappr,
  • produce highly customizable output via SPARQL result templates,
  • OpenID-protect your commands,
  • cache results in a local SPARQL+-enabled store.
(please see the manual for details)

If you happen to be at ISWC next month and would like to have a look behind the scenes, I'll present SPARQL+ and SPARQLScript with SPARQL result templates during the poster session.

SPARQLScript - Semantic Mashups made easy

SPARQLScript gets loops and output templating and can now be used to build simple semantic mashups.
What is a scripting language without loops, or a Web language without a template mechanism? Not really usable. Yesterday, I finally added the two missing core features to my SPARQLScript processor, and I'm excited about eventually being able to test the whole thing. This is just the beginning (there is no string concatenation yet, and no WHILE blocks), but with the basic infrastructure (and documentation) in place, it's time to start gathering feedback. I'm going to upgrade SPARQLBot in the next couple of days which should be a fun way to explore the possibilities (also, it were the bot's users who triggered the creation of SPARQLScript in the first place).

So, what is it actually good for?

Mid-term-ish, I'm dreaming of an alternative to increasingly non-RDFy specs such as RIF and OWL2 (there is definitely some need for them, they just don't seem to really work for me and my Web stuff). Things like crawling, smushing, or custom inference tasks based on wild mixtures of RDFS, OWL, and SKOS should be doable with SPARQLScript.

Simple agents are another use case, as SPARQLScript simplifies task federation across multiple endpoints and RDF sources.

What's working already today is the creation of simple mashups and widgets. Below is a script that integrates status notices from my twitter and identi.ca feeds, and then creates an HTML "lifestream" snippet. The (live!) result is embedded at the bottom of this post.
# global prefix declarations
PREFIX dc: <http://purl.org/dc/elements/1.1/>
PREFIX rss: <http://purl.org/rss/1.0/>

# the target store
ENDPOINT <http://arc.semsol.org/demos/endpoint/>

# refresh feeds every 30 minutes
$up2date = ASK FROM <script-infos> WHERE {
  <script-infos> dc:date ?date . FILTER (?date > "${NOW-30min}")
}
IF (!$up2date) {
  # load feeds
  LOAD <http://twitter.com/statuses/user_timeline/9516642.rss>
  LOAD <http://identi.ca/bengee/rss>
  # remember the update time
  INSERT INTO <script-infos> { <script-infos> dc:date "${NOW}" }
}

# retrieve items
$items = SELECT * WHERE {
  ?item a rss:item ;
        rss:title ?title ;
        dc:date ?date .
} ORDER BY DESC(?date) LIMIT 8;

# output template
"""<h4>My online lifestream:</h4>
<ul>"""
FOR ($item in $items) {
  """<li><a href="${item.item}">${item.title}</a></li>"""
}
"</ul>"

(S)mashups here we come :)

Archives/Search

YYYY or YYYY/MM
No Posts found

Feeds