Skip to content
Roland Stühmer edited this page Jun 27, 2013 · 16 revisions

Creating a new PLAY event type for Nissatech

Example event

@prefix :        <http://events.event-processing.org/types/> .
@prefix rpm:     <http://rpm.event-processing.org/types/> .
@prefix geo:     <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix user:    <http://graph.facebook.com/schema/user#> .
@prefix uctelco:  <http://events.event-processing.org/uc/telco/> .

<http://events.event-processing.org/ids/nissa1340688541673999872> {

<http://events.event-processing.org/ids/nissa1340688541673999872#event>
      a       rpm:AlarmEvent ;
      :endTime "2012-12-22T13:31:13Z"^^xsd:dateTime ;
      :location <blank://0> ;
      :message "This is a heartbeat alert (currently at 91) sent from Android (number 12345)." ;
      :stream <http://streams.event-processing.org/ids/PersonalMonitoring#stream> ;
      :screenName "firstname.lastname" ;
      uctelco:phoneNumber "12345" ;
      user:id "12345" ;
      user:link <http://graph.facebook.com/12345#> ;
      rpm:acc "50.0"^^xsd:double ;
      rpm:battery "96"^^xsd:int ;
      rpm:calories "0.08778622072179713"^^xsd:double ;
      rpm:distance "12.5"^^xsd:double ;
      rpm:duration "26"^^xsd:int ;
      rpm:heartRate "91"^^xsd:int ;
      rpm:humidity "0.0"^^xsd:double ;
      rpm:pressure "0.0"^^xsd:double ;
      rpm:sessionId "6"^^xsd:int ;
      rpm:speed "1.2"^^xsd:double ;
      rpm:steps "10"^^xsd:int ;
      rpm:temp "0.0"^^xsd:double ;
      rpm:wind "0.0"^^xsd:double .

<blank://0>
      a       geo:Point ;
      geo:lat "8.401188900000001"^^xsd:double ;
      geo:long "49.008156"^^xsd:double .

}

Template (to create event instances)

This is a string template where occurrences of string like %ID%, %HEARTRATE%, ... must be replaced to create a valid event:

@prefix :        <http://events.event-processing.org/types/> .
@prefix rpm:     <http://rpm.event-processing.org/types/> .
@prefix geo:     <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix user:    <http://graph.facebook.com/schema/user#> .
@prefix uctelco:  <http://events.event-processing.org/uc/telco/> .

<http://events.event-processing.org/ids/%ID%> {

<http://events.event-processing.org/ids/%ID%#event>
      a       rpm:AlarmEvent ;
      :endTime "%TIMESTAMP%"^^xsd:dateTime ;
      :location <blank://0> ;
      :message "This is a heartbeat alert (currently at %HEARTRATE%) sent from Android (number %PHONENUMBER%)." ;
      :stream <http://streams.event-processing.org/ids/%STREAM%#stream> ;
      :screenName "%TWITTER_ID%" ;
      uctelco:phoneNumber "%PHONENUMBER%" ;
      user:id "%FACEBOOK_ID%" ;
      user:link <http://graph.facebook.com/%FACEBOOK_ID%#> ;
      rpm:acc "%ACC%"^^xsd:double ;
      rpm:battery "%BATTERY%"^^xsd:int ;
      rpm:calories "%CALORIES%"^^xsd:double ;
      rpm:distance "%DISTANCE%"^^xsd:double ;
      rpm:duration "%DURATION%"^^xsd:int ;
      rpm:heartRate "%HEARTRATE%"^^xsd:int ;
      rpm:humidity "%HUMIDITY%"^^xsd:double ;
      rpm:pressure "%PRESSURE%"^^xsd:double ;
      rpm:sessionId "%SESSIONID%"^^xsd:int ;
      rpm:speed "%SPEED%"^^xsd:double ;
      rpm:steps "%STEPS%"^^xsd:int ;
      rpm:temp "%TEMP%"^^xsd:double ;
      rpm:wind "%WIND%"^^xsd:double .

<blank://0>
      a       geo:Point ;
      geo:lat "%LAT%"^^xsd:double ;
      geo:long "%LON%"^^xsd:double .

}
  • %TIMESTAMP% needs a date in xsd:dateTime, it should be in UTC and use ISO 8601 with this date formatter: yyyy-MM-dd'T'HH:mm:ss.SSS'Z', find the Java constant here: code
  • user ID management: there are optional properties to identify the sender of events: %PHONENUMBER% (international format, omitting "+" in beginning), %FACEBOOK_ID%, and %TWITTER_ID%. The Android app could have a settings screen to ask the user for this info.

To send the template to PLAY, see: PLAY Abstract RDF Sender.

SDK (to create event instances)

The heavyweight approach to creating an event can be seen in a Unit Test here: code

This approach requires some Maven dependencies (with RDF tooling) depending on this artefact:

<dependency>
	<groupId>org.ow2.play</groupId>
	<artifactId>play-commons-eventtypes</artifactId>
	<version>1.1-SNAPSHOT</version>
</dependency>

Schema (to valdate instances in Unit Tests)

The RDFS schema which defines the beforementioned properties and their types is stored in types.n3