| Ontology for self-describing networks | S-TEN D2.1 |
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.
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" ] ] ]
} .
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
)
]
} .
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" ] .
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" ] .
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" ] ]
} .
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"
} .
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" ] ] .
The examples in this annex rely upon an RFID extension to the S-TEN ontology, as follows:
OWL specification:
<owl:Class rdf:about="&rfid;tag_reader"> <rdfs:subClassOf rdf:resource="&sten;observation_device"/> </owl:Class>
OWL specification:
<owl:Class rdf:about="&rfid;tag"> <rdfs:subClassOf rdf:resource="&sten;information_carrier"/> <rdfs:subClassOf rdf:resource="&sten;physical_asset"/> </owl:Class>
OWL specification:
<owl:Class rdf:about="&rfid;sensor_tag"> <rdfs:subClassOf rdf:resource="&rfid;tag"/> <rdfs:subClassOf rdf:resource="&sten;observation_device"/> </owl:Class>
OWL specification:
<owl:Class rdf:about="&rfid;read_tag"> <rdfs:subClassOf rdf:resource="&sten;observing_activity"/> </owl:Class>
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>
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