Skip to contents

Read a completed review

Betwixt review files can be read back into R after the human review has been completed. This vignette uses the finalised MuIS garment terminology review included with the package.

path <- system.file(
  "examples",
  "muis-garments-review_1-finalised.html",
  package = "betwixt"
)

review <- read_review(path)

You can also take a look at this HTML file at http://usebetwixt.com/examples/muis-garments-review_1-finalised.html.

Serialise the review as RDF

A completed review can be serialised as RDF using the Betwixt intermediate vocabulary. The serialisation preserves the reviewed assertions, their review status, and provenance of the review activity.

ttl <- serialise_review(
  review,
  prefix = "https://usebetwixt.com/examples/",
  filename = "muis-garments-review.ttl",
  title = "MuIS garment terminology review",
  description = "Reviewed terminology assertions for three MuIS garments."
)

ttl_file <- file.path(tempdir(), "muis-garments-review.ttl")
writeLines(text = ttl, con = ttl_file)

cat(ttl)
#> @prefix btx: <https://usebetwixt.com/ns/> .
#> @prefix schema: <https://schema.org/> .
#> @prefix prov: <http://www.w3.org/ns/prov#> .
#> @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
#> @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate>
#>     a schema:Dataset
#>     ; schema:name "MuIS garment terminology review"
#>     ; schema:description "Reviewed terminology assertions for three MuIS garments."
#>     ; prov:wasGeneratedBy <https://usebetwixt.com/examples/muis-garments-review/candidate-activity>
#>     ; btx:assertion <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/1>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/2>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/3>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/4>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/5>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/6>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/7>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/8>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/9>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/10>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/11>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/12>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/13>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/14>, <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/15> .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1>
#>     a schema:Dataset
#>     ; schema:name "MuIS garment terminology review"
#>     ; schema:description "Reviewed terminology assertions for three MuIS garments."
#>     ; prov:wasGeneratedBy <https://usebetwixt.com/examples/muis-garments-review/activity>
#>     ; prov:wasDerivedFrom <https://usebetwixt.com/examples/muis-garments-review/candidate>
#>     ; btx:assertion <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/1>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/2>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/3>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/4>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/5>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/6>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/7>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/8>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/9>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/10>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/11>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/12>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/13>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/14>, <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/15> .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate-activity>
#>     a prov:Activity
#>     ; prov:wasAssociatedWith <https://usebetwixt.com/examples/muis-garments-review/data-manager>
#>     ; prov:endedAtTime "2026-09-10T16:20:53Z"^^xsd:dateTime .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/data-manager>
#>     a prov:Agent
#>     ; rdfs:label "NA" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/activity>
#>     a prov:Activity
#>     ; prov:wasAssociatedWith <https://orcid.org/0000-0001-7513-6760>
#>     ; prov:wasInformedBy <https://usebetwixt.com/examples/muis-garments-review/candidate-activity>
#>     ; prov:startedAtTime "2026-09-10T16:21:13Z"^^xsd:dateTime
#>     ; prov:endedAtTime "2026-09-10T17:29:39Z"^^xsd:dateTime .
#> 
#> <https://orcid.org/0000-0001-7513-6760>
#>     a prov:Agent
#>     ; rdfs:label "Daniel Antal" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/1>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "label"
#>     ; btx:value "sweater, women's" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/2>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "description"
#>     ; btx:value "MuIS museum record 635780." .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/3>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "alternative_label"
#>     ; btx:value "női kardigán" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/4>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "alternative_description"
#>     ; btx:value "A MuIS 635780 számú múzeumi rekordja." .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/5>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "depicts"
#>     ; btx:value "300209900" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/6>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "label"
#>     ; btx:value "gloves" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/7>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "description"
#>     ; btx:value "MuIS museum record 633053." .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/8>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "alternative_label"
#>     ; btx:value "kesztyű" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/9>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "alternative_description"
#>     ; btx:value "A MuIS 633053 számú múzeumi rekordja." .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/10>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "depicts"
#>     ; btx:value "300148821" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/11>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "label"
#>     ; btx:value "shirt, women's" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/12>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "description"
#>     ; btx:value "MuIS museum record 635778." .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/13>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "alternative_label"
#>     ; btx:value "női ing" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/14>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "alternative_description"
#>     ; btx:value "A MuIS 635778 számú múzeumi rekordja." .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/candidate/assertion/15>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "depicts"
#>     ; btx:value "300212499" .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/1>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "label"
#>     ; btx:value "sweater, women's"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/2>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "description"
#>     ; btx:value "MuIS museum record 635780."
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/3>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "alternative_label"
#>     ; btx:value "női pulóver"
#>     ; btx:status btx:Corrected .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/4>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "alternative_description"
#>     ; btx:value "A MuIS 635780 számú múzeumi rekordja."
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/5>
#>     a btx:Assertion
#>     ; btx:rowNumber 1
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b"
#>     ; btx:predicate "depicts"
#>     ; btx:value "300209900"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/6>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "label"
#>     ; btx:value "gloves"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/7>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "description"
#>     ; btx:value "MuIS museum record 633053."
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/8>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "alternative_label"
#>     ; btx:value "kesztyű"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/9>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "alternative_description"
#>     ; btx:value "A MuIS 633053 számú múzeumi rekordja."
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/10>
#>     a btx:Assertion
#>     ; btx:rowNumber 2
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a"
#>     ; btx:predicate "depicts"
#>     ; btx:value "300148821"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/11>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "label"
#>     ; btx:value "shirt, women's"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/12>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "description"
#>     ; btx:value "MuIS museum record 635778."
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/13>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "alternative_label"
#>     ; btx:value "női ing"
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/14>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "alternative_description"
#>     ; btx:value "A MuIS 635778 számú múzeumi rekordja."
#>     ; btx:status btx:Corroborated .
#> 
#> <https://usebetwixt.com/examples/muis-garments-review/reviewed-1/assertion/15>
#>     a btx:Assertion
#>     ; btx:rowNumber 3
#>     ; btx:subject "https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf"
#>     ; btx:predicate "depicts"
#>     ; btx:value "300212499"
#>     ; btx:status btx:Corroborated .

You can download this file from http://usebetwixt.com/examples/muis-garments-review.ttl.

Tabular projections

The RDF representation is useful for semantic exchange, but reviewed knowledge can also be projected into ordinary tabular structures. Betwixt provides wide and long projections for different downstream uses.

Wide projection

The wide projection preserves the structure of the original review. It contains three aligned tables representing the candidate values, the reviewed values, and their review status.

wide <- project_review_wide(review)

Candidate state

The candidate table contains the semantic assertions presented to the reviewer. These may originate from existing metadata, computational transformations, or other candidate-generating processes.

wide[wide$plane == "candidate", ]
#>   row_number     plane                           evidence_url
#> 1          1 candidate https://www.muis.ee/museaalview/635780
#> 2          2 candidate https://www.muis.ee/museaalview/633053
#> 3          3 candidate https://www.muis.ee/museaalview/635778
#>                                                                               evidence_media_url
#> 1 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b
#> 2 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a
#> 3 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf
#>      evidence_text          context_held_by            label
#> 1 sweater, women's Estonian National Museum sweater, women's
#> 2           gloves Estonian National Museum           gloves
#> 3   shirt, women's Estonian National Museum   shirt, women's
#>                  description alternative_label
#> 1 MuIS museum record 635780.      női kardigán
#> 2 MuIS museum record 633053.           kesztyű
#> 3 MuIS museum record 635778.           női ing
#>                 alternative_description
#> 1 A MuIS 635780 számú múzeumi rekordja.
#> 2 A MuIS 633053 számú múzeumi rekordja.
#> 3 A MuIS 635778 számú múzeumi rekordja.
#>                                                                                          subject
#> 1 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b
#> 2 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a
#> 3 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf
#>     depicts
#> 1 300209900
#> 2 300148821
#> 3 300212499

At this stage, these values should be understood as proposed knowledge rather than accepted facts.

Reviewed state

The reviewed table contains the values after human review.

wide[wide$plane == "reviewed", ]
#>   row_number    plane                           evidence_url
#> 4          1 reviewed https://www.muis.ee/museaalview/635780
#> 5          2 reviewed https://www.muis.ee/museaalview/633053
#> 6          3 reviewed https://www.muis.ee/museaalview/635778
#>                                                                               evidence_media_url
#> 4 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b
#> 5 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a
#> 6 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf
#>      evidence_text          context_held_by            label
#> 4 sweater, women's Estonian National Museum sweater, women's
#> 5           gloves Estonian National Museum           gloves
#> 6   shirt, women's Estonian National Museum   shirt, women's
#>                  description alternative_label
#> 4 MuIS museum record 635780.       női pulóver
#> 5 MuIS museum record 633053.           kesztyű
#> 6 MuIS museum record 635778.           női ing
#>                 alternative_description
#> 4 A MuIS 635780 számú múzeumi rekordja.
#> 5 A MuIS 633053 számú múzeumi rekordja.
#> 6 A MuIS 635778 számú múzeumi rekordja.
#>                                                                                          subject
#> 4 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b
#> 5 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a
#> 6 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf
#>     depicts
#> 4 300209900
#> 5 300148821
#> 6 300212499

Most values may remain unchanged, while others can be corrected, rejected, or left unresolved. Because the table has the same structure as the candidate state, the two can be compared directly.

Review status

The status table records what happened to each reviewable value.

wide[wide$plane == "status", ]
#>   row_number  plane                           evidence_url
#> 7          1 status https://www.muis.ee/museaalview/635780
#> 8          2 status https://www.muis.ee/museaalview/633053
#> 9          3 status https://www.muis.ee/museaalview/635778
#>                                                                               evidence_media_url
#> 7 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=ebc07930-f719-44f2-a108-6698bcecc20b
#> 8 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=6440f24f-eaad-4cd4-84d7-1ae7a9d44d5a
#> 9 https://www.muis.ee/digitaalhoidla/api/meedia/pisipilt?id=826c402e-c130-4860-b11e-9538bd403ecf
#>      evidence_text          context_held_by        label  description
#> 7 sweater, women's Estonian National Museum corroborated corroborated
#> 8           gloves Estonian National Museum corroborated corroborated
#> 9   shirt, women's Estonian National Museum corroborated corroborated
#>   alternative_label alternative_description      subject      depicts
#> 7         corrected            corroborated corroborated corroborated
#> 8      corroborated            corroborated corroborated corroborated
#> 9      corroborated            corroborated corroborated corroborated

The status distinguishes values that were corroborated, corrected, rejected, or deferred. It therefore records the review decision separately from the reviewed value itself.

The three tables are structurally aligned: the same coordinate refers to the candidate assertion, its reviewed state, and the corresponding review decision.

Long projection

For semantic processing, the reviewed state can instead be projected into atomic assertions.

long <- project_review_long(review)
long
#> # A tibble: 30 × 21
#>    assertion_number row_number context_held_by     plane subject predicate value
#>               <int>      <int> <chr>               <chr> <chr>   <chr>     <chr>
#>  1                1          1 Estonian National … cand… https:… label     swea…
#>  2                2          1 Estonian National … cand… https:… descript… MuIS…
#>  3                3          1 Estonian National … cand… https:… alternat… női …
#>  4                4          1 Estonian National … cand… https:… alternat… A Mu…
#>  5                5          1 Estonian National … revi… https:… label     swea…
#>  6                6          1 Estonian National … revi… https:… descript… MuIS…
#>  7                7          1 Estonian National … revi… https:… alternat… női …
#>  8                8          1 Estonian National … revi… https:… alternat… A Mu…
#>  9                9          1 Estonian National … cand… https:… depicts   3002…
#> 10               10          1 Estonian National … revi… https:… depicts   3002…
#> # ℹ 20 more rows
#> # ℹ 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 now represents one reviewed assertion with its subject, predicate, value, and review status. The original row_number is retained as a coordinate linking the assertion back to the wide review layout, while assertion_number provides a unique identifier within the projection.

The wide and long forms therefore represent the same reviewed knowledge for different purposes: the wide form preserves the human review layout, while the long form exposes individual semantic assertions for further processing and serialisation.

Export to Excel

The three aligned projections can also be written to separate worksheets in a single Excel workbook. Excel export is not part of the Betwixt API; here we use the optional writexl package.

require(writexl)
#> Loading required package: writexl
xlsx_file <- file.path(tempdir(), "muis-garments-review.xlsx")

writexl::write_xlsx(
  x = list(
    candidate = wide[wide$plane == "candidate", ],
    reviewed = wide[wide$plane == "reviewed", ],
    status = wide[wide$plane == "status", ],
    long = long
  ),
  path = xlsx_file
)

xlsx_file
#> [1] "C:\\Users\\DANIEL~1\\AppData\\Local\\Temp\\RtmpGm9yNf/muis-garments-review.xlsx"

The resulting workbook preserves the same separation between candidate knowledge, reviewed knowledge, and review status that we saw above. You can review this Excel workbook at http://usebetwixt.com/examples/muis-garments-review.xlsx.