Google Data API and GData

Since 2006, google collects API programming interfaces in the Google Data (gdata) project. At their website, you find links to google docs, calendar, spreadsheet, youtube, and more.

http://code.google.com/apis/gdata/

It is a one-stop place to find interfaces for the various google services. For Semantic Web developers, it is also a good overview how google shapes its interfaces to its web-based applications. Get inspired by the pros.

Especially the GData protocol and data format is worth a look. It’s a generic API for getting and querying data, based on RSS 2.0 and Atom.
In the GData reference, you find a description of the Atom extensions and a simple query-format extending it.

Assuming a feed is hosted at the URI http://www.example.com/feeds/jo, then elements within the feed can be queried with the following URI:

http://www.example.com/feeds/jo?q=Darcy&updated-min=2005-04-19T15:30:00

A kind of “easy going sparql”.

In their own words:
The Google data APIs provide a simple standard protocol for reading and writing data on the web.

These APIs use either of two standard XML-based syndication formats: Atom or RSS. They also have a feed-publishing system that consists of the Atom publishing protocol plus some extensions (using Atom’s standard extension model) for handling queries.

Many Google services support the Google data API protocol.

Combining Rules with SPARQL

a recent blog-post by Dan Brickley reminded me that we have a Jena-Rule engine augmented with SPARQL dusting our shelves. Its years old, but may be interesting for you.

We augmented Jena’s rules by adding sparql.
The passing of parameters is easy, you just have to use the variables of the rules. Within Jena rules, you can always express graphs using N-Triple Axioms, so its also possible to write RDF files.
Only caveat: no quads.

code is in this folder
http://gnowsis.opendfki.de/browser/tags/0.8.3-alpha/gnowsis_retrieval/WEB-INF/src/org/gnowsis/retrieval/RuleQuerySparql.java

download SVN URI:
http://gnowsis.opendfki.de/repos/gnowsis/tags/0.8.3-alpha/gnowsis_retrieval/WEB-INF/src/org/gnowsis/retrieval/RuleQuerySparql.java

documentation:
http://gnowsis.opendfki.de/browser/tags/0.8.3-alpha/gnowsis_retrieval/doc/help.html

Here is a snippet of that documentation for you:

Inference

After the results have been gathered, inference rules are evaluated against the results.
This means, that you can define rules on which new information is generated
based on a declarative syntax described in the
Jena Rule Engine DOC.
An example file for these rules can be found in the source, at best directly in SVN here:
retrieval.rules.txt.
You can use the existing Jena rules and a special rule that was created by Leo Sauermann to
load additional triples from the gnowsis. This query-rule is defined as follows:

# Load triples from the search storage by a triple patter.
# The search storage is crawled by gnowsis IF you enabled it in the
# configuration and have crawled a few datasources. If not, this query
# will return nothing.

queryStorage(?subject, ?predicate, ?object, 'search')

# ?subject, ?predicate, ?object: a triple pattern. 
# Leave one of the empty (= a unbound variable like ?_x) and it will try to match 
# the empty thing as a wildcard. The variables are not bound in the pattern and
# cannot be used in the same rule. You have to write additional rules to work
# on the queried triples. 

usage example:
# load all project members and managers
(?project rdf:type org:Project) ->
queryStorage(?project, org:containsMember, ?_y, 'search'),
queryStorage(?project, org:managedBy, ?_z, 'search').

If you want to bind the variables and use them: It is not possible. See the
statement of the Jena developers
about this. But this is not a big problem, you can work around it easily.

Debugging Inference

If you want to tweak your inference rules and don’t want to have gnowsis run the query at all times,
you can use our built-in inference debugging tricks.

  • first: when you run the query for debugging, click the ‘rerun only rules’ link at the bottom of your search
  • second: open the inference file by clicking ‘edit rules file’
    (also found at the bottom of each search result)

the first stage brings you into a query mode, where pressing “reload” in the browser
just does the inference and the clustering, but not the search itself. This speeds up
your debugging of inference rules. You will only spot the difference in the addressbar
of the browser, which now contains something like http://…/retrieval?cmd=runrules&query=YourQuery

Also, note that syntax errors in your inference code will be logged to the gnowsis
logging system. This is either the message window, pane ‘org.gnowsis.retrieval.RetrievalService’
or your file logging in ~/.gnowsis/data/… .
You will not see syntax errors in your query results, sorry.

Inference and SPARQL combined

SPARQL reference

You can also use SPARQL queries to refine and expand the search results.
The basic syntax is to run a SPARQL query in the head of a rule, the first argument
is the query, escaped with ”, the following arguments are variables that will
be used in the query. The passed variables are interpreted as named variables
in the SPARQL query, named ?x1 ?x2 ?x3, etc.

Example for querySparql:

(?a ?b ?c) ->
querySparql('
 PREFIX rdfs:    <http://www.w3.org/2000/01/rdf-schema#>
 CONSTRUCT   { ?x1 rdfs:label ?label }
 WHERE       { ?x1 rdfs:label ?label }
')
', ?c).

The variable named ?x1 will be replaced with the value of ?c.

Note the
following tips:

  • literals are escaped using the \’text\’ markup.
  • All arguments passed after the query will be bound into the query using names ?x1, ?x2, …
  • querySparql can only be used in the head of rules.
  • Attention: if you are querying the gnowsis biggraph, you have to add the graph-name to your
    sparql queries.
  • Try out your queries on the debug interface before you use them.
  • Only ‘construct’ queries are supported, not select or describe.
  • Namespace prefixes: inside the SPARQL query, you can use the namespace prefixes defined in the rule file

An example to do so is given now, the task here is to retrieve the members of a project if a project
was in the result.

#note that these namespace prefixes are available in the sparql query
@prefix skos: <http://www.w3.org/2004/02/skos/core#>.
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix owl:  <http://www.w3.org/2002/07/owl#>.
@prefix retrieve: <http://www.gnowsis.org/ont/gnoretrieve#>.
@prefix tag: <http://www.gnowsis.org/ont/gnoretrievetag#>.

# get members with SPARQL
# note the special namspace defined inside
(?hit retrieve:item ?project),
(?project rdf:type org:Project) ->
querySparql('
PREFIX org: <http://km.dfki.de/model/org#>
CONSTRUCT   { 
  ?x1 org:containsMember ?m. ?m rdfs:label ?labelm. ?m rdf:type ?typem.
  ?x1 tag:todoRelateHitTo _:hit .
  _:hit rdf:type retrieve:InferedHit .
  _:hit retrieve:item ?m .
  _:hit retrieve:textSnippet \'member of project\'.
}
WHERE       { graph ?g {
  ?x1 org:containsMember ?m. ?m rdfs:label ?labelm. ?m rdf:type ?typem.
} }
', ?project).

# make the missing relations to the hits
# this is needed because you cannot pass blank nodes into the SPARQL engine.
(?item tag:todoRelateHitTo ?tohit),
(?hit retrieve:item ?item) ->
(?hit retrieve:related ?tohit).
run a sparql query, replacing placeholders (?x1, ?x2, ...) in the query with the passed arguments,
arguments have to be bound. Only 'construct' queries are supported.
 
# retrieve a test sparql
[test:
(http://xmlns.com/foaf/0.1/ ?x ?type)
-> querySparql('
CONSTRUCT   { ?x1 rdfs:label ?label }
WHERE       { ?x1 rdfs:label ?label. FILTER (?x1 = foaf:name) }
')
]

# retrieve with param - bind ?ont to the foaf ontology, it is called x1 in the query
[testbind:
(?ont rdf:type owl:Ontology)
-> querySparql('
CONSTRUCT   { ?p rdfs:isDefinedBy ?x1. ?p rdfs:label ?label. }
WHERE       { ?p rdfs:isDefinedBy ?x1. ?p rdfs:label ?label. }
', ?ont)
]


# example for gnowsis. note the use of "....{ graph ?g { ...."
[test:
(http://xmlns.com/foaf/0.1/ ?x ?type)
-> querySparql('
CONSTRUCT   { ?x1 rdfs:label ?label }
WHERE       { graph ?g {  ?x1 rdfs:label ?label. FILTER (?x1 = foaf:name) } }
')
]

Artikel in “Entwickler Magazin” 2008.1

For the german audience, “Entwickler Magazin” hat in Ausgabe 2008.1 einen Artikel von mir über den Semantic Desktop veröffentlicht.

Cover "Entwickler" Ausgabe 2008.1

In vier Seiten wird dort erklärt, was die Grundlagen von Semantic Web und Semantic Desktop sind, und ein paar links auf Projekte gegeben.
Zu haben um € 6,50 im Zeitschriftenhandel in Deutschland/Österreich/Schweiz, eine der 20k Ausgaben können schon bald dein sein.

Einleitung:
Der Semantic Desktop macht den PC zum Denkwerkzeug. wink wink
Wir haben genug Platz, um all unsere E-Mails, MP3s, Photos, Videos und Dokumente am Desktop zu speichern. Das Problem ist, diese Information zu verwalten. Dateisysteme bieten nur starre Hierarchien an. Tim Berners-Lee und das W3C haben bereits weiter gedacht: Menschen denken in Konzepten, das Semantic Web bietet mit RDF und Ontologien einen auf HTTP, URIs und HTML aufbauenden Standard zur Annotation und Suche. Der Semantic Desktop bringt Betriebssysteme und Anwendungen damit weg von den Dateien, auf die Stufe der Gedanken.

Um dahin zu kommen, zuerst ein kleiner Crash-Kurs zum Thema Semantic Web,…

Dataportability.org brings together google, plaxo, and facebook

A storm-in-a-waterglass gathering more and more momentum, dataportability.org welcomes new members. Before they were heating up the storm, now individual corporate representatives of Scoble, Plaxo, and Facebook, are sitting on one virtual table.

As announced here, blogged here, and then slashdotted, people working for some interesting ventures have today joined dataportability.org.

In the last weeks, for those who missed the event that Robert Scoble used an un-released app “pulse” from plaxo to gather his contacts from facebook and got blocked by facebook after this. He contacted them and after a while, was back in, but the problem is obvious: social websites, and the companies running them, have one capital on their stock: data created by us. As “we” were “man of the year” in Time, the data of such a celebrity is worth a lot.

Scoble joined dataportability.org (DP) and blogged this, which made me curious to also look at their site and add a few notes about how RDF and Semantic Web may help them out instead of creating their own standards.
Now that people working for Plaxo, Google, and Facebook join the already impressive list of individuals at dataportability, they can really talk about the mission
To put all existing technologies and initiatives in context to create a reference design for end-to-end Data Portability. To promote that design to the developer, vendor and end-user community.

My biggest fear was, that the standards created by DP were used-less as no big companies were present in their board (not like W3C, where nearly all big companies are onboard). This has changed now and I would expect that the effort indeed now is relevant to the future of the web.

Skiing & Snowboarding for a week in Flachau

I am snowboarding in Flachau, Austria for a week. Ingrid is skiing, I do the snowboard. As with every holiday, I try to find Semantic Web aficiandos within reach. I am open for jointly drinking a nice beer in the evening or boarding together, with web 2.0 and semweb lovers. My geo-coordinates are

Latitude:
47.35558818067
Longitude:
13.3884466455803

here is the plazes.com link:
http://www.plazes.com/plazes/131740_hotel_alpina_fla

sunset

We are around Flachau, Zauchensee, Wagrain, Flachauwinkel. I stay at Hotel Alpina, if you want to sms me, my phone number is +43 6991 924 two eights, two nines. Open for beer and party in the evening, snowboarding under the day. Expecting heavy partying around monday…

btw: thanks to the gone-web2.0 people at plazes, they don’t show the GEO-position lat/lon no longer on their website (horrrrray for “activities” though, a feature that will surely skyrocket their IPO value).
But luckily someone there remained with warm wetware within skull and left the GPS coordinates in the source code of the HTML for me to copy/paste (yes, display:none is a good feature to remove features from your web2.0 application. maybe all the other features that got lost on plazes are only display:none’d…. I will stick to the topic… and how desperate am I to look in their f***ing source for it … and how diluting is it to actually find there what they did hide!)

Anyway, in plazes this city does barely exist, one person drank a beer here 8 months ago. Googling for semantic web (flachau | wagrain) returns a handful of hits, something by me on top (ok, I know I am here now).

But a few names popped up, for example salzburgresearch.at which is close. My gnowsis remembers whom I know from there… so back to direct contact. Also the omnipresent Semantic-Web company showed up, they have Austria covered quite good. But no links to people.

Leobard meets Walterra

Thanks to the tightly entangled web and closeness of interest, I met Walterra. Usually known as Walter Rafelsberger, I noticed him as blogger and being interested in similar topics. Maybe you remember my post about his holy grail of PIM.

So, after many e-mails and exchanging phone numbers, and managing to be in the same city at the same time (not so easy), we drank a beer at the nice wifi-enabled geeknest dasmoebel.at. Short note in history: Walter was also at I-Semantics 2007, so we had the possibility to meet before, but alas, didn’t happen.

leobard and walterra

He works (or starts working soon?) at the fresh-founded elite-super-university “modul” which is located at the nicest spot in the 19th district of Vienna, Kahlenberg. (Accidentially also the place where Ingrid and I had our marriage party). So, besides the great location the modul university offers excellent courses (or will offer, they are setting up at the moment) and is also the home of Professor Arno Scharl. I met him at I-Semantics and we discussed possible mutual projects with DFKI. You all should know Scharl from his book The Geospatial Web.

Scharl and the modul university work on projects like idiom, mediawatch,
and the US election 2008 web monitor. They munch a lot of data, digest it, and then visualize it as nice as you can. Round corners, great backgrounds, shady buttons, nice. And good visualizations of ontologies.

Walter further pointed me to tupalo.com, something similar to plazes.com, but run by a Vienna Startup. Since plazes changed their whole business model from “a useful tool to find free wifi spots and other areas of interest and to see where you travelled to” to a “web 2.0 buzz that will surely make us rich by offering the same crap as twitter” I am eager to find a replacement for plazes.com anyway (plazes: where is the f***ing “wifi cafe in vienna” search feature?! you killed your best features.) But alas, Tupalu does not offer the desktop-app-using-network-mac-address way of identifying hotspots, so they are also bare on features.

Another thing you may not want to miss is Meral Akin-Hecke’s Digitalks.at socializing and networking effort. Its something like a barcamp, but for newbies. Invited speakers talk about the web and new technologies, interested people can learn about it. The next is 15.January 2008 on Virtual Worlds (probably in german), and of course, in Vienna.

We also touched the topic of what the hell is langreiter.com doing these days? Blogging, but what business is coming up? Similarly, we found out that Walter knows Andreas Blumauer, adding prove to my theory that Andreas knows everybody related to Semantic Web in Austria.

Wish you blessing, was nice chatting with you Walter! And, as you have read so long: here is the motivational poster picture of Walter you will love to see.

mobile clubbing kaiserslautern

aftermath of the last mobile clubbing in Kaiserslautern / elf freunde kreisel: the video!

update: the missing links:

  1. raus-aus-kl blogpost
  2. flashmob announcement on twoday

Und der spirituell perfekte artikel aus der online-lokalzeitung kaiserslautern:
Zu denken gegeben hat den eingesetzten Polizeibeamten ein Vorfall am Dienstagabend am Löwenburg-Kreisel. Gegen halb 8 wurde die Streife verständigt, weil sich zu den elf „starren“ Freunden mitten im Kreisel weitere 29 gesellt hatten und für Aufsehen sorgten. Der Grund: Die Gruppe tanzte und hüpfte auf der Fläche herum und schien „lautlos in Richtung Himmel“ zu beten.
Nachdem die Streife den „Haufen“ eine Weile beobachtet hatte und sich keinerlei rechtliche Beanstandungen ergaben, zogen die Beamten wieder ab. Im Rapport wurde vermerkt: „Ob die Gruppe mit ihrem Tanz den Wettergott bezüglich Schnee, oder das Christkind auf reichliche Geschenke beschwören wollte, konnte nicht geklärt werden.“

Offensichtlich wurde die Polizei Zeuge des angekündigten Mobile Dancing Club, zu dem im Internet aufgerufen wurde. Dabei trafen sich Tanzfreudige mit einem MP3-Player, um öffentlich zu tanzen, beim ersten mal in der Karstadt-Unterführung, dann jetzt am Löwenburgkreisel.

Cool uris gets light from e-learning

Stephen Downes blogs:

Some of this W3C doment discussion seems to be echoing some of the discussion about open social networks. It’s nigh well time. “RDF allows the users to describe Web documents and resources from the real world-people, organisations, things-in a computer-processable way. Publishing such descriptions on the Web creates the Semantic Web. URIs (Uniform Resource Identifiers) are very important, forming the link between RDF and the Web.” Leo Sauermann and Richard Cyganiak, eds., W3C, December 18, 2007.

good to hear!

thx to Martin Memmel for the link