Skip to content

ArrayExpress experiment to BioSample, via the SDRF

Route id: ae_experiment->biosample:sdrf Provider: EBI BioStudies Direction: E-MTAB/E-GEOD → SAMEA/SAMN/SAMD

curl -sL 'https://www.ebi.ac.uk/biostudies/files/E-MTAB-6505/E-MTAB-6505.sdrf.txt' \
  | head -1 | tr '\t' '\n' | grep -n 'BioSD_SAMPLE'

The Comment[BioSD_SAMPLE] column of the SDRF. It matters mostly as the fallback for a study whose IDF declares no secondary accession — E-MTAB-6505 is reachable only this way — and as the sample-level link for any ArrayExpress entry point.

Measured

Corpus: sample:3000@arrayexpress-ena, a seeded draw from the 20,693 studies BioStudies records an ENA link for. Surveyed: 2026-09-15; the nine studies whose SDRF is split across two files re-asked on 2026-10-27, once the route read both. All nine are E-GEOD and now answer empty.

Resolved 1,221 (40.7%)
Empty 1,777
Failed 2
Unique BioSamples 63,153

A 41% rate looks poor until it is split by where the study came from:

Prefix What it is Studies Names BioSamples
E-MTAB native ArrayExpress submissions 1,398 1,210 87%
E-GEOD ArrayExpress's imports of GEO series 1,550 0 0%
E-ERAD the Sanger ERAD collection 48 11 23%

Not one E-GEOD study carries the column. Adding the 450 E-GEOD studies in the arrayexpress-no-secondary corpus makes that 0 of 2,000. It is not a sampling artefact and not a coverage gap: an ArrayExpress import of a GEO series has a GEO-derived SDRF, and GEO-derived SDRFs have no BioSample column at all.

What follows from that

The route is for native ArrayExpress studies. For an E-GEOD accession the answer is not here and never will be — go to GEO, where GSE63923 (the series behind E-GEOD-63923) resolves through the SOFT family file at 99.9%.

Where it applies, the chain it feeds is complete. Over the 23 studies in arrayexpress-no-secondary it rescued, the 756 BioSamples it named all resolved: 756 of 756 to 1,547 runs through BioSample → run, with nothing empty and nothing failed.

Parsing

The SDRF is read as raw field lists, not row dicts. SDRF repeats column names by design and csv.DictReader keeps only the last value for a repeated key — the defect that halved E-MTAB-9221's file list. Comment[BioSD_SAMPLE] does not usually repeat, but the file it sits in does, so the same reader is used throughout.