Skip to contents

Betwixt is a lightweight framework for constructing, representing, and reviewing candidate semantic claims in tabular data. It provides a pragmatic review layer in which candidate knowledge can be organised into bounded review tasks and presented for human judgement.

Betwixt keeps candidate semantic structure separate from its presentation for review. Candidate data can be projected into human-reviewable forms, while review decisions, states, and provenance remain explicit and reproducible.

Installation

You can install the development version of betwixt from GitHub with:

# install.packages("pak")
pak::pak("dataobservatory-eu/betwixt")

Example

The delini dataset provides a small cultural heritage example containing candidate semantic assertions prepared for human review:

library(betwixt)

data("delini")
delini
#> # A tibble: 5 × 16
#>   row_number evidence_url evidence_media_url     evidence_text label description
#>        <int> <chr>        <chr>                  <chr>         <chr> <chr>      
#> 1          1 <NA>         https://betwixt.datao… P7101565      Deli… the farmho…
#> 2          2 <NA>         https://betwixt.datao… P7101561      tabl… a tablet-w…
#> 3          3 <NA>         https://betwixt.datao… P7101556      bed … a bed in t…
#> 4          4 <NA>         https://betwixt.datao… P7101590      reco… a record c…
#> 5          5 <NA>         https://betwixt.datao… P7101623      reco… a floor pl…
#> # ℹ 10 more variables: col_1 <chr>, col_1_range <chr>, col_1_definition <chr>,
#> #   col_2 <chr>, col_2_range <chr>, col_2_definition <chr>, col_3 <chr>,
#> #   col_3_range <chr>, col_3_definition <chr>, context_1 <chr>
betwixt_render(
  delini,
  cols = c(
    col_1 = "Subject",
    col_2 = "instance of",
    col_3 = "heritage of",
    context_1 = "held by"
  ),
  subheadings = c(
    col_2 = "wdt:P31",
    col_3 = "controlled range"
  ),
  title = "Delini semantic review",
  description = "Review the proposed semantic assertions.",
  project_id = "delini",
  filename_stem = "delini-wide",
  sequence = 0L,
  path = tempdir()
)

The resulting standalone HTML review presents the evidence and descriptive context alongside the candidate semantic assertions and records the resulting review state and provenance.

Vignettes

Betwixt implements the following workflow:

candidate knowledge

bounded review task

review projection

human review

review state

It is organised around complementary vignettes.

1. Betwixt Implementation

Introduces scoped claims, semantic stabilisation, contextual inheritance, and the conceptual foundations of Betwixt.

2. Review Layouts and Semantic Projections

Introduces the Delini example and shows how candidate semantic material can be represented as wide, dual-wide, long, and dual-long projections. The current browser-based review implementation uses the wide projection.

3. Creating Candidate Datasets

Shows how to construct a Betwixt candidate dataset from ordinary source data using a MuIS museum example. It distinguishes evidence media, evidence resources, descriptive metadata, alternative descriptions, and candidate assertions, then demonstrates adding candidate columns and rendering a review with row-level and review-level comments.

4. R Reference Implementation

Describes the R implementation and the construction and processing of candidate semantic data.

5. Python Minimal Implementation

Planned vignette demonstrating how the underlying approach can be implemented outside R using ordinary tabular and web technologies.

Citation

If you use Betwixt in research, please cite:

Antal, D. (2026). Betwixt. Reprex. https://doi.org/10.5281/zenodo.22091535

In R, the current citation can be obtained with:

citation("betwixt")