Improve external vocabulary references - #59
maximiliani wants to merge 37 commits into
Conversation
… fixing definitions
Move and revise terminology section
# Conflicts: # sections/01_fdo-building-block/04-FDO-Profiles.html # sections/02_fdo-processing-block/Introduction.html
🚀 PR Preview AvailableA preview deployment of this PR is now available. 🔗 Preview URL: https://fairdo-org.github.io/fdo-architecture-spec/preview/pr-59/ |
There was a problem hiding this comment.
Pull request overview
This PR adds optional extensions for inline FDOs and external vocabulary references, relocates terminology to the appendix, and updates specification structure and numbering.
Changes:
- Adds inline-FDO and external-vocabulary extension rules.
- Moves the glossary and introduces an attribute-definitions appendix heading.
- Updates metadata, references, rule identifiers, tables, and editorial wording.
Reviewed changes
Copilot reviewed 26 out of 30 changed files in this pull request and generated 16 comments.
Show a summary per file
| File | Summary |
|---|---|
sections/05_appendix/02_AttributeDefs.html |
Adds the appendix heading; the referenced attribute list remains empty. Moderate (2 votes). |
sections/05_appendix/01-Terminology.html |
Fix missing spaces before linked terms and in ActiveFDO. Nits (3, 3, and 2 votes). |
sections/02_fdo-processing-block/Step9.html |
Updates evaluation wording. |
sections/02_fdo-processing-block/Step8.html |
Formats the NORULES status. |
sections/02_fdo-processing-block/Step6.html |
Corrects profile inspection wording and table markup. |
sections/02_fdo-processing-block/Step5.html |
Corrects inspection wording and table markup. |
sections/02_fdo-processing-block/Step4.html |
Updates validation wording and table numbering. |
sections/02_fdo-processing-block/Step3.html |
Add whitespace before the linked FDO term. Nit (3 votes). |
sections/02_fdo-processing-block/Step2.html |
Fixes terminology and paragraph markup. |
sections/02_fdo-processing-block/Step1.html |
Fixes example-list markup and wording. |
sections/02_fdo-processing-block/Introduction.html |
Refines the processing introduction prose. |
sections/01_fdo-building-block/12-Updating.html |
Renumbers updating rules and fixes markup. |
sections/01_fdo-building-block/11-FDO-Types.html |
Renumbers type and operation rules. |
sections/01_fdo-building-block/10-Mandatory-Attributes.html |
Renumbers mandatory-attribute rules. |
sections/01_fdo-building-block/09-Validation.html |
Renumbers and refines validation rules. |
sections/01_fdo-building-block/08-Extensions.html |
Adds extension specifications. Findings include four moderate issues for broken fragments and mandatory vocabulary metadata, five editorial nits, and one critical issue requiring safe $TERM$ parameter binding and execution restrictions. |
sections/01_fdo-building-block/07-Referencing.html |
Moves inline and vocabulary-reference content. |
sections/01_fdo-building-block/06-Syntax-Def.html |
Updates syntax terminology and table numbering. |
sections/01_fdo-building-block/05-Attributes.html |
Direct vocabulary references to #extensions rather than #advanced-ref. Nit (3 votes). |
sections/01_fdo-building-block/04-FDO-Profiles.html |
Correct the profile requirement wording. Nit (2 votes). Renumber duplicate [R4-1] references to [R4-2]. Moderate (2 votes). |
sections/01_fdo-building-block/03-FDO-Records.html |
Updates the data attribute definition. |
sections/01_fdo-building-block/02-Granularity.html |
Refines the section definition. |
sections/01_fdo-building-block/01-PID.html |
Add the missing space in “The PID system.” Nit (3 votes). |
sections/00_introduction/03-Terminology.html |
Removes the former terminology section. |
sections/00_introduction/02-High-Level-Overview.html |
Updates terminology and registry wording. |
sections/00_introduction/00-Intro.html |
Refines the FDO definition. |
index.html |
Updates metadata, section ordering, and appendix includes. |
Suppressed comments (10)
index.html:214
- Adding
data-lt="FDO type system"makes “FDO type system” an alias for the entire “FDO Building Blocks” heading. Those concepts are not equivalent—the section also covers PID, granularity, data, extensions, and updating—so references such as the one in05-Attributes.htmlresolve to the wrong definition. Define the type-system term in the FDO Types section instead of aliasing it here.
<h2><dfn data-lt="FDO type system">FDO Building Blocks</dfn></h2>
sections/00_introduction/02-High-Level-Overview.html:149
DTRanddata type registryare being defined as aliases for the generic phrase “open registries,” but a DTR is a specific registry and the following sentences distinguish forum registries from community registries. This causes DTR references to resolve to the wrong concept; define the specific Data Type Registry separately from the generic open-registry requirement.
<strong>Registries</strong>: <a>Attribute Definitions</a> and profiles must be stored in <dfn data-lt="DTR|data type registry">open registries</dfn>.
sections/01_fdo-building-block/05-Attributes.html:17
- This edited tuple description drops the space before the linked attribute definition and uses “Latter” without an antecedent article. The rendered requirement should read “an attribute definition” and “The latter”.
The first element of the tuple MUST be either a <a>PID</a> that resolves to an<a>attribute definition</a>
or a human-readable name of an <a>attribute</a>.
Latter MAY result in ambiguities (e.g., due to naming conflicts) and MAY NOT support certain mechanisms in this document;
sections/01_fdo-building-block/08-Extensions.html:17
- The new section first states that these features are not essential and are optional, but then calls external vocabulary reuse “essential for FDOs.” This gives contradictory normative guidance; describe the capability as useful or optional rather than essential.
It is essential for <a>FDOs</a> that existing vocabularies, ontologies, and terminologies can be reused in <a>FDO records</a>
(even if they do not fulfill the same guarantees as <a>attribute definitions</a>).
Using a vocabulary term as an <a>attribute</a> in an <a>FDO record</a> similar to an <a>attribute definition</a> is explicitly supported as a <a>community attribute</a>.
sections/01_fdo-building-block/08-Extensions.html:33
- R8-2 requires an
ImportVocabularytuple but does not normatively declare that the0.FDO/ImportVocabularydefinition usesExternalVocabularyReference; that behavior appears only in the informative example below. Without the declaration, a client cannot know that importing a vocabulary enables the term-level checks described here. State this mechanism in the normative rule or attribute definition.
To use external vocabulary terms as <a>attribute definitions</a> in an <a>FDO record</a>, the record MUST contain the <em><a>0.FDO/ImportVocabulary</a></em> <a>attribute</a>.
Values of the <em><a>0.FDO/ImportVocabulary</a></em> <a>attribute</a> MUST refer to an <a>FDO</a> that follows the <a>profile definition</a> <a><em>0.FDO/VocabularyDef</em></a>.
sections/01_fdo-building-block/08-Extensions.html:33
- Issue #35 names the registry attribute
0.FDO/ImportsVocabulary, but this rule and the examples use0.FDO/ImportVocabulary. These are different identifiers, so implementations could register and emit incompatible attributes; choose one spelling and update every occurrence and example consistently.
<dt><h4 class="rule-heading" id="rule-r8_2">[R8-2] <dfn data-lt="0.FDO/ImportVocabulary">Declaration of External Vocabulary Usage in an <a>FDO record</a></h4></dt>
<dd>
To use external vocabulary terms as <a>attribute definitions</a> in an <a>FDO record</a>, the record MUST contain the <em><a>0.FDO/ImportVocabulary</a></em> <a>attribute</a>.
Values of the <em><a>0.FDO/ImportVocabulary</a></em> <a>attribute</a> MUST refer to an <a>FDO</a> that follows the <a>profile definition</a> <a><em>0.FDO/VocabularyDef</em></a>.
sections/01_fdo-building-block/08-Extensions.html:69
0.FDO/ImportVocabularyis described as accepting a profile reference, but the example says its validation mechanism isExternalVocabularyReference. The profile-referencing rules useProfileReferencefor values that must resolve to a FDO conforming to a profile; using the mechanism shown here does not express the requiredVocabularyDeftarget.
The <a>attribute definition</a> <a><em>0.FDO/ImportVocabulary</em></a> states that it uses external <a>attribute</a> referencing through the
<a>attribute</a> <em>(<a><em>0.FDO/ValidationMechanism</em></a>, ExternalVocabularyReference)</em>.
It accepts <a>profile references</a> to <a>FDOs</a> that follow the <a>profile definition</a> <a><em>0.FDO/VocabularyDef</em></a>.
sections/01_fdo-building-block/08-Extensions.html:97
- This link has the same missing
#fragment marker, and it points to R8-3 even though the paragraph describes an attribute definition applying external vocabulary referencing, which is specified by R8-1. Link it to the in-document R8-1 requirement.
<a>External vocabulary referencing</a> can also be used to reference a term from an external vocabulary as the value of an <a>attribute</a> (see <a href="rule-r8_3"></a>).
sections/05_appendix/01-Terminology.html:54
- This moved glossary text renders “dataFDOs” without whitespace. Add a space before the link.
are not data<a>FDOs</a>.
sections/05_appendix/01-Terminology.html:136
- The glossary heading is an
<a>link, but this item no longer defines the singular term “Persistent Identifier”; the nested definition only advertisesPIDandpersistent identifiers. Add the singular label todata-ltor make the heading itself the definition so ReSpec can resolve this term consistently.
<b><a>Persistent Identifier</a></b>:
Every <a>FDO</a> is assigned one or more <dfn data-abbr="PID" data-lt="PID|persistent identifiers">globally unique, persistent, and resolvable identifier</dfn>.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| The <a>profile</a>(s) as specified in section 3.4. | ||
| One of the <a>profile</a> of a <a>profile</a> MUST be <a><em>0.FDO/ProfileDef</em></a>. |
| <li><a>Profile referencing</a></li> | ||
| <li><a>Attribute referencing</a></li> | ||
| <li><a>ExternalVocabularyReferencing</a></li> | ||
| <li><a>External Vocabulary Referencing</a></li> |
|
|
||
| <aside class="example" title="External Vocabulary Referencing: Using vocabulary terms as values in FDOs"> | ||
| <p> | ||
| <a>External vocabulary referencing</a> can also be used to reference a term from an external vocabulary as the value of an <a>attribute</a> (see <a href="rule-r8_3"></a>). |
| <em><dfn>0.FDO/SPARQL_Check</dfn></em> is a SPARQL query that checks whether a term (replaced in the query string using the <em>$TERM$</em> placeholder) is valid in the vocabulary and MUST return a boolean value. | ||
| This query is executed against the vocabulary retrieved from the <em><dfn>0.FDO/DownloadURL</dfn></em> <a>attribute</a>, which accepts any <a>URL</a>. |
| specification but will be described within the respective implementation profile. | ||
| Examples such as the record, tuple time stamps of resolution in [[RFC3339]] format, a time to live (TTL), and possibly other implementation-specific | ||
| fields. | ||
| Any other information extracted from the<a>FDO record</a> such as intrinsic metadata, |
| at the basic object management level. | ||
| At that level there is no need to distinguish among different types such | ||
| as datasets, metadata, software, semantic assertions, etc., for management operations. | ||
| Since <a>FDOs</a> can include<a>bit-sequences</a> encoding any kind of content, |
Pfeil
left a comment
There was a problem hiding this comment.
I was not able to do a deep review in one session, so I focussed on the conceptual level for now, starting with the examples. Deeper review will come later.
There was a problem hiding this comment.
How do I differentiate this case from the other example?
In other words:
As both cases are basically structured the same, I conclude that all imported terms in both examples can be used as both, keys and values in a record.
Is that correct? Or is there a difference? Is it intended?
I think the only thing differentiating them is the 0.FDO/ImportVocabulary. I assume it is intended that this term is special (importing terms as keys), but all other attributes import vocabularies as values?
Pfeil
left a comment
There was a problem hiding this comment.
Here some comments.
One side note in addition: I took your drawings and sketched around a bit. The result is that we could use 0.FDO/Profile as a mechanism to import terms as attributes if we make this a special profile feature, which removed the need for the 0.FDO/ImportVocabulary term and might help to remove the redundant meaning from the special ValidationMechanism. Not sure if I oversee something.
| <h3 id="external-vocabulary-referencing"><dfn>External Vocabulary Referencing</dfn></h3> | ||
| <!--TODO: Redo according to GitHub issue--> | ||
| <p> | ||
| It is essential for <a>FDOs</a> that existing vocabularies, ontologies, and terminologies can be reused in <a>records</a> |
There was a problem hiding this comment.
If it is essential, then why is it an extension? Proposal:
"In some cases, it will be useful to reuse existing ... . For example, existing, specific metadata could be added this way."
| The <a>attribute definition</a> A MUST explicitly state that it uses this feature by containing the | ||
| <a>attribute</a> <em>(<a><em>0.FDO/ValidationMechanism</em></a>, ExternalVocabularyReference)</em>. |
There was a problem hiding this comment.
I think we should write more about how exactly this influences validation. What "feature" is meant here? How shall I expect the value? Unfortunately I fail to propose something, because I can't derive it. Maybe we need a small session on this to discuss this.
My feeling is:
- this mechanism actually allows all values (no regex-style validation or assertions on the value)
- In the examples the values are both, PIDs or terms from the vocabulary, so there is actually no real validation or other assertions in place.
- The meaning is that "if the value is resolvable and a vocab definition, import and allow the prefix".
| <dd> | ||
| <p> | ||
| The <a>vocabulary definition profile</a> <em><a>0.FDO/VocabularyDef</a></em> specifies which information is needed to describe a vocabulary. | ||
| <a>FDOs</a> instantiation this <a>profile</a> MUST define values for the <em><a>0.FDO/Name</a></em>, and <em><a>0.FDO/VocabularyPrefix</a></em> <a>attributes</a>. |
There was a problem hiding this comment.
I suggest (in additon to fixing the typo), that we start by a table showing the attributes which are currently introduced in the text, that make this record special. We have such tables also in other places. We should start with the table and add with text some context for single attributes etc. I think this will make the text easier to write and read.
There was a problem hiding this comment.
I added such a table and cleant the text. Please feel free to improve or revert :)
| <em><dfn>0.FDO/VocabularyPrefix</dfn></em> specifies the prefix that can be used to identify terms from a vocabulary in an <a>FDO record</a> and is typically either part of a PURL (e.g., <em>https://schema.org/</em>) or some other string (e.g., <em>schema:</em>, <em>foaf:</em>). | ||
| </p> | ||
| <p> | ||
| To enable automatic validation of vocabulary terms, the <a>FDO</a> SHOULD also specify a URL from which the vocabulary can be retrieved (<em><a>0.FDO/DownloadURL</a></em>), the format in which the vocabulary is provided (<em><a>0.FDO/VocabularyFormat</a></em>), and a SPARQL query that checks the validity of the vocabulary term (<em><a>0.FDO/SPARQL_Check</a></em>). |
There was a problem hiding this comment.
DownloadURL can be mentioned if we defined it, but actually it would not need to be a http GET, so should we refer to 0.FDO/Data?
| </p> | ||
| <p> | ||
| To enable automatic validation of vocabulary terms, the <a>FDO</a> SHOULD also specify a URL from which the vocabulary can be retrieved (<em><a>0.FDO/DownloadURL</a></em>), the format in which the vocabulary is provided (<em><a>0.FDO/VocabularyFormat</a></em>), and a SPARQL query that checks the validity of the vocabulary term (<em><a>0.FDO/SPARQL_Check</a></em>). | ||
| <em><dfn>0.FDO/SPARQL_Check</dfn></em> is a SPARQL query that checks whether a term (replaced in the query string using the <em>$TERM$</em> placeholder) is valid in the vocabulary and MUST return a boolean value. |
There was a problem hiding this comment.
Did you check if this is how sparql works? The query could also return one result with the term if ok or so.
This simplifies the text a lot.
self-explanatory setting
introduction in such a way that the definition is redundant.
"syntactic interoperability" since they were not used.
# Conflicts: # sections/01_fdo-building-block/05-Attributes.html # sections/01_fdo-building-block/06-Syntax-Def.html # sections/01_fdo-building-block/07-Referencing.html # sections/01_fdo-building-block/09-Validation.html # sections/01_fdo-building-block/12-Updating.html
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved normative inconsistencies, missing definitions, broken references, and a query-safety issue block approval.
Get a fresh assessment by requesting another Copilot review.
Review details
Suppressed comments (14)
index.html:176
- All existing
localBiblioentries in this configuration usehref, which is the field ReSpec uses for the bibliography link. Usingurlhere can leave[[!RDA-DTR-WG]]unresolved or unlinked.
url: "https://zenodo.org/records/1406127"
sections/00_introduction/02-High-Level-Overview.html:53
- R1-3 now permits a PID record to be arbitrary and not provide an FDO, so this unqualified MUST is broader than the PID model and contradicts that exception. Scope the statement to a PID that identifies an FDO, or remove the non-FDO PID-record case.
A <a>PID system</a> MUST resolve the <a>PID</a> to an <a>FDO record</a>.
sections/01_fdo-building-block/01-PID.html:21
- The new definition allows a resolved PID record to contain arbitrary content that does not provide an FDO, but the overview and processing pipeline require a PID used for an FDO to resolve to an FDO record. Scope this case to non-FDO PID records or define how clients distinguish and handle it; otherwise S-3 cannot satisfy its FDO-record input/output contract.
A <a>PID record</a> is an at least <a>machine readable</a> structure sent back when resolving a <a>PID</a>.
A subset of the <a>PID record</a> MAY contain the <a>FDO record</a>, refer to the <a>FDO record</a>, or refer to another <a>PID</a>.
The contents of a <a>PID record</a> can also be arbitrary, in which case, depending on the <a>implementation</a>, it does not provide an <a>FDO</a>.
sections/01_fdo-building-block/02-Granularity.html:47
- These edits introduce nested
<a>elements, producing invalid link markup and potentially confusing ReSpec's autolinking. The inner anchors are sufficient; do not wrap them in another<a>.
Every <a>FDO attribute</a> in an <a>FDO record</a> only describes the identified <a>resource</a> and not any other <a><a>resources</a></a>.
Even if the <a>FDO</a> is a <a>collection</a>, all <a>attributes</a> in the <a>FDO record</a> describe the<a><a>resource</a></a> as a whole and parts of it.
sections/01_fdo-building-block/04-FDO-Profiles.html:135
- This sentence is grammatically malformed (
One of the profile of a profile) and obscures which profile must be present in a profile definition record.
One of the <a>profile</a> of a <a>profile</a> MUST be <a><em>0.FDO/ProfileDef</em></a>.
sections/01_fdo-building-block/05-Attributes.html:292
- The DataType table still lists an external vocabulary namespace as a valid target, but R8-1 now requires this mechanism to point to an FDO following
0.FDO/VocabularyDef. Leaving both forms here gives clients incompatible target shapes for the same attribute; update the legacy namespace entry or explicitly mark it obsolete.
<li>a <a>profile</a> (see <a href="#profile-referencing"></a>)</li>
<li>an external vocabulary namespace (see <a href="#external-vocabulary-referencing"></a>)</li>
sections/01_fdo-building-block/08-Extensions.html:5
- The moved Inline FDO section is given the
inline-fdotarget, but the existing Granularity reference still points to#inline-fdoswhile Referencing points to#inline-fdo. The Granularity link will therefore not resolve; use one canonical ID and update all callers.
<h3 id="inline-fdo"><dfn data-lt="Lambda FDO|Inline Serialization">Inline <a>FDOs</a></dfn></h3>
sections/01_fdo-building-block/08-Extensions.html:102
- This cross-reference omits the
#fragment marker, so the example does not link to the newly added R8-1 rule.
<a href="#ex-vocab-ref"></a> shows how schema.org terms can be used in an <a>FDO record</a> similar to an <a>attribute definition</a> by applying <a>external vocabulary referencing</a> (see <a href="rule-r8_1"></a>).
sections/01_fdo-building-block/08-Extensions.html:142
- This cross-reference also omits the
#fragment marker, so the example does not link to R8-3.
<a>External vocabulary referencing</a> can also be used to reference a term from an external vocabulary as the value of an <a>attribute</a> (see <a href="rule-r8_3"></a>).
sections/01_fdo-building-block/08-Extensions.html:36
- Requiring prefixes to be merely unique does not make matching unambiguous: one prefix can be a prefix of another, so a term may match multiple imported vocabularies. Require a prefix-free set or define deterministic longest-prefix and ambiguity handling for clients.
The creator of an <a>FDO record</a> MUST ensure that the prefixes of the imported vocabularies are unique.
sections/01_fdo-building-block/08-Extensions.html:27
- R8-1 now requires the external-vocabulary
0.FDO/DataTypetarget to be a VocabularyDef FDO, but the normative DataType list in05-Attributes.htmlstill permits an “external vocabulary namespace,” which describes the removed model. Update that generic definition so the specification has one target model.
An <a>attribute definition</a> <em>A</em> MUST explicitly state that it uses this feature by containing the
<a>attribute</a> <em>(<a><em>0.FDO/ValidationMechanism</em></a>, ExternalVocabularyReference)</em>.
The <em><a>0.FDO/DataType</a></em> <a>attribute</a> of <em>A</em> MUST refer to an <a>FDO</a> that follows the <a>profile definition</a> <a><em>0.FDO/VocabularyDef</em></a>.
sections/01_fdo-building-block/08-Extensions.html:13
- After moving this mechanism out of Advanced Referencing, the existing R5-11 cross-reference still points readers to
#advanced-ref, which no longer contains External Vocabulary Referencing. Update that normative pointer (or link it to this section) so implementers find the requirements.
<h3 id="external-vocabulary-referencing"><dfn>External Vocabulary Referencing</dfn></h3>
sections/01_fdo-building-block/08-Extensions.html:27
- This rule conflates two different mechanisms. Under the profile-reference rules,
0.FDO/DataTypeidentifies the target profile (for example0.FDO/VocabularyDef) and the attribute definition must declareProfileReference; requiringExternalVocabularyReferencehere leaves theImportVocabularyexample's target validation undefined. DefineImportVocabularywithProfileReference/0.FDO/VocabularyDef, and reserveExternalVocabularyReferencefor validating vocabulary terms.
An <a>attribute definition</a> <em>A</em> MUST explicitly state that it uses this feature by containing the
<a>attribute</a> <em>(<a><em>0.FDO/ValidationMechanism</em></a>, ExternalVocabularyReference)</em>.
The <em><a>0.FDO/DataType</a></em> <a>attribute</a> of <em>A</em> MUST refer to an <a>FDO</a> that follows the <a>profile definition</a> <a><em>0.FDO/VocabularyDef</em></a>.
sections/01_fdo-building-block/08-Extensions.html:142
- This example is about an attribute definition applying external vocabulary referencing, so it should cite R8-1 (the declaration rule), not R8-3 (the Vocabulary Definition Profile). The link also lacks the
#fragment prefix and is therefore broken.
<a>External vocabulary referencing</a> can also be used to reference a term from an external vocabulary as the value of an <a>attribute</a> (see <a href="rule-r8_3"></a>).
- Files reviewed: 33/39 changed files
- Comments generated: 5
- Review effort level: Lite
| <tr> | ||
| <td><dfn>0.FDO/SPARQL_Check</dfn></td> | ||
| <td> | ||
| A SPARQL query that checks whether a term (replaced in the query string using the <em>$TERM$</em> placeholder) is valid in the vocabulary and MUST return a boolean value. |
| <dt><h4 class="rule-heading" id="rule-r8_2">[R8-2] <dfn data-lt="0.FDO/ImportVocabulary">Declaration of External Vocabulary Usage in an <a>FDO record</a></h4></dt> | ||
| <dd> | ||
| To use external vocabulary terms as <a>attribute definitions</a> in an <a>FDO record</a>, the record MUST contain the <em><a>0.FDO/ImportVocabulary</a></em> <a>attribute</a>. | ||
| Values of the <em><a>0.FDO/ImportVocabulary</a></em> <a>attribute</a> MUST refer to an <a>FDO</a> that follows the <a>profile definition</a> <a><em>0.FDO/VocabularyDef</em></a>. |
| <a>FDOs</a> instantiation this <a>profile</a> MUST define values for the <em><a>0.FDO/Name</a></em>, and <em><a>0.FDO/VocabularyPrefix</a></em> <a>attributes</a>. | ||
| </p> | ||
| <p> | ||
| To enable automatic validation of vocabulary terms, the <a>FDO</a> SHOULD also specify a URL from which the vocabulary can be retrieved (usually via <em><a>0.FDO/DownloadURL</a></em>), the format in which the vocabulary is provided (<em><a>0.FDO/VocabularyFormat</a></em>), and a SPARQL query that checks the validity of the vocabulary term (<em><a>0.FDO/SPARQL_Check</a></em>). |
| To enable automatic validation of vocabulary terms, the <a>FDO</a> SHOULD also specify a URL from which the vocabulary can be retrieved (usually via <em><a>0.FDO/DownloadURL</a></em>), the format in which the vocabulary is provided (<em><a>0.FDO/VocabularyFormat</a></em>), and a SPARQL query that checks the validity of the vocabulary term (<em><a>0.FDO/SPARQL_Check</a></em>). | ||
| </p> | ||
| <p> | ||
| Optionally, <em><a>0.FDO/Description</a></em>, <em><a>0.FDO/Contact</a></em>, <em><a>0.FDO/LandingPageURL</a></em>, and <em><a>0.FDO/License</a></em> <a>attributes</a> MAY be used to provide additional information about the vocabulary. |
| When a data provider registers <a>PIDs</a> to refer to his data and then decides to delete the data | ||
| after N years (which is good scientific practice with N > 10 years), the <a>FDO</a> MUST not be deleted. | ||
| The <a>PID resolution</a> MUST always be successful. | ||
| In the case of the deleted data, a tombstone note SHOULD be included in the <a>PID record</a> and outdated information SHOULD . |

This PR introduces a new model for external vocabulary referencing introduced in #35.
It also introduces a new "Extensions" section that currently contains external vocabulary referencing and Inline/Lambda FDOs.
The reason for introducing an extensions section is (see also #35) that some features that are not essential to the functioning of FDOs can be supported by clients, but are not mandatory.
This PR closes #35.
This PR is based on the changes made in #50.