Ontology for self-describing networks S-TEN D2.1

Cover page
Table of contents
1 Introduction
2 Terminology
3 Physical things

4 Temporal part and time
5 Observation and measurement
6 Information
7 Physical quantity, property and scale
8 What is possible

A SensorML
B Weather station example
C PML
D Computer interpretable listing
Index

C PML

C.1 Introduction

This annex discusses PML Core Specification 1.0, Auto-ID Center Recommendation 15 September 2003 (http://xml.coverpages.org/PMLCoreSpec10.pdf).

The specification states:

The goal of the "Physical Markup Language" (PML) is to provide a collection of common, standardized vocabularies to represent and distribute information related to EPC Network enabled objects.

Radio Frequency Identification (RFID) is a technology used to identify, track and locate assets. The Electronic Product Code, (EPC), is a family of coding schemes for Gen 2 RFID tags. The EPC coding schemes were created by the MIT Auto-ID Center, a consortium of over 120 companies and universities. The EPC coding schemes are currently managed by EPCglobal, Inc., a subsidiary of GS1, creators of the UPC barcode.

The PML specification is admirably simple. The relationship between PML and the S-TEN ontology can be easily documented representing the examples within the PML standard as OWL using the S-TEN ontology.

C.2 Observe the presence of tags

Tag reader urn:epc:1:4.16.36 observes at 2002-11-06T13:04:34-06:00 that the set of tags within range is {urn:epc:1:2.24.400, urn:epc:1:2.24.400}.

The PML representation is as follows:

<pmlcore: Sensor>
 <pmluid:ID>urn:epc:1:4.16.36</pmluid:ID>
 <pmlcore:Observation>
  <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
  <pmlcore:Tag>
   <pmluid:ID>urn:epc:1:2.24.400</pmluid:ID>
  </pmlcore:Tag>
  <pmlcore:Tag>
   <pmluid:ID>urn:epc:1:2.24.400</pmluid:ID>
  </pmlcore:Tag>
 </pmlcore:Observation>
</pmlcore:Sensor>

The corresponding OWL representation is:

urn:epc:1:4.16.36   a  rfid:tag_reader .

urn:epc:1:2.24.400  a  rfid:tag .

urn:epc:1:2.24.401  a  rfid:tag .

[ a                  rfid:read_tag ;
  sten:performed_by  urn:epc:1:4.16.36 ;
  sten:during        [ sten:has_nominal_value
                          [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                     ]
]
  sten:has_result_graph
    { [ owl:oneOf
         ( [ sten:temporal_part_of urn:epc:1:2.24.400 ]
           [ sten:temporal_part_of urn:epc:1:2.24.401 ]
         )
      ]  =
      [ rfid:in_range_tag_set_of
           [ sten:temporal_part_of urn:epc:1:4.16.36 ]
    } .

NOTE 1 A set of tags must be defined explicitly in OWL, in order to assert that the tags in range are only urn:epc:1:2.24.400 and urn:epc:1:2.24.400.

NOTE 2 A computer system may know that a rfid:read_tag activity is more or less instantaneous, and can deduce the temporal part of the tag which is in range of the reader. Alternatively this can be stated explicitly in the result graph as follows:

    { [ owl:oneOf
         ( [ sten:temporal_part_of urn:epc:1:2.24.400  ;
             sten:during      [ sten:has_nominal_value
                                   [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ] ] ]
           [ sten:temporal_part_of urn:epc:1:2.24.401  ;
             sten:during      [ sten:has_nominal_value
                                   [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ] ] ]
         )
      ]  =
      [ rfid:in_range_tag_set_of
           [ sten:temporal_part_of urn:epc:1:4.16.36  ;
             sten:during      [ sten:has_nominal_value
                                   [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ] ] ]
    } .

C.3 Observe the presence of some tags

Tag reader urn:epc:1:4.16.36 observes at 2002-11-06T13:04:34-06:00 that the set of pallet tags within range is {urn:epc:1:2.24.400, urn:epc:1:2.24.400}. The observation has the ID "00000001".

The PML representation is as follows:

<pmlcore: Sensor>
 <pmluid:ID>urn:epc:1:4.16.36</pmluid:ID>
  <pmlcore:Observation>
  <pmluid:ID>00000001</pmluid:ID>
  <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
  <pmlcore:Command>READ_PALLET_TAGS_ONLY</pmlcore:Command>
  <pmlcore:Tag>
   <pmluid:ID>urn:epc:1:2.24.400</pmluid:ID>
  </pmlcore:Tag>
  <pmlcore:Tag>
   <pmluid:ID>urn:epc:1:2.24.401</pmluid:ID>
  </pmlcore:Tag>
  </pmlcore:Observation>
</pmlcore:Sensor>

The modification to the reading activity can be expressed in OWL as follows:

:00000001 a                  rfid:read_tag
          rfid:tag_filter    :pallet_tag ;
          sten:performed_by  urn:epc:1:4.16.36 .
          sten:during        [ sten:has_nominal_value
                                [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                             ] ;
          sten:has_result_graph
    { [ owl:oneOf
         ( [ sten:temporal_part_of urn:epc:1:2.24.400 ]
           [ sten:temporal_part_of urn:epc:1:2.24.401 ]
         )
      ]  =
      [ owl:intersectionOf
         ( [ rfid:in_range_tag_set_of
               [ sten:temporal_part_of urn:epc:1:4.16.36 ]
           :pallet_tag
         )
      ]
    } .

C.3 Text stored on a tag

Sensor tag urn:epc:1:124.162.37 observes something at 2002-11-06T13:04:34-06:00 and the result is the text "temp=22,24,25,22,22,23,22".

The PML representation is as follows:

<pmlcore:Sensor>
 <pmluid:ID>urn:epc:1:124.162.37</pmluid:ID>
 <pmlcore:Observation>
 <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
 <pmlcore:Data>
  <pmlcore:Text>temp=22,24,25,22,22,23,22</pmlcore:Text>
 </pmlcore:Data>
 </pmlcore:Observation>
</pmlcore:Sensor>

The corresponding OWL representation is:

urn:epc:1:124.162.37   a  rfid:sensor_tag .

[ a                  sten:observing_activity ;
  sten:performed_by  urn:epc:1:124.162.37 ;
  sten:during        [ sten:has_nominal_value
                          [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                     ]
]
  sten:gives_result_record
                     [ a                        sten:text_record ;
                       sten:has_content_literal "22,24,25,22,22,23,22" ] .

C.4 Binary data stored on a tag

Sensor tag urn:epc:1:124.162.37 observes something at 2002-11-06T13:04:34-06:00 and the result is the binary data "0FB8A0F5CB0F11000FB8A0F5CB0F11000FB8A0F5CB0F1100".

The PML representation is as follows:

<pmlcore:Sensor>
 <pmluid:ID>urn:epc:1:124.162.37</pmluid:ID>
 <pmlcore:Observation>
 <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
 <pmlcore:Data>
  <pmlcore:Binary>0FB8A0F5CB0F11000FB8A0F5CB0F11000FB8A0F5CB0F1100</pmlcore:Binary>
 </pmlcore:Data>
 </pmlcore:Observation>
</pmlcore:Sensor>

The corresponding OWL representation is:

urn:epc:1:124.162.37   a  rfid:sensor_tag .

[ a                  sten:observing_activity ;
  sten:performed_by  urn:epc:1:124.162.37 ;
  sten:during        [ sten:has_nominal_value
                          [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                     ]
]
  sten:gives_result_record
                     [ a                        sten:binary_record ;
                       sten:has_content_literal
                               "0FB8A0F5CB0F11000FB8A0F5CB0F11000FB8A0F5CB0F1100" ] .

C.5 Observtion stored on a tag

Sensor tag urn:epc:1:124.162.37 observes something at 2002-11-06T13:04:34-06:00 and the result is 5.3 degress Celsius.

The PML representation is as follows:

<pmlcore:Sensor>
 <pmluid:ID>urn:epc:1:124.162.37</pmluid:ID>
 <pmlcore:Observation>
 <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
 <pmlcore:Data>
  <pmlcore:XML>
   <TemperatureReading xmlns="http://sensor.example.org/">
    <Unit>Celsius</Unit>
    <Value>5.3</Value>
   </TemperatureReading>
  </pmlcore:XML>
 </pmlcore:Data>
 </pmlcore:Observation>
</pmlcore:Sensor>

S-TEN has a formal approach to physical quantities and properties, which is described in Physical quantity, property and scale. Using this approach, the corresponding OWL representation is:

urn:epc:1:124.162.37   a  rfid:sensor_tag .

[ a                  sten:observing_activity ;
  sten:performed_by  urn:epc:1:124.162.37 ;
  sten:during        [ sten:has_nominal_value
                          [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                     ]
]
  sten:has_result_graph
     { [ sten:temporal_part_of
          [ sten:observed_by
             [ sten:performed_by  urn:epc:1:124.162.37 ;
               sten:during        [ sten:has_nominal_value
                                      [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                                  ]
             ]
          ]
       ]
           iso31:has_temperature [ bipm:celsius  [basics:decimal "5.3" ] ]
      } .

C.6 Read data stored on a tag

Tag reader urn:epc:1:4.16.36 observes at 2002-11-06T13:04:34-06:00 that tag urn:epc:1:2.24.400 contains the data:

FamilyCode:12
ApplicationIdentifier:123
Block1:FFA0456F
Block2:00000000

The PML representation is as follows:

<pmlcore: Sensor>
 <pmluid:ID>urn:epc:1:4.16.36</pmluid:ID>
  <pmlcore:Observation>
  <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
  <pmlcore:Tag>
   <pmluid:ID>urn:epc:1:2.24.400</pmluid:ID>
   <pmlcore:Data>
    <pmlcore:XML>
     <EEPROM xmlns="http://sensor.example.org/">
      <FamilyCode>12</FamilyCode>
      <ApplicationIdentifier>123</ApplicationIdentifier>
      <Block1>FFA0456F</Block1>
      <Block2>00000000</Block2>
     </EEPROM>
    </pmlcore:XML>
   </pmlcore:Data>
  </pmlcore:Tag>
 </pmlcore:Observation>
</pmlcore:Sensor>

The corresponding OWL representation is:

urn:epc:1:4.16.36   a  rfid:tag_reader .

urn:epc:1:2.24.400  a  rfid:tag .

[ a                  rfid:read_tag ;
  sten:performed_by  urn:epc:1:4.16.36 ;
  sten:during        [ sten:has_nominal_value
                          [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                     ]
]
  sten:has_result_graph
    { [ temporal_part_of urn:epc:1:2.24.400 ]
                         :FamilyCode            "12"  ;
                         :ApplicationIdentifier "123" ;
                         :Block1                "FFA0456F" ;
                         :Block2                "00000000"
    } .

C.7 Read observation stored on a tag

Tag reader urn:epc:1:4.16.36 makes an observation with identifier "00000001" at 2002-11-06T13:04:34-06:00 that:

The PML representation is as follows:

<pmlcore:Sensor>
 <pmluid:ID>urn:epc:1:4.16.36</pmluid:ID>
 <pmlcore:Observation>
  <pmluid:ID>00000001</pmluid:ID>
  <pmlcore:DateTime>2002-11-06T13:04:34-06:00</pmlcore:DateTime>
  <pmlcore:Tag>
   <pmluid:ID>urn:epc:1:2.24.400</pmluid:ID>
   <pmlcore:Sensor>
    <pmluid:ID>urn:epc:1:12.8.128</pmluid:ID>
    <pmlcore:Observation>
     <pmlcore:DateTime>2002-11-06T11:00:00-06:00</pmlcore:DateTime>
     <pmlcore:Data>
      <pmlcore:XML>
       <TemperatureReading xmlns="http://sensor.example.org/">
        <Unit>Celsius</Unit>
        <Value>5.3</Value>
       </TemperatureReading>
      </pmlcore:XML>
     </pmlcore:Data>
    </pmlcore:Observation>
    <pmlcore:Observation>
     <pmlcore:DateTime>2002-11-06T12:00:00-06:00</pmlcore:DateTime>
     <pmlcore:Data>
      <pmlcore:XML>
       <TemperatureReading xmlns="http://sensor.example.org/">
        <Unit>Celsius</Unit>
        <Value>5.8</Value>
       </TemperatureReading>
      </pmlcore:XML>
     </pmlcore:Data>
    </pmlcore:Observation>
   </pmlcore:Sensor>
  </pmlcore:Tag>
 </pmlcore:Observation>
</pmlcore:Sensor>

The corresponding OWL representation is:

:00000001 a                  rfid:read_tag
          sten:performed_by  urn:epc:1:4.16.36 .
          sten:during        [ sten:has_nominal_value
                                [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                             ] ;
          sten:has_result_graph
    { urn:epc:1:2.24.400  a             rdid:tag .

      urn:epc:1:12.8.128  a             rfid:sensor_tag .

      urn:epc:1:2.24.400  sten:has_part urn:epc:1:12.8.128 .

      [ a                  sten:observing_activity ;
        sten:performed_by  urn:epc:1:12.8.128 ;
        sten:during        [ sten:has_nominal_value
                               [sten:utc_iso8601 "2002-11-06T11:00:00-06:00" ]
                           ]
      ]
      sten:has_result_graph
         { [ sten:temporal_part_of
              [ sten:observed_by
                 [ sten:performed_by  urn:epc:1:12.8.128 ;
                   sten:during        [ sten:has_nominal_value
                                          [sten:utc_iso8601 "2002-11-06T11:00:00-06:00" ]
                                      ]
                 ]
              ]
           ]
               iso31:has_temperature [ bipm:celsius  [basics:decimal "5.3" ] ]
         } .

      [ a                  sten:observing_activity ;
        sten:performed_by  urn:epc:1:12.8.128 ;
        sten:during        [ sten:has_nominal_value
                               [sten:utc_iso8601 "2002-11-06T12:00:00-06:00" ]
                           ]
      ]
      sten:has_result_graph
         { [ sten:temporal_part_of
              [ sten:observed_by
                 [ sten:performed_by  urn:epc:1:12.8.128 ;
                   sten:during        [ sten:has_nominal_value
                                          [sten:utc_iso8601 "2002-12-06T11:00:00-06:00" ]
                                      ]
                 ]
              ]
           ]
               iso31:has_temperature [ bipm:celsius  [basics:decimal "5.8" ] ]
         } .
    } .

OK, so this is a little complicated, but the objective is complicated too - a full provenance. The OWL records the observations, the activities which made the observations, and the activity which accessed the records of the observations. The OWL looks much simpler if the result graphs are given URLs as follows:

:00000001 a                  rfid:read_tag
          sten:performed_by  urn:epc:1:4.16.36 .
          sten:during        [ sten:has_nominal_value
                                [sten:utc_iso8601 "2002-11-06T13:04:34-06:00" ]
                             ] ;
          sten:has_result_graph http://www.s-ten.eu/data_00000001 .
      urn:epc:1:2.24.400  a             rfid:tag .

      urn:epc:1:12.8.128  a             rfid:sensor_tag .

      urn:epc:1:2.24.400  sten:has_part urn:epc:1:12.8.128 .

      [ a                  sten:observing_activity ;
        sten:performed_by  urn:epc:1:12.8.128 ;
        sten:during        [ sten:has_nominal_value
                               [sten:utc_iso8601 "2002-11-06T11:00:00-06:00" ]
                           ]
      ]
      sten:has_result_graph http://www.s-ten.eu/data_00000002 .

      [ a                  sten:observing_activity ;
        sten:performed_by  urn:epc:1:12.8.128 ;
        sten:during        [ sten:has_nominal_value
                               [sten:utc_iso8601 "2002-11-06T12:00:00-06:00" ]
                           ]
      ]
      sten:has_result_graph http://www.s-ten.eu/data_00000003 .
           [ sten:temporal_part_of
              [ sten:observed_by
                 [ sten:performed_by  urn:epc:1:12.8.128 ;
                   sten:during        [ sten:has_nominal_value
                                          [sten:utc_iso8601 "2002-11-06T11:00:00-06:00" ]
                                      ]
                 ]
              ]
           ]
               iso31:has_temperature [ bipm:celsius  [basics:decimal "5.3" ] ] .
           [ sten:temporal_part_of
              [ sten:observed_by
                 [ sten:performed_by  urn:epc:1:12.8.128 ;
                   sten:during        [ sten:has_nominal_value
                                          [sten:utc_iso8601 "2002-12-06T11:00:00-06:00" ]
                                      ]
                 ]
              ]
           ]
               iso31:has_temperature [ bipm:celsius  [basics:decimal "5.8" ] ] .

C.8 RFID extension to the S-TEN ontology

The examples in this annex rely upon an RFID extension to the S-TEN ontology, as follows:

C.8.1 tag_reader

OWL specification:

<owl:Class rdf:about="&rfid;tag_reader">
 <rdfs:subClassOf rdf:resource="&sten;observation_device"/>
</owl:Class>

C.8.2 tag

OWL specification:

<owl:Class rdf:about="&rfid;tag">
 <rdfs:subClassOf rdf:resource="&sten;information_carrier"/>
 <rdfs:subClassOf rdf:resource="&sten;physical_asset"/>
</owl:Class>

C.8.3 sensor_tag

OWL specification:

<owl:Class rdf:about="&rfid;sensor_tag">
 <rdfs:subClassOf rdf:resource="&rfid;tag"/>
 <rdfs:subClassOf rdf:resource="&sten;observation_device"/>
</owl:Class>

C.8.3 read_tag

OWL specification:

<owl:Class rdf:about="&rfid;read_tag">
 <rdfs:subClassOf rdf:resource="&sten;observing_activity"/>
</owl:Class>

C.8.4 in_range_tag_set_of

OWL specification:

<owl:ObjectProperty rdf:about="&rfid;in_range_tag_set_of">
 <rdfs:domain rdf:resource="&owl;Class"/>
 <rdfs:range>
  <owl:Restriction>
   <owl:onProperty rdf:resource="&sten;temporal_part_of"/>
   <owl:allValuesFrom rdf:resource="&rfid;tag_reader"/>
  </owl:Restriction>
 </rdfs:range>
</owl:ObjectProperty>

C.8.5 tag_filter

OWL specification:

<owl:ObjectProperty rdf:about="&rfid;tag_filter">
 <rdfs:domain rdf:resource="&rfid;read_tag"/>
 <rdfs:range>
  <owl:Restriction>
   <owl:onProperty rdf:resource="&rdfs;subClassOf"/>
   <owl:someValuesFrom rdf:resource="&rfid;tag"/>
  </owl:Restriction>
 </rdfs:range>
</owl:ObjectProperty>


© S-TEN Association e.V. — Public deliverable of the S-TEN project