Crawler fixes surfaced by large-scale crawls (incl. ENA umbrella projects such as PRJNA9506, which fans out to thousands of child projects).
- BioFSharp.INSDC.Crawler — a project/study with no sequencing runs now persists its own record: discovery is run-driven, so a childless root previously discovered nothing (not even itself).
Discovery.withRootseeds the root into the bucket its accession prefix implies (PRJ…→ BioProject,SRP/ERP/DRP…→ Study). - BioFSharp.INSDC.Crawler — new
Startedcrawl event, emitted before discovery, so the first log line identifies the root accession rather than only learning it atdone —. - BioFSharp.INSDC.SQLite / Crawler — bulk insert:
Sql.withTransactionis now reentrant (a nested call joins the active transaction rather than throwing, since SQLite has no nested transactions), letting the crawler persist an entire crawl in a single transaction instead of one commit per record — the difference between a trickle and a bulk load on crawls of hundreds of thousands of runs.
Expands the suite from two packages to five: BioFSharp.FileFormats.INSDC and
BioFSharp.IO.INSDC gain new capabilities, while BioFSharp.INSDC.SQLite,
BioFSharp.INSDC.ArcIR, and BioFSharp.INSDC.Crawler ship for the first time.
- BioFSharp.FileFormats.INSDC — generated per-type XPointer/XPath fragment selectors (
FragmentSelectors.cs) so individual elements of a record can be addressed by fragment identifier. - BioFSharp.IO.INSDC — structural ontology that decompiles records into ontology term/value pairs whose term names mirror the XML structure; fragment-selector tracking via per-instance
xpathOf(bare XPath) andxpointerOf(#xpointer) lookups plus anxpathEntriesDTO. - BioFSharp.INSDC.SQLite (new) — SQLite-backed store that deconstructs BioProject, Study, BioSample, Experiment, and Run records into a normalized schema and reconstructs them on read, with per-entity modules and an
accession_relationstable capturing the cross-record connectivity graph. - BioFSharp.INSDC.ArcIR (new) — maps INSDC records into ArcIR, an ARC-oriented intermediate representation (a property graph of typed, annotations-first objects and relations) with sample references resolved to their BioSample node; renders the graph to GraphML, interactive HTML, and text; ingests supplementary papers and count data.
- BioFSharp.INSDC.Crawler (new) — crawls a project accession from ENA (Portal
filereportdiscovery to Browser API fetch) and persists every connected run, experiment, sample, and study via the SQLite store plus its connectivity table; exposescrawl/crawlToSqlite(with*Async/*WithAsyncvariants); targets net8.0 because FsHttp requires .NET 6+, published to NuGet like the rest.
initial release of the generated C# type model and F# wrapper for the INSDC file formats. The type model covers all schemas from https://ftp.ebi.ac.uk/pub/databases/ena/doc/xsd/sra_1_5, but IO only supports the most common ones for now:
- BioProject
- Study
- BioSample
- Experiment
- Run
- Submission
- Analysis
- Initial repository scaffolding for BioFSharp.INSDC.
- Two-package layout established:
BioFSharp.FileFormats.INSDC(C# generated type model) andBioFSharp.IO.INSDC(F# wrapper).