Skip to main content
Back to research

Open research, August 2026

The missing pathogen crosswalk: an open ontology for One Health biosurveillance registers

One Health is an integration claim. It says that food safety, human health, animal health, plant health and environmental surveillance are one system rather than five. Integration claims can be tested, and the test is not a policy question. It is whether a record in one register can actually be joined to a record in another. On 18 August 2026 we took the Food Standards Agency's complete open food alert register, all 1,348 alerts published since January 2018, and asked that question of every one of them. This is a case study in register assurance applied to biosurveillance, and everything below is reproducible from public data under the Open Government Licence.

The short version

  • The register can tell you which tree nut, but not which Salmonella. It maintains 27 allergen concepts and 5 pathogen concepts.
  • The pathogen concept scheme declares its last modification as 4 September 2017 and its version as 1.
  • Of 234 alerts naming a pathogen, 57 name it in prose with no concept to join on. That is 24.4 per cent of every pathogen alert in the register.
  • Pathogen coding was zero across all 188 alerts issued in 2018 and has never exceeded 19.7 per cent in any year. Allergen coding has run between 47.7 and 64.6 per cent every year without exception.
  • Four organisms appear in the register with no concept available to code them: Bacillus cereus, hepatitis A, Cronobacter sakazakii and norovirus.
  • No pathogen concept carries any external mapping, and all five denote at genus or species level while genomic surveillance identifies isolates at serovar and sequence type.
  • We built and published the NCBI Taxonomy crosswalk the register lacks. It is about two dozen triples.

What we measured, and how we know it is complete

The FSA publishes its food alerts as open linked data at data.food.gov.uk/food-alerts, keyless, under the Open Government Licence version 3.0, in JSON, CSV, GeoJSON, HTML, RDF/XML and Turtle. It is a genuinely good piece of public infrastructure, and none of what follows would be measurable without it.

The API has no paging parameter. A request with a limit above the register size returns everything, which could equally mean a silent server-side cap. We settled it with a cap test: fetch the register sorted ascending by creation date, fetch it again sorted descending, and compare the sets of alert identifiers. A truncating server returns different subsets under opposite sort orders. These three sets are identical, so 1,348 is a census and not a sample. One limit must be stated plainly: the API serves nothing created before 9 January 2018, although the FSA website carries older alerts, so every figure here describes the machine-readable register from that date onward and says nothing about the period before it.

Finding one: two vocabularies, two levels of care

The same register carries an allergen concept scheme and a pathogen concept scheme. The allergen scheme has 27 members. It goes well beyond the fourteen regulated allergen groups, breaking out almond, brazil, cashew, hazelnut, macadamia, pecan, pistachio and walnut individually, separating wheat, rye, barley and oats, and carrying a distinct concept for gluten-free oats. It is applied consistently across the entire eight and a half year span.

The pathogen scheme has 5 members: Salmonella spp, Listeria monocytogenes, Escherichia coli, Campylobacter spp and Clostridium botulinum. Its scheme node declares dct:modified of 4 September 2017 and owl:versionInfo 1.

This is not the contrast between a careless register and a careful one. It is the contrast between one part of a register that was resourced and maintained, and another part that was built in 2017 and left. That distinction matters, because it points at the remedy: this is a capability and ownership gap, not a technology gap.

Finding two: 57 alerts name a pathogen with nothing to join on

Across all 1,348 alerts, 234 name a pathogen in the title or a risk statement and 177 carry a coded pathogen. The 57 alerts in the gap state the organism in prose and offer no concept URI. The organism is knowable to a human reading the page and invisible to any system consuming the feed.

The year table shows this is not a legacy artefact being worked off.

YearAlertsCoded pathogenCoded allergen
20181880 (0.0%)109 (58.0%)
201917812 (6.7%)115 (64.6%)
202015026 (17.3%)82 (54.7%)
202115221 (13.8%)84 (55.3%)
202215330 (19.6%)78 (51.0%)
202312221 (17.2%)62 (50.8%)
202416024 (15.0%)91 (56.9%)
202515731 (19.7%)90 (57.3%)
2026 to 10 Aug8812 (13.6%)42 (47.7%)

Pathogen coding starts at zero, peaks at 19.7 per cent, and is not trending upward. Allergen coding never once drops below 47.7 per cent. The very first record in the register, FSA-PRIN-01-2018, is titled "James Hall recalls BBQ Pulled Pork because it may contain Salmonella" and carries a prose risk statement naming salmonella with no coded pathogen at all.

Finding three: four organisms have nowhere to go

Some alerts are uncoded because nobody coded them. Others are uncoded because there is no concept to code them with. Four organisms appear by name in the register and have no member in the scheme: Bacillus cereus in 8 alerts, hepatitis A virus in 3, Cronobacter sakazakii in 2 and norovirus in 2.

These are not exotic. Norovirus and hepatitis A are the two dominant foodborne viruses. Cronobacter sakazakii is the organism associated with powdered infant formula, and it is the subject of active international regulatory attention. Bacillus cereus is the most frequent of the four in this register. A surveillance vocabulary that closed in 2017 cannot represent the hazards its own operator has been publishing alerts about ever since.

Finding four: the join to genomic surveillance is impossible at every concept

This is the finding that matters most, and it survives even if every alert were coded tomorrow.

Genomic food chain surveillance identifies isolates at serovar and sequence type. An outbreak investigation does not act on Salmonella; it acts on Salmonella Typhimurium ST34. All five FSA concepts denote at genus or species level. A record coded "Salmonella spp" therefore cannot be joined to a genomic record, not because the systems are incompatible but because the register never captured which Salmonella it meant. The information was not lost in transmission. It was never recorded.

Two of the five concepts also disagree with themselves. The notation clostridium is a genus and its label is "Clostridium botulinum", a species. The notation listeria is a genus and its label is "Listeria monocytogenes". A consumer reading the notation and a consumer reading the label will disagree about what the record is about. Separately, e-coli is labelled as a species while every risk statement attached to it is explicitly about Shiga toxin-producing E. coli, which is a pathotype.

And none of the five carries any external mapping. There is no skos:exactMatch, closeMatch, broadMatch, broader, narrower, seeAlso or sameAs anywhere in the scheme. A consumer holding an NCBI Taxonomy identifier has no declared path in, and vice versa.

Three failure modes, three different remedies

The reason this needed an ontology rather than a spreadsheet is that "the data is incomplete" hides three problems that cost different amounts to fix and are owned by different people.

  • Not coded. The hazard is named in prose only. The remedy is process: someone applies the existing vocabulary at the point the alert is drafted. It is cheap.
  • Rank too coarse. The hazard is coded, but above the rank the join requires. The remedy is a decision about what the register captures, which touches the alert workflow and the laboratory interface. It is not cheap, and it is the one that actually unlocks One Health.
  • No alignment. The hazard is coded at sufficient rank but carries no mapping into the target vocabulary. The remedy is a crosswalk, which is a day of work, and we have done it below.

A hazard concept is never simply present or absent. It denotes at a rank, it was recorded at a coding level, and it does or does not carry an alignment. Those three together decide whether a cross-tier join is possible, and they decide it differently for every record. That is what the published ontology models. It contains no pathogens at all; it contains dated assertions by named registers, and the identity of an assertion includes its date so that two claims made on different days stay two claims.

The crosswalk, which we built rather than merely requested

Criticism without a remedy is not worth publishing. Every organism the register names was resolved to an NCBI Taxonomy identifier twice, once through the EBI Ontology Lookup Service and once through NCBI E-utilities, and a mapping is emitted only where the two agree. All nine resolved, and all nine agreed.

OrganismAlertsNCBI TaxonomyIn the FSA scheme
Salmonella110NCBITaxon:590yes
Listeria monocytogenes86NCBITaxon:1639yes
Escherichia coli19NCBITaxon:562yes
Bacillus cereus8NCBITaxon:1396no
Clostridium botulinum5NCBITaxon:1491yes
Hepatovirus A3NCBITaxon:12092no
Cronobacter sakazakii2NCBITaxon:28141no
Norwalk virus2NCBITaxon:11983no
Campylobacter1NCBITaxon:194yes

The published crosswalk carries five mappings for the concepts that exist and records the four missing organisms with the taxon identifier each could adopt and the number of alerts affected. It is about two dozen triples. The work of closing this particular gap is not large. It is simply not currently anyone's job.

One boundary must not be blurred. The crosswalk is a proposed remedy authored by us. The observations recorded in the graph continue to state, correctly, that as read on 18 August 2026 the FSA publishes no mapping of its own.

The method, which transfers to any surveillance register

Nothing above is specific to food. The same five steps apply to any register that publishes hazard, incident or case records and claims to be part of an integrated surveillance picture.

  1. Census the register and prove the census is complete rather than truncated. Opposite sort orders returning identical sets is the cheapest proof available.
  2. Separate what the register codes from what it merely narrates, and measure the gap per year rather than in aggregate, because an aggregate hides whether the gap is closing.
  3. Read the vocabulary's own declared currency. A scheme that publishes its own last-modified date is telling you something, and in this case it was telling us 2017.
  4. Establish the rank at which each concept denotes and compare it against the rank the downstream join requires. This is the step that distinguishes a data quality complaint from an operational finding.
  5. Compute every headline two independent ways and fail the build when they disagree.

On step five we take our own medicine. Every number in this article is computed set-based in Python and again by SPARQL over the graph, and the pipeline exits non-zero if any pair differs. We also validated with our own open-source engine, which found fourteen defects in our own ontology that we then fixed. More usefully, our engine disagreed with the reference SHACL implementation on the cross-source rules, and the investigation found a real bug in our engine rather than in the reference: it was silently passing SPARQL-based constraints instead of evaluating them, reporting success for rules it had never run. We filed that against ourselves, fixed it the same day, and added regression tests so it cannot come back. The two engines now agree exactly on this study's shapes, at sixty-nine violations decomposing the same way as the independent Python computation. We have left the original disagreement documented in the repository rather than editing it out, because how a defect was found is part of the evidence that the method works, and because a method that only audits other people's registers is not a method.

Being fair about what this does and does not show

The FSA publishes this register openly, without a key, in six serialisations, under an open licence. Very few food safety authorities anywhere do. Every finding here exists because the FSA chose to be transparent, and a register that published nothing would have produced a shorter and far less useful article.

The pathogen scheme is not malformed. Its five concepts are correctly typed SKOS, correctly in scheme, and they dereference. The defect is scope and currency, not construction. And the alert register is not the only surveillance surface the UK operates; PATH-SAFE and the National Biosurveillance Network exist precisely to work on the genomic layer, and nothing here should be read as a claim about their internal data. What this study measures is the public alert register and the joins that can be made from it.

We also record what we could not obtain. The World Organisation for Animal Health's WAHIS API refused our requests, so the animal health tier is modelled in the ontology and unpopulated in the data. We did not harvest plant health records. The claim that no alignment exists is a claim about what the FSA publishes, not a claim that no mapping could be constructed, which is precisely why we constructed one.

Why this matters beyond one register

Government is investing heavily in biosurveillance tooling, and the recurring finding across that investment is fragmentation: duplicated effort, limited visibility of what already exists, and organisations solving the same problem separately. That diagnosis is usually framed as a coordination problem, and coordination is treated as the remedy.

This study suggests the diagnosis is incomplete. Two organisations can be perfectly willing to share, sit on the same working group, and still be unable to join their records, because the identifiers do not meet at the resolution the join requires. Willingness is necessary and it is not sufficient. Before a data sharing agreement is worth signing, someone should be able to answer, per hazard and per register pair, whether the join is even possible and which of the three failure modes applies. That answer is computable, it is cheap to compute, and almost nobody computes it.

The artefact

The ontology, the SHACL layers, the crosswalk, the pipeline and an honest build report listing every source that refused us, every correction we made to our own counts and every hypothesis that died, are published at github.com/fabio-rovai/biosurveillance-ontology (opens in new tab). Code is MIT, ontology and documentation are CC BY 4.0, and the source data remains Crown copyright under the Open Government Licence.

If you run a surveillance register

We will run this measurement against a register you own and give you the result, at no cost and with no obligation, for the first three organisations that ask. You get a per-hazard table of which of your records can be joined across the One Health boundary and which cannot, which of the three failure modes applies to each, and the crosswalk for anything that only needs one. If your register is open we can start today; if it is not, we will work from a schema and a sample.

Fabio Rovai, The Tesseract Academy. fabio@thetesseractacademy.com