SV: Instant RDF

I would like to resubmit the work Jonas did on converting the SKiCal mime
directory type to XML and then RDF.  I think it is a clear pedagogical
example of what we are talking about here.

Tim BL and written:

>The interesting exercise is to check the extent to which an application
> which has been designed without RDF in mind naturally falls into an RDF
> model.

and this is what Jonas submitted:

This example is from chapter 8 in the SKiCal draft - draft-many-iCal-ski-01,

http://www.ietf.org/internet-drafts/draft-many-ical-ski-02.txt

 I might have taken away too much but this just a demo of a straight
transfer to triples
Okay. Here comes a try.


BEGIN:VCALENDAR
BEGIN:VEVENT
UID:e098h99@washingtonpost.com
EUID:kj08988b@nationalchamberorch.org
CATEGORIES:music,concert
TITLE:Messiah
DTSTART:19991217T200000
RRULE:FREQ=DAILY;INTERVAL=1;COUNT=2
PERSONS;DIPROLE=conductor:Takao Kanayama
PRICE;LABEL="Far side":17USD
ADMISSION;QUALTYPE=AGE;QUALRULE=REQUIRED;QUALVALUE=gt 5:
END:VEVENT
END:VCALENDAR

To create triples I will first build nodes.

We will call the document for #0 and the trailing nodes (anonymous) we will
call #1, #2 and so on.  Remember that class resources begin with capital
letters and property resources begin with small.  e.g..  ical:rrule is a
property and ical:Rrule is a class.


#0 --rdf:type--> ical:Vcalendar
#0 --ical:vevent--> #1
#1 --rdf:type--> ski:Vevent
#1 --ical:uid--> 'e098h99@washingtonpost.com'
#1 --ski:euid--> 'kj08988b@nationalchamberorch.org'
#1 --ical:categories--> 'music'
#1 --ical:categories--> 'concert'
#1 --ical:title--> 'Messiah'
#1 --ical:dtstart--> '19991217T200000'
#1 --ical:rrule--> #2
#2 --rdf:type--> ical:Rrule
#2 --ical:freq--> 'DAILY'
#2 --ical:interval--> '1'
#2 --ical:count--> '2'
#1 --ski:persons--> #3
#3 --rdf:type--> ski:Persons
#3 --ski:diprole--> 'conductor'
#3 --rdf:value--> 'Takao Kanayama'
#1 --ski:price--> #4
#4 --rdf:type--> ski:Price
#4 --ski:label--> 'Far side'
#4 --rdf:value--> '17USD'
#1 --ski:admission--> #5
#5 --rdf:type--> ski:Admission
#5 --ski:qualtype--> 'AGE'
#5 --ski:qualrule--> 'REQUIRED'
#5 --ski:qualvalue--> 'gt 5'
#5 --rdf:value--> ''

Translated to XML/RDF it would look like this.


<ical:Vcalendar>
  <ical:vevent>
    <ical:Vevent>
      <ical:uid>e098h99@washingtonpost.com</ical:uid>
      <ski:euid>kj08988b@nationalchamberorch.org</ski:euid>
      <ical:categories>music</ical:categories>
      <ical:categories>concert</ical:categories>
      <ical:title>Messiah</ical:title>
      <ical:dtstart>19991217T200000</ical:dtstart>
      <ical:rrule>
        <ical:Rrule>
	  <ical:freq>DAILY</ical:freq>
	  <ical:interval>1</ical:interval>
	  <ical:count>2</ical:count>
	</ical:Rrule>
      </ical:rrule>
      <ski:persons>
        <ski:Persons>
	  <ski:diprole>conductor</ski:diprole>
	  <rdf:value>Takao Kanayama</rdf:value>
	</ski:Persons>
      </ski:persons>
      <ski:price>
        <ski:Price>
	  <ski:label>Far side</ski:label>
	  <rdf:value>17USD</rdf:value>
	</ski:Price>
      </ski:price>
      <ski:admission>
        <ski:Admission>
	  <ski:qualtype>AGE</ski:qualtype>
	  <ski:qualrule>REQUIRED</ski:qualrule>
	  <ski:qualvalue>gt 5</ski:qualvalue>
	  <rdf:value></rdf:value>
	</ski:Admission>
      </ski:admission>
    </ical:Vevent>
  </ical:vevent>
</ical:Vcalendar>



and now in "the second basic abbreviation syntax"
(REC-rdf-syntax 2.2.2):

<ical:Vcalendar>
  <ical:vevent>
    <ical:Vevent>
      <ical:uid>e098h99@washingtonpost.com</ical:uid>
      <ski:euid>kj08988b@nationalchamberorch.org</ski:euid>
      <ical:categories>music</ical:categories>
      <ical:categories>concert</ical:categories>
      <ical:title>Messiah</ical:title>
      <ical:dtstart>19991217T200000</ical:dtstart>
      <ical:rrule ical:freq="DAILY" ical:interval="1" ical:count="2"/>
      <ski:persons ski:diprole="conductor" rdf:value="Takao Kanayama"/>
      <ski:price ski:label="Far side" rdf:value="17USD"/>
      <ski:admission ski:qualtype="AGE" ski:qualrule="REQUIRED"
ski:qualvalue="gt 5" rdf:value=""/>
    </ical:Vevent>
  </ical:vevent>
</ical:Vcalendar>

... with appropriate trimming:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:ical="http://www.ietf.org/rfc/rfc2445.txt#"
	 xmlns:ski="http://www.skical.org/">
<ical:Vcalendar>
  <ical:vevent>
    <ical:Vevent>
      <ical:uid>e098h99@washingtonpost.com</ical:uid>
      <ski:euid>kj08988b@nationalchamberorch.org</ski:euid>
      <ical:categories>music</ical:categories>
      <ical:categories>concert</ical:categories>
      <ical:title>Messiah</ical:title>
      <ical:dtstart>19991217T200000</ical:dtstart>
      <ical:rrule ical:freq="DAILY" ical:interval="1" ical:count="2"/>
      <ski:persons ski:diprole="conductor" rdf:value="Takao Kanayama"/>
      <ski:price ski:label="Far side" rdf:value="17USD"/>
      <ski:admission ski:qualtype="AGE" ski:qualrule="REQUIRED"
ski:qualvalue="gt 5" rdf:value=""/>
    </ical:Vevent>
  </ical:vevent>
</ical:Vcalendar>
</rdf:RDF>

With everything expressed as arguments:

<ical:Vcalendar>
  <ical:vevent>
    <ical:Vevent>
      <ical:uid rdf:value="e098h99@washingtonpost.com"/>
      <ski:euid rdf:value="kj08988b@nationalchamberorch.org"/>
      <ical:categories rdf:value="music"/>
      <ical:categories rdf:value="concert"/>
      <ical:title rdf="Messiah"/>
      <ical:dtstart rdf:value="19991217T200000"/>
      <ical:rrule ical:freq="DAILY" ical:interval="1" ical:count="2"/>
      <ski:persons ski:diprole="conductor" rdf:value="Takao Kanayama"/>
      <ski:price ski:label="Far side" rdf:value="17USD"/>
      <ski:admission ski:qualtype="AGE" ski:qualrule="REQUIRED"
ski:qualvalue="gt 5" rdf:value=""/>
    </ical:Vevent>
  </ical:vevent>
</ical:Vcalendar>

All that without ever changing the structure.

As Tim wrote, one can continue the move to RDF which will make relationships
clearer
For example:

EUID is the URI which describes the VEVENT globally.  We can make it clear
that this is the resource which all properties are describing



(UID, on the other hand represents the local statements which are being
made.

this is not a shoe-in to do this in RDF, we would have to create a "bag of
statements"
which would receive the UID attribute. Maybe it would be more pragmatic to
make UID a parameter to VEVENT and leave the semantics up to the application


#0 --rdf:type--> ical:Vcalendar
#0 --ical:vevent--> kj08988b@nationalchamberorch.org
kj08988b@nationalchamberorch.org --rdf:type--> ski:Euid
kj08988b@nationalchamberorch.org --ical:categories--> 'music'
kj08988b@nationalchamberorch.org --ical:categories--> 'concert'
kj08988b@nationalchamberorch.org --ical:title--> 'Messiah'
kj08988b@nationalchamberorch.org --ical:dtstart--> '19991217T200000'
kj08988b@nationalchamberorch.org --ical:rrule--> #1
#1 --rdf:type--> ical:Rrule
#1 --ical:freq--> 'DAILY'
#1 --ical:interval--> '1'
#1 --ical:count--> '2'
kj08988b@nationalchamberorch.org --ski:persons--> #2
#2 --rdf:type--> ski:Persons
#2 --ski:diprole--> 'conductor'
#2 --rdf:value--> 'Takao Kanayama'
kj08988b@nationalchamberorch.org --ski:price--> #3
#3 --rdf:type--> ski:Price
#3 --ski:label--> 'Far side'
#3 --rdf:value--> '17USD'
kj08988b@nationalchamberorch.org --ski:admission--> #4
#4 --rdf:type--> ski:Admission
#4 --ski:qualtype--> 'AGE'
#4 --ski:qualrule--> 'REQUIRED'
#4 --ski:qualvalue--> 'gt 5'
#4 --rdf:value--> ''

<ical:Vcalendar>
  <ical:vevent>
    <ski:Euid rdf:about="kj08988b@nationalchamberorch.org">
      <ical:uid rdf:value="e098h99@washingtonpost.com"/>
      <ical:categories rdf:value="music"/>
      <ical:categories rdf:value="concert"/>
      <ical:title rdf="Messiah"/>
      <ical:dtstart rdf:value="19991217T200000"/>
      <ical:rrule ical:freq="DAILY" ical:interval="1" ical:count="2"/>
      <ski:persons ski:diprole="conductor" rdf:value="Takao Kanayama"/>
      <ski:price ski:label="Far side" rdf:value="17USD"/>
      <ski:admission ski:qualtype="AGE" ski:qualrule="REQUIRED"
ski:qualvalue="gt 5" rdf:value=""/>
    </ski:Euid>
  </ical:vevent>
</ical:Vcalendar>


The next step is to create an XML DTD - and you will be doing that for XML
and RDF at the same time.

The important thing as I see it is that there is a tie-in to the RDF
triples.  Changing the syntax is not a cardinal sin, but is it worth it?
Like this for example:



<ical:Vcalendar>
  <ical:vevent ski:Euid="kj08988b@nationalchamberorch.org">
    <ical:uid rdf:value="e098h99@washingtonpost.com"/>
    <ical:categories rdf:value="music"/>
    <ical:categories rdf:value="concert"/>
    <ical:title rdf="Messiah"/>
    <ical:dtstart rdf:value="19991217T200000"/>
    <ical:rrule ical:freq="DAILY" ical:interval="1" ical:count="2"/>
    <ski:persons ski:diprole="conductor" rdf:value="Takao Kanayama"/>
    <ski:price ski:label="Far side" rdf:value="17USD"/>
    <ski:admission ski:qualtype="AGE" ski:qualrule="REQUIRED"
ski:qualvalue="gt 5" rdf:value=""/>
  </ical:vevent>
</ical:Vcalendar>


In Greg's tutorials for SKiCal-XML he likes to do things like this:

WHICH
        WHEN
                WHERE
                        WHAT1
                                WHOW1
                WHERE
                        WHAT2
                                WHOW2


Even though this is not compatible with the current versions of neither iCal
or SKiCal,  even this can easily be represented with RDF though I can
imagine that a flatter structure which would leave the hierarchy up to the
application would be superior

 Jonas Liljegren  <jonas@rit.se>

Received on Friday, 25 August 2000 11:44:26 UTC