Skip to content

Commit 7834341

Browse files
committed
Switch to partial reads now GitHub Pages supports them, and partially updated dataflow
1 parent 280ee6f commit 7834341

2 files changed

Lines changed: 42 additions & 23 deletions

File tree

src/dataflows/bfi-na.md

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ If you have any comments or corrections please let [me](https://anjackson.net/)
1212

1313
## Introduction
1414

15-
The BFI's own [Data and Digital Preservation teams web page](https://www.bfi.org.uk/bfi-national-archive/look-behind-scenes/bfi-national-archive-teams/data-digital-preservation-teams) provides a concise introduction to their digital preservation activities. A number of posts on more detailed technical matters are available via [For the love of FOSS](https://digitensions.home.blog/), published by Joanna White (Knowledge, Learning and Collections Developer).
15+
The BFI's own [Data and Digital Preservation teams web page](https://www.bfi.org.uk/bfi-national-archive/look-behind-scenes/bfi-national-archive-teams/data-digital-preservation-teams) provides a concise introduction to their digital preservation activities. See also [Inside the Archive #49: World Digital Preservation Day 2025 part one | Inside the Archive](https://www.bfi.org.uk/inside-the-archive/news/inside-archive-49-world-digital-preservation-day-2025-part-one). A number of posts on more detailed technical matters are available via [For the love of FOSS](https://digitensions.home.blog/), published by Joanna White (Knowledge, Learning and Collections Developer).
16+
17+
TBA "BFI Blog", "Website Blog" ?
18+
19+
Q: No digitisation represented? Only born digital...
20+
A (emailed): Not intentional, just reflecting what I'd thought about, and my focus on digital bitstreams rather than information carriers.
1621

1722
## Bitstream Preservation Dataflow
1823

@@ -26,7 +31,8 @@ zoom 0.8
2631
height 600
2732
2833
data data "Source Data" black
29-
data aip-id "Archival Information Package Identifier" darkblue
34+
data record "CID Record" darkblue
35+
data aip-id "CID Archival Information Package Identifier" darkblue
3036
data aip "Archival Information Package" red
3137
data dip "Dissemination Information Package" green
3238
data replica_3 "Tape 3" darkred
@@ -48,14 +54,16 @@ move data@internet data@workspace "Deposit"
4854
"""Deposits arrive and are places in working storage, as Submission Information Packages (SIP). The precise details depend on the content stream."""
4955
5056
space
51-
derive data@workspace aip-id@workspace "Mint\nAIP ID"@N [0,1]
57+
derive data@workspace record@workspace "Basic\nDocumentation"@S [0,-1]
58+
move record@workspace record@cdi "Create\nCID Record"
59+
copy record@cdi aip-id@workspace "Retrieve\n CID"@E [0,-1]
5260
"""An identifier is created for the archival information package."""
5361
5462
space
5563
derive data@workspace aip@workspace "Generate\nthe AIP"@S [0,-1]
5664
"""An archival information package is generated from the submitted data. This stage varies a great deal between content streams. It may be manual or automated."""
5765
58-
move aip-id@workspace record@cdi "Record\nAIP ID"
66+
#move aip-id@workspace record@cdi "Record\nAIP ID"
5967
"""If the AIP was generated successfully, the AIP ID is recorded in the Collections Information Database."""
6068
6169
copy aip@workspace replica_1@tape1,replica_2@tape2 "Copy to\ntapes 1 & 2"
@@ -73,21 +81,41 @@ derive aip@workspace dip@workspace "Create DIP"@N [0,1]
7381
copy dip@workspace dip@access "Copy DIP"
7482
"""The access copy is transferred to the storage location used to provide access to end users."""
7583
76-
delete data@workspace,aip@workspace,dip@workspace "Delete Working Copies"@S
84+
delete data@workspace,aip@workspace,dip@workspace,aip-id@workspace "Delete Working Copies"@S
7785
"""All the intermediary file and the original submission are now deleted."""
7886
7987
status "Ingest Complete"
8088
8189
end
8290
```
8391

92+
Notes to integrate:
93+
94+
95+
1. Deposit
96+
2. CID Record Creation
97+
3. Assign ID to digital file (rename file)
98+
99+
- CID record creation generates unique ID
100+
- Sources: Portable carriers, HDD/SSD/data tape
101+
- We don't use BagIt or other format AIP container/process
102+
- we do
103+
- validation
104+
- QC
105+
- some normalisation
106+
- prep for autoingest (file naming to standard)
107+
- some TAR, some RAWcooked
108+
- only acquisitions here, not digitisation from physical collections, is this intentional?
109+
- this diagram only covers A/V and images, not documents (not currently preserving actively)
110+
111+
84112
At the end of the ingest process, there are immediately accessible 'access copies' (DIPs) and the 'preservation copies' (AIPs) are stored on multiple tapes. The Collections Information Database (CID) contains all metadata needed for management and discovery of content, along with the appropriate identifier for the information packages that contain the digital assets. The CID remains the master metadata store, and this metadata is preserved independently of the DPI.
85113

86114
The code for the core `autoingest job` and related workflows is here: [bfidatadigipres/BFI_scripts](https://github.com/bfidatadigipres/BFI_scripts).
87115

88116
## Access Dataflow
89117

90-
There are two different modes of access. Some content is available over the public web, and some is only available on site.
118+
There are two different modes of access. Some content is available over the public web (rights clearance required), while TBC???virtually all collection material is available on site.
91119

92120
### Internet Access
93121

@@ -145,7 +173,7 @@ end
145173

146174
### On-Site Access
147175

148-
The highest-quality 'preservation copies' are only available on site, and are retrieved from tape on demand:
176+
Only BFI staff are able to access the highest-quality (very high bitrate) 'preservation copies'. These copies are retrieved from tape on demand:
149177

150178

151179
```dataflow
@@ -208,15 +236,17 @@ end
208236

209237
Building on the generic DPI workflow, different types of content are handled as follows:
210238

239+
TBA: Meaning of Workspace below is unclear:
240+
211241
- Items for different streams land in different folders in the `workspace` working area.
212242
- Custom Python scripts process items by arranging them in and moving them between folders under shared naming conventions.
213243
- If the stream is not fully automated, any manual Digital Acquisitions or QC work is done at this point. If all is well, a corresponding `autoingest job` is created.
214-
- Significant events and distinct copies are registered in the CID. This is automated wherever possible.
215-
- Any access restrictions are added to the CID, can be seen in the DPI.
244+
- TBC: "CID gets a record for every file ingest to the DPI, with automated metadata from MediaInfo (Python)" This is actually per package, right, every file?
245+
- Any access restrictions are added to CID, displayed in the DPI, and used to limit onward delivery.
216246

217247
Some links and notes about the details on the content stream variations are given below.
218248

219-
### Digital Film
249+
### Digital Film TBA ? focus on streamers for BFI part
220250

221251
* [iPRES 2024: “You oughta be in pictures”: Insights to Digital Moving Image Preservation from the BFI, EYE, and LOC](https://www.digipres.org/publications/ipres/ipres-2024/papers/you-oughta-be-in-pictures-insights-to-digital-moving-image-prese/)
222252

src/formats/lookup.md

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,19 @@ const ext = view(
1717
);
1818
```
1919

20-
Using a two-step query:
21-
2220
```js
2321
import {DuckDBClient} from "npm:@observablehq/duckdb";
2422

23+
// Supported forcing full read because GitHub wasn't supporting range requests, but they fixed that!
2524
const config = {
2625
customUserAgent: "Wild Bob",
2726
filesystem: {
28-
forceFullHTTPReads: true
27+
forceFullHTTPReads: false
2928
}
3029
}
3130
const db = await DuckDBClient.of({exts: "https://www.digipres.org/_data/formats/index/extensions.parquet" }, config);
32-
//const rows = await db.sql([`SELECT UNNEST(format_ids) AS ext FROM exts WHERE id == '${ext}'`]);
33-
const rows = await sql([`SELECT UNNEST(format_ids) AS ext FROM exts WHERE id == '${ext}'`]);
34-
```
35-
36-
37-
```js
38-
const fids = rows.toArray().map((r) => `'${r.ext}'`);
39-
view(Inputs.table(await sql([`SELECT * FROM formats WHERE id in (${fids})`])));
4031
```
4132

42-
Just querying the `formats.parquet` directly:
43-
4433
```js
4534
Inputs.table(await sql([`SELECT * FROM formats WHERE '${ext}' in extensions`]))
4635
```

0 commit comments

Comments
 (0)