Skip to contents

Why an intermediate vocabulary?

Betwixt operates between candidate knowledge and its eventual representation in a domain knowledge graph. At the time of review, the components of an assertion may not yet have stable identifiers or mappings to a particular ontology.

For example, a reviewed assertion might consist of:

subject:   Q223
predicate: depicts
value:     cardigan

The subject may eventually resolve to a Wikibase entity, depicts may be mapped to a property from an external vocabulary, and cardigan may later be replaced by a controlled concept. Betwixt does not require these decisions to have been made before the assertion can be reviewed.

The Betwixt vocabulary therefore represents reviewed semantic assertions before they are committed to a particular domain ontology. It is deliberately small: its purpose is to preserve assertion structure, review state, and the information required for subsequent semantic projection.

Assertions

The central class is btx:Assertion. Its subject, predicate, and value are represented as lexical values.

btx:Assertion
    a owl:Class ;
    rdfs:label "Assertion" ;
    rdfs:comment "An intermediate semantic assertion represented independently of a domain ontology." .

btx:subject
    a owl:DatatypeProperty ;
    rdfs:domain btx:Assertion ;
    rdfs:range xsd:string ;
    rdfs:label "subject" ;
    rdfs:comment "The lexical representation of the subject of an assertion." .

btx:predicate
    a owl:DatatypeProperty ;
    rdfs:domain btx:Assertion ;
    rdfs:range xsd:string ;
    rdfs:label "predicate" ;
    rdfs:comment "The lexical representation of the predicate of an assertion." .

btx:value
    a owl:DatatypeProperty ;
    rdfs:domain btx:Assertion ;
    rdfs:range xsd:string ;
    rdfs:label "value" ;
    rdfs:comment "The lexical representation of the value of an assertion." .

Using datatype properties here is intentional. Betwixt does not assume that a subject, predicate, or value is already an RDF resource. A filename, local inventory number, Wikibase QID, natural-language predicate, or unresolved concept can therefore participate in the same review process.

A concrete assertion can consequently be represented as:

:assertion-5
    a btx:Assertion ;
    btx:subject "Q223" ;
    btx:predicate "depicts" ;
    btx:value "cardigan" ;
    btx:status btx:Deferred .

This is valid RDF, but it does not assert the domain triple Q223 depicts cardigan. Instead, it describes an intermediate assertion whose semantic components can subsequently be resolved and projected.

btx:assertion associates assertions with a containing resource, while btx:rowNumber preserves the coordinate from the review from which an assertion was projected.

Review state

Review state is represented separately from the content of an assertion.

...

btx:Corroborated means that the candidate assertion survived review unchanged. btx:Corrected records that the reviewed value differs from the candidate. btx:Rejected records rejection, while btx:Deferred explicitly preserves an unresolved decision. btx:Pending represents an assertion whose review has not yet been finalised.

This distinction matters because the result of review is not merely another table of values. Betwixt also preserves what happened to the proposed knowledge during review.

From review matrices to assertions

A Betwixt review is naturally represented in wide form during human review. Candidate values, reviewed values, and review states occupy corresponding coordinates.

project_review_long() transforms the reviewed matrix into atomic assertions:

path <- system.file(
  "examples",
  "muis-garments-review_1-finalised.html",
  package = "betwixt"
)
review <- read_review(path)
long <- project_review_long(review)
head(long)
#> # A tibble: 6 × 21
#>   assertion_number row_number context_held_by      plane subject predicate value
#>              <int>      <int> <chr>                <chr> <chr>   <chr>     <chr>
#> 1                1          1 Estonian National M… cand… https:… label     swea…
#> 2                2          1 Estonian National M… cand… https:… descript… MuIS…
#> 3                3          1 Estonian National M… cand… https:… alternat… női …
#> 4                4          1 Estonian National M… cand… https:… alternat… A Mu…
#> 5                5          1 Estonian National M… revi… https:… label     swea…
#> 6                6          1 Estonian National M… revi… https:… descript… MuIS…
#> # ℹ 14 more variables: status <chr>, reviewer <chr>, reviewer_email <chr>,
#> #   reviewer_iri <chr>, started_at <chr>, saved_at <chr>, ended_at <chr>,
#> #   data_manager <chr>, data_manager_email <chr>, data_manager_iri <chr>,
#> #   candidate_generated_at <chr>, software_agent <chr>, software_version <chr>,
#> #   project_id <chr>

Each row in the long projection represents one assertion. row_number retains its relationship to the original review matrix, while assertion_number identifies the assertion within the projection.

This transformation provides the bridge between a human-oriented review matrix and the assertion-oriented representation used by the Betwixt RDF vocabulary.

Mappings

Keeping assertions lexical allows semantic resolution to happen separately from review. A btx:Mapping records a correspondence between a lexical Betwixt term and a target RDF resource.

Mappings can apply to any of the three structural positions of an assertion:

btx:AssertionRole
    a owl:Class ;
    rdfs:label "Assertion role" .

btx:Subject a btx:AssertionRole .
btx:Predicate a btx:AssertionRole .
btx:Value a btx:AssertionRole .

For example:

:mapping-1
    a btx:Mapping ;
    btx:source "depicts" ;
    btx:target wdt:P121 ;
    btx:role btx:Predicate .

The mapping does not state that the lexical term "depicts" is universally equivalent to wdt:P121. It records a correspondence that may warrant that transformation in an appropriate context.

This distinction is deliberate: Betwixt does not align ontologies. It records reviewed correspondences that can warrant bounded semantic projections.

Bounded semantic projection

Consider a reviewed assertion:

:assertion-5
    a btx:Assertion ;
    btx:subject "Q223" ;
    btx:predicate "depicts" ;
    btx:value "Q456" ;
    btx:status btx:Corroborated .

Together with reviewed mappings for its three components, this may warrant a projection such as:

wd:Q223 wdt:P121 wd:Q456 .

The projected triple belongs to the target semantic environment; the Betwixt assertion remains the intermediate representation from which it was derived.

This establishes an intentional boundary. Betwixt does not attempt to replace Wikibase, Schema.org, CIDOC CRM, RiC-O, or another domain model. It represents reviewed assertions and their correspondences sufficiently explicitly that transformations into such environments can be reproducible and auditable.

In this sense, Betwixt sits literally betwixt documentary or computational evidence and the domain knowledge graph:

candidate knowledge → human review → stabilised assertion → bounded semantic projection

From mappings to federation

The need for mappings becomes particularly clear when knowledge is exchanged between independently governed knowledge graphs.

Two graphs may describe the same person, use apparently equivalent predicates, and classify that person using apparently equivalent concepts, while sharing none of the identifiers involved. Neither graph is necessarily wrong, incomplete, or subordinate to the other. They simply operate within different semantic environments.

This is a normal situation in a federation.

Consider the Finno-Ugric Data Sharing Space (FUDSS) and Wikidata. Both can express the proposition:

Béla Bartók — instance of — human

In FUDSS:

fudss:Q5613 fudsst:P14 fudss:Q6 .

In Wikidata:

wd:Q83326 wdt:P31 wd:Q5 .

The propositions are readily recognisable to a human as corresponding. Computationally, however, every component is different.

Role FUDSS Wikidata
subject fudss:Q5613 wd:Q83326
predicate fudsst:P14 wdt:P31
value fudss:Q6 wd:Q5

Nothing in the RDF statements themselves establishes these correspondences.

A federation therefore needs more than access to both graphs. It needs an explicit account of which semantic correspondences are sufficiently warranted for a particular exchange.

This is where Betwixt enters the federation.

Candidate correspondences

Rather than immediately asserting global equivalence between the resources, Betwixt can represent the proposed correspondences as candidates.

For the Bartók assertion, three correspondences are required:

subject:    fudss:Q5613  →  wd:Q83326
predicate:  fudsst:P14   →  wdt:P31
value:      fudss:Q6     →  wd:Q5

These are not merely technical lookup rules. Each is a semantic claim.

The subject correspondence claims that the two identifiers refer appropriately to Béla Bartók for the intended projection. The predicate correspondence claims that the two properties can play corresponding roles. The value correspondence claims that the two resources provide compatible classifications for the purpose at hand.

Betwixt therefore treats mappings as material that can itself be reviewed.

Reviewing the correspondence

The same candidate-review workflow used for ordinary semantic assertions can be used for proposed mappings.

For example:

mapping <- create_candidate_dataset(
  label = "FUDSS instance of → Wikidata instance of",
  subject = "https://reprexbase.eu/fu/prop/direct/P14"
) |>
  add_candidate_column(
    name = "predicate",
    value = "https://usebetwixt.com/ns/target"
  ) |>
  add_candidate_column(
    name = "value",
    value = "http://www.wikidata.org/prop/direct/P31"
  )

The proposed correspondence can now be corroborated, corrected, rejected, or deferred.

This is important because mappings are not necessarily permanent or universal. A correspondence that is adequate for one research question, data exchange, or federation may be too broad for another.

From reviewed correspondence to projection

Once the relevant correspondences have been reviewed, Betwixt can represent them explicitly:

:mapping-subject
    a btx:Mapping ;
    btx:source "https://reprexbase.eu/fu/entity/Q5613" ;
    btx:target wd:Q83326 ;
    btx:role btx:Subject .

:mapping-predicate
    a btx:Mapping ;
    btx:source "https://reprexbase.eu/fu/prop/direct/P14" ;
    btx:target wdt:P31 ;
    btx:role btx:Predicate .

:mapping-value
    a btx:Mapping ;
    btx:source "https://reprexbase.eu/fu/entity/Q6" ;
    btx:target wd:Q5 ;
    btx:role btx:Value .

Together with the reviewed source assertion, these correspondences provide the warrant for the bounded projection:

wd:Q83326 wdt:P31 wd:Q5 .

The important point is what has not happened.

FUDSS has not adopted Wikidata’s ontology. Wikidata has not adopted the FUDSS ontology. Neither graph has surrendered its identifiers or governance. Betwixt has not asserted global owl:sameAs or owl:equivalentProperty relationships.

Instead, the federation has established enough reviewed semantic correspondence to perform a declared projection.

Why this matters for bounded federation

This changes the interoperability problem.

A federation does not necessarily need complete ontology alignment before independently governed graphs can exchange knowledge. It needs sufficient correspondence for the particular inference or exchange being attempted.

Betwixt makes that correspondence an explicit object of knowledge production:

local assertion → candidate correspondence → human review → warranted projection

The boundary is therefore not merely technical. It records the limits within which a semantic transformation is considered justified.

This is what makes the projection bounded.

A mapping can be useful without claiming universal equivalence. A local vocabulary can remain local. A specialised knowledge graph can preserve distinctions that do not exist in Wikidata while still projecting those assertions for which an adequate correspondence has been established.

Conversely, when no satisfactory correspondence exists, the correct outcome can be deferred rather than forcing an alignment.

The purpose of Betwixt is therefore not to eliminate semantic difference between federated graphs. It is to make the decisions required to cross those differences explicit, reviewable, reproducible and revisable.

@prefix btx: <https://usebetwixt.com/ns/> .
@prefix wd: <http://www.wikidata.org/entity/> .
@prefix wdt: <http://www.wikidata.org/prop/direct/> .
@prefix fudss: <https://reprexbase.eu/fu/entity/> .
@prefix fudsst: <https://reprexbase.eu/fu/prop/direct/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

# Betwixt vocabulary ----------------------------------------------------------

<https://usebetwixt.com/ns/betwixt.ttl>
    a <http://www.w3.org/2002/07/owl#Ontology> .

# Source assertion ------------------------------------------------------------

# FUDSS:
# Béla Bartók — instance of — human
#
# fudss:Q5613 fudsst:P14 fudss:Q6 .

<https://usebetwixt.com/examples/bartok/assertion/1>
    a btx:Assertion ;
    btx:subject "https://reprexbase.eu/fu/entity/Q5613" ;
    btx:predicate "https://reprexbase.eu/fu/prop/direct/P14" ;
    btx:value "https://reprexbase.eu/fu/entity/Q6" ;
    btx:status btx:Corroborated .

# Subject mapping -------------------------------------------------------------

<https://usebetwixt.com/examples/bartok/mapping/subject>
    a btx:Mapping ;
    btx:source "https://reprexbase.eu/fu/entity/Q5613" ;
    btx:target wd:Q83326 ;
    btx:role btx:Subject .

# Predicate mapping -----------------------------------------------------------

<https://usebetwixt.com/examples/bartok/mapping/predicate>
    a btx:Mapping ;
    btx:source "https://reprexbase.eu/fu/prop/direct/P14" ;
    btx:target wdt:P31 ;
    btx:role btx:Predicate .

# Value mapping ---------------------------------------------------------------

<https://usebetwixt.com/examples/bartok/mapping/value>
    a btx:Mapping ;
    btx:source "https://reprexbase.eu/fu/entity/Q6" ;
    btx:target wd:Q5 ;
    btx:role btx:Value .

# Bounded semantic projection -------------------------------------------------

# Wikidata:
# Béla Bartók — instance of — human

wd:Q83326 wdt:P31 wd:Q5 .