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 |
|
|
remove semantic annotation proposal - moved to github: https://github.com/DataONEorg/sem-prov-design/blob/master/docs/use-cases/semantics/semantic-annotation.md