diff --git a/project/excel/sssom_schema.xlsx b/project/excel/sssom_schema.xlsx index 46402f7f..d5d40da4 100644 Binary files a/project/excel/sssom_schema.xlsx and b/project/excel/sssom_schema.xlsx differ diff --git a/project/graphql/sssom_schema.graphql b/project/graphql/sssom_schema.graphql index 981c1a59..4f9be415 100644 --- a/project/graphql/sssom_schema.graphql +++ b/project/graphql/sssom_schema.graphql @@ -24,11 +24,14 @@ type Mapping objectSource: EntityReference objectSourceVersion: String mappingProvider: Uri + mappingSource: EntityReference mappingCardinality: MappingCardinalityEnum mappingTool: String mappingToolVersion: String mappingDate: Date confidence: Double + curationRule: [EntityReference] + curationRuleText: [String] subjectMatchField: [EntityReference] objectMatchField: [EntityReference] matchString: [String] @@ -44,6 +47,8 @@ type Mapping type MappingRegistry { mappingRegistryId: EntityReference! + mappingRegistryTitle: String + mappingRegistryDescription: String imports: [Uri] mappingSetReferences: [MappingSetReference] documentation: Uri @@ -56,6 +61,7 @@ type MappingSet mappingSetId: Uri! mappingSetVersion: String mappingSetSource: [Uri] + mappingSetTitle: String mappingSetDescription: String creatorId: [EntityReference] creatorLabel: [String] diff --git a/project/jsonld/sssom_schema.context.jsonld b/project/jsonld/sssom_schema.context.jsonld index 9085b824..38dfa95f 100644 --- a/project/jsonld/sssom_schema.context.jsonld +++ b/project/jsonld/sssom_schema.context.jsonld @@ -1,5 +1,5 @@ { - "_comments": "Auto generated from sssom_schema.yaml by jsonldcontextgen.py version: 0.1.1\n Generation date: 2022-06-07T11:23:12\n Schema: sssom\n metamodel version: 1.7.0\n model version: None\n \n id: https://w3id.org/sssom/schema/\n description: Datamodel for Simple Standard for Sharing Ontological Mappings (SSSOM)\n license: https://creativecommons.org/publicdomain/zero/1.0/\n ", + "_comments": "Auto generated from sssom_schema.yaml by jsonldcontextgen.py version: 0.1.1\n Generation date: 2023-03-16T14:57:33\n Schema: sssom\n metamodel version: 1.7.0\n model version: None\n \n id: https://w3id.org/sssom/schema/\n description: Datamodel for Simple Standard for Sharing Ontological Mappings (SSSOM)\n license: https://creativecommons.org/publicdomain/zero/1.0/\n ", "@context": { "dc": "http://purl.org/dc/terms/", "dcterms": "http://purl.org/dc/terms/", @@ -28,6 +28,9 @@ "@type": "rdfs:Resource", "@id": "dc:creator" }, + "curation_rule": { + "@type": "rdfs:Resource" + }, "documentation": { "@type": "@id" }, @@ -78,6 +81,9 @@ "@type": "@id", "@id": "prov:wasDerivedFrom" }, + "mapping_set_title": { + "@id": "dc:title" + }, "mapping_set_version": { "@id": "owl:versionInfo" }, diff --git a/project/jsonld/sssom_schema.jsonld b/project/jsonld/sssom_schema.jsonld index 40a65d5d..f1393cae 100644 --- a/project/jsonld/sssom_schema.jsonld +++ b/project/jsonld/sssom_schema.jsonld @@ -72,6 +72,9 @@ "description": "A character string", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Text" + ], "base": "str", "uri": "http://www.w3.org/2001/XMLSchema#string", "@type": "TypeDefinition" @@ -82,6 +85,9 @@ "description": "An integer", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Integer" + ], "base": "int", "uri": "http://www.w3.org/2001/XMLSchema#integer", "@type": "TypeDefinition" @@ -92,6 +98,9 @@ "description": "A binary (true or false) value", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Boolean" + ], "base": "Bool", "uri": "http://www.w3.org/2001/XMLSchema#boolean", "repr": "bool", @@ -103,6 +112,9 @@ "description": "A real number that conforms to the xsd:float specification", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Float" + ], "base": "float", "uri": "http://www.w3.org/2001/XMLSchema#float", "@type": "TypeDefinition" @@ -113,6 +125,9 @@ "description": "A real number that conforms to the xsd:double specification", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "close_mappings": [ + "schema:Float" + ], "base": "float", "uri": "http://www.w3.org/2001/XMLSchema#double", "@type": "TypeDefinition" @@ -123,6 +138,9 @@ "description": "A real number with arbitrary precision that conforms to the xsd:decimal specification", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "broad_mappings": [ + "schema:Number" + ], "base": "Decimal", "uri": "http://www.w3.org/2001/XMLSchema#decimal", "@type": "TypeDefinition" @@ -132,10 +150,13 @@ "definition_uri": "https://w3id.org/linkml/Time", "description": "A time object represents a (local) time of day, independent of any particular day", "notes": [ - "URI is dateTime because OWL reasoners don't work with straight date or time" + "URI is dateTime because OWL reasoners do not work with straight date or time" ], "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Time" + ], "base": "XSDTime", "uri": "http://www.w3.org/2001/XMLSchema#dateTime", "repr": "str", @@ -150,6 +171,9 @@ ], "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:Date" + ], "base": "XSDDate", "uri": "http://www.w3.org/2001/XMLSchema#date", "repr": "str", @@ -161,11 +185,25 @@ "description": "The combination of a date and time", "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "exact_mappings": [ + "schema:DateTime" + ], "base": "XSDDateTime", "uri": "http://www.w3.org/2001/XMLSchema#dateTime", "repr": "str", "@type": "TypeDefinition" }, + { + "name": "date_or_datetime", + "definition_uri": "https://w3id.org/linkml/DateOrDatetime", + "description": "Either a date or a datetime", + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "str", + "uri": "https://w3id.org/linkml/DateOrDatetime", + "repr": "str", + "@type": "TypeDefinition" + }, { "name": "uriorcurie", "definition_uri": "https://w3id.org/linkml/Uriorcurie", @@ -177,12 +215,35 @@ "repr": "str", "@type": "TypeDefinition" }, + { + "name": "curie", + "definition_uri": "https://w3id.org/linkml/Curie", + "conforms_to": "https://www.w3.org/TR/curie/", + "description": "a compact URI", + "comments": [ + "in RDF serializations this MUST be expanded to a URI", + "in non-RDF serializations MAY be serialized as the compact representation" + ], + "from_schema": "https://w3id.org/linkml/types", + "imported_from": "linkml:types", + "base": "Curie", + "uri": "http://www.w3.org/2001/XMLSchema#string", + "repr": "str", + "@type": "TypeDefinition" + }, { "name": "uri", "definition_uri": "https://w3id.org/linkml/Uri", + "conforms_to": "https://www.ietf.org/rfc/rfc3987.txt", "description": "a complete URI", + "comments": [ + "in RDF serializations a slot with range of uri is treated as a literal or type xsd:anyURI unless it is an identifier or a reference to an identifier, in which case it is translated directly to a node" + ], "from_schema": "https://w3id.org/linkml/types", "imported_from": "linkml:types", + "close_mappings": [ + "schema:URL" + ], "base": "URI", "uri": "http://www.w3.org/2001/XMLSchema#anyURI", "repr": "str", @@ -403,6 +464,32 @@ "required": true, "@type": "SlotDefinition" }, + { + "name": "mapping_registry_title", + "definition_uri": "https://w3id.org/sssom/mapping_registry_title", + "description": "The title of a mapping registry.", + "from_schema": "https://w3id.org/sssom/schema/", + "slot_uri": "https://w3id.org/sssom/mapping_registry_title", + "owner": "MappingRegistry", + "domain_of": [ + "MappingRegistry" + ], + "range": "string", + "@type": "SlotDefinition" + }, + { + "name": "mapping_registry_description", + "definition_uri": "https://w3id.org/sssom/mapping_registry_description", + "description": "The description of a mapping registry.", + "from_schema": "https://w3id.org/sssom/schema/", + "slot_uri": "https://w3id.org/sssom/mapping_registry_description", + "owner": "MappingRegistry", + "domain_of": [ + "MappingRegistry" + ], + "range": "string", + "@type": "SlotDefinition" + }, { "name": "imports", "definition_uri": "https://w3id.org/sssom/imports", @@ -508,13 +595,18 @@ { "name": "subject_category", "definition_uri": "https://w3id.org/sssom/subject_category", - "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary.", + "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases.", "examples": [ { "value": "UBERON:0001062", "description": "(The CURIE of the Uberon term for \"anatomical entity\".)", "@type": "Example" }, + { + "value": "anatomical entity", + "description": "(A string, rather than ID, describing the \"anatomical entity\" category. This is possible, but less preferred than using an ID.)", + "@type": "Example" + }, { "value": "biolink:Gene", "description": "(The CURIE of the biolink class for genes.)", @@ -522,6 +614,10 @@ } ], "from_schema": "https://w3id.org/sssom/schema/", + "see_also": [ + "https://github.com/mapping-commons/sssom/issues/13", + "https://github.com/mapping-commons/sssom/issues/256" + ], "slot_uri": "https://w3id.org/sssom/subject_category", "owner": "Mapping", "domain_of": [ @@ -586,6 +682,9 @@ } ], "from_schema": "https://w3id.org/sssom/schema/", + "see_also": [ + "https://github.com/mapping-commons/sssom/issues/107" + ], "slot_uri": "https://w3id.org/sssom/predicate_modifier", "owner": "Mapping", "domain_of": [ @@ -650,7 +749,7 @@ "@type": "Example" }, { - "value": "oboInOwl:database_cross_reference", + "value": "oboInOwl:hasDbXref", "description": "Two terms are related in some way. The meaning is frequently consistent across a single set of mappings. Note this property is often overloaded even where the terms are of a different nature (e.g. interpro2go)", "@type": "Example" }, @@ -736,13 +835,18 @@ { "name": "object_category", "definition_uri": "https://w3id.org/sssom/object_category", - "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary.", + "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases.", "examples": [ { "value": "UBERON:0001062", "description": "(The CURIE of the Uberon term for \"anatomical entity\".)", "@type": "Example" }, + { + "value": "anatomical entity", + "description": "(A string, rather than ID, describing the \"anatomical entity\" category. This is possible, but less preferred than using an ID.)", + "@type": "Example" + }, { "value": "biolink:Gene", "description": "(The CURIE of the biolink class for genes.)", @@ -750,6 +854,10 @@ } ], "from_schema": "https://w3id.org/sssom/schema/", + "see_also": [ + "https://github.com/mapping-commons/sssom/issues/13", + "https://github.com/mapping-commons/sssom/issues/256" + ], "slot_uri": "https://w3id.org/sssom/object_category", "owner": "Mapping", "domain_of": [ @@ -904,6 +1012,28 @@ "range": "string", "@type": "SlotDefinition" }, + { + "name": "mapping_set_title", + "definition_uri": "https://w3id.org/sssom/mapping_set_title", + "description": "The display name of a mapping set.", + "examples": [ + { + "value": "The Mondo-OMIM mappings by Monarch Initiative.", + "@type": "Example" + } + ], + "from_schema": "https://w3id.org/sssom/schema/", + "mappings": [ + "http://purl.org/dc/terms/title" + ], + "slot_uri": "http://purl.org/dc/terms/title", + "owner": "MappingSet", + "domain_of": [ + "MappingSet" + ], + "range": "string", + "@type": "SlotDefinition" + }, { "name": "mapping_set_description", "definition_uri": "https://w3id.org/sssom/mapping_set_description", @@ -1179,6 +1309,10 @@ ], "from_schema": "https://w3id.org/sssom/schema/", "slot_uri": "https://w3id.org/sssom/mapping_source", + "owner": "Mapping", + "domain_of": [ + "Mapping" + ], "range": "EntityReference", "@type": "SlotDefinition" }, @@ -1370,6 +1504,44 @@ "range": "EntityReference", "@type": "SlotDefinition" }, + { + "name": "curation_rule", + "definition_uri": "https://w3id.org/sssom/curation_rule", + "description": "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule is captured as a resource rather than a string, which enables higher levels of transparency and sharing across mapping sets. The URI representation of the curation rule is expected to be a resolvable identifier which provides details about the nature of the curation rule.", + "from_schema": "https://w3id.org/sssom/schema/", + "see_also": [ + "https://github.com/mapping-commons/sssom/issues/166", + "https://github.com/mapping-commons/sssom/pull/258", + "https://github.com/mapping-commons/sssom/blob/master/examples/schema/curation_rule.sssom.tsv" + ], + "slot_uri": "https://w3id.org/sssom/curation_rule", + "multivalued": true, + "owner": "Mapping", + "domain_of": [ + "Mapping" + ], + "range": "EntityReference", + "@type": "SlotDefinition" + }, + { + "name": "curation_rule_text", + "definition_uri": "https://w3id.org/sssom/curation_rule_text", + "description": "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule should be captured as a resource (entity reference) rather than a string (see curation_rule element), which enables higher levels of transparency and sharing across mapping sets. The textual representation of curation rule is intended to be used in cases where (1) the creation of a resource is not practical from the perspective of the mapping_provider and (2) as an additional piece of metadata to augment the curation_rule element with a human readable text.", + "from_schema": "https://w3id.org/sssom/schema/", + "see_also": [ + "https://github.com/mapping-commons/sssom/issues/166", + "https://github.com/mapping-commons/sssom/pull/258", + "https://github.com/mapping-commons/sssom/blob/master/examples/schema/curation_rule_text.sssom.tsv" + ], + "slot_uri": "https://w3id.org/sssom/curation_rule_text", + "multivalued": true, + "owner": "Mapping", + "domain_of": [ + "Mapping" + ], + "range": "string", + "@type": "SlotDefinition" + }, { "name": "semantic_similarity_score", "definition_uri": "https://w3id.org/sssom/semantic_similarity_score", @@ -1486,6 +1658,7 @@ "mapping_set_id", "mapping_set_version", "mapping_set_source", + "mapping_set_title", "mapping_set_description", "creator_id", "creator_label", @@ -1544,11 +1717,14 @@ "object_source", "object_source_version", "mapping_provider", + "mapping_source", "mapping_cardinality", "mapping_tool", "mapping_tool_version", "mapping_date", "confidence", + "curation_rule", + "curation_rule_text", "subject_match_field", "object_match_field", "match_string", @@ -1571,6 +1747,8 @@ "from_schema": "https://w3id.org/sssom/schema/", "slots": [ "mapping_registry_id", + "mapping_registry_title", + "mapping_registry_description", "imports", "mapping_set_references", "documentation", @@ -1600,9 +1778,9 @@ ], "metamodel_version": "1.7.0", "source_file": "sssom_schema.yaml", - "source_file_date": "2022-06-07T11:14:57", - "source_file_size": 21401, - "generation_date": "2022-06-07T11:23:13", + "source_file_date": "2023-03-16T13:09:31", + "source_file_size": 25619, + "generation_date": "2023-03-16T14:57:34", "@type": "SchemaDefinition", "@context": [ "project/jsonld/sssom_schema.context.jsonld", diff --git a/project/jsonschema/sssom_schema.schema.json b/project/jsonschema/sssom_schema.schema.json index 27d99efc..448a4bb9 100644 --- a/project/jsonschema/sssom_schema.schema.json +++ b/project/jsonschema/sssom_schema.schema.json @@ -58,6 +58,20 @@ }, "type": "array" }, + "curation_rule": { + "description": "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule is captured as a resource rather than a string, which enables higher levels of transparency and sharing across mapping sets. The URI representation of the curation rule is expected to be a resolvable identifier which provides details about the nature of the curation rule.", + "items": { + "type": "string" + }, + "type": "array" + }, + "curation_rule_text": { + "description": "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule should be captured as a resource (entity reference) rather than a string (see curation_rule element), which enables higher levels of transparency and sharing across mapping sets. The textual representation of curation rule is intended to be used in cases where (1) the creation of a resource is not practical from the perspective of the mapping_provider and (2) as an additional piece of metadata to augment the curation_rule element with a human readable text.", + "items": { + "type": "string" + }, + "type": "array" + }, "license": { "description": "A url to the license of the mapping. In absence of a license we assume no license.", "type": "string" @@ -80,6 +94,10 @@ "description": "URL pointing to the source that provided the mapping, for example an ontology that already contains the mappings, or a database from which it was derived.", "type": "string" }, + "mapping_source": { + "description": "The mapping set this mapping was originally defined in. mapping_source is used for example when merging multiple mapping sets or deriving one mapping set from another.", + "type": "string" + }, "mapping_tool": { "description": "A reference to the tool or algorithm that was used to generate the mapping. Should be a URL pointing to more info about it, but can be free text.", "type": "string" @@ -96,7 +114,7 @@ "type": "array" }, "object_category": { - "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary.", + "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases.", "type": "string" }, "object_id": { @@ -179,7 +197,7 @@ "type": "number" }, "subject_category": { - "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary.", + "description": "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases.", "type": "string" }, "subject_id": { @@ -258,10 +276,18 @@ }, "type": "array" }, + "mapping_registry_description": { + "description": "The description of a mapping registry.", + "type": "string" + }, "mapping_registry_id": { "description": "The unique identifier of a mapping registry.", "type": "string" }, + "mapping_registry_title": { + "description": "The title of a mapping registry.", + "type": "string" + }, "mapping_set_references": { "description": "A list of mapping set references.", "items": { @@ -326,6 +352,10 @@ }, "type": "array" }, + "mapping_set_title": { + "description": "The display name of a mapping set.", + "type": "string" + }, "mapping_set_version": { "description": "A version string for the mapping.", "type": "string" diff --git a/project/owl/sssom_schema.owl.ttl b/project/owl/sssom_schema.owl.ttl index c4108908..c0a767dc 100644 --- a/project/owl/sssom_schema.owl.ttl +++ b/project/owl/sssom_schema.owl.ttl @@ -16,13 +16,6 @@ linkml:SubsetDefinition a owl:Class ; linkml:topValue a owl:DatatypeProperty ; rdfs:label "value" . -sssom:mapping_source a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "mapping_source" ; - rdfs:range sssom:EntityReference ; - skos:definition "The mapping set this mapping was originally defined in. mapping_source is used for example when merging multiple mapping sets or deriving one mapping set from another." ; - linkml:examples "Example(value='MONDO_MAPPINGS:mondo_exactmatch_ncit.sssom.tsv', description=None)" . - sssom:predicate_type a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "predicate_type" ; @@ -40,11 +33,11 @@ sssom:predicate_type a owl:ObjectProperty, dcterms:license "https://creativecommons.org/publicdomain/zero/1.0/" ; rdfs:seeAlso "https://github.com/mapping-commons/sssom", "https://mapping-commons.github.io/sssom/home/" ; - linkml:generation_date "2022-06-07T11:23:18" ; + linkml:generation_date "2023-03-16T14:57:38" ; linkml:metamodel_version "1.7.0" ; linkml:source_file "sssom_schema.yaml" ; - linkml:source_file_date "2022-06-07T11:14:57" ; - linkml:source_file_size 21401 . + linkml:source_file_date "2023-03-16T13:09:31" ; + linkml:source_file_size 25619 . dcterms:created a owl:ObjectProperty, linkml:SlotDefinition ; @@ -60,115 +53,127 @@ sssom:MappingRegistry a owl:Class, linkml:ClassDefinition ; rdfs:label "mapping registry" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass sssom:EntityReference ; - owl:onProperty sssom:mapping_registry_id ; - owl:qualifiedCardinality 1 ], + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty sssom:mapping_registry_title ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Uri ; owl:onProperty sssom:documentation ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty sssom:imports ], + owl:onClass sssom:EntityReference ; + owl:onProperty sssom:mapping_registry_id ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:allValuesFrom sssom:MappingSetReference ; owl:onProperty sssom:mapping_set_references ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Uri ; - owl:onProperty sssom:homepage ] ; + owl:onProperty sssom:homepage ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uri ; + owl:onProperty sssom:imports ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty sssom:mapping_registry_description ] ; skos:definition "A registry for managing mapping sets. It holds a set of mapping set references, and can import other registries." . sssom:MappingSet a owl:Class, linkml:ClassDefinition ; rdfs:label "mapping set" ; rdfs:subClassOf [ a owl:Restriction ; - owl:onClass linkml:Uri ; - owl:onProperty dcterms:license ; - owl:qualifiedCardinality 1 ], + owl:allValuesFrom linkml:String ; + owl:onProperty rdfs:seeAlso ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:EntityReference ; - owl:onProperty sssom:object_source ], - [ a owl:Restriction ; owl:onClass linkml:Uri ; - owl:onProperty sssom:mapping_set_id ; - owl:qualifiedCardinality 1 ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uri ; - owl:onProperty prov:wasDerivedFrom ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty sssom:object_match_field ], + owl:onProperty sssom:mapping_provider ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:EntityTypeEnum ; - owl:onProperty sssom:object_type ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty sssom:subject_match_field ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty dcterms:creator ], + owl:onClass linkml:Date ; + owl:onProperty pav:authoredOn ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:EntityReference ; - owl:onProperty sssom:subject_source ], + owl:onClass linkml:String ; + owl:onProperty sssom:mapping_tool ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty dcterms:description ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Date ; - owl:onProperty pav:authoredOn ], + owl:onClass sssom:EntityTypeEnum ; + owl:onProperty sssom:object_type ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:Mapping ; + owl:onProperty sssom:mappings ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty sssom:subject_source_version ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty rdfs:seeAlso ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty sssom:subject_preprocessing ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty rdfs:comment ], + owl:onProperty owl:versionInfo ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty sssom:object_source_version ], + [ a owl:Restriction ; + owl:onClass linkml:Uri ; + owl:onProperty dcterms:license ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:other ], + owl:onProperty rdfs:comment ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:EntityTypeEnum ; - owl:onProperty sssom:subject_type ], + owl:onClass sssom:EntityReference ; + owl:onProperty sssom:object_source ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty sssom:creator_label ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty sssom:subject_match_field ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty sssom:object_match_field ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty owl:versionInfo ], + owl:onProperty sssom:other ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Uri ; - owl:onProperty sssom:mapping_provider ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:Mapping ; - owl:onProperty sssom:mappings ], + owl:onClass sssom:EntityReference ; + owl:onProperty sssom:subject_source ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:mapping_tool ], + owl:onProperty dcterms:title ], + [ a owl:Restriction ; + owl:onClass linkml:Uri ; + owl:onProperty sssom:mapping_set_id ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:allValuesFrom sssom:EntityReference ; - owl:onProperty sssom:object_preprocessing ] ; + owl:onProperty sssom:subject_preprocessing ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uri ; + owl:onProperty prov:wasDerivedFrom ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty dcterms:creator ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty sssom:object_preprocessing ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass sssom:EntityTypeEnum ; + owl:onProperty sssom:subject_type ] ; skos:definition "Represents a set of mappings" . sssom:author_label a owl:ObjectProperty, @@ -183,6 +188,24 @@ sssom:confidence a owl:ObjectProperty, rdfs:range linkml:Double ; skos:definition "A score between 0 and 1 to denote the confidence or probability that the match is correct, where 1 denotes total confidence." . +sssom:curation_rule a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "curation_rule" ; + rdfs:range sssom:EntityReference ; + rdfs:seeAlso "https://github.com/mapping-commons/sssom/blob/master/examples/schema/curation_rule.sssom.tsv", + "https://github.com/mapping-commons/sssom/issues/166", + "https://github.com/mapping-commons/sssom/pull/258" ; + skos:definition "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule is captured as a resource rather than a string, which enables higher levels of transparency and sharing across mapping sets. The URI representation of the curation rule is expected to be a resolvable identifier which provides details about the nature of the curation rule." . + +sssom:curation_rule_text a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "curation_rule_text" ; + rdfs:range linkml:String ; + rdfs:seeAlso "https://github.com/mapping-commons/sssom/blob/master/examples/schema/curation_rule_text.sssom.tsv", + "https://github.com/mapping-commons/sssom/issues/166", + "https://github.com/mapping-commons/sssom/pull/258" ; + skos:definition "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule should be captured as a resource (entity reference) rather than a string (see curation_rule element), which enables higher levels of transparency and sharing across mapping sets. The textual representation of curation rule is intended to be used in cases where (1) the creation of a resource is not practical from the perspective of the mapping_provider and (2) as an additional piece of metadata to augment the curation_rule element with a human readable text." . + sssom:documentation a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "documentation" ; @@ -227,12 +250,24 @@ sssom:mapping_justification a owl:ObjectProperty, linkml:examples "Example(value='semapv:LexicalMatching', description=None)", "Example(value='semapv:ManualMappingCuration', description=None)" . +sssom:mapping_registry_description a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "mapping_registry_description" ; + rdfs:range linkml:String ; + skos:definition "The description of a mapping registry." . + sssom:mapping_registry_id a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "mapping_registry_id" ; rdfs:range sssom:EntityReference ; skos:definition "The unique identifier of a mapping registry." . +sssom:mapping_registry_title a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "mapping_registry_title" ; + rdfs:range linkml:String ; + skos:definition "The title of a mapping registry." . + sssom:mapping_set_group a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "mapping_set_group" ; @@ -245,6 +280,13 @@ sssom:mapping_set_references a owl:ObjectProperty, rdfs:range sssom:MappingSetReference ; skos:definition "A list of mapping set references." . +sssom:mapping_source a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "mapping_source" ; + rdfs:range sssom:EntityReference ; + skos:definition "The mapping set this mapping was originally defined in. mapping_source is used for example when merging multiple mapping sets or deriving one mapping set from another." ; + linkml:examples "Example(value='MONDO_MAPPINGS:mondo_exactmatch_ncit.sssom.tsv', description=None)" . + sssom:mapping_tool_version a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "mapping_tool_version" ; @@ -274,8 +316,11 @@ sssom:object_category a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "object_category" ; rdfs:range linkml:String ; - skos:definition "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary." ; + rdfs:seeAlso "https://github.com/mapping-commons/sssom/issues/13", + "https://github.com/mapping-commons/sssom/issues/256" ; + skos:definition "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases." ; linkml:examples "Example(value='UBERON:0001062', description='(The CURIE of the Uberon term for \"anatomical entity\".)')", + "Example(value='anatomical entity', description='(A string, rather than ID, describing the \"anatomical entity\" category. This is possible, but less preferred than using an ID.)')", "Example(value='biolink:Gene', description='(The CURIE of the biolink class for genes.)')" . sssom:object_label a owl:ObjectProperty, @@ -290,7 +335,7 @@ sssom:predicate_label a owl:ObjectProperty, rdfs:label "predicate_label" ; rdfs:range linkml:String ; skos:definition "The label of the predicate/relation of the mapping" ; - linkml:examples "Example(value='oboInOwl:database_cross_reference', description='Two terms are related in some way. The meaning is frequently consistent across a single set of mappings. Note this property is often overloaded even where the terms are of a different nature (e.g. interpro2go)')", + linkml:examples "Example(value='oboInOwl:hasDbXref', description='Two terms are related in some way. The meaning is frequently consistent across a single set of mappings. Note this property is often overloaded even where the terms are of a different nature (e.g. interpro2go)')", "Example(value='owl:equivalentClass', description='The subject and the object are classes (owl class), and the two classes are the same.')", "Example(value='owl:equivalentProperty', description='The subject and the object are properties (owl object, data, annotation properties), and the two properties are the same.')", "Example(value='owl:sameAs', description='The subject and the object are instances (owl individuals), and the two instances are the same.')", @@ -307,6 +352,7 @@ sssom:predicate_modifier a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "predicate_modifier" ; rdfs:range sssom:PredicateModifierEnum ; + rdfs:seeAlso "https://github.com/mapping-commons/sssom/issues/107" ; skos:definition "A modifier for negating the prediate. See https://github.com/mapping-commons/sssom/issues/40 for discussion" ; linkml:examples "Example(value='Not', description='Negates the predicate, see documentation of predicate_modifier_enum')" . @@ -345,8 +391,11 @@ sssom:subject_category a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "subject_category" ; rdfs:range linkml:String ; - skos:definition "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary." ; + rdfs:seeAlso "https://github.com/mapping-commons/sssom/issues/13", + "https://github.com/mapping-commons/sssom/issues/256" ; + skos:definition "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases." ; linkml:examples "Example(value='UBERON:0001062', description='(The CURIE of the Uberon term for \"anatomical entity\".)')", + "Example(value='anatomical entity', description='(A string, rather than ID, describing the \"anatomical entity\" category. This is possible, but less preferred than using an ID.)')", "Example(value='biolink:Gene', description='(The CURIE of the biolink class for genes.)')" . sssom:subject_label a owl:ObjectProperty, @@ -364,6 +413,14 @@ dcterms:description a owl:ObjectProperty, skos:exactMatch dcterms:description ; linkml:examples "Example(value='This mapping set was produced to integrate human and mouse phenotype data at the IMPC. It is primarily used for making mouse phenotypes searchable by human synonyms at https://mousephenotype.org/.', description=None)" . +dcterms:title a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "mapping_set_title" ; + rdfs:range linkml:String ; + skos:definition "The display name of a mapping set." ; + skos:exactMatch dcterms:title ; + linkml:examples "Example(value='The Mondo-OMIM mappings by Monarch Initiative.', description=None)" . + pav:authoredBy a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "author_id" ; @@ -619,149 +676,159 @@ sssom:Mapping a owl:Class, linkml:ClassDefinition ; rdfs:label "mapping" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty sssom:subject_match_field ], + owl:onClass sssom:EntityReference ; + owl:onProperty owl:annotatedTarget ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty sssom:reviewer_label ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty sssom:subject_category ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:String ; + owl:onProperty sssom:object_category ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass sssom:EntityReference ; - owl:onProperty sssom:object_source ], + owl:onProperty sssom:mapping_source ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:MappingCardinalityEnum ; - owl:onProperty sssom:mapping_cardinality ], + owl:onClass linkml:Double ; + owl:onProperty sssom:confidence ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty sssom:semantic_similarity_measure ], + owl:onClass linkml:Date ; + owl:onProperty pav:authoredOn ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty sssom:reviewer_id ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Uri ; - owl:onProperty dcterms:license ], + owl:onProperty sssom:mapping_provider ], [ a owl:Restriction ; owl:allValuesFrom sssom:EntityReference ; owl:onProperty sssom:object_match_field ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty sssom:mapping_tool_version ], + owl:onClass sssom:EntityTypeEnum ; + owl:onProperty sssom:subject_type ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty sssom:other ], + owl:onClass sssom:EntityReference ; + owl:onProperty sssom:object_source ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty sssom:mapping_tool ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty sssom:reviewer_id ], + owl:onClass sssom:MappingCardinalityEnum ; + owl:onProperty sssom:mapping_cardinality ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:predicate_label ], + owl:onProperty sssom:subject_label ], [ a owl:Restriction ; owl:onClass sssom:EntityReference ; - owl:onProperty owl:annotatedTarget ; + owl:onProperty owl:annotatedSource ; owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty rdfs:seeAlso ], [ a owl:Restriction ; owl:allValuesFrom sssom:EntityReference ; owl:onProperty sssom:object_preprocessing ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty sssom:creator_label ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty sssom:match_string ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:subject_category ], + owl:onProperty sssom:semantic_similarity_measure ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty pav:authoredBy ], + [ a owl:Restriction ; + owl:onClass sssom:EntityReference ; + owl:onProperty sssom:mapping_justification ; + owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:object_label ], + owl:onProperty sssom:mapping_tool_version ], [ a owl:Restriction ; owl:allValuesFrom sssom:EntityReference ; owl:onProperty sssom:subject_preprocessing ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty sssom:author_label ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty rdfs:seeAlso ], + owl:onProperty sssom:curation_rule_text ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Double ; - owl:onProperty sssom:confidence ], + owl:onClass linkml:String ; + owl:onProperty sssom:mapping_tool ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty sssom:match_string ], + owl:maxQualifiedCardinality 1 ; + owl:onClass sssom:EntityReference ; + owl:onProperty sssom:subject_source ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:object_category ], + owl:onProperty sssom:object_source_version ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty sssom:creator_label ], + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty sssom:curation_rule ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:subject_label ], + owl:onProperty sssom:other ], [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:EntityReference ; - owl:onProperty sssom:subject_source ], + owl:allValuesFrom linkml:String ; + owl:onProperty sssom:author_label ], [ a owl:Restriction ; owl:onClass sssom:EntityReference ; owl:onProperty owl:annotatedProperty ; owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:EntityTypeEnum ; - owl:onProperty sssom:object_type ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Date ; - owl:onProperty pav:authoredOn ], - [ a owl:Restriction ; - owl:allValuesFrom sssom:EntityReference ; - owl:onProperty dcterms:creator ], + owl:onClass linkml:Uri ; + owl:onProperty dcterms:license ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty rdfs:comment ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty sssom:reviewer_label ], + owl:onProperty sssom:subject_source_version ], [ a owl:Restriction ; owl:allValuesFrom sssom:EntityReference ; - owl:onProperty pav:authoredBy ], + owl:onProperty sssom:subject_match_field ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass sssom:EntityTypeEnum ; - owl:onProperty sssom:subject_type ], + owl:onProperty sssom:object_type ], + [ a owl:Restriction ; + owl:allValuesFrom sssom:EntityReference ; + owl:onProperty dcterms:creator ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Uri ; - owl:onProperty sssom:mapping_provider ], + owl:onClass linkml:String ; + owl:onProperty sssom:predicate_label ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; - owl:onProperty sssom:object_source_version ], + owl:onProperty rdfs:comment ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:Double ; owl:onProperty sssom:semantic_similarity_score ], - [ a owl:Restriction ; - owl:onClass sssom:EntityReference ; - owl:onProperty owl:annotatedSource ; - owl:qualifiedCardinality 1 ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:String ; - owl:onProperty sssom:subject_source_version ], - [ a owl:Restriction ; - owl:onClass sssom:EntityReference ; - owl:onProperty sssom:mapping_justification ; - owl:qualifiedCardinality 1 ], + owl:onClass sssom:PredicateModifierEnum ; + owl:onProperty sssom:predicate_modifier ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; - owl:onClass sssom:PredicateModifierEnum ; - owl:onProperty sssom:predicate_modifier ] ; + owl:onClass linkml:String ; + owl:onProperty sssom:object_label ] ; skos:definition "Represents an individual mapping between a pair of entities" ; skos:exactMatch owl:Axiom . @@ -772,10 +839,6 @@ sssom:MappingSetReference a owl:Class, owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; owl:onProperty sssom:mapping_set_group ], - [ a owl:Restriction ; - owl:maxQualifiedCardinality 1 ; - owl:onClass linkml:Date ; - owl:onProperty sssom:last_updated ], [ a owl:Restriction ; owl:maxQualifiedCardinality 1 ; owl:onClass linkml:String ; @@ -791,7 +854,11 @@ sssom:MappingSetReference a owl:Class, [ a owl:Restriction ; owl:onClass linkml:Uri ; owl:onProperty sssom:mapping_set_id ; - owl:qualifiedCardinality 1 ] ; + owl:qualifiedCardinality 1 ], + [ a owl:Restriction ; + owl:maxQualifiedCardinality 1 ; + owl:onClass linkml:Date ; + owl:onProperty sssom:last_updated ] ; skos:definition "A reference to a mapping set. It allows to augment mapping set metadata from the perspective of the registry, for example, providing confidence, or a local filename or a grouping." . sssom:PredicateModifierEnum a owl:Class, diff --git a/project/protobuf/sssom_schema.proto b/project/protobuf/sssom_schema.proto index 969b125f..fa582e1f 100644 --- a/project/protobuf/sssom_schema.proto +++ b/project/protobuf/sssom_schema.proto @@ -25,11 +25,14 @@ message Mapping entityReference objectSource = 0 string objectSourceVersion = 0 uri mappingProvider = 0 + entityReference mappingSource = 0 mappingCardinalityEnum mappingCardinality = 0 string mappingTool = 0 string mappingToolVersion = 0 date mappingDate = 0 double confidence = 0 + repeated entityReference curationRule = 0 + repeated string curationRuleText = 0 repeated entityReference subjectMatchField = 0 repeated entityReference objectMatchField = 0 repeated string matchString = 0 @@ -45,6 +48,8 @@ message Mapping message MappingRegistry { entityReference mappingRegistryId = 0 + string mappingRegistryTitle = 0 + string mappingRegistryDescription = 0 repeated uri imports = 0 repeated mappingSetReference mappingSetReferences = 0 uri documentation = 0 @@ -57,6 +62,7 @@ message MappingSet uri mappingSetId = 0 string mappingSetVersion = 0 repeated uri mappingSetSource = 0 + string mappingSetTitle = 0 string mappingSetDescription = 0 repeated entityReference creatorId = 0 repeated string creatorLabel = 0 diff --git a/project/shacl/sssom_schema.shacl.ttl b/project/shacl/sssom_schema.shacl.ttl index af071b58..13b17218 100644 --- a/project/shacl/sssom_schema.shacl.ttl +++ b/project/shacl/sssom_schema.shacl.ttl @@ -13,108 +13,115 @@ sssom:MappingRegistry a sh:NodeShape ; sh:closed true ; sh:description "A registry for managing mapping sets. It holds a set of mapping set references, and can import other registries." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "The unique identifier of a mapping registry." ; + sh:property [ sh:class sssom:MappingSetReference ; + sh:description "A list of mapping set references." ; + sh:nodeKind sh:BlankNode ; + sh:order 4 ; + sh:path sssom:mapping_set_references ], + [ sh:description "The description of a mapping registry." ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path sssom:mapping_registry_description ], + [ sh:description "The title of a mapping registry." ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path sssom:mapping_registry_title ], + [ sh:description "The unique identifier of a mapping registry." ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 0 ; sh:path sssom:mapping_registry_id ], - [ sh:description "A URL to the documentation of this mapping commons." ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path sssom:documentation ], [ sh:description "A URL to a homepage of this mapping commons." ; sh:maxCount 1 ; - sh:order 4 ; + sh:order 6 ; sh:path sssom:homepage ], [ sh:description "A list of registries that should be imported into this one." ; - sh:order 1 ; + sh:order 3 ; sh:path sssom:imports ], - [ sh:class sssom:MappingSetReference ; - sh:description "A list of mapping set references." ; - sh:nodeKind sh:BlankNode ; - sh:order 2 ; - sh:path sssom:mapping_set_references ] ; + [ sh:description "A URL to the documentation of this mapping commons." ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path sssom:documentation ] ; sh:targetClass sssom:MappingRegistry . sssom:MappingSet a sh:NodeShape ; sh:closed true ; sh:description "Represents a set of mappings" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A description of the mapping set." ; + sh:property [ sh:description "URI of ontology source for the subject." ; + sh:maxCount 1 ; + sh:order 10 ; + sh:path sssom:subject_source ], + [ sh:description "The display name of a mapping set." ; sh:maxCount 1 ; sh:order 4 ; - sh:path dcterms:description ], - [ sh:description "Method of preprocessing applied to the fields of the subject. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; + sh:path dcterms:title ], + [ sh:description "Version IRI or version string of the source of the subject term." ; + sh:maxCount 1 ; + sh:order 11 ; + sh:path sssom:subject_source_version ], + [ sh:description "A string identifying the creator of this mapping. In the spirit of provenance, consider to use creator_id instead." ; + sh:order 7 ; + sh:path sssom:creator_label ], + [ sh:description "A tuple of fields (term annotations on the subject) that was used for the match." ; + sh:order 18 ; + sh:path sssom:subject_match_field ], + [ sh:description "A tuple of fields (term annotations on the object) that was used for the match." ; sh:order 19 ; - sh:path sssom:subject_preprocessing ], - [ sh:description "The date the mapping was asserted. This is different from the date the mapping was published or compiled in a SSSOM file." ; + sh:path sssom:object_match_field ], + [ sh:description "A URL specific for the mapping instance. E.g. for kboom we have a per-mapping image that shows surrounding axioms that drive probability. Could also be a github issue URL that discussed a complicated alignment" ; + sh:order 22 ; + sh:path rdfs:seeAlso ], + [ sh:description "A reference to the tool or algorithm that was used to generate the mapping. Should be a URL pointing to more info about it, but can be free text." ; sh:maxCount 1 ; sh:order 16 ; - sh:path pav:authoredOn ], - [ sh:description "URL pointing to the source that provided the mapping, for example an ontology that already contains the mappings, or a database from which it was derived." ; + sh:path sssom:mapping_tool ], + [ sh:description "A description of the mapping set." ; sh:maxCount 1 ; - sh:order 14 ; - sh:path sssom:mapping_provider ], - [ sh:description "The type of entity that is being mapped." ; - sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; + sh:order 5 ; + sh:path dcterms:description ], + [ sh:description "A mapping set or set of mapping set that was used to derive the mapping set." ; + sh:order 3 ; + sh:path prov:wasDerivedFrom ], + [ sh:description "Pipe separated list of key value pairs for properties not part of the SSSOM spec. Can be used to encode additional provenance data." ; sh:maxCount 1 ; - sh:order 11 ; - sh:path sssom:object_type ], + sh:order 23 ; + sh:path sssom:other ], [ sh:description "Identifies the persons or groups responsible for the creation of the mapping. The creator is the agent that put the mapping in its published form, which may be different from the author, which is a person that was actively involved in the assertion of the mapping. Recommended to be a (pipe-separated) list of ORCIDs or otherwise identifying URLs, but any identifying string (such as name and affiliation) is permissible." ; - sh:order 5 ; + sh:order 6 ; sh:path dcterms:creator ], - [ sh:description "A URL specific for the mapping instance. E.g. for kboom we have a per-mapping image that shows surrounding axioms that drive probability. Could also be a github issue URL that discussed a complicated alignment" ; - sh:order 21 ; - sh:path rdfs:seeAlso ], - [ sh:description "A tuple of fields (term annotations on the subject) that was used for the match." ; - sh:order 17 ; - sh:path sssom:subject_match_field ], - [ sh:description "Version IRI or version string of the source of the subject term." ; - sh:maxCount 1 ; - sh:order 10 ; - sh:path sssom:subject_source_version ], - [ sh:description "The type of entity that is being mapped." ; - sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; - sh:maxCount 1 ; - sh:order 8 ; - sh:path sssom:subject_type ], - [ sh:description "URI of ontology source for the subject." ; + [ sh:description "Free text field containing either curator notes or text generated by tool providing additional informative information." ; sh:maxCount 1 ; - sh:order 9 ; - sh:path sssom:subject_source ], - [ sh:description "A tuple of fields (term annotations on the object) that was used for the match." ; - sh:order 18 ; - sh:path sssom:object_match_field ], + sh:order 24 ; + sh:path rdfs:comment ], + [ sh:description "Method of preprocessing applied to the fields of the object. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; + sh:order 21 ; + sh:path sssom:object_preprocessing ], + [ sh:class owl:Axiom ; + sh:description "Contains a list of mapping objects" ; + sh:nodeKind sh:BlankNode ; + sh:order 0 ; + sh:path sssom:mappings ], + [ sh:description "Method of preprocessing applied to the fields of the subject. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; + sh:order 20 ; + sh:path sssom:subject_preprocessing ], [ sh:description "A url to the license of the mapping. In absence of a license we assume no license." ; sh:maxCount 1 ; sh:minCount 1 ; - sh:order 7 ; + sh:order 8 ; sh:path dcterms:license ], - [ sh:description "IRI of ontology source for the object. Version IRI preferred." ; - sh:maxCount 1 ; - sh:order 12 ; - sh:path sssom:object_source ], - [ sh:description "A reference to the tool or algorithm that was used to generate the mapping. Should be a URL pointing to more info about it, but can be free text." ; + [ sh:description "URL pointing to the source that provided the mapping, for example an ontology that already contains the mappings, or a database from which it was derived." ; sh:maxCount 1 ; sh:order 15 ; - sh:path sssom:mapping_tool ], - [ sh:description "A string identifying the creator of this mapping. In the spirit of provenance, consider to use creator_id instead." ; - sh:order 6 ; - sh:path sssom:creator_label ], + sh:path sssom:mapping_provider ], [ sh:description "Version IRI or version string of the source of the object term." ; sh:maxCount 1 ; - sh:order 13 ; + sh:order 14 ; sh:path sssom:object_source_version ], - [ sh:description "A mapping set or set of mapping set that was used to derive the mapping set." ; - sh:order 3 ; - sh:path prov:wasDerivedFrom ], - [ sh:description "Method of preprocessing applied to the fields of the object. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; - sh:order 20 ; - sh:path sssom:object_preprocessing ], - [ sh:description "Free text field containing either curator notes or text generated by tool providing additional informative information." ; + [ sh:description "IRI of ontology source for the object. Version IRI preferred." ; sh:maxCount 1 ; - sh:order 23 ; - sh:path rdfs:comment ], + sh:order 13 ; + sh:path sssom:object_source ], [ sh:description "A globally unique identifier for the mapping set (not each individual mapping). Should be IRI, ideally resolvable." ; sh:maxCount 1 ; sh:minCount 1 ; @@ -124,185 +131,199 @@ sssom:MappingSet a sh:NodeShape ; sh:maxCount 1 ; sh:order 2 ; sh:path owl:versionInfo ], - [ sh:class owl:Axiom ; - sh:description "Contains a list of mapping objects" ; - sh:nodeKind sh:BlankNode ; - sh:order 0 ; - sh:path sssom:mappings ], - [ sh:description "Pipe separated list of key value pairs for properties not part of the SSSOM spec. Can be used to encode additional provenance data." ; + [ sh:description "The date the mapping was asserted. This is different from the date the mapping was published or compiled in a SSSOM file." ; sh:maxCount 1 ; - sh:order 22 ; - sh:path sssom:other ] ; + sh:order 17 ; + sh:path pav:authoredOn ], + [ sh:description "The type of entity that is being mapped." ; + sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path sssom:subject_type ], + [ sh:description "The type of entity that is being mapped." ; + sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; + sh:maxCount 1 ; + sh:order 12 ; + sh:path sssom:object_type ] ; sh:targetClass sssom:MappingSet . owl:Axiom a sh:NodeShape ; sh:closed true ; sh:description "Represents an individual mapping between a pair of entities" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Version IRI or version string of the source of the subject term." ; + sh:property [ sh:description "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases." ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path sssom:subject_category ], + [ sh:description "URI of ontology source for the subject." ; + sh:maxCount 1 ; + sh:order 18 ; + sh:path sssom:subject_source ], + [ sh:description "Version IRI or version string of the source of the subject term." ; sh:maxCount 1 ; sh:order 19 ; sh:path sssom:subject_source_version ], + [ sh:description "The date the mapping was asserted. This is different from the date the mapping was published or compiled in a SSSOM file." ; + sh:maxCount 1 ; + sh:order 28 ; + sh:path pav:authoredOn ], + [ sh:description "Pipe separated list of key value pairs for properties not part of the SSSOM spec. Can be used to encode additional provenance data." ; + sh:maxCount 1 ; + sh:order 40 ; + sh:path sssom:other ], + [ sh:description "Free text field containing either curator notes or text generated by tool providing additional informative information." ; + sh:maxCount 1 ; + sh:order 41 ; + sh:path rdfs:comment ], + [ sh:description "The type of entity that is being mapped." ; + sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path sssom:object_type ], + [ sh:description "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule should be captured as a resource (entity reference) rather than a string (see curation_rule element), which enables higher levels of transparency and sharing across mapping sets. The textual representation of curation rule is intended to be used in cases where (1) the creation of a resource is not practical from the perspective of the mapping_provider and (2) as an additional piece of metadata to augment the curation_rule element with a human readable text." ; + sh:order 31 ; + sh:path sssom:curation_rule_text ], + [ sh:description "A mapping justification is an action (or the written representation of that action) of showing a mapping to be right or reasonable." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 9 ; + sh:path sssom:mapping_justification ; + sh:pattern "^semapv:(MappingReview|ManualMappingCuration|LogicalReasoning|LexicalMatching|CompositeMatching|UnspecifiedMatching|SemanticSimilarityThresholdMatching|LexicalSimilarityThresholdMatching|MappingChaining)$" ], [ sh:description "A string indicating whether this mapping is from a 1:1 (the subject_id maps to a single object_id), 1:n (the subject maps to more than one object_id), n:1, 1:0, 0:1 or n:n group. Note that this is a convenience field that should be derivable from the mapping set." ; sh:in ( "1:1" "1:n" "n:1" "1:0" "0:1" "n:n" ) ; sh:maxCount 1 ; - sh:order 24 ; + sh:order 25 ; sh:path sssom:mapping_cardinality ], - [ sh:description "A URL specific for the mapping instance. E.g. for kboom we have a per-mapping image that shows surrounding axioms that drive probability. Could also be a github issue URL that discussed a complicated alignment" ; - sh:order 36 ; - sh:path rdfs:seeAlso ], + [ sh:description "The ID of the object of the mapping." ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 6 ; + sh:path owl:annotatedTarget ], [ sh:description "The label of the predicate/relation of the mapping" ; sh:maxCount 1 ; sh:order 4 ; sh:path sssom:predicate_label ], - [ sh:description "Version string that denotes the version of the mapping tool used." ; - sh:maxCount 1 ; - sh:order 26 ; - sh:path sssom:mapping_tool_version ], - [ sh:description "A string identifying the creator of this mapping. In the spirit of provenance, consider to use creator_id instead." ; - sh:order 15 ; - sh:path sssom:creator_label ], - [ sh:description "A score between 0 and 1 to denote the semantic similarity, where 1 denotes equivalence." ; + [ sh:description "IRI of ontology source for the object. Version IRI preferred." ; sh:maxCount 1 ; - sh:order 34 ; - sh:path sssom:semantic_similarity_score ], + sh:order 21 ; + sh:path sssom:object_source ], [ sh:description "The ID of the predicate or relation that relates the subject and object of this match." ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 3 ; sh:path owl:annotatedProperty ], - [ sh:description "The date the mapping was asserted. This is different from the date the mapping was published or compiled in a SSSOM file." ; - sh:maxCount 1 ; - sh:order 27 ; - sh:path pav:authoredOn ], [ sh:description "A reference to the tool or algorithm that was used to generate the mapping. Should be a URL pointing to more info about it, but can be free text." ; sh:maxCount 1 ; - sh:order 25 ; + sh:order 26 ; sh:path sssom:mapping_tool ], - [ sh:description "A tuple of fields (term annotations on the object) that was used for the match." ; - sh:order 30 ; - sh:path sssom:object_match_field ], - [ sh:description "A mapping justification is an action (or the written representation of that action) of showing a mapping to be right or reasonable." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 9 ; - sh:path sssom:mapping_justification ; - sh:pattern "^semapv:(MappingReview|ManualMappingCuration|LogicalReasoning|LexicalMatching|CompositeMatching|UnspecifiedMatching|SemanticSimilarityThresholdMatching|LexicalSimilarityThresholdMatching|MappingChaining)$" ], - [ sh:description "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary." ; + [ sh:description "Method of preprocessing applied to the fields of the subject. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; + sh:order 35 ; + sh:path sssom:subject_preprocessing ], + [ sh:description "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary. This slot is deliberately underspecified. Conceptual categories can range from those that are found in general upper ontologies such as BFO (e.g. process, temporal region, etc) to those that serve as upper ontologies in specific domains, such as COB or BioLink (e.g. gene, disease, chemical entity). The purpose of this optional field is documentation for human reviewers - when a category is known and documented clearly, the cost of interpreting and evaluating the mapping decreases." ; sh:maxCount 1 ; sh:order 8 ; sh:path sssom:object_category ], - [ sh:description "Method of preprocessing applied to the fields of the object. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; - sh:order 33 ; - sh:path sssom:object_preprocessing ], - [ sh:description "Version IRI or version string of the source of the object term." ; - sh:maxCount 1 ; - sh:order 22 ; - sh:path sssom:object_source_version ], - [ sh:description "Method of preprocessing applied to the fields of the subject. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; - sh:order 32 ; - sh:path sssom:subject_preprocessing ], - [ sh:description "The measure used for computing the the semantic similarity score. To make processing this field as unambiguous as possible, we recommend using wikidata identifiers, but wikipedia pages could also be acceptable." ; + [ sh:description "A string identifying the reviewer of this mapping. In the spirit of provenance, consider to use author_id instead." ; + sh:order 13 ; + sh:path sssom:reviewer_label ], + [ sh:description "The label of object of the mapping" ; sh:maxCount 1 ; - sh:order 35 ; - sh:path sssom:semantic_similarity_measure ], - [ sh:description "The conceptual category to which the subject belongs to. This can be a string denoting the category or a term from a controlled vocabulary." ; + sh:order 7 ; + sh:path sssom:object_label ], + [ sh:description "A curation rule is a (potentially) complex condition executed by an agent that led to the establishment of a mapping. Curation rules often involve complex domain-specific considerations, which are hard to capture in an automated fashion. The curation rule is captured as a resource rather than a string, which enables higher levels of transparency and sharing across mapping sets. The URI representation of the curation rule is expected to be a resolvable identifier which provides details about the nature of the curation rule." ; + sh:order 30 ; + sh:path sssom:curation_rule ], + [ sh:description "A URL specific for the mapping instance. E.g. for kboom we have a per-mapping image that shows surrounding axioms that drive probability. Could also be a github issue URL that discussed a complicated alignment" ; + sh:order 39 ; + sh:path rdfs:seeAlso ], + [ sh:description "The ID of the subject of the mapping." ; sh:maxCount 1 ; - sh:order 2 ; - sh:path sssom:subject_category ], + sh:minCount 1 ; + sh:order 0 ; + sh:path owl:annotatedSource ], [ sh:description "A score between 0 and 1 to denote the confidence or probability that the match is correct, where 1 denotes total confidence." ; sh:maxCount 1 ; - sh:order 28 ; + sh:order 29 ; sh:path sssom:confidence ], - [ sh:description "Identifies the persons or groups that reviewed and confirmed the mapping. Recommended to be a (pipe-separated) list of ORCIDs or otherwise identifying URLs, but any identifying string (such as name and affiliation) is permissible." ; - sh:order 12 ; - sh:path sssom:reviewer_id ], - [ sh:description "The label of object of the mapping" ; - sh:maxCount 1 ; - sh:order 7 ; - sh:path sssom:object_label ], [ sh:description "A string identifying the author of this mapping. In the spirit of provenance, consider to use author_id instead." ; sh:order 11 ; sh:path sssom:author_label ], - [ sh:description "A string identifying the reviewer of this mapping. In the spirit of provenance, consider to use author_id instead." ; - sh:order 13 ; - sh:path sssom:reviewer_label ], - [ sh:description "The label of subject of the mapping" ; + [ sh:description "Version string that denotes the version of the mapping tool used." ; sh:maxCount 1 ; - sh:order 1 ; - sh:path sssom:subject_label ], + sh:order 27 ; + sh:path sssom:mapping_tool_version ], + [ sh:description "A score between 0 and 1 to denote the semantic similarity, where 1 denotes equivalence." ; + sh:maxCount 1 ; + sh:order 37 ; + sh:path sssom:semantic_similarity_score ], + [ sh:description "Identifies the persons or groups responsible for the creation of the mapping. The creator is the agent that put the mapping in its published form, which may be different from the author, which is a person that was actively involved in the assertion of the mapping. Recommended to be a (pipe-separated) list of ORCIDs or otherwise identifying URLs, but any identifying string (such as name and affiliation) is permissible." ; + sh:order 14 ; + sh:path dcterms:creator ], + [ sh:description "Method of preprocessing applied to the fields of the object. If different preprocessing steps were performed on different fields, it is recommended to store the match in separate rows." ; + sh:order 36 ; + sh:path sssom:object_preprocessing ], [ sh:description "Identifies the persons or groups responsible for asserting the mappings. Recommended to be a (pipe-separated) list of ORCIDs or otherwise identifying URLs, but any identifying string (such as name and affiliation) is permissible." ; sh:order 10 ; sh:path pav:authoredBy ], [ sh:description "A tuple of fields (term annotations on the subject) that was used for the match." ; - sh:order 29 ; + sh:order 32 ; sh:path sssom:subject_match_field ], - [ sh:description "Pipe separated list of key value pairs for properties not part of the SSSOM spec. Can be used to encode additional provenance data." ; - sh:maxCount 1 ; - sh:order 37 ; - sh:path sssom:other ], - [ sh:description "The ID of the subject of the mapping." ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path owl:annotatedSource ], - [ sh:description "URI of ontology source for the subject." ; - sh:maxCount 1 ; - sh:order 18 ; - sh:path sssom:subject_source ], - [ sh:description "A url to the license of the mapping. In absence of a license we assume no license." ; + [ sh:description "A modifier for negating the prediate. See https://github.com/mapping-commons/sssom/issues/40 for discussion" ; + sh:in ( "Not" ) ; sh:maxCount 1 ; - sh:order 16 ; - sh:path dcterms:license ], - [ sh:description "Strings that are shared by subj/obj. It is recommended to indicate the fields for the match using the object and subject_match_field slots." ; - sh:order 31 ; - sh:path sssom:match_string ], + sh:order 5 ; + sh:path sssom:predicate_modifier ], [ sh:description "URL pointing to the source that provided the mapping, for example an ontology that already contains the mappings, or a database from which it was derived." ; sh:maxCount 1 ; sh:order 23 ; sh:path sssom:mapping_provider ], - [ sh:description "Identifies the persons or groups responsible for the creation of the mapping. The creator is the agent that put the mapping in its published form, which may be different from the author, which is a person that was actively involved in the assertion of the mapping. Recommended to be a (pipe-separated) list of ORCIDs or otherwise identifying URLs, but any identifying string (such as name and affiliation) is permissible." ; - sh:order 14 ; - sh:path dcterms:creator ], - [ sh:description "Free text field containing either curator notes or text generated by tool providing additional informative information." ; + [ sh:description "A string identifying the creator of this mapping. In the spirit of provenance, consider to use creator_id instead." ; + sh:order 15 ; + sh:path sssom:creator_label ], + [ sh:description "The label of subject of the mapping" ; sh:maxCount 1 ; - sh:order 38 ; - sh:path rdfs:comment ], - [ sh:description "A modifier for negating the prediate. See https://github.com/mapping-commons/sssom/issues/40 for discussion" ; - sh:in ( "Not" ) ; + sh:order 1 ; + sh:path sssom:subject_label ], + [ sh:description "Version IRI or version string of the source of the object term." ; sh:maxCount 1 ; - sh:order 5 ; - sh:path sssom:predicate_modifier ], + sh:order 22 ; + sh:path sssom:object_source_version ], + [ sh:description "The measure used for computing the the semantic similarity score. To make processing this field as unambiguous as possible, we recommend using wikidata identifiers, but wikipedia pages could also be acceptable." ; + sh:maxCount 1 ; + sh:order 38 ; + sh:path sssom:semantic_similarity_measure ], [ sh:description "The type of entity that is being mapped." ; sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; sh:maxCount 1 ; sh:order 17 ; sh:path sssom:subject_type ], - [ sh:description "The type of entity that is being mapped." ; - sh:in ( owl:Class owl:ObjectProperty owl:DataProperty owl:AnnotationProperty owl:NamedIndividual skos:Concept rdfs:Resource rdfs:Class rdfs:Literal rdfs:Datatype rdf:Property ) ; - sh:maxCount 1 ; - sh:order 20 ; - sh:path sssom:object_type ], - [ sh:description "IRI of ontology source for the object. Version IRI preferred." ; + [ sh:description "A url to the license of the mapping. In absence of a license we assume no license." ; sh:maxCount 1 ; - sh:order 21 ; - sh:path sssom:object_source ], - [ sh:description "The ID of the object of the mapping." ; + sh:order 16 ; + sh:path dcterms:license ], + [ sh:description "A tuple of fields (term annotations on the object) that was used for the match." ; + sh:order 33 ; + sh:path sssom:object_match_field ], + [ sh:description "Strings that are shared by subj/obj. It is recommended to indicate the fields for the match using the object and subject_match_field slots." ; + sh:order 34 ; + sh:path sssom:match_string ], + [ sh:description "Identifies the persons or groups that reviewed and confirmed the mapping. Recommended to be a (pipe-separated) list of ORCIDs or otherwise identifying URLs, but any identifying string (such as name and affiliation) is permissible." ; + sh:order 12 ; + sh:path sssom:reviewer_id ], + [ sh:description "The mapping set this mapping was originally defined in. mapping_source is used for example when merging multiple mapping sets or deriving one mapping set from another." ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 6 ; - sh:path owl:annotatedTarget ] ; + sh:order 24 ; + sh:path sssom:mapping_source ] ; sh:targetClass owl:Axiom . sssom:MappingSetReference a sh:NodeShape ; sh:closed true ; sh:description "A reference to a mapping set. It allows to augment mapping set metadata from the perspective of the registry, for example, providing confidence, or a local filename or a grouping." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A globally unique identifier for the mapping set (not each individual mapping). Should be IRI, ideally resolvable." ; + sh:property [ sh:description "The date this reference was last updated." ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path sssom:mapping_set_id ], + sh:order 4 ; + sh:path sssom:last_updated ], [ sh:description "A URL location from which to obtain a resource, such as a mapping set." ; sh:maxCount 1 ; sh:order 1 ; @@ -311,17 +332,18 @@ sssom:MappingSetReference a sh:NodeShape ; sh:maxCount 1 ; sh:order 2 ; sh:path sssom:registry_confidence ], - [ sh:description "The date this reference was last updated." ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path sssom:last_updated ], - [ sh:description "Set by the owners of the mapping registry. A way to group ." ; + [ sh:description "A globally unique identifier for the mapping set (not each individual mapping). Should be IRI, ideally resolvable." ; sh:maxCount 1 ; - sh:order 3 ; - sh:path sssom:mapping_set_group ], + sh:minCount 1 ; + sh:order 0 ; + sh:path sssom:mapping_set_id ], [ sh:description "The local name assigned to file that corresponds to the downloaded mapping set." ; sh:maxCount 1 ; sh:order 5 ; - sh:path sssom:local_name ] ; + sh:path sssom:local_name ], + [ sh:description "Set by the owners of the mapping registry. A way to group ." ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path sssom:mapping_set_group ] ; sh:targetClass sssom:MappingSetReference . diff --git a/project/shex/sssom_schema.shex b/project/shex/sssom_schema.shex index 25b1f8cd..1d724e2e 100644 --- a/project/shex/sssom_schema.shex +++ b/project/shex/sssom_schema.shex @@ -29,8 +29,12 @@ linkml:Date xsd:date linkml:Datetime xsd:dateTime +linkml:DateOrDatetime linkml:DateOrDatetime + linkml:Uriorcurie IRI +linkml:Curie xsd:string + linkml:Uri IRI linkml:Ncname xsd:string @@ -64,11 +68,14 @@ linkml:Nodeidentifier NONLITERAL @ ? ; @linkml:String ? ; @linkml:Uri ? ; + @ ? ; @ ? ; @linkml:String ? ; @linkml:String ? ; pav:authoredOn @linkml:Date ? ; @linkml:Double ? ; + @ * ; + @linkml:String * ; @ * ; @ * ; @linkml:String * ; @@ -86,6 +93,8 @@ linkml:Nodeidentifier NONLITERAL CLOSED { ( $ ( @ ; + @linkml:String ? ; + @linkml:String ? ; @linkml:Uri * ; @ * ; @linkml:Uri ? ; @@ -100,6 +109,7 @@ linkml:Nodeidentifier NONLITERAL @linkml:Uri ; owl:versionInfo @linkml:String ? ; prov:wasDerivedFrom @linkml:Uri * ; + dcterms:title @linkml:String ? ; dcterms:description @linkml:String ? ; dcterms:creator @ * ; @linkml:String * ; diff --git a/project/sqlschema/sssom_schema.sql b/project/sqlschema/sssom_schema.sql index 648d1ff4..59a04a70 100644 --- a/project/sqlschema/sssom_schema.sql +++ b/project/sqlschema/sssom_schema.sql @@ -25,11 +25,14 @@ CREATE TABLE mapping ( object_source TEXT, object_source_version TEXT, mapping_provider TEXT, + mapping_source TEXT, mapping_cardinality VARCHAR(3), mapping_tool TEXT, mapping_tool_version TEXT, mapping_date DATE, confidence FLOAT, + curation_rule TEXT, + curation_rule_text TEXT, subject_match_field TEXT, object_match_field TEXT, match_string TEXT, @@ -40,16 +43,18 @@ CREATE TABLE mapping ( see_also TEXT, other TEXT, comment TEXT, - PRIMARY KEY (subject_id, subject_label, subject_category, predicate_id, predicate_label, predicate_modifier, object_id, object_label, object_category, mapping_justification, author_id, author_label, reviewer_id, reviewer_label, creator_id, creator_label, license, subject_type, subject_source, subject_source_version, object_type, object_source, object_source_version, mapping_provider, mapping_cardinality, mapping_tool, mapping_tool_version, mapping_date, confidence, subject_match_field, object_match_field, match_string, subject_preprocessing, object_preprocessing, semantic_similarity_score, semantic_similarity_measure, see_also, other, comment) + PRIMARY KEY (subject_id, subject_label, subject_category, predicate_id, predicate_label, predicate_modifier, object_id, object_label, object_category, mapping_justification, author_id, author_label, reviewer_id, reviewer_label, creator_id, creator_label, license, subject_type, subject_source, subject_source_version, object_type, object_source, object_source_version, mapping_provider, mapping_source, mapping_cardinality, mapping_tool, mapping_tool_version, mapping_date, confidence, curation_rule, curation_rule_text, subject_match_field, object_match_field, match_string, subject_preprocessing, object_preprocessing, semantic_similarity_score, semantic_similarity_measure, see_also, other, comment) ); CREATE TABLE mapping_registry ( mapping_registry_id TEXT NOT NULL, + mapping_registry_title TEXT, + mapping_registry_description TEXT, imports TEXT, mapping_set_references TEXT, documentation TEXT, homepage TEXT, - PRIMARY KEY (mapping_registry_id, imports, mapping_set_references, documentation, homepage) + PRIMARY KEY (mapping_registry_id, mapping_registry_title, mapping_registry_description, imports, mapping_set_references, documentation, homepage) ); CREATE TABLE mapping_set ( @@ -57,6 +62,7 @@ CREATE TABLE mapping_set ( mapping_set_id TEXT NOT NULL, mapping_set_version TEXT, mapping_set_source TEXT, + mapping_set_title TEXT, mapping_set_description TEXT, creator_id TEXT, creator_label TEXT, @@ -77,7 +83,7 @@ CREATE TABLE mapping_set ( see_also TEXT, other TEXT, comment TEXT, - PRIMARY KEY (mappings, mapping_set_id, mapping_set_version, mapping_set_source, mapping_set_description, creator_id, creator_label, license, subject_type, subject_source, subject_source_version, object_type, object_source, object_source_version, mapping_provider, mapping_tool, mapping_date, subject_match_field, object_match_field, subject_preprocessing, object_preprocessing, see_also, other, comment) + PRIMARY KEY (mappings, mapping_set_id, mapping_set_version, mapping_set_source, mapping_set_title, mapping_set_description, creator_id, creator_label, license, subject_type, subject_source, subject_source_version, object_type, object_source, object_source_version, mapping_provider, mapping_tool, mapping_date, subject_match_field, object_match_field, subject_preprocessing, object_preprocessing, see_also, other, comment) ); CREATE TABLE mapping_set_reference ( diff --git a/src/docs/editors.md b/src/docs/editors.md index 6f67c275..b6a1a62b 100644 --- a/src/docs/editors.md +++ b/src/docs/editors.md @@ -1,66 +1,20 @@ -# Still under development -- not yet ready for prime time - - - -# Template for LinkML based schemas - -## Requirements -* __Python >= 3.7.1__ -* __GNU make__ - A command line gnu make process (Windows users can use [cygwin](https://www.cygwin.com/) - make comes built in on a Mac) -* __pip__ - comes with most python distros - you should be ok -* __virtualenv__ - can be added via `pip install virtualenv` -* __pipenv__ - can be added via `pip install pipenv` -* - -## What is this? - -This is a GitHub template for a [LinkML](https://github.com/linkml/) based projects. - -It allows you to create a project for your schema as quickly as -possible. It takes care of generating a beautiful readthedocs themed -site, as well as downstream artefacts, including: - - * JSON-Schema - * ShEx - * OWL - * RDF (direct mapping) - * JSON-LD Contexts - * SQL DDL (TODO) - * Python classes to represent model elements - * TSV/CSV reports (TODO) - -## Quickstart - - 1. Click the big green "Use this template" button on this page - 2. Name your repo according to your schema, e.g. my-awsome-project-model, and clone it - 3. Edit `model/CONFIG.yaml` to set your specific parameters. The details on the parameters can be found in -the [LinkML Template Configuration Model](https://linkml.github.io/template-config-model/) directory. - (_Note that the Template Configuration Model was built using this very template._) - 4. Configure the repository: - * `make -f MakeConfig reset` - - This will generate a number of files that can be used to make, test, and distribute your final model. Note - that the template-configurator only needs to be run once as a rule. You can, however, re-generate allof - the target artifacts with `make -f MakeConfig reset`. You can also selectively remove artifacts and get them - regenerated with `make -f MakeConfig update` - 5. Rename the schema file in [model/schema](model/schema) to match the `root_schema` named in the CONFIG.yaml file. - Note: `root_schema` does not have the `.yaml` suffix, the file does. As an example, if you specified `root_schema: my-schema`, - the schema would be named model/schema/my-schema.yaml - 6. Edit the root_schema to add your own types, classes and slots. - 7. Type `make` to build your downstream artefacts (jsonschema, owl, etc) - 8. Once satisfied, commit your new project to github, which will rerun the make process. - 9. The package can also be installed in `pypi` - this is an advanced topic, see [PYPI_SETUP]() for details -10. This file (ABOUT.md) and the `images` directory can be removed once you are satisfied - - -## How it works - -This repo is a GitHub "template" repo. When you "Use this template" it will make a copy for your project. - -Everything is orchestrated by a generic single [Makefile](Makefile). For this to work you should follow certain conventions: - - * Keep your schema in src/schema - * Use the `.yaml` suffix for all schema files - * Use the suggested directory layout here. - -To run the Makefile you will need Python (>=3.7): +# Simple Standard for Sharing Ontological Mappings (SSSOM) + +## How to make a new release +* Automated: + * On the main code page, click on Releases (right hand column) + * Click on the `Draft a new release` button + * Click the `Choose a tag` button, create a new tag: `X.X.X` + * Click on the `Generate a new release` button + * Make sure only the `Select as the latest release` checkbox is checked. + * Click `Publish release` button +* Manual: + * `make build` + * `make pypi` + +This triggers a GitHub Action workflow that releases the new version of SSSOM to PyPi. + +## Documentation deployment +This can be done in two ways: +* Automated: Every time a pull request is merged into the `main` branch, a github action is triggered to deploy documentation automatically. +* Manually: The make command to deploy documentation is `make deploy`. \ No newline at end of file diff --git a/src/sssom_schema/datamodel/sssom_schema.py b/src/sssom_schema/datamodel/sssom_schema.py index b5a3245d..91610ce0 100644 --- a/src/sssom_schema/datamodel/sssom_schema.py +++ b/src/sssom_schema/datamodel/sssom_schema.py @@ -1,5 +1,5 @@ # Auto generated from sssom_schema.yaml by pythongen.py version: 0.9.0 -# Generation date: 2022-06-07T11:23:26 +# Generation date: 2023-03-16T14:57:46 # Schema: sssom # # id: https://w3id.org/sssom/schema/ @@ -77,6 +77,7 @@ class MappingSet(YAMLRoot): mappings: Optional[Union[Union[dict, "Mapping"], List[Union[dict, "Mapping"]]]] = empty_list() mapping_set_version: Optional[str] = None mapping_set_source: Optional[Union[Union[str, URI], List[Union[str, URI]]]] = empty_list() + mapping_set_title: Optional[str] = None mapping_set_description: Optional[str] = None creator_id: Optional[Union[Union[str, EntityReference], List[Union[str, EntityReference]]]] = empty_list() creator_label: Optional[Union[str, List[str]]] = empty_list() @@ -119,6 +120,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.mapping_set_source = [self.mapping_set_source] if self.mapping_set_source is not None else [] self.mapping_set_source = [v if isinstance(v, URI) else URI(v) for v in self.mapping_set_source] + if self.mapping_set_title is not None and not isinstance(self.mapping_set_title, str): + self.mapping_set_title = str(self.mapping_set_title) + if self.mapping_set_description is not None and not isinstance(self.mapping_set_description, str): self.mapping_set_description = str(self.mapping_set_description) @@ -222,11 +226,14 @@ class Mapping(YAMLRoot): object_source: Optional[Union[str, EntityReference]] = None object_source_version: Optional[str] = None mapping_provider: Optional[Union[str, URI]] = None + mapping_source: Optional[Union[str, EntityReference]] = None mapping_cardinality: Optional[Union[str, "MappingCardinalityEnum"]] = None mapping_tool: Optional[str] = None mapping_tool_version: Optional[str] = None mapping_date: Optional[Union[str, XSDDate]] = None confidence: Optional[float] = None + curation_rule: Optional[Union[Union[str, EntityReference], List[Union[str, EntityReference]]]] = empty_list() + curation_rule_text: Optional[Union[str, List[str]]] = empty_list() subject_match_field: Optional[Union[Union[str, EntityReference], List[Union[str, EntityReference]]]] = empty_list() object_match_field: Optional[Union[Union[str, EntityReference], List[Union[str, EntityReference]]]] = empty_list() match_string: Optional[Union[str, List[str]]] = empty_list() @@ -325,6 +332,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.mapping_provider is not None and not isinstance(self.mapping_provider, URI): self.mapping_provider = URI(self.mapping_provider) + if self.mapping_source is not None and not isinstance(self.mapping_source, EntityReference): + self.mapping_source = EntityReference(self.mapping_source) + if self.mapping_cardinality is not None and not isinstance(self.mapping_cardinality, MappingCardinalityEnum): self.mapping_cardinality = MappingCardinalityEnum(self.mapping_cardinality) @@ -340,6 +350,14 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.confidence is not None and not isinstance(self.confidence, float): self.confidence = float(self.confidence) + if not isinstance(self.curation_rule, list): + self.curation_rule = [self.curation_rule] if self.curation_rule is not None else [] + self.curation_rule = [v if isinstance(v, EntityReference) else EntityReference(v) for v in self.curation_rule] + + if not isinstance(self.curation_rule_text, list): + self.curation_rule_text = [self.curation_rule_text] if self.curation_rule_text is not None else [] + self.curation_rule_text = [v if isinstance(v, str) else str(v) for v in self.curation_rule_text] + if not isinstance(self.subject_match_field, list): self.subject_match_field = [self.subject_match_field] if self.subject_match_field is not None else [] self.subject_match_field = [v if isinstance(v, EntityReference) else EntityReference(v) for v in self.subject_match_field] @@ -392,6 +410,8 @@ class MappingRegistry(YAMLRoot): class_model_uri: ClassVar[URIRef] = SSSOM.MappingRegistry mapping_registry_id: Union[str, EntityReference] = None + mapping_registry_title: Optional[str] = None + mapping_registry_description: Optional[str] = None imports: Optional[Union[Union[str, URI], List[Union[str, URI]]]] = empty_list() mapping_set_references: Optional[Union[Union[dict, "MappingSetReference"], List[Union[dict, "MappingSetReference"]]]] = empty_list() documentation: Optional[Union[str, URI]] = None @@ -403,6 +423,12 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.mapping_registry_id, EntityReference): self.mapping_registry_id = EntityReference(self.mapping_registry_id) + if self.mapping_registry_title is not None and not isinstance(self.mapping_registry_title, str): + self.mapping_registry_title = str(self.mapping_registry_title) + + if self.mapping_registry_description is not None and not isinstance(self.mapping_registry_description, str): + self.mapping_registry_description = str(self.mapping_registry_description) + if not isinstance(self.imports, list): self.imports = [self.imports] if self.imports is not None else [] self.imports = [v if isinstance(v, URI) else URI(v) for v in self.imports] @@ -563,6 +589,12 @@ class slots: slots.mapping_registry_id = Slot(uri=SSSOM.mapping_registry_id, name="mapping_registry_id", curie=SSSOM.curie('mapping_registry_id'), model_uri=SSSOM.mapping_registry_id, domain=None, range=Union[str, EntityReference]) +slots.mapping_registry_title = Slot(uri=SSSOM.mapping_registry_title, name="mapping_registry_title", curie=SSSOM.curie('mapping_registry_title'), + model_uri=SSSOM.mapping_registry_title, domain=None, range=Optional[str]) + +slots.mapping_registry_description = Slot(uri=SSSOM.mapping_registry_description, name="mapping_registry_description", curie=SSSOM.curie('mapping_registry_description'), + model_uri=SSSOM.mapping_registry_description, domain=None, range=Optional[str]) + slots.imports = Slot(uri=SSSOM.imports, name="imports", curie=SSSOM.curie('imports'), model_uri=SSSOM.imports, domain=None, range=Optional[Union[Union[str, URI], List[Union[str, URI]]]]) @@ -624,6 +656,9 @@ class slots: slots.mapping_set_group = Slot(uri=SSSOM.mapping_set_group, name="mapping_set_group", curie=SSSOM.curie('mapping_set_group'), model_uri=SSSOM.mapping_set_group, domain=None, range=Optional[str]) +slots.mapping_set_title = Slot(uri=DC.title, name="mapping_set_title", curie=DC.curie('title'), + model_uri=SSSOM.mapping_set_title, domain=None, range=Optional[str]) + slots.mapping_set_description = Slot(uri=DC.description, name="mapping_set_description", curie=DC.curie('description'), model_uri=SSSOM.mapping_set_description, domain=None, range=Optional[str]) @@ -702,6 +737,12 @@ class slots: slots.object_preprocessing = Slot(uri=SSSOM.object_preprocessing, name="object_preprocessing", curie=SSSOM.curie('object_preprocessing'), model_uri=SSSOM.object_preprocessing, domain=None, range=Optional[Union[Union[str, EntityReference], List[Union[str, EntityReference]]]]) +slots.curation_rule = Slot(uri=SSSOM.curation_rule, name="curation_rule", curie=SSSOM.curie('curation_rule'), + model_uri=SSSOM.curation_rule, domain=None, range=Optional[Union[Union[str, EntityReference], List[Union[str, EntityReference]]]]) + +slots.curation_rule_text = Slot(uri=SSSOM.curation_rule_text, name="curation_rule_text", curie=SSSOM.curie('curation_rule_text'), + model_uri=SSSOM.curation_rule_text, domain=None, range=Optional[Union[str, List[str]]]) + slots.semantic_similarity_score = Slot(uri=SSSOM.semantic_similarity_score, name="semantic_similarity_score", curie=SSSOM.curie('semantic_similarity_score'), model_uri=SSSOM.semantic_similarity_score, domain=None, range=Optional[float])