How to publish event streams as Linked Data.
Increasingly, real-time processing is becoming important and sites provide direct access to data streams, which provide data as soon as the data appears. For example, Twitter provides API access to a stream of Twitter messages in real-time. In addition, with the proliferation of sensors, more streaming data sources will become available. Simultaneously, there is an increasing amount of public data on the Web which can be linked to and reused in RDF. This means that a lot of static data is available to be used as context of events.
N-ary predicates. [N-ARY-REL]
Need a class event, time stamp (atomic or interval).
Data sources:
Triples/Quads occur once in NiceWeatherStream and once in historical data source for events.
@prefix : <http://events.event-processing.org/types/> .
@prefix dbpedia: <http://dbpedia.org/resource/#> .
@prefix e: <http://events.event-processing.org/ids/> .
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix s: <http://streams.event-processing.org/ids/> .
@prefix src: <http://sources.event-processing.org/ids/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
e:e1 {
<http://events.event-processing.org/ids/e1#event>
a :AvgTempEvent ;
:endTime "2011-08-24T14:42:01.011"^^xsd:dateTime ;
:members (<http://events.event-processing.org/ids/e2#event> <http://events.event-processing.org/ids/e3#event>) ;
:source <http://sources.event-processing.org/ids/NiceWeatherAggregator#source> ;
:startTime "2011-08-24T14:40:59.837"^^xsd:dateTime ;
:stream <http://streams.event-processing.org/ids/NiceWeatherStream#stream> ;
dbpedia:Nice :avgTemp [ rdf:value "25" ; :event <http://events.event-processing.org/ids/e1#event> ] .
}
:members to maintain ordered and complete account of related events.
dbpedia:Nice to maintain knowledge about a temperature measurement and at the same time its belonging to a specific event.
:AvgTempEvent is inherited. This ontology can be extended by anyone by referencing the RDF type Event as a super class.
:endTime for a point or both, :startTime and :endTime for an interval.
e2:event, e3:event in different streams which were used as input to create the :AvgTempEvent. These events are depicted below. They could have further input events themselves.
dbpedia:Nice from the Linked Data cloud where further context for the event can be retrieved.
e1:event and the Web resource e1 to separate the URI for the thing event from the event information describing the event. The fragment identifier #event is used to identify the event.
e:e1#event is not allowed, so we are using the absolute URI instead of e1:event which avoids defining a new namespace e1, e2, e3, ..., eN for each unique event .
event-processing.org was chosen as a generic home for this schema.
e:e2 {
<http://events.event-processing.org/ids/e2#event>
a :TempEvent ;
:endTime "2011-08-24T14:40:59.837"^^xsd:dateTime ;
:source <http://sources.event-processing.org/ids/NiceWeatherStation01#source> ;
:stream <http://streams.event-processing.org/ids/NiceTempStream#stream> ;
dbpedia:Nice :curTemp [ rdf:value "23" ; :event <http://events.event-processing.org/ids/e2#event> ] .
}
e:e3 {
<http://events.event-processing.org/ids/e3#event>
a :TempEvent ;
:endTime "2011-08-24T14:42:01.011"^^xsd:dateTime ;
:source <http://sources.event-processing.org/ids/NiceWeatherStation02#source> ;
:stream <http://streams.event-processing.org/ids/NiceTempStream#stream> ;
dbpedia:Nice :curTemp [ rdf:value "27" ; :event <http://events.event-processing.org/ids/e3#event> ] .
}
An event is defined as:
(optional) (either lat/lon or URIs to locations which contain descriptions of geometry)
The NeoGeo vocabulary [NEOGEO] could be a starting point:
e:e1 {
<http://events.event-processing.org/ids/e1#event>
:location [ geo:lat "53.27194"^^xsd:double; geo:long "-9.04889"^^xsd:double ] .
}
Streams make use of namespace prefixes to reduce the number of characters to be transmitted.
Further bandwidth savings can be achieved by gzipping the HTTP stream.
Another option could be a binary RDF serialization like [HDT-ISWC2010].
<dependency>
<groupId>eu.play-project</groupId>
<artifactId>play-commons-eventtypes</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
To make it work, include these repositories:
<repository>
<id>play-private.release</id>
<url>http://maven.petalslink.com/private-play-release</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>play-private.snapshot</id>
<url>http://maven.petalslink.com/private-play-snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>semweb4j-repo</id>
<name>FZI Maven Repository</name>
<url>http://mavenrepo.fzi.de/semweb4j.org/repo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>semweb4j-snapshots</id>
<name>FZI Maven Snapshot Repository</name>
<url>http://mavenrepo.fzi.de/semweb4j.org/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>