diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fbf32c2..4edc7d41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Add the concept of "propagatable slots". - Add the `curie_map` to the model (instead of it being a specificity of the SSSOM/TSV format). - Add the concept of "extension slots". +- Add the concept of "literal mappings". - Add the entity reference `sssom:NoTermFound` to express the concept of an "unmapped entity" ([issue](https://github.com/mapping-commons/sssom/issues/28)) - Replace `semantic_similarity_score` with `similarity_score` and `semantic_similarity_measure` with `similarity_measure` in the data model ([issue](https://github.com/mapping-commons/sssom/issues/385)) diff --git a/examples/schema/literals.sssom.tsv b/examples/schema/literals.sssom.tsv new file mode 100644 index 00000000..e62160e4 --- /dev/null +++ b/examples/schema/literals.sssom.tsv @@ -0,0 +1,9 @@ +#curie_map: +# COMENT: https://example.com/entities/ +#mapping_set_id: https://example.org/sets/literal-mappings +#license: https://creativecommons.org/licenses/by/4.0/ +subject_label predicate_id object_id object_label mapping_justification subject_type +alice skos:closeMatch COMENT:0011 alpha semapv:ManualMappingCuration rdfs literal +bob skos:closeMatch COMENT:0012 beta semapv:ManualMappingCuration rdfs literal +daphne skos:closeMatch COMENT:0014 delta semapv:ManualMappingCuration rdfs literal +eve skos:closeMatch COMENT:0015 epsilon semapv:ManualMappingCuration rdfs literal diff --git a/mkdocs.yml b/mkdocs.yml index ed017174..3e90c221 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -33,7 +33,6 @@ nav: - Introduction: spec-model.md - Applying Chaining Rules: chaining-rules.md - LinkML documentation: linkml-index.md - - SSSOM profiles: sssom-profiles.md - Serialisations: - Introduction: spec-formats.md - SSSOM/TSV serialisation: spec-formats-tsv.md diff --git a/src/docs/spec-model.md b/src/docs/spec-model.md index 5a0e491b..4d12341d 100644 --- a/src/docs/spec-model.md +++ b/src/docs/spec-model.md @@ -92,6 +92,25 @@ In addition, predicates from the following sources MAY also be encouraged: * any relation under [skos:mappingRelation](http://www.w3.org/2004/02/skos/core#mappingRelation) in the [Semantic Mapping Vocabulary](https://mapping-commons.github.io/semantic-mapping-vocabulary/). +## Literal mappings + + + +The SSSOM model is primarily intended to represent mappings between semantic entities. However, it may also be used to represent mappings where at least one side is a literal string that does not have an identifier of its own. Any such mapping is henceforth called a _literal mapping_. + +To represent a mapping whose subject (resp. object) is a literal: + +* the `subject_type` (resp. `object_type`) slot MUST be set to `rdfs literal`; +* the `subject_label` (resp. `object_label`) slot MUST be set to the literal itself; +* the `subject_id` (resp. `object_id`) slot MAY be left empty. + +The last point is an exception to the normal rules about required slots, which state that a mapping must always have a `subject_id` and an `object_id`. Implementations MUST accept a mapping without a `subject_id` (resp. `object_id`) _if and only if_ the `subject_type` (resp. `object_type`) slot is set to `rdfs literal`. + +All other slots in the `Mapping` class may be used normally in a literal mapping, with the same meaning as for a non-literal mapping. + +When computing the cardinality of mappings in a set (e.g. to set the value of the `mapping_cardinality` slot), if the mapping has a literal subject (resp. object), then the `subject_label` (resp. `object_label`) slot must be used for determining the number of occurrences of the subject (resp. object) in the set. + + ## Representing unmapped entities The special value `sssom:NoTermFound` MAY be used as the `object_id` of a mapping to explicitly state that the subject of said mapping cannot be mapped to any entity in the domain represented by the `object_source` slot. diff --git a/src/docs/sssom-profiles.md b/src/docs/sssom-profiles.md deleted file mode 100644 index b46e838d..00000000 --- a/src/docs/sssom-profiles.md +++ /dev/null @@ -1,17 +0,0 @@ -## SSSOM Profiles - -- [Literal Mappings](#literal) - - - -### Literal Mappings - -The SSSOM profile for literal mappings is a version of SSSOM that allows the dissemination and standardisation of mappings between identifers and literals. - -As of 01.08.2023, the first version of this profile has been published, and it is still subject to change. We recommend to reach out on the [SSSOM issue tracker](https://github.com/mapping-commons/sssom/issues) if you are interested in using the literal profile. Note: we dont expect there to be any major breaking changes. - -**Demand better docs now**: https://github.com/mapping-commons/sssom/issues - -- [Slides](https://docs.google.com/presentation/d/1mBZK6KS7JgmXlEtszQiOa_Cl7SXg_Z8wRp0tZHaL57Y/edit) -- [PR](https://github.com/mapping-commons/sssom/pull/235) -- [Recording/discussion](events/mc2023.md) \ No newline at end of file diff --git a/src/sssom_schema/schema/sssom_schema.yaml b/src/sssom_schema/schema/sssom_schema.yaml index e30103dd..099e8928 100644 --- a/src/sssom_schema/schema/sssom_schema.yaml +++ b/src/sssom_schema/schema/sssom_schema.yaml @@ -45,10 +45,16 @@ enums: meaning: rdfs:Class rdfs literal: meaning: rdfs:Literal + description: This value indicate that the entity being mapped is not a semantic entity with a distinct identifier, but is instead represented entirely by its literal label. This value MUST NOT be used in the predicate_type slot. + see_also: + - https://mapping-commons.github.io/sssom/spec-model/#literal-mappings + - https://github.com/mapping-commons/sssom/issues/234 + - https://github.com/mapping-commons/sssom/blob/master/examples/schema/literals.sssom.tsv rdfs datatype: meaning: rdfs:Datatype rdf property: meaning: rdf:Property + predicate_modifier_enum: permissible_values: Not: Negating the mapping predicate. The meaning of the triple becomes subject_id is not a predicate_id match to object_id. @@ -132,7 +138,6 @@ slots: subject_id: description: The ID of the subject of the mapping. range: EntityReference - required: true mappings: - owl:annotatedSource slot_uri: owl:annotatedSource @@ -231,7 +236,6 @@ slots: mappings: - owl:annotatedTarget range: EntityReference - required: true slot_uri: owl:annotatedTarget examples: - value: HP:0009894 @@ -689,6 +693,41 @@ classes: - other - comment class_uri: owl:Axiom + rules: + - preconditions: + slot_conditions: + subject_type: + equals_string: "rdfs literal" + postconditions: + slot_conditions: + subject_label: + required: true + - preconditions: + slot_conditions: + subject_type: + none_of: + equals_string: "rdfs literal" + postconditions: + slot_conditions: + subject_id: + required: true + - preconditions: + slot_conditions: + object_type: + equals_string: "rdfs literal" + postconditions: + slot_conditions: + object_label: + required: true + - preconditions: + slot_conditions: + object_type: + none_of: + equals_string: "rdfs literal" + postconditions: + slot_conditions: + object_id: + required: true mapping registry: description: A registry for managing mapping sets. It holds a set of mapping set references, and can import other registries.