Skip to content

Commit e266188

Browse files
authored
Use bioregistry as a resource for external prefix map via curies (#396)
* Use bioregistry as a resource for external prefix map via `curies` * removed unnecessary variable * Added a todo * commented * linted
1 parent 70a14b1 commit e266188

File tree

7 files changed

+23292
-1527
lines changed

7 files changed

+23292
-1527
lines changed

Diff for: Makefile

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
PYTHON=python
22
SSSOM_VERSION_TAG=0.12.0
3-
DEFAULT_PREFIX_MAP="https://raw.githubusercontent.com/biopragmatics/bioregistry/main/exports/contexts/obo.context.jsonld"
43
SSSOM_PY="https://raw.githubusercontent.com/mapping-commons/sssom/$(SSSOM_VERSION_TAG)/src/sssom_schema/datamodel/sssom_schema.py"
54
SSSOM_YAML="https://raw.githubusercontent.com/mapping-commons/sssom/$(SSSOM_VERSION_TAG)/src/sssom_schema/schema/sssom_schema.yaml"
65
SSSOM_JSON_SCHEMA="https://raw.githubusercontent.com/mapping-commons/sssom/$(SSSOM_VERSION_TAG)/project/jsonschema/sssom_schema.schema.json"
76
SSSOM_JSONLD_CONTEXT="https://raw.githubusercontent.com/mapping-commons/sssom/$(SSSOM_VERSION_TAG)/project/jsonld/sssom_schema.context.jsonld"
7+
OBO_EPM_JSON="https://raw.githubusercontent.com/biopragmatics/bioregistry/main/exports/contexts/obo.epm.json"
88

99
all: test
1010

@@ -20,8 +20,8 @@ schema/cliquesummary.py: schema/cliquesummary.yaml
2020
gen-py-classes $< > $@
2121
schema/%.schema.json: .FORCE
2222
wget $(SSSOM_JSON_SCHEMA) -O $@
23-
src/sssom/sssom.external.context.jsonld:
24-
wget $(DEFAULT_PREFIX_MAP) -O $@
23+
src/sssom/obo.epm.json:
24+
wget $(OBO_EPM_JSON) -O $@
2525
schema/%.context.jsonld: .FORCE
2626
wget $(SSSOM_JSONLD_CONTEXT) -O $@
2727
schema/%.yaml sssom/%.yaml: .FORCE
@@ -33,7 +33,7 @@ test:
3333
tox
3434
sh tests/tests.sh
3535

36-
deploy-dm: src/sssom/sssom.external.context.jsonld
36+
deploy-dm: src/sssom/obo.epm.json
3737

3838
install:
3939
pip install .[test,docs]

Diff for: src/sssom/constants.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@
99
from linkml_runtime.utils.schema_as_dict import schema_as_dict
1010
from linkml_runtime.utils.schemaview import SchemaView
1111

12+
# from curies import Converter
13+
14+
1215
# from linkml_runtime.utils.introspection import package_schemaview
1316

1417
HERE = pathlib.Path(__file__).parent.resolve()
1518

1619
SCHEMA_YAML = pkg_resources.resource_filename("sssom_schema", "schema/sssom_schema.yaml")
17-
EXTERNAL_CONTEXT = HERE / "sssom.external.context.jsonld"
20+
EXTENDED_PREFIX_MAP = HERE / "obo.epm.json"
1821

1922
# SCHEMA_VIEW = package_schemaview("sssom_schema")
2023

@@ -173,6 +176,9 @@
173176
OBJECT_SOURCE_VERSION: SUBJECT_SOURCE_VERSION,
174177
}
175178

179+
# TODO: Implement this for all CURIE prefix <=> URI prefix conversions.
180+
# OBO_EXTENDED_PREFIX_MAP_CONVERTER = Converter.from_extended_prefix_map(EXTENDED_PREFIX_MAP)
181+
176182

177183
class SEMAPV(Enum):
178184
"""SEMAPV Enum containing different mapping_justification."""

Diff for: src/sssom/context.py

+11-19
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66
from typing import Optional
77

88
import pkg_resources
9+
from curies import Converter
910

10-
from sssom.constants import EXTERNAL_CONTEXT
11+
from sssom.constants import EXTENDED_PREFIX_MAP
1112

1213
from .typehints import Metadata, MetadataType, PrefixMap
1314

1415
# HERE = pathlib.Path(__file__).parent.resolve()
1516
# DEFAULT_CONTEXT_PATH = HERE / "sssom.context.jsonld"
16-
# EXTERNAL_CONTEXT_PATH = HERE / "sssom.external.context.jsonld"
17+
# EXTERNAL_CONTEXT_PATH = HERE / "obo.epm.json"
1718

1819
SSSOM_URI_PREFIX = "https://w3id.org/sssom/"
1920
SSSOM_BUILT_IN_PREFIXES = ("sssom", "owl", "rdf", "rdfs", "skos", "semapv")
@@ -37,14 +38,13 @@ def get_jsonld_context():
3738
return context
3839

3940

40-
def get_external_jsonld_context():
41-
"""Get JSON-LD form of sssom_external_context variable from auto-generated 'external_context.py' file.
41+
def get_extended_prefix_map():
42+
"""Get prefix map from bioregistry (obo.epm.json).
4243
43-
:return: JSON-LD context
44+
:return: Prefix map.
4445
"""
45-
with open(str(EXTERNAL_CONTEXT), "r") as f:
46-
data = json.load(f, strict=False)
47-
return data
46+
converter = Converter.from_extended_prefix_map(EXTENDED_PREFIX_MAP)
47+
return converter.prefix_map
4848

4949

5050
def get_built_in_prefix_map() -> PrefixMap:
@@ -97,7 +97,7 @@ def get_default_metadata() -> Metadata:
9797
:return: Metadata
9898
"""
9999
contxt = get_jsonld_context()
100-
contxt_external = get_external_jsonld_context()
100+
contxt_external = get_extended_prefix_map()
101101
prefix_map = {}
102102
metadata_dict: MetadataType = {}
103103
for key in contxt["@context"]:
@@ -108,16 +108,8 @@ def get_default_metadata() -> Metadata:
108108
if "@id" in v and "@prefix" in v:
109109
if v["@prefix"]:
110110
prefix_map[key] = v["@id"]
111-
for key in contxt_external["@context"]:
112-
v = contxt_external["@context"][key]
113-
if isinstance(v, str):
114-
if key not in prefix_map:
115-
prefix_map[key] = v
116-
else:
117-
if prefix_map[key] != v:
118-
logging.warning(
119-
f"{key} is already in prefix map ({prefix_map[key]}, but with a different value than {v}"
120-
)
111+
112+
prefix_map.update({(k, v) for k, v in contxt_external.items() if k not in prefix_map})
121113

122114
metadata = Metadata(prefix_map=prefix_map, metadata=metadata_dict)
123115
metadata.metadata["mapping_set_id"] = DEFAULT_MAPPING_SET_ID

0 commit comments

Comments
 (0)