-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
240 lines (232 loc) · 10.9 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Multidimensional Linked Data Interfaces</title>
<script src='//www.w3.org/Tools/respec/respec-w3c-common' async class='remove'></script>
<script class='remove'>
var respecConfig = {
specStatus: "unofficial",
shortName: "multidimensional-interface",
subtitle: "A Linked Data interface for exposing fragmented ordinal data.",
copyrightStart: "2016",
editors: [{
name: "Ruben Taelman",
url: "http://www.rubensworks.net",
mailto: "[email protected]",
company: "Ghent University - iMinds - Data Science Lab",
companyURL: "http://www.iminds.be/"
}],
processVersion: 2015,
edDraftURI: "http://w3id.org/multidimensional-interface/spec",
shortName: "mdi"
};
</script>
<style>
body { max-width: 900px; margin: 0 auto; }
dd ul { margin: 0 0 .5em; }
dl.triple dt { float: left; clear: left; width: 6em; }
</style>
</head>
<body>
<section id='abstract'>
<p>
Different Linked Data interfaces to expose data with various fragmentation strategies exist.
<a href="#bib-SPARQL">SPARQL</a> [[sparql11-update]] endpoints, for example, offer highly selective access to data,
while a datadump offers no fragmentation.
This document specifies a <em>Multidimensional Linked Data</em> interface,
through which ordinal data can be consumed that is fragmented in a certain way.
Clients can consume this by navigating through an interface-level index to select their desired data.
</p>
</section>
<section id="introduction" class="informative">
<h2>Introduction</h2>
<section>
<h3>Aim, scope, and intended audience</h3>
<p>
The goal of a <em>Multidimensional Interface</em> is to provide efficient selective access to ordinal Linked Data.
</p>
<p>
This document defines the <em>Multidimensional Interface</em>, which is a collection of interfaces
that clients can use to navigate through multidimensional ordinal Linked Data.
</p>
<p>
This document is intented for people who want to implement a Multidimensional Interface on a server,
who want to implement a client that is able to consume such an interface, or for those who want to understand
how these servers and clients work.
</p>
</section>
<section>
<h3>Document conventions</h3>
<p>
We write triples in this document
in the <a href="http://www.w3.org/TeamSubmission/turtle/">Turtle RDF syntax</a> [[!TURTLE]]
using the following namespace prefixes:
</p>
<pre><code>PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX mdi: <http://w3id.org/multidimensional-interface/ontology#>
</code></pre>
</section>
</section>
<section id="conformance">
</section>
<section>
<h2>Document type</h2>
<section class="informative">
<h2>Overview</h2>
<p>
<a href="#bib-LINKED-DATA">Linked Data</a> [[LINKED-DATA]] can be exposed on the Web through different kinds of interfaces.
Some of these interfaces are more expressive than others.
A <a href="#bib-sparql11-update">SPARQL</a> interface for example is more expressive than a Linked Data dump because
a client can be more selective in its queries.
</p>
<p>
<a href="http://www.hydra-cg.com/spec/latest/linked-data-fragments/">Linked Data Fragments</a> [[!HYDRA-LDF]] is a framework
that provides a uniform view on all possible interfaces to publish Linked Data.
This framework defines the concept of a <em>Linked Data Fragment</em> of a <em>Linked Data dataset</em>,
which is a set of triples that consists of the following parts:
</p>
<dl>
<dt>data</dt>
<dd>
all triples of this dataset that match a specific selector;
</dd>
<dt>metadata</dt>
<dd>
triples that describe the dataset and/or the Linked Data Fragment;
</dd>
<dt>controls</dt>
<dd>
hypermedia links and/or forms that lead to other Linked Data Fragments.
</dd>
</dl>
<p>
When we are publishing <em>n-dimensional ordinal data</em> that contains numbers, dates, geospatial locations or even genomic ranges,
we may want to enable clients to select data by an n-dimensional range, in order to make their queries more selective.
</p>
<p>
A Multidimensional Interface is a collection of structured interfaces through which clients can navigate to find certain subsets
of ordinal data based on certain multidimensional ranges.
</p>
</section>
<section>
<h2>Definition</h2>
<p>
A <em>Multidimensional Interface</em> can be defined over <dfn>n-dimensional resources</dfn>,
which are <a href="#bib-RDF">RDF</a> resources with n properties whose ranges are strict linearly ordered sets.
</p>
<p>
A <dfn>Multidimensional Interface</dfn> on a given dataset is a collection of interfaces containing the following elements:
</p>
<dl>
<dt>Range Fragment</dt>
<dd>
A Linked Data Fragment that has an interval as selector, which apply to dimensional resources at one of its n dimensions.
</dd>
<dt>Range Gate</dt>
<dd>
A Linked Data interface on which a client can find out how to select a certain Range Fragment by interval.
</dd>
<dt>Range Interval</dt>
<dd>
The selected interval has a lower (incl) and an upper bound (excl) <pre>[X,Y[</pre> which describe a Range Fragment
</dd>
<dt>hypermedia controls</dt>
<dd>
A Range Gate MUST contain hypermedia controls
that allow to retrieve Range Fragments of the given dataset.
This MUST either be provided as a form
that allows to choose the initial and final elements of the selector's interval.
</dd>
<dd>
A Range Gate MAY contain additional hypermedia controls.
The IRIs of data, metadata, and control triples entities SHOULD be dereferenceable.
</dd>
<dd>
A Range Fragment MAY contain hypermedia links to more selective Range Gates on that fragmented subset of the original dataset.
</dd>
</dl>
<p>
A Range Fragment of a dataset is fully determined and identified by its <em>triple pattern selector</em> and <dfn>interval selector</dfn>.
This interval selector consists of two components <code>initial</code> and <code>final</code> which form a interval.
The <code>initial</code> MUST either be a variable, an ordinal literal or an ordinal IRI;
the <code>final</code> MUST either be a variable, an ordinal literal or an ordinal IRI;
These components MUST NOT be blank nodes.
</p>
<p>
The above constraints define the document type of a Multidimensional Interface.
The following sections <a href="#range-fragment"></a> and <a href="#range-gate"></a> explain this in more detail.
</p>
<p>
Multidimensional Interfaces are not bound to a specific syntax because different methods can be used to represent its data, metadata, and controls.
The server MUST, however, support at least one RDF-based representation that MUST allow for triples to be represented.
For allowing clients to correctly parse requests Multidimensional Interfaces, servers MUST indicate the correct MIME type when sending responses.
</p>
</section>
<section id="range-fragment">
<h3>Range Fragment</h3>
<p>
A Range Fragment is a Linked Data Fragment of a dataset.
This fragment is defined by a certain interval and a dimensional resource over which the interval is defined.
This fragmentation is done for exactly one dimension of the dimensional resource over which the Range Fragment is defined.
</p>
<p>
The dimensional resource type <em>GPS position</em> could be fragmented by <em>longitude</em> and can therefore have several
Range Fragments which consist of all dimensional resources that are within a certain longitudal range.
</p>
<p>
A Range Fragment MAY define a link to a more selective Range Gate as given in the following example:
</p>
<pre><code><http://example.org/range-fragment-0-100>
mdi:hasRangeGate <http://example.org/range-fragment-0-100/range-gate>.</code></pre>
<p>
Such a more selective Range Gate starts from the given Range Fragment as the datasource,
and allows further fragmentation of that datasource.
</p>
</section>
<section id="range-gate">
<h3>Range Gate</h3>
<p>
A Range Gate is a Linked Data Fragment that exposes Range Fragments.
</p>
<p>
Each Range Fragment described in this Range Gate MUST define the following metadata:
<ul>
<li>a <em>rdf:type</em> mdi:RangeFragment,
<li>an <em>mdi:initial</em> describing the lower bound of the interval, including this value, and
<li>an <em>mdi:final</em> describing the upper bound of the interval, excluding this value.
</ul>
</p>
<p>
As given in this example: <br/>
<pre><code><http://example.org/range-fragment-0-100>
a mdi:RangeFragment;
mdi:initial "0"^^xsd:integer;
mdi:final "100"^^xsd:integer.</code></pre>
</p>
<p>
The Range Gate MAY provide a control to select Range Fragments by providing an interval.
This Range Gate control, if provided, MUST be expressed as a form in the
<a href="http://www.hydra-cg.com/spec/latest/core/">Hydra Core Vocabulary</a> [[!HYDRA-CORE]]
using triples in the controls graph.
</p>
<pre><code><http://example.org/range-gate>
a mdi:RangeGate;
hydra:search [
hydra:template "http://example.org/range-gate{?initial,final}";
hydra:mapping [ hydra:variable "initial"; hydra:property mdi:initial ],
[ hydra:variable "final" ; hydra:property mdi:final ]
].</code></pre>
<p>
The interval selector is used to lookup all Range Fragments that overlap or are within with the selected interval.
The selected interval must be interpreted as starting from initial, including initial up until final, excluding final.
</p>
<p class="note">
Not providing the initial or final parameter, means that search interval has no limit for that element.
If we for example only provide initial and omit final, the Range Gate MUST provide all elements starting from initial.
If we only provide final and omit initial, the Range Gate MUST provide all elements until initial.
</section>
</section>
</section>
</body>
</html>