Skip to content

Commit d584fea

Browse files
committed
Broaden upstream-versions manifest to component + mondo-transitive sources
The TSV only globbed tmp/mirror-*.owl, missing every ontology pulled via tmp/component-download-*.owl.owl (mondo, hp, go, uberon, cl, maxo, ...). Also follow mondo's source-versions.tsv to capture its transitive upstreams (doid, ncit, omim, ordo, icd*). SPARQL switches to MIN+GROUP BY to collapse the two versionInfo literals (upstream + ODK-added $(VERSION)) that component-downloaded base files carry. Manifest grows 19 -> 48 rows. Closes #128
1 parent 131307b commit d584fea

2 files changed

Lines changed: 37 additions & 5 deletions

File tree

src/ontology/phenio.Makefile

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,22 @@ UPSTREAM_VERSIONS_SPARQL = $(SPARQLDIR)/get-upstream-version.sparql
7777
# transitively depends on every mirror via the `$(MIRRORDIR)/%.owl: mirror-%`
7878
# pattern rule, and (unlike $(IMPORT_FILES)) it doesn't cycle back through
7979
# $(IMPORTSEED) → $(PRESEED) → $(SRCMERGED).
80-
UPSTREAM_VERSIONS_DEPS = $(MIRRORDIR)/merged.owl
80+
UPSTREAM_VERSIONS_DEPS = $(MIRRORDIR)/merged.owl $(filter-out $(COMPONENTSDIR)/upstream-versions.owl,$(OTHER_SRC))
8181

8282
.PHONY: upstream_versions
8383
upstream_versions: $(ONT)-upstream-versions.tsv $(COMPONENTSDIR)/upstream-versions.owl
8484

8585
.PHONY: $(ONT)-upstream-versions.tsv
8686
$(ONT)-upstream-versions.tsv: $(UPSTREAM_VERSIONS_SPARQL) | $(UPSTREAM_VERSIONS_DEPS) $(TMPDIR)
8787
@printf "source\tontologyIRI\tversionIRI\tversionInfo\n" > $@
88-
@for f in $(TMPDIR)/mirror-*.owl; do \
88+
@for f in $(TMPDIR)/mirror-*.owl $(TMPDIR)/component-download-*.owl.owl; do \
8989
[ -s "$$f" ] || continue; \
90-
src=$$(basename "$$f" .owl); src=$${src#mirror-}; \
90+
base=$$(basename "$$f"); \
91+
case "$$base" in \
92+
mirror-*) src=$${base#mirror-}; src=$${src%.owl} ;; \
93+
component-download-*) src=$${base#component-download-}; src=$${src%.owl.owl} ;; \
94+
*) continue ;; \
95+
esac; \
9196
out=$(TMPDIR)/upstream-version-$$src.tsv; \
9297
$(ROBOT) query -i "$$f" -f tsv --query $< "$$out" >/dev/null 2>&1 || continue; \
9398
tail -n +2 "$$out" \
@@ -96,6 +101,28 @@ $(ONT)-upstream-versions.tsv: $(UPSTREAM_VERSIONS_SPARQL) | $(UPSTREAM_VERSIONS_
96101
sub(/^"/,"",$$i); sub(/"$$/,"",$$i) } } \
97102
$$1!="" {print src,$$1,$$2,$$3}' >> $@; \
98103
done
104+
@# Pass through Mondo's own source-versions.tsv for transitive upstreams
105+
@# (doid, ncit, omim, ordo, icd*) — keyed off the mondo versionIRI we
106+
@# just captured, so the manifest reflects exactly the Mondo release
107+
@# that was merged into this phenio. Skip rows whose source we already
108+
@# have directly (direct ingest wins over transitive).
109+
@mondo_ver=$$(awk -F'\t' '$$1=="mondo"{print $$3; exit}' $@); \
110+
date=$$(printf '%s' "$$mondo_ver" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}' | head -1); \
111+
if [ -n "$$date" ]; then \
112+
url="https://github.com/monarch-initiative/mondo/releases/download/v$$date/source-versions.tsv"; \
113+
if curl -sLf --retry 3 --max-time 60 "$$url" -o $(TMPDIR)/mondo-source-versions.tsv; then \
114+
awk -F'\t' 'NR>1{print $$1}' $@ | sort -u > $(TMPDIR)/upstream-versions-have.txt; \
115+
tail -n +2 $(TMPDIR)/mondo-source-versions.tsv \
116+
| awk 'BEGIN{FS=OFS="\t"} \
117+
{ for (i=1;i<=NF;i++) { sub(/^</,"",$$i); sub(/>$$/,"",$$i); \
118+
sub(/^"/,"",$$i); sub(/"$$/,"",$$i) } } \
119+
$$1!=""' \
120+
| awk -F'\t' 'NR==FNR{seen[$$1]=1; next} !seen[$$1]' \
121+
$(TMPDIR)/upstream-versions-have.txt - >> $@; \
122+
else \
123+
echo "WARN: could not fetch $$url; mondo-transitive sources will be absent" >&2; \
124+
fi; \
125+
fi
99126
@rows=$$(($$(wc -l < $@) - 1)); \
100127
if [ $$rows -eq 0 ]; then \
101128
echo "ERROR: $@ produced zero data rows. Mirror files in $(TMPDIR) may not be ready." >&2; \
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
PREFIX owl: <http://www.w3.org/2002/07/owl#>
22

3-
SELECT ?ontologyIRI ?versionIRI ?versionInfo WHERE {
3+
# Component-downloaded base files (e.g. go-base.owl, hp-base.owl) carry both
4+
# the upstream's owl:versionInfo (the real release date) and a second
5+
# owl:versionInfo added by ODK matching $(VERSION). Aggregate with MIN to
6+
# collapse to one row and prefer the older (upstream) value.
7+
SELECT ?ontologyIRI ?versionIRI (MIN(?vi) AS ?versionInfo) WHERE {
48
?ontologyIRI a owl:Ontology .
59
OPTIONAL { ?ontologyIRI owl:versionIRI ?versionIRI . }
6-
OPTIONAL { ?ontologyIRI owl:versionInfo ?versionInfo . }
10+
OPTIONAL { ?ontologyIRI owl:versionInfo ?vi . }
711
}
12+
GROUP BY ?ontologyIRI ?versionIRI

0 commit comments

Comments
 (0)