GEO and geo vocabulary

In iCalendar spec, the value of GEO is defined as MUST be two SEMICOLON separated FLOAT values. An example:

GEO:40.442673;-79.945815

On the other hand, the definition of ical:geo in RDFical schema (as of v.1.12 dated 2004-03-25T04:07:30) is owl:ObjectProperty, thus it should have a resource as its value, rather than a data values (though it's possible for ObjectProperty to have data value in OWL Full...).

<rdf:Description rdf:ID="geo">
  <rdfs:label>GEO</rdfs:label>
  <rdfs:comment>This property specifies information related to 
  the global position for the activity specified 
  by a calendar component.</rdfs:comment>
  <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
  <rdfs:domain>
    <owl:Class rdf:nodeID="DomainOf_geo">
      <owl:unionOf rdf:parseType="Collection">
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vevent"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vtodo"/>
      </owl:unionOf>
    </owl:Class>
  </rdfs:domain>
</rdf:Description>

According to this definition, it seems appropriate to put Geo vocabulary (e.g. geo:lat and geo:long) in ical:geo.

<ical:geo rdf:parseType="Resource">
 <geo:lat>40.442673</geo:lat>
 <geo:long>-79.945815</geo:long>
</ical:geo>

Note: Dan Connolly said it was a bug that ical:geo was defined as owl:ObjectProperty. See discussion at IRC meeting on 2004-04-07.

LOCATION and GEO

Since both LOCATION and GEO describe the place where an event occurs, it seems desirable to associate them in some ways, or put both label (location) and geographical coodinates (lat/long) in one resource which corresponds to the place, something like:

<ical:location rdf:parseType='Resource'>
 <rdfs:label>New York, Sheraton Hotel</rdfs:label>
 <geo:lat>40.442673</geo:lat>
 <geo:long>-79.945815</geo:long>
</ical:location>

However, the above is not possible because ical:loacation is defined as owl:DatatypeProperty, and has Vevent or Vtodo as its domain (as of v.1.12 dated 2004-03-25T04:07:30).

<rdf:Description rdf:ID="location">
  <rdfs:label>LOCATION</rdfs:label>
  <rdfs:comment>The property defines the intended venue for 
  the activity defined by a calendar component.</rdfs:comment>
  <rdfs:comment>value type: TEXT</rdfs:comment>
  <spec:valueType>TEXT</spec:valueType>
  <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
  <rdfs:range>
    <rdfs:Datatype rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="http://www.w3.org/2001/XMLSchema#string"/>
  </rdfs:range>
  <rdfs:domain>
    <owl:Class rdf:nodeID="DomainOf_location">
      <owl:unionOf rdf:parseType="Collection">
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vevent"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vtodo"/>
      </owl:unionOf>
    </owl:Class>
  </rdfs:domain>
</rdf:Description>

Dan Connolly suggested the possible use of cyc:eventOccursAt for this sort of structured description of the place:

<cyc:eventOccursAt rdf:parseType='Resource'>
 <cyc:nameString>New York, Sheraton Hotel</cyc:nameString>
 <geo:lat>40.442673</geo:lat>
 <geo:long>-79.945815</geo:long>
</cyc:eventOccursAt>

This is good if we forget about ical:geo and ical:location. If we stick to ical terms, we should use these properties independently:

<ical:location>New York, Sheraton Hotel</ical:location>
<ical:geo rdf:parseType="Resource">
 <geo:lat>40.442673</geo:lat>
 <geo:long>-79.945815</geo:long>
</ical:geo>

ATTENDEE and FoaF

FOAF is a good candidate to describe persons who attend the event. There have been some discussions on including FOAF terms in RDFical, namely ical:attendee:

<ical:attendee rdf:parseType='Resource'>
 <ical:calAddress rdf:resource="mailto:libby.miller@..."/>
 <foaf:mbox_sha1sum>289d4d44325...</foaf:mbox_sha1sum>
</attendee>

or, more explicitly:

<ical:attendee>
 <foaf:Person>
  <ical:calAddress rdf:resource="mailto:libby.miller@..."/>
  <foaf:mbox_sha1sum>289d4d44325...</foaf:mbox_sha1sum>
 </foaf:Person>
</ical:attendee>

Looks nice, but it's not clear whether this is allowed in current schema which defines the range of ical:attendee as #Value_CAL-ADDRESS (as of v.1.12 dated 2004-03-25T04:07:30).

<rdf:Description rdf:ID="attendee">
  <rdfs:label>ATTENDEE</rdfs:label>
  <rdfs:comment>The property defines an "Attendee" within a calendar 
  component.</rdfs:comment>
  <rdfs:comment>value type: CAL-ADDRESS</rdfs:comment>
  <spec:valueType>CAL-ADDRESS</spec:valueType>
  <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
  <rdfs:range>
    <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Value_CAL-ADDRESS"/>
  </rdfs:range>
  <rdfs:domain>
    <owl:Class rdf:nodeID="DomainOf_attendee">
      <owl:unionOf rdf:parseType="Collection">
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Valarm"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vevent"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vtodo"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vjournal"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Vfreebusy"/>
        <owl:Class rdf:itemscope="" itemtype="http://schema.org/Thing" itemid="#Valarm"/>
      </owl:unionOf>
    </owl:Class>
  </rdfs:domain>
</rdf:Description>

ical:Value_CAL-ADDRESS is not explicitly defined in the schema, thus it might be OK to consider a resource of rdf:type foaf:Person can also be rdf:type ical:Value_CAL-ADDRESS, not sure ...

Pointers to more discussions and examples