Skip to content
This repository was archived by the owner on Oct 2, 2025. It is now read-only.

Commit 823a105

Browse files
committed
Add changes for 4f3ea9d
1 parent ca5e414 commit 823a105

3 files changed

Lines changed: 245 additions & 3 deletions

File tree

_sources/technical_decisions/extended_age_query.md.txt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@ The Extended Age Query (EAQ) feature enhances query capabilities for **Collectio
1818
- **Highest** `StartPeriod` across relevant nodes
1919
Because MYA increases into the past, higher StartPeriod means older boundary.
2020

21+
- **Strictness in Range Calculations**
22+
- an age query start period `x`
23+
- an age query end period `y`
24+
- with constraint that `x >= y`
25+
- for each collection object, a meta start period `a` is decided, and a meta end period `b` is decided.
26+
- with constraint that `a >= b`
27+
28+
Strict Filter: (full overlap, a-b is within x-y)
29+
`a <= x` and `b >= y`
30+
31+
Non-Strict Filter: (partial age range overlap, any overlap so x-y can be within a-b or a-b can be within x-y)
32+
(` a<= x` and `a >= y`) or (`b <= x` and `b >= y`) or (`a >= x` and `b <= y`)
33+
34+
This is omitting the complication of uncertainty values.
35+
The meta age range for each collection object should appear in the age column of the query results.
36+
The "Any" age query bug is being push to a later issue. For now, do a Age Range query from "13800" to "0" to get all COs with age data (query all of time, the age of the universe
37+
2138
## User Interface & Workflow
2239

2340
1. **Add Age Field**
@@ -43,9 +60,42 @@ EAQ applies to the following age contexts within Collection Objects:
4360

4461
- **Absolute Age**
4562
Computes a range using: AbsoluteAge + AgeUncertainty to AbsoluteAge – AgeUncertainty
63+
4664
- **Paleo Context**
4765
Bound by `ChronosStratID` (and optionally `ChronosStratEndID`). The system determines the widest combined range across both IDs using start/end values.
4866

67+
**Table paths from CollectionObject to Absoluteage or GeologicTimePeriod**
68+
69+
| table_path_1 | table_path_2 | table_path_3 | table_path_4 | table_path_5 |
70+
|------------------|-----------------|---------------|-----------------|-------------------|
71+
| collectionobject | absoluteage | | | |
72+
| collectionobject | relativeage | chronostrat | | |
73+
| collectionobject | paleocontext | chronostrat | | |
74+
| collectionobject | collectionevent | paleocontext | chronostrat | |
75+
| collectionobject | collectionevent | locality | paleocontext | chronostrat |
76+
77+
**Field Paths from CollectionObject to Absoluteage or GeologicTimePeriod**
78+
79+
| field_path_1 | field_path_2 | field_path_3 | field_path_4 | field_path_5 | field_path_6 |
80+
|------------------|-----------------|----------------|----------------|------------------|---------------|
81+
| collectionobject | absoluteage | absoluteage | | | |
82+
| collectionobject | relativeage | agename | startperiod | | |
83+
| collectionobject | relativeage | agename | endperiod | | |
84+
| collectionobject | relativeage | agenameend | startperiod | | |
85+
| collectionobject | relativeage | agenameend | endperiod | | |
86+
| collectionobject | paleocontext | chronosstrat | startperiod | | |
87+
| collectionobject | paleocontext | chronosstrat | endperiod | | |
88+
| collectionobject | paleocontext | chronosstratend| startperiod | | |
89+
| collectionobject | paleocontext | chronosstratend| endperiod | | |
90+
| collectionobject | collectingevent | paleocontext | chronosstrat | startperiod | |
91+
| collectionobject | collectingevent | paleocontext | chronosstrat | endperiod | |
92+
| collectionobject | collectingevent | paleocontext | chronosstratend| startperiod | |
93+
| collectionobject | collectingevent | paleocontext | chronosstratend| endperiod | |
94+
| collectionobject | collectingevent | locality | paleocontext | chronosstrat | startperiod |
95+
| collectionobject | collectingevent | locality | paleocontext | chronosstrat | endperiod |
96+
| collectionobject | collectingevent | locality | paleocontext | chronosstratend | startperiod |
97+
| collectionobject | collectingevent | locality | paleocontext | chronosstratend | endperiod |
98+
4999
These three contexts are searched independently according to their respective logic.
50100

51101
## MVP Scope

searchindex.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

technical_decisions/extended_age_query.html

Lines changed: 194 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,19 +185,35 @@ <h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">
185185
</section>
186186
<section id="core-logic-filtering-criteria">
187187
<h2>Core Logic &amp; Filtering Criteria<a class="headerlink" href="#core-logic-filtering-criteria" title="Link to this heading"></a></h2>
188-
<ul class="simple">
188+
<ul>
189189
<li><p><strong>Numeric-Based Logic</strong><br />
190190
EAQ exclusively uses numerical start and end values; no names are directly used for computation—names are converted into numeric ranges by the system.</p></li>
191191
<li><p><strong>Valid Periods Only</strong><br />
192192
Only Chronostratigraphy nodes from the <code class="docutils literal notranslate"><span class="pre">GeologicTimePeriod</span></code> table with valid <code class="docutils literal notranslate"><span class="pre">StartPeriod</span></code> and <code class="docutils literal notranslate"><span class="pre">EndPeriod</span></code> values (where StartPeriod &gt; EndPeriod) are considered for queries.</p></li>
193193
<li><p><strong>Range Calculation</strong><br />
194194
The query computes its range using:</p>
195-
<ul>
195+
<ul class="simple">
196196
<li><p><strong>Lowest</strong> <code class="docutils literal notranslate"><span class="pre">EndPeriod</span></code> across relevant nodes</p></li>
197197
<li><p><strong>Highest</strong> <code class="docutils literal notranslate"><span class="pre">StartPeriod</span></code> across relevant nodes<br />
198198
Because MYA increases into the past, higher StartPeriod means older boundary.</p></li>
199199
</ul>
200200
</li>
201+
<li><p><strong>Strictness in Range Calculations</strong></p>
202+
<ul class="simple">
203+
<li><p>an age query start period <code class="docutils literal notranslate"><span class="pre">x</span></code></p></li>
204+
<li><p>an age query end period <code class="docutils literal notranslate"><span class="pre">y</span></code></p></li>
205+
<li><p>with constraint that <code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">&gt;=</span> <span class="pre">y</span></code></p></li>
206+
<li><p>for each collection object, a meta start period <code class="docutils literal notranslate"><span class="pre">a</span></code> is decided, and a meta end period <code class="docutils literal notranslate"><span class="pre">b</span></code> is decided.</p></li>
207+
<li><p>with constraint that <code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">&gt;=</span> <span class="pre">b</span></code></p></li>
208+
</ul>
209+
<p>Strict Filter: (full overlap, a-b is within x-y)
210+
<code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">&lt;=</span> <span class="pre">x</span></code> and <code class="docutils literal notranslate"><span class="pre">b</span> <span class="pre">&gt;=</span> <span class="pre">y</span></code></p>
211+
<p>Non-Strict Filter: (partial age range overlap, any overlap so x-y can be within a-b or a-b can be within x-y)
212+
(<code class="docutils literal notranslate"> <span class="pre">a&lt;=</span> <span class="pre">x</span></code> and <code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">&gt;=</span> <span class="pre">y</span></code>) or (<code class="docutils literal notranslate"><span class="pre">b</span> <span class="pre">&lt;=</span> <span class="pre">x</span></code> and <code class="docutils literal notranslate"><span class="pre">b</span> <span class="pre">&gt;=</span> <span class="pre">y</span></code>) or (<code class="docutils literal notranslate"><span class="pre">a</span> <span class="pre">&gt;=</span> <span class="pre">x</span></code> and <code class="docutils literal notranslate"><span class="pre">b</span> <span class="pre">&lt;=</span> <span class="pre">y</span></code>)</p>
213+
<p>This is omitting the complication of uncertainty values.
214+
The meta age range for each collection object should appear in the age column of the query results.
215+
The “Any” age query bug is being push to a later issue. For now, do a Age Range query from “13800” to “0” to get all COs with age data (query all of time, the age of the universe</p>
216+
</li>
201217
</ul>
202218
</section>
203219
<section id="user-interface-workflow">
@@ -232,6 +248,182 @@ <h2>Search Scope Across Age Fields<a class="headerlink" href="#search-scope-acro
232248
<li><p><strong>Paleo Context</strong><br />
233249
Bound by <code class="docutils literal notranslate"><span class="pre">ChronosStratID</span></code> (and optionally <code class="docutils literal notranslate"><span class="pre">ChronosStratEndID</span></code>). The system determines the widest combined range across both IDs using start/end values.</p></li>
234250
</ul>
251+
<p><strong>Table paths from CollectionObject to Absoluteage or GeologicTimePeriod</strong></p>
252+
<table class="docutils align-default">
253+
<thead>
254+
<tr class="row-odd"><th class="head"><p>table_path_1</p></th>
255+
<th class="head"><p>table_path_2</p></th>
256+
<th class="head"><p>table_path_3</p></th>
257+
<th class="head"><p>table_path_4</p></th>
258+
<th class="head"><p>table_path_5</p></th>
259+
</tr>
260+
</thead>
261+
<tbody>
262+
<tr class="row-even"><td><p>collectionobject</p></td>
263+
<td><p>absoluteage</p></td>
264+
<td><p></p></td>
265+
<td><p></p></td>
266+
<td><p></p></td>
267+
</tr>
268+
<tr class="row-odd"><td><p>collectionobject</p></td>
269+
<td><p>relativeage</p></td>
270+
<td><p>chronostrat</p></td>
271+
<td><p></p></td>
272+
<td><p></p></td>
273+
</tr>
274+
<tr class="row-even"><td><p>collectionobject</p></td>
275+
<td><p>paleocontext</p></td>
276+
<td><p>chronostrat</p></td>
277+
<td><p></p></td>
278+
<td><p></p></td>
279+
</tr>
280+
<tr class="row-odd"><td><p>collectionobject</p></td>
281+
<td><p>collectionevent</p></td>
282+
<td><p>paleocontext</p></td>
283+
<td><p>chronostrat</p></td>
284+
<td><p></p></td>
285+
</tr>
286+
<tr class="row-even"><td><p>collectionobject</p></td>
287+
<td><p>collectionevent</p></td>
288+
<td><p>locality</p></td>
289+
<td><p>paleocontext</p></td>
290+
<td><p>chronostrat</p></td>
291+
</tr>
292+
</tbody>
293+
</table>
294+
<p><strong>Field Paths from CollectionObject to Absoluteage or GeologicTimePeriod</strong></p>
295+
<table class="docutils align-default">
296+
<thead>
297+
<tr class="row-odd"><th class="head"><p>field_path_1</p></th>
298+
<th class="head"><p>field_path_2</p></th>
299+
<th class="head"><p>field_path_3</p></th>
300+
<th class="head"><p>field_path_4</p></th>
301+
<th class="head"><p>field_path_5</p></th>
302+
<th class="head"><p>field_path_6</p></th>
303+
</tr>
304+
</thead>
305+
<tbody>
306+
<tr class="row-even"><td><p>collectionobject</p></td>
307+
<td><p>absoluteage</p></td>
308+
<td><p>absoluteage</p></td>
309+
<td><p></p></td>
310+
<td><p></p></td>
311+
<td><p></p></td>
312+
</tr>
313+
<tr class="row-odd"><td><p>collectionobject</p></td>
314+
<td><p>relativeage</p></td>
315+
<td><p>agename</p></td>
316+
<td><p>startperiod</p></td>
317+
<td><p></p></td>
318+
<td><p></p></td>
319+
</tr>
320+
<tr class="row-even"><td><p>collectionobject</p></td>
321+
<td><p>relativeage</p></td>
322+
<td><p>agename</p></td>
323+
<td><p>endperiod</p></td>
324+
<td><p></p></td>
325+
<td><p></p></td>
326+
</tr>
327+
<tr class="row-odd"><td><p>collectionobject</p></td>
328+
<td><p>relativeage</p></td>
329+
<td><p>agenameend</p></td>
330+
<td><p>startperiod</p></td>
331+
<td><p></p></td>
332+
<td><p></p></td>
333+
</tr>
334+
<tr class="row-even"><td><p>collectionobject</p></td>
335+
<td><p>relativeage</p></td>
336+
<td><p>agenameend</p></td>
337+
<td><p>endperiod</p></td>
338+
<td><p></p></td>
339+
<td><p></p></td>
340+
</tr>
341+
<tr class="row-odd"><td><p>collectionobject</p></td>
342+
<td><p>paleocontext</p></td>
343+
<td><p>chronosstrat</p></td>
344+
<td><p>startperiod</p></td>
345+
<td><p></p></td>
346+
<td><p></p></td>
347+
</tr>
348+
<tr class="row-even"><td><p>collectionobject</p></td>
349+
<td><p>paleocontext</p></td>
350+
<td><p>chronosstrat</p></td>
351+
<td><p>endperiod</p></td>
352+
<td><p></p></td>
353+
<td><p></p></td>
354+
</tr>
355+
<tr class="row-odd"><td><p>collectionobject</p></td>
356+
<td><p>paleocontext</p></td>
357+
<td><p>chronosstratend</p></td>
358+
<td><p>startperiod</p></td>
359+
<td><p></p></td>
360+
<td><p></p></td>
361+
</tr>
362+
<tr class="row-even"><td><p>collectionobject</p></td>
363+
<td><p>paleocontext</p></td>
364+
<td><p>chronosstratend</p></td>
365+
<td><p>endperiod</p></td>
366+
<td><p></p></td>
367+
<td><p></p></td>
368+
</tr>
369+
<tr class="row-odd"><td><p>collectionobject</p></td>
370+
<td><p>collectingevent</p></td>
371+
<td><p>paleocontext</p></td>
372+
<td><p>chronosstrat</p></td>
373+
<td><p>startperiod</p></td>
374+
<td><p></p></td>
375+
</tr>
376+
<tr class="row-even"><td><p>collectionobject</p></td>
377+
<td><p>collectingevent</p></td>
378+
<td><p>paleocontext</p></td>
379+
<td><p>chronosstrat</p></td>
380+
<td><p>endperiod</p></td>
381+
<td><p></p></td>
382+
</tr>
383+
<tr class="row-odd"><td><p>collectionobject</p></td>
384+
<td><p>collectingevent</p></td>
385+
<td><p>paleocontext</p></td>
386+
<td><p>chronosstratend</p></td>
387+
<td><p>startperiod</p></td>
388+
<td><p></p></td>
389+
</tr>
390+
<tr class="row-even"><td><p>collectionobject</p></td>
391+
<td><p>collectingevent</p></td>
392+
<td><p>paleocontext</p></td>
393+
<td><p>chronosstratend</p></td>
394+
<td><p>endperiod</p></td>
395+
<td><p></p></td>
396+
</tr>
397+
<tr class="row-odd"><td><p>collectionobject</p></td>
398+
<td><p>collectingevent</p></td>
399+
<td><p>locality</p></td>
400+
<td><p>paleocontext</p></td>
401+
<td><p>chronosstrat</p></td>
402+
<td><p>startperiod</p></td>
403+
</tr>
404+
<tr class="row-even"><td><p>collectionobject</p></td>
405+
<td><p>collectingevent</p></td>
406+
<td><p>locality</p></td>
407+
<td><p>paleocontext</p></td>
408+
<td><p>chronosstrat</p></td>
409+
<td><p>endperiod</p></td>
410+
</tr>
411+
<tr class="row-odd"><td><p>collectionobject</p></td>
412+
<td><p>collectingevent</p></td>
413+
<td><p>locality</p></td>
414+
<td><p>paleocontext</p></td>
415+
<td><p>chronosstratend</p></td>
416+
<td><p>startperiod</p></td>
417+
</tr>
418+
<tr class="row-even"><td><p>collectionobject</p></td>
419+
<td><p>collectingevent</p></td>
420+
<td><p>locality</p></td>
421+
<td><p>paleocontext</p></td>
422+
<td><p>chronosstratend</p></td>
423+
<td><p>endperiod</p></td>
424+
</tr>
425+
</tbody>
426+
</table>
235427
<p>These three contexts are searched independently according to their respective logic.</p>
236428
</section>
237429
<section id="mvp-scope">

0 commit comments

Comments
 (0)