Project

General

Profile

1
.. raw:: latex
2

    
3
  \newpage
4
  
5

    
6
Semantic Annotation proposal
7
===================================
8

    
9
.. index:: Semantic Annotation
10
.. index:: Open Annotation
11
.. index:: RDF
12
.. index:: OBOE
13

    
14

    
15
Author
16
  Ben Leinfelder
17

    
18
Date
19
  - May, 2014: Initial draft of semantic annotation model and indexing
20

    
21
Goal
22
  Describe the current state of semantic annotation model using OBOE and OA (Open Annotation) concepts
23

    
24
Summary 
25
  Years of semantic work on the semtools project has informed the current annotation model we are prosing for use in Metacat.
26
  The model will initially focus on annotating attribute information for characteristics (e.g., Temperature) and Standard (e.g., Celsius).
27
  The model will be indexed to support fast and simple queries using the existing SOLR index methods used for standard metadata descriptions.
28
  This annotation model uses the `OA ontology <http://www.openannotation.org/spec/core/>`_ to describe
29
  the annotation assertions about metadata resources and fragments. PROV, FOAF, DCTERMS, and OBOE concepts are also utilized.
30
  
31
Overview
32
---------------------------------------
33
The primary goal of this initial semantic annotation model is to support querying on measurement standard and characteristic information. 
34
The model also supports annotations that describe these observations with their entity context, but that will not be utilized in the first stage of deployment.
35

    
36
Ontology and Model
37
------------------
38
The `OA ontology <http://www.openannotation.org/spec/core/>`_ will be used to describe the following relationships:
39
  * Which concepts describe which resources and/or parts of resources 
40
  * Where in the structure of a resource a particular annotation applies
41
  * Who is credited with authoring an annotation.
42

    
43
The `PROV ontology <http://www.w3.org/TR/prov-overview/>`_ will be used to describe the following relationships:
44
  * Who is credited with generating a resource being annotated
45
  * Which resources are newer revisions of other resources
46

    
47
Existing ORE resource map relationships can be augmented in this model to provide more explicit linkage between the data files and the section of metadata that documents them.
48
These structural annotations can assist package consumers (human and machine) when interpreting data objects. Using fragment selectors with XML-based metadata associates
49
data resources with their entity and attribute descriptions in a way that existing DataONE ORE maps do not support.
50

    
51
.. figure:: images/annotation_model.png
52

    
53
   Figure 1. Diagram illustrating the annotation model for a sample data package
54
   
55
In an effort to illustrate as many features of the proposed model, the example makes the following assumptions:
56
  * the EML metadata package describes 1 data table file
57
  * the data table has 3 columns (patient, weight, height)
58
  * the EML package has been updated once with a new revision
59
  * the revised package has a revised annotation
60
  * there are 2 different users annotating the revised package
61

    
62

    
63
Important concepts used in the model:
64
   * `oa:hasBody <http://www.openannotation.org/spec/core/core.html#BodyTarget>`_ : The body contains the semantic concept that describes the target
65
   * `oa:hasTarget <http://www.openannotation.org/spec/core/core.html#BodyTarget>`_ : The target specifies the resource being annotated
66
   * `oa:hasSource <http://www.openannotation.org/spec/core/specific.html#SpecificAnnotations>`_ : Identifies the source of a target to which selectors can be applied.
67
   * `oa:hasSelector <http://www.openannotation.org/spec/core/specific.html#FragmentSelector>`_ : Specifies the part of a resource to which an annotation applies. An XPath FragmentSelector will commonly be used for annotating XML-based metadata resources
68
   * `oa:annotatedBy <http://www.openannotation.org/spec/core/core.html#Provenance>`_ : [subProperty of prov:wasAttributedTo] The object of the relationship is a resource that identifies the agent responsible for creating the Annotation. 
69

    
70
   * `oboe:Measurement <http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Measurement>`_ : The primary body of semantic annotations on attributes.
71
   * `oboe:ofCharacteristic <http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#ofCharacteristic>`_ : Specifies which Characteristic (subclass) is measured
72
   * `oboe:usesStandard <http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#usesStandard>`_ : Specifies in which Standard (Unit subclass) the measurement is recorded.
73
   
74

    
75
::
76

    
77

    
78
Model details
79
--------------
80
Using the ``weight`` column in our example data package, we can illustrate the annotation model's use of concepts from OBOE, OA, and PROV.
81
The primary entry point for the annotation is ``#ann.4.1`` and was asserted by Ben Leinfelder (foaf:name) , identified with his ORCID URI (oa:annotatedBy).
82
The body of the annotation (oa:hasBody) is comprised of an oboe:Measurement instance, ``#weight``, that measures ``Mass`` (oboe:ofCharacteristic) in ``Gram`` (oboe:usesStandard).
83
The target of the annotation (oa:hasTarget) points to the EML metadata resource (oa:hasSource) that documents the data table and selects a particular part of the metadata that describes 
84
the specific ``weight`` data attribute (oa:hasSelector). Because the EML metadata is serialized as XML, we can use an XPath oa:FragmentSelector to identify the data column being annotated.
85
Note that our XPath expression identifies ``weight`` as the second column in the first data table in the data package: #xpointer(/eml/dataSet/dataTable[1]/attributeList/attribute[2].
86

    
87
In order to bind the column annotation of the metadata to the physical data object (the three-column CSV file), we need to traverse the packaging model where an additional annotation expresses the relationship 
88
between the data and metadata objects. The annotation, ``#ann.1.1``, asserts that the Metadata file (#eml.1.1) describes (cito:documents) the data file (#data.1.1). More specifically, the annotation target specifies 
89
where in the EML the #data.1.1 object is described by using an oa:FragmentSelector with an XPath pointer to the first data file documented in the EML: #xpointer(/eml/dataSet/dataTable[1].
90

    
91
Note that the annotation model uses a slightly different model than the original ORE resource map model recommended by DataONE. While it is more complicated to include pointers to data documentation within the metadata,
92
we have found that the current ORE maps are not sufficiently descriptive on their own and any consumers must also consult the metadata to figure out which object is the csv, which is the pdf, which is the script, etc...
93
By incorporating the metadata pointer within the annotation model, we hope to be able to hanlde data packages that use manu different metadata serializations without having to write custom handlers for each formatId.
94

    
95
Indexing
96
--------
97
The Metacat Index component has been enhanced to parse semantic models provided as RDF. 
98
The general purpose RdfXmlSubprocessor can be used with SparqlFields to extract key concepts from any given model that is added to the Metacat MN document store.
99

    
100
The processor assumes that the identifier of the RDF document is the name of the graph being inserted into the triple store and provides that graph name to the query engine for substitution in any query syntax ($GRAPH_NAME).
101
The SPARQL requirements are that the solution[s] return the identifier (pid) of the object being annotated, and the index field being populated with the given value[s].
102
If multiple fields are to be extracted from the model for indexing, a distinct SPARQL query should be used for each field.
103

    
104
The query can (and is largely expected to) be constrained to the named graph that contains only that set of annotation triples. While the infrastructure can (and likely will) share the same triple store, 
105
we should not assume other models have been loaded when processing any given graph. This means that any solutions will rely on only the named graph being processed during indexing.
106

    
107
The SPARQL query used to determine the Characteristics measured in a dataset is shown below. Note that the query includes superclasses in the returned solutions so that 
108
the index returns a match for both general and specific criteria.
109

    
110
::
111

    
112
	PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
113
	PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
114
	PREFIX owl: <http://www.w3.org/2002/07/owl#> 
115
	PREFIX oboe-core: <http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#> 
116
	PREFIX oa: <http://www.w3.org/ns/oa#>
117
	PREFIX dcterms: <http://purl.org/dc/terms/>
118

    
119
	SELECT ?characteristic_sm ?pid
120
	FROM <$GRAPH_NAME>
121
	WHERE { 
122
			
123
			?measurement rdf:type oboe-core:Measurement .
124
			?measurement rdf:type ?restriction .
125
			?restriction owl:onProperty oboe-core:ofCharacteristic .
126
			?restriction owl:allValuesFrom ?characteristic .
127
			?characteristic rdfs:subClassOf+ ?characteristic_sm .
128
			?characteristic_sm rdfs:subClassOf oboe-core:Characteristic .
129
			
130
			?annotation oa:hasBody ?measurement .												
131
			?annotation oa:hasTarget ?target .
132
			?target oa:hasSource ?metadata .
133
			?metadata dcterms:identifier ?pid . 
134
			
135
	 	}
136
	
137
::
138

    
139
Index Fields 
140
_________________
141

    
142
Currently, these dynamic, multi-valued string fields allow us to index the new semantic content without changing the SOLR schema. 
143
They are multi-valued because they will store the entire class subsumption hierarchy (up) for any matching concepts
144
and because they will store annotations from the same metadata resources for different attributes.
145
	* ``characteristic_sm`` - indexes the oboe:Characteristic[s] for oboe:Measurement[s] in the datapackage
146
	* ``standard_sm`` - indexes the oboe:Standard[s] for oboe:Measurement[s] in the datapackage
147

    
148

    
149
	
150
Example
151
_______
152

    
153
Continuing with example model, these concepts would be indexed for the data attributes described in the datapackage metadata.
154

    
155
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
156
| Object                    |  Field Name       | Field Type          |                                                Value                                |
157
+===========================+===================+=====================+=====================================================================================+
158
| eml.1.1   			    | characteristic_sm | string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Characteristic                |
159
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
160
| eml.1.1   			    | characteristic_sm | string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#PhysicalCharacteristic        |
161
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
162
| eml.1.1   			    | characteristic_sm | string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-characteristics.owl#Mass               |
163
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
164
| eml.1.1 				    | characteristic_sm | string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-characteristics.owl#Length             |
165
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
166
| eml.1.1   			    | characteristic_sm | string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Name					        |
167
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
168
| eml.1.1   			    | standard_sm		| string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Standard 		                |
169
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
170
| eml.1.1   			    | standard_sm		| string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Unit			                |
171
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
172
| eml.1.1   			    | standard_sm		| string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#BaseUnit		                |
173
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
174
| eml.1.1   			    | standard_sm		| string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-standards.owl#Gram 	                |
175
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
176
| eml.1.1   			    | standard_sm		| string, multivalued | http://ecoinformatics.org/oboe/oboe.1.0/oboe-standards.owl#Meter 	                |
177
+---------------------------+-------------------+---------------------+-------------------------------------------------------------------------------------+
178

    
179
Queries
180
_______
181
These indexed fields will be used primarily by MetacatUI to enhance discovery - both in terms of recall (concept hierarchies are exploited) and precision (concepts like Mass, do not result in false-positives for "Massachusetts"). 
182
As more aspects of the annotation model (e.g., observation Entity) are included in the index, the queries can incorporate them for greater query precision. Unfortunately, the flat nature of the SOLR index will prevent us from 
183
constructing queries that take full advantage of the underlying semantic annotation. We can filter results so that only those that measured Length Characteristics and Tree Entities, 
184
but not that we measured the Length of the Tree (it may be that we actually measured the Length of the bird in the tree).
185

    
186

    
187
Sample annotation using OWL
188
----------------------------
189
Serialization of the example model. Authored in and exported from Protege.
190

    
191
::
192

    
193
	<?xml version="1.0"?>
194
	
195
	<!DOCTYPE rdf:RDF [
196
	    <!ENTITY oa "http://www.w3.org/ns/oa#" >
197
	    <!ENTITY terms "http://purl.org/dc/terms/" >
198
	    <!ENTITY foaf "http://xmlns.com/foaf/0.1/" >
199
	    <!ENTITY prov "http://www.w3.org/ns/prov#" >
200
	    <!ENTITY cito "http://purl.org/spar/cito/" >
201
	    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
202
	    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
203
	    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
204
	    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
205
	]>
206
	
207
	
208
	<rdf:RDF xmlns="file:///Users/leinfelder/ontologies/brl/oa_sample.owl#"
209
	     xml:base="file:///Users/leinfelder/ontologies/brl/oa_sample.owl"
210
	     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
211
	     xmlns:prov="http://www.w3.org/ns/prov#"
212
	     xmlns:foaf="http://xmlns.com/foaf/0.1/"
213
	     xmlns:oa="http://www.w3.org/ns/oa#"
214
	     xmlns:cito="http://purl.org/spar/cito/"
215
	     xmlns:terms="http://purl.org/dc/terms/"
216
	     xmlns:owl="http://www.w3.org/2002/07/owl#"
217
	     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
218
	     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
219
	    <owl:Ontology rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl">
220
	        <owl:imports rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe.owl"/>
221
	        <owl:imports rdf:resource="http://purl.org/NET/dc_owl2dl/terms_od"/>
222
	        <owl:imports rdf:resource="http://purl.org/spar/cito/"/>
223
	        <owl:imports rdf:resource="http://www.w3.org/ns/oa#"/>
224
	        <owl:imports rdf:resource="http://www.w3.org/ns/prov#"/>
225
	        <owl:imports rdf:resource="http://xmlns.com/foaf/0.1/"/>
226
	    </owl:Ontology>
227
	    
228
	
229
	    <!-- 
230
	    ///////////////////////////////////////////////////////////////////////////////////////
231
	    //
232
	    // Individuals
233
	    //
234
	    ///////////////////////////////////////////////////////////////////////////////////////
235
	     -->
236
	
237
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder -->
238
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder">
239
	        <rdf:type rdf:resource="&prov;Person"/>
240
	        <foaf:name rdf:datatype="&xsd;string">Benjamin River Leinfelder</foaf:name>
241
	    </owl:NamedIndividual>
242
	    
243
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#MattJones -->
244
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#MattJones">
245
	        <rdf:type rdf:resource="&prov;Person"/>
246
	        <foaf:name rdf:datatype="&xsd;string">Matthew Bently Jones</foaf:name>
247
	    </owl:NamedIndividual>
248
	    
249
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.1.1 -->
250
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.1.1">
251
	        <rdf:type rdf:resource="&oa;Annotation"/>
252
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:b1"/>
253
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t1"/>
254
	    </owl:NamedIndividual>
255
	
256
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.2.1 -->
257
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.2.1">
258
	        <rdf:type rdf:resource="&oa;Annotation"/>
259
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:b1"/>
260
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t2"/>
261
	    </owl:NamedIndividual>
262
	
263
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.3.1 -->
264
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.3.1">
265
	        <rdf:type rdf:resource="&oa;Annotation"/>
266
	        <oa:annotatedBy rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder"/>
267
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#patient"/>
268
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t3"/>
269
	    </owl:NamedIndividual>
270
	  
271
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.4.1 -->
272
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.4.1">
273
	        <rdf:type rdf:resource="&oa;Annotation"/>
274
	        <oa:annotatedBy rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder"/>
275
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t4"/>
276
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#weight"/>
277
	    </owl:NamedIndividual>
278
	
279
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.5.1 -->
280
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.5.1">
281
	        <rdf:type rdf:resource="&oa;Annotation"/>
282
	        <oa:annotatedBy rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder"/>
283
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#height"/>
284
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t4"/>
285
	    </owl:NamedIndividual>
286
	    
287
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.6.1 -->
288
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.6.1">
289
	        <rdf:type rdf:resource="&oa;Annotation"/>
290
	        <oa:annotatedBy rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder"/>
291
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:rev"/>
292
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t6"/>
293
	    </owl:NamedIndividual>
294
	
295
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.7.1 -->
296
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#ann.7.1">
297
	        <rdf:type rdf:resource="&oa;Annotation"/>
298
	        <oa:annotatedBy rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#MattJones"/>
299
	        <oa:hasBody rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:alt"/>
300
	        <oa:hasTarget rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t7"/>
301
	    </owl:NamedIndividual>
302
	    
303
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#data.1.1 -->
304
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#data.1.1">
305
	        <rdf:type rdf:resource="&prov;Entity"/>
306
	        <terms:identifier rdf:datatype="&xsd;string">doi:10.1234/data.1.1</terms:identifier>
307
	    </owl:NamedIndividual>
308
	    
309
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1 -->
310
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1">
311
	        <rdf:type rdf:resource="&prov;Entity"/>
312
	        <terms:identifier rdf:datatype="&xsd;string">doi:10.12345/eml.1.1</terms:identifier>
313
	        <prov:wasAttributedTo rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#BenLeinfelder"/>
314
	    </owl:NamedIndividual>
315
	
316
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.2.1 -->
317
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.2.1">
318
	        <rdf:type rdf:resource="&prov;Entity"/>
319
	        <terms:identifier rdf:datatype="&xsd;string">doi:10.12345/eml.2.1</terms:identifier>
320
	        <prov:wasRevisionOf rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1"/>
321
	    </owl:NamedIndividual>
322
	 
323
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#height -->
324
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#height">
325
	        <rdf:type rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Measurement"/>
326
	        <rdf:type>
327
	            <owl:Restriction>
328
	                <owl:onProperty rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#usesStandard"/>
329
	                <owl:allValuesFrom rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-standards.owl#Meter"/>
330
	            </owl:Restriction>
331
	        </rdf:type>
332
	        <rdf:type>
333
	            <owl:Restriction>
334
	                <owl:onProperty rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#ofCharacteristic"/>
335
	                <owl:allValuesFrom rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-characteristics.owl#Length"/>
336
	            </owl:Restriction>
337
	        </rdf:type>
338
	    </owl:NamedIndividual>
339
	
340
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#patient -->
341
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#patient">
342
	        <rdf:type rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Measurement"/>
343
	        <rdf:type>
344
	            <owl:Restriction>
345
	                <owl:onProperty rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#ofCharacteristic"/>
346
	                <owl:allValuesFrom rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Name"/>
347
	            </owl:Restriction>
348
	        </rdf:type>
349
	    </owl:NamedIndividual>
350
	
351
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:alt -->
352
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:alt">
353
	        <rdf:type rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#Body"/>
354
	    </owl:NamedIndividual>
355
	
356
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:b1 -->
357
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:b1">
358
	        <rdf:type rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#Body"/>
359
	        <cito:documents rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#data.1.1"/>
360
	    </owl:NamedIndividual>
361
	   
362
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:rev -->
363
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:rev">
364
	        <rdf:type rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#Body"/>
365
	    </owl:NamedIndividual>
366
	
367
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t1 -->
368
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t1">
369
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
370
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1"/>
371
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1)"/>
372
	    </owl:NamedIndividual>
373
	   
374
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t2 -->
375
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t2">
376
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
377
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.2.1"/>
378
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1)"/>
379
	    </owl:NamedIndividual>
380
	    
381
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t3 -->
382
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t3">
383
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
384
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1"/>
385
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/1)"/>
386
	    </owl:NamedIndividual>
387
	
388
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t4 -->
389
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t4">
390
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
391
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1"/>
392
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/2)"/>
393
	    </owl:NamedIndividual>
394
	
395
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t5 -->
396
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t5">
397
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
398
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.1.1"/>
399
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/3)"/>
400
	    </owl:NamedIndividual>
401
	
402
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t6 -->
403
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t6">
404
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
405
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.2.1"/>
406
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/1)"/>
407
	    </owl:NamedIndividual>
408
	
409
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t7 -->
410
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#urn:t7">
411
	        <rdf:type rdf:resource="&oa;SpecificResource"/>
412
	        <oa:hasSource rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#eml.2.1"/>
413
	        <oa:hasSelector rdf:resource="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/1)"/>
414
	    </owl:NamedIndividual>
415
	   
416
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#weight -->
417
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#weight">
418
	        <rdf:type rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#Measurement"/>
419
	        <rdf:type>
420
	            <owl:Restriction>
421
	                <owl:onProperty rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#ofCharacteristic"/>
422
	                <owl:allValuesFrom rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-characteristics.owl#Mass"/>
423
	            </owl:Restriction>
424
	        </rdf:type>
425
	        <rdf:type>
426
	            <owl:Restriction>
427
	                <owl:onProperty rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-core.owl#usesStandard"/>
428
	                <owl:allValuesFrom rdf:resource="http://ecoinformatics.org/oboe/oboe.1.0/oboe-standards.owl#Gram"/>
429
	            </owl:Restriction>
430
	        </rdf:type>
431
	    </owl:NamedIndividual>
432
	
433
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1) -->
434
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1)">
435
	        <rdf:type rdf:resource="&oa;FragmentSelector"/>
436
	    </owl:NamedIndividual>
437
	    
438
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/1) -->
439
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/1)">
440
	        <rdf:type rdf:resource="&oa;FragmentSelector"/>
441
	    </owl:NamedIndividual>
442
	
443
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/2) -->
444
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/2)">
445
	        <rdf:type rdf:resource="&oa;FragmentSelector"/>
446
	    </owl:NamedIndividual>
447
	
448
	    <!-- https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/3) -->
449
	    <owl:NamedIndividual rdf:about="https://code.ecoinformatics.org/code/semtools/trunk/docs/design/dataone/oa_sample.owl#xpointer(/eml/dataSet/1/attributeList/3)">
450
	        <rdf:type rdf:resource="&oa;FragmentSelector"/>
451
	    </owl:NamedIndividual>
452
	</rdf:RDF>
453
	
454
	<!-- Generated by the OWL API (version 3.4.2) http://owlapi.sourceforge.net -->
455
	
456
  
457

    
(22-22/26)