From a970c58263c5f7a4f0e9f07132da31de018ff457 Mon Sep 17 00:00:00 2001 From: Osma Suominen Date: Thu, 5 Oct 2023 14:53:00 +0300 Subject: [PATCH] Remove identifierSpace and schemaSpace; make view templates mandatory (#139) --- .../manifest/invalid/bad-authentication.json | 5 ++- .../manifest/invalid/feature-view.json | 5 ++- ...fierSpace.json => godot-missing-view.json} | 3 -- .../manifest/invalid/missing-version.json | 5 ++- .../manifest/invalid/old-version.json | 5 ++- .../manifest/invalid/opencorporates.json | 2 - .../invalid/ror-invalid-view-pattern.json | 2 - .../slub-invalid-property-setting.json | 2 - .../manifest/valid/authentication.json | 2 - .../manifest/valid/codefork-viaf.json | 2 - .../examples/manifest/valid/example-min.json | 5 ++- .../examples/manifest/valid/feature-view.json | 5 ++- .../manifest/valid/findthatcharity.json | 2 - draft/examples/manifest/valid/fundref.json | 5 ++- .../manifest/valid/geocollider-sinatra.json | 2 - draft/examples/manifest/valid/getty.json | 2 - draft/examples/manifest/valid/kerameikos.json | 2 - draft/examples/manifest/valid/kew.json | 2 - draft/examples/manifest/valid/lobid-gnd.json | 2 - draft/examples/manifest/valid/nomisma.json | 2 - draft/examples/manifest/valid/occrp.json | 2 - .../manifest/valid/ordnance-survey.json | 2 - .../examples/manifest/valid/vivo-cornell.json | 4 +- draft/examples/manifest/valid/wikidata.json | 4 +- draft/index.html | 40 ++++--------------- draft/schemas/manifest.json | 11 +---- 26 files changed, 31 insertions(+), 94 deletions(-) rename draft/examples/manifest/invalid/{godot-missing-identifierSpace.json => godot-missing-view.json} (81%) diff --git a/draft/examples/manifest/invalid/bad-authentication.json b/draft/examples/manifest/invalid/bad-authentication.json index b1bc1d0..bc56792 100644 --- a/draft/examples/manifest/invalid/bad-authentication.json +++ b/draft/examples/manifest/invalid/bad-authentication.json @@ -1,7 +1,8 @@ { "name": "OpenCorporates Reconciliation Service", - "identifierSpace": "http://rdf.freebase.com/ns/type.object.id", - "schemaSpace": "http://rdf.freebase.com/ns/type.object.id", + "view": { + "url": "{+id}" + }, "authentication": { "foo": "bar" } diff --git a/draft/examples/manifest/invalid/feature-view.json b/draft/examples/manifest/invalid/feature-view.json index 398d1a9..7166c6e 100644 --- a/draft/examples/manifest/invalid/feature-view.json +++ b/draft/examples/manifest/invalid/feature-view.json @@ -1,7 +1,8 @@ { "name": "VIAF", - "identifierSpace": "http://vocab.getty.edu/doc/#GVP_URLs_and_Prefixes", - "schemaSpace": "http://vocab.getty.edu/doc/#The_Getty_Vocabularies_and_LOD", + "view": { + "url": "https://viaf.org/viaf/{id}" + }, "feature_view": { "url": "https://vocab.getty.edu/recon/features/" } diff --git a/draft/examples/manifest/invalid/godot-missing-identifierSpace.json b/draft/examples/manifest/invalid/godot-missing-view.json similarity index 81% rename from draft/examples/manifest/invalid/godot-missing-identifierSpace.json rename to draft/examples/manifest/invalid/godot-missing-view.json index e3c6620..395ec6b 100644 --- a/draft/examples/manifest/invalid/godot-missing-identifierSpace.json +++ b/draft/examples/manifest/invalid/godot-missing-view.json @@ -8,8 +8,5 @@ "name": "GODOT (Graph of Dated Objects and Texts) Reconciliation Service - Roman Consulates", "preview": { "url": "https://godot.date/reconcile/preview={{id}}" - }, - "view": { - "url": "https://godot.date/id/{{id}}" } } diff --git a/draft/examples/manifest/invalid/missing-version.json b/draft/examples/manifest/invalid/missing-version.json index 7003db6..950dec7 100644 --- a/draft/examples/manifest/invalid/missing-version.json +++ b/draft/examples/manifest/invalid/missing-version.json @@ -1,5 +1,6 @@ { "name": "VIAF", - "identifierSpace": "http://vocab.getty.edu/doc/#GVP_URLs_and_Prefixes", - "schemaSpace": "http://vocab.getty.edu/doc/#The_Getty_Vocabularies_and_LOD" + "view": { + "url": "https://viaf.org/viaf/{id}" + } } diff --git a/draft/examples/manifest/invalid/old-version.json b/draft/examples/manifest/invalid/old-version.json index 6ecd7bc..3d04858 100644 --- a/draft/examples/manifest/invalid/old-version.json +++ b/draft/examples/manifest/invalid/old-version.json @@ -1,6 +1,7 @@ { "versions": ["0.1"], "name": "VIAF", - "identifierSpace": "http://vocab.getty.edu/doc/#GVP_URLs_and_Prefixes", - "schemaSpace": "http://vocab.getty.edu/doc/#The_Getty_Vocabularies_and_LOD" + "view": { + "url": "https://viaf.org/viaf/{id}" + } } diff --git a/draft/examples/manifest/invalid/opencorporates.json b/draft/examples/manifest/invalid/opencorporates.json index 7f4d1db..15d1500 100644 --- a/draft/examples/manifest/invalid/opencorporates.json +++ b/draft/examples/manifest/invalid/opencorporates.json @@ -1,7 +1,5 @@ { "name": "OpenCorporates Reconciliation Service", - "identifierSpace": "http://rdf.freebase.com/ns/type.object.id", - "schemaSpace": "http://rdf.freebase.com/ns/type.object.id", "view": { "url": "https://opencorporates.com{{id}}" }, diff --git a/draft/examples/manifest/invalid/ror-invalid-view-pattern.json b/draft/examples/manifest/invalid/ror-invalid-view-pattern.json index f7c2649..03b6117 100644 --- a/draft/examples/manifest/invalid/ror-invalid-view-pattern.json +++ b/draft/examples/manifest/invalid/ror-invalid-view-pattern.json @@ -1,7 +1,5 @@ { "name": "ROR Reconciliation Service", - "identifierSpace": "http://ror.org/organization", - "schemaSpace": "http://ror.org/ns/type.object.id", "defaultTypes": [ { "id": "/ror/organization", diff --git a/draft/examples/manifest/invalid/slub-invalid-property-setting.json b/draft/examples/manifest/invalid/slub-invalid-property-setting.json index c5899b9..a7cd9c7 100644 --- a/draft/examples/manifest/invalid/slub-invalid-property-setting.json +++ b/draft/examples/manifest/invalid/slub-invalid-property-setting.json @@ -59,14 +59,12 @@ "service_url": "http://data.slub-dresden.de" } }, - "identifierSpace": "http://data.slub-dresden.de", "name": "SLUB LOD reconciliation for OpenRefine", "preview": { "height": 100, "url": "http://data.slub-dresden.de/{{id}}.preview", "width": 320 }, - "schemaSpace": "http://schema.org", "view": { "url": "http://data.slub-dresden.de/{{id}}" } diff --git a/draft/examples/manifest/valid/authentication.json b/draft/examples/manifest/valid/authentication.json index 2dc2c52..4bd9ab5 100644 --- a/draft/examples/manifest/valid/authentication.json +++ b/draft/examples/manifest/valid/authentication.json @@ -3,9 +3,7 @@ "view": { "url": "http://vivo.med.cornell.edu/individual?uri={{id}}" }, - "identifierSpace": "http://vivo.med.cornell.edu/individual/", "name": "VIVO Reconciliation Service", - "schemaSpace": "http://vivo.med.cornell.edu/individual/", "authentication": { "type": "apiKey", "description": "Vivo API key", diff --git a/draft/examples/manifest/valid/codefork-viaf.json b/draft/examples/manifest/valid/codefork-viaf.json index b3e13a5..60cc6d8 100644 --- a/draft/examples/manifest/valid/codefork-viaf.json +++ b/draft/examples/manifest/valid/codefork-viaf.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "VIAF", - "identifierSpace": "http://rdf.freebase.com/ns/user/hangy/viaf", - "schemaSpace": "http://rdf.freebase.com/ns/type.object.id", "view": { "url": "http://viaf.org/viaf/{id}" }, diff --git a/draft/examples/manifest/valid/example-min.json b/draft/examples/manifest/valid/example-min.json index 662b053..0c123c1 100644 --- a/draft/examples/manifest/valid/example-min.json +++ b/draft/examples/manifest/valid/example-min.json @@ -1,6 +1,7 @@ { "versions": ["0.2"], "name": "VIAF", - "identifierSpace": "http://vocab.getty.edu/doc/#GVP_URLs_and_Prefixes", - "schemaSpace": "http://vocab.getty.edu/doc/#The_Getty_Vocabularies_and_LOD" + "view": { + "url": "https://viaf.org/viaf/{id}" + } } diff --git a/draft/examples/manifest/valid/feature-view.json b/draft/examples/manifest/valid/feature-view.json index 484c838..fa43b45 100644 --- a/draft/examples/manifest/valid/feature-view.json +++ b/draft/examples/manifest/valid/feature-view.json @@ -1,8 +1,9 @@ { "versions": ["0.2"], "name": "VIAF", - "identifierSpace": "http://vocab.getty.edu/doc/#GVP_URLs_and_Prefixes", - "schemaSpace": "http://vocab.getty.edu/doc/#The_Getty_Vocabularies_and_LOD", + "view": { + "url": "https://viaf.org/viaf/{id}" + }, "feature_view": { "url": "https://vocab.getty.edu/recon/features/{id}" } diff --git a/draft/examples/manifest/valid/findthatcharity.json b/draft/examples/manifest/valid/findthatcharity.json index f3682e0..cdfdaaa 100644 --- a/draft/examples/manifest/valid/findthatcharity.json +++ b/draft/examples/manifest/valid/findthatcharity.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "findthatcharity", - "identifierSpace": "http://rdf.freebase.com/ns/type.object.id", - "schemaSpace": "http://rdf.freebase.com/ns/type.object.id", "view": { "url": "https://findthatcharity.uk/charity/{id}" }, diff --git a/draft/examples/manifest/valid/fundref.json b/draft/examples/manifest/valid/fundref.json index 2f23a31..b301d38 100644 --- a/draft/examples/manifest/valid/fundref.json +++ b/draft/examples/manifest/valid/fundref.json @@ -1,8 +1,9 @@ { "versions": ["0.2"], "name": "Open Funder Registry Reconciliation Service", - "identifierSpace": "http://openfunder.crossref.org/openfunder", - "schemaSpace": "http://openfunder.crossref.org/ns/type.object.id", + "view": { + "url": "{+id}" + }, "defaultTypes": [ { "id": "/fundref/funder_name", diff --git a/draft/examples/manifest/valid/geocollider-sinatra.json b/draft/examples/manifest/valid/geocollider-sinatra.json index ae6df0b..67ba9ca 100644 --- a/draft/examples/manifest/valid/geocollider-sinatra.json +++ b/draft/examples/manifest/valid/geocollider-sinatra.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "Pleiades Reconciliation for OpenRefine", - "schemaSpace": "https://pleiades.stoa.org/places/", - "identifierSpace": "https://pleiades.stoa.org/places/vocab#", "view": { "url": "{+id}" }, diff --git a/draft/examples/manifest/valid/getty.json b/draft/examples/manifest/valid/getty.json index 54ebb47..ad33716 100644 --- a/draft/examples/manifest/valid/getty.json +++ b/draft/examples/manifest/valid/getty.json @@ -18,14 +18,12 @@ "name": "Search all Vocabs" } ], - "identifierSpace": "http://vocab.getty.edu/doc/#GVP_URLs_and_Prefixes", "name": "Getty Vocabularies Reconciliation Service", "batchSize": 50, "preview": { "height": 200, "width": 350 }, - "schemaSpace": "http://vocab.getty.edu/doc/#The_Getty_Vocabularies_and_LOD", "suggest": { "entity": false, "property": true, diff --git a/draft/examples/manifest/valid/kerameikos.json b/draft/examples/manifest/valid/kerameikos.json index 76f1591..70dfcb7 100644 --- a/draft/examples/manifest/valid/kerameikos.json +++ b/draft/examples/manifest/valid/kerameikos.json @@ -4,8 +4,6 @@ "view": { "url": "http://kerameikos.org/id/{id}" }, - "identifierSpace": "http://kerameikos.org/id/", - "schemaSpace": "http://kerameikos.org/ontology", "defaultTypes": [ { "id": "skos:Concept", diff --git a/draft/examples/manifest/valid/kew.json b/draft/examples/manifest/valid/kew.json index 761cbce..5e8a7b1 100644 --- a/draft/examples/manifest/valid/kew.json +++ b/draft/examples/manifest/valid/kew.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "IPNI Name Reconciliation Service", - "identifierSpace": "http://ipni.org/urn:lsid:ipni.org:names:", - "schemaSpace": "http://rdf.freebase.com/ns/type.object.id", "view": { "url": "http://ipni.org/urn:lsid:ipni.org:names:{{id}}" }, diff --git a/draft/examples/manifest/valid/lobid-gnd.json b/draft/examples/manifest/valid/lobid-gnd.json index c496d8f..87ae377 100644 --- a/draft/examples/manifest/valid/lobid-gnd.json +++ b/draft/examples/manifest/valid/lobid-gnd.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "GND reconciliation for OpenRefine", - "identifierSpace": "https://lobid.org/gnd/", - "schemaSpace": "https://d-nb.info/standards/elementset/gnd#AuthorityResource", "defaultTypes": [ { "id": "AuthorityResource", diff --git a/draft/examples/manifest/valid/nomisma.json b/draft/examples/manifest/valid/nomisma.json index 3a2f84c..35e82b6 100644 --- a/draft/examples/manifest/valid/nomisma.json +++ b/draft/examples/manifest/valid/nomisma.json @@ -4,8 +4,6 @@ "view": { "url": "http://nomisma.org/id/{{id}}" }, - "identifierSpace": "http://nomisma.org/id/", - "schemaSpace": "http://nomisma.org/ontology", "defaultTypes": [ { "id": "nmo:CoinWear", diff --git a/draft/examples/manifest/valid/occrp.json b/draft/examples/manifest/valid/occrp.json index eb1a8a5..af7544d 100644 --- a/draft/examples/manifest/valid/occrp.json +++ b/draft/examples/manifest/valid/occrp.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "OCCRP Aleph", - "identifierSpace": "http://rdf.freebase.com/ns/type.object.id", - "schemaSpace": "http://rdf.freebase.com/ns/type.object.id", "view": { "url": "https://aleph.occrp.org/entities/{{id}}" }, diff --git a/draft/examples/manifest/valid/ordnance-survey.json b/draft/examples/manifest/valid/ordnance-survey.json index d681aa3..90ee40c 100644 --- a/draft/examples/manifest/valid/ordnance-survey.json +++ b/draft/examples/manifest/valid/ordnance-survey.json @@ -1,8 +1,6 @@ { "versions": ["0.2"], "name": "Code-Point Open Reconciliation API", - "identifierSpace": "http://data.ordnancesurvey.co.uk/id/data/code-point-open", - "schemaSpace": "http://data.ordnancesurvey.co.uk/id/data/code-point-open", "view": { "url": "{{id}}" } diff --git a/draft/examples/manifest/valid/vivo-cornell.json b/draft/examples/manifest/valid/vivo-cornell.json index ed50224..517f126 100644 --- a/draft/examples/manifest/valid/vivo-cornell.json +++ b/draft/examples/manifest/valid/vivo-cornell.json @@ -3,7 +3,6 @@ "view": { "url": "http://vivo.med.cornell.edu/individual?uri={{id}}" }, - "identifierSpace": "http://vivo.med.cornell.edu/individual/", "name": "VIVO Reconciliation Service", "defaultTypes": [ { @@ -34,6 +33,5 @@ "name": "obo:IAO_0000030", "id": "http://purl.obolibrary.org/obo/IAO_0000030" } - ], - "schemaSpace": "http://vivo.med.cornell.edu/individual/" + ] } diff --git a/draft/examples/manifest/valid/wikidata.json b/draft/examples/manifest/valid/wikidata.json index 9755dff..cdaa422 100644 --- a/draft/examples/manifest/valid/wikidata.json +++ b/draft/examples/manifest/valid/wikidata.json @@ -5,7 +5,6 @@ "width": 400, "height": 100 }, - "schemaSpace": "http://www.wikidata.org/prop/direct/", "documentation": "https://tools.wmflabs.org/openrefine-wikidata/", "logo": "https://tools.wmflabs.org/openrefine-wikidata/logo.png", "serviceVersion": "1.2.3", @@ -83,6 +82,5 @@ "type": true, "entity": true, "property": true - }, - "identifierSpace": "http://www.wikidata.org/entity/" + } } diff --git a/draft/index.html b/draft/index.html index fbdba57..b5644d2 100644 --- a/draft/index.html +++ b/draft/index.html @@ -222,7 +222,8 @@

This Draft

@@ -255,7 +256,7 @@

Entities

Moreover, for each property it contains a set of associated property values, possibly empty.

- Reconciliation services can define in their service manifest a URI template for entities, + Reconciliation services MUST define in their service manifest a URI template for entities, as defined by [[RFC6570]]. This URI template builds a view URI for each entity, and has id as only variable. For each entity, expanding the template with id being set to the entity's identifier MUST result in a valid URI. @@ -314,29 +315,6 @@

Property Values

-
-

Identifier and Schema Spaces

-

- A reconciliation service MUST define two URIs, exposed in its service manifest: -

-
identifier space
-
The URI namespace (i.e. prefix) for the identifiers of an entity returned by the reconciliation service, for example http://www.wikidata.org/entity/ or https://d-nb.info/gnd/. This URI MAY resolve to a page describing these entities and their identifiers;
-
schema space
-
A URI which identifies the type of an entity returned by the reconciliation service, for example http://www.w3.org/2004/02/skos/core#Concept or https://schema.org/Thing. This URI MAY resolve to a page describing this type.
-
-

-

- If two different reconciliation services expose the same entities and properties, then - they SHOULD use the same identifier and schema space URIs, signalling that - (for instance) the Data Extension service of the first one can be used on reconciliation candidates by the second one. -

-

- The notions of identifier and schema space - have been inherited from the API's original purpose, when it was specific - to Freebase. Their original meaning was to be understood within Freebase's - own data model. -

-

Service Definition

@@ -362,10 +340,6 @@

Service Manifest

name
A human-readable name for the service, generally the name of the database it exposes. In the case where multiple reconciliation services exist for the same database, it is in the interest of a service to bear a meaningful name which will help disambiguating it from others;
-
identifierSpace
-
The identifier space used by the service, as a URI;
-
schemaSpace
-
The schema space used by the service, as a URI;
defaultTypes
An array of types which are considered sensible default choices as types supplied in reconciliation queries. For services which do not rely on types, this MAY contain a single type with a generic name making it clear that all entities in the database are instances of this type.
@@ -376,7 +350,7 @@

Service Manifest

serviceVersion
An optional string which describes the version of the software exposing this service. This is not to be confused with versions which is about the versions of the reconciliation API supported by the service;
view
-
An optional object which contains a single field url. Its value is a URI template for entities;
+
An object which contains a single field url. Its value is a URI template for entities;
feature_view
An optional object which contains a single field url. Its value is a URI template for matching features;
preview
@@ -906,9 +880,9 @@

Data Extension Responses

The rows object contains, for each entity identifier in the data extension query, for each property identifier in the metadata, the property values of that property in that entity. - If the property values are entities, their identifiers are expected to be in the service's identifier space. - If that is not the case, the service MUST specify in the meta section the endpoint of another reconciliation service whose identifier space - contains the returned entities. This endpoint is specified on a column-per-column basis. + If the property values are entities, their identifiers are expected to be valid entities for the service at hand. + If that is not the case, the service MUST specify in the meta section the endpoint of another reconciliation service for which the entity identifiers are valid, i.e., inserting them into the entity view template of that other service yields valid URIs. + This endpoint is specified on a column-per-column basis.

Response example for the data extension query from the previous example: diff --git a/draft/schemas/manifest.json b/draft/schemas/manifest.json index c720ad8..934410a 100644 --- a/draft/schemas/manifest.json +++ b/draft/schemas/manifest.json @@ -18,14 +18,6 @@ "type": "string", "description": "A human-readable name for the service or data source" }, - "identifierSpace": { - "type": "string", - "description": "A URI describing the entity identifiers used in this service" - }, - "schemaSpace": { - "type": "string", - "description": "A URI describing the schema used in this service" - }, "documentation": { "type": "string", "description": "A URI which hosts documentation about this service" @@ -267,7 +259,6 @@ "required": [ "versions", "name", - "identifierSpace", - "schemaSpace" + "view" ] }