Project

General

Profile

« Previous | Next » 

Revision 8849

View differences:

docs/user/metacat/source/semantic-annotation.rst
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
Example
150
_______
151

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

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

  
178
Queries
179
_______
180
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"). 
181
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 
182
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, 
183
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).
184

  
185

  
186

  
187
Extending the model
188
___________________
189

  
190
The proposed system for asserting and indexing annotations can easily be extended. For practical reasons, we do want to codify a preferred mechanism for expressing 
191
observation measurements and binding them to their data table attributes. But because the model is essentially just a collection of triples, and the mechanism that indexes those
192
triples is configured with custom SPARQL queries, we can accommodate additional statements about data objects and packages in the future.
193

  
194
One such semantic extension involves a provenance graph for derived data products. For detailed information on that endeavor, see the ore-model-expansion section.
195

  
196
Another area for extension uses ORCIDs to give attribution to the appropriate author/creator. This is expressed in the model using prov:wasAttributedTo and 
197
could be readily indexed into a dynamic SOLR field like ``creator_sm``. But until these ORCIDs are more widely adopted, it may be difficult to provide effective querying based on this field.
198
It would also require authors to actively assert that their ORCIDs are associated certain data packages and objects; perhaps using tools that we currently do not have implemented. 
199

  
200

  
201
Annotation serializations
202
______________________________
203

  
204
Our initial serialization technique for semantic annotations is to have a distinct file for the model. We have been using RDF/XML, but other syntaxes will likely be supported out of the box 
205
because we are using the Jena library for model parsing.
206

  
207
Other methods for serializing the model we have considered and may support in the future include:
208
	* ``ORE`` - included as additional triples in our current ORE resource map packaging serializations
209
	* ``RDFa`` - annotations embedded directly within the science metadata
210
	* ``triplestore`` - triples written directly to a triple store endpoint using an API
211
	
212

  
213
Annotation permissions
214
______________________________
215

  
216
Because annotations ussually assert facts (or opinions) about _other_ objects, we will allow these assertions to be indexed only if the rights holder for the RDF model has the same rightsholder
217
priveledges on the target object.
218
This will prevent both malicious and accidental assertions about objects by other parties who should not be influencing how the object is documented or interpreted. 
219
Unfortunately, this also prevents interested, non-rights holder parties from asserting valuable statements about research data in the system. 
220
Ideally, we will accommodate third-party annotations and expose them for use in discovery and integration so long as they are effectively labeled (e.g., "alternative annotaiton", "automated annotation", etc...).
221

  
222

  
223

  
224
Sample annotation using OWL
225
----------------------------
226
Serialization of the example model. Authored in and exported from Protege.
227

  
228
::
229

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

  
docs/user/metacat/source/development.rst
19 19
   doi
20 20
   statistics-service
21 21
   ore-model-expansion
22
   semantic-annotation
23 22
   
24 23

  

Also available in: Unified diff