using CiteEXchange
root = pwd() |> dirname |> dirname |> dirname
f = joinpath(root, "test", "data", "hmt-2022k.cex")
s = read(f) |> String
u = "https://raw.githubusercontent.com/cite-architecture/CitableObject.jl/main/test/data/hmt-2022k.cex"
blks = blocks(s)
The citerelationset
block of a CEX source defines a single citable object containing one or more relations among other citable content. The Homer Multitext project data set that we used on the previous page, for example, includes relation sets recording that passages of text appear on particular pages of a manuscript.
With the CexUtils
submodule, you can collect relations data for a specific relation set, or for all relation sets belonging to a specified collection of relation sets.
urn:cite2:hmt:iliadindex.v1:e4
identifies a specific relation recording data for a single manuscript.
using CitableObject
using CitableObject.CexUtils
relationset = Cite2Urn("urn:cite2:hmt:iliadindex.v1:e4")
e4_relations_string = relations(s, relationset)
length(e4_relations_string)
Reading from different types of CEX sources produces equivalent results.
using CitableBase: FileReader
using CitableBase: UrlReader
e4_relations_blocks = relations(blocks(s), relationset)
e4_relations_file = relations(f, relationset, FileReader)
e4_relations_url = relations(u, relationset, UrlReader)
e4_relations_string == e4_relations_blocks == e4_relations_file == e4_relations_url
The Homer Multitext data include other relation sets belonging to the same collection.
relationsetcollection = Cite2Urn("urn:cite2:hmt:iliadindex.v1:")
s_relations = relations(s, relationsetcollection)
length(s_relations)
b_relations = relations(blocks(s), relationsetcollection)
f_relations = relations(f, relationsetcollection, FileReader)
u_relations = relations(u, relationsetcollection, UrlReader)
s_relations == b_relations == f_relations == u_relations
Like any other citable collection, collections of relation sets can be associated with a data model. Use the relations_for_model
function to collect all relations for relation sets implementing a model. In our sample data set, all the relation ssets implementing the "Text on page" model belong to the same citable collection, so the results will be identical to the previous examples.
model = Cite2Urn("urn:cite2:hmt:datamodels.v1:textonpage")
s_modeldata = relations_for_model(s, model)
length(s_modeldata)
b_modeldata = relations_for_model(blocks(s), model)
f_modeldata = relations_for_model(f, model, FileReader)
u_modeldata = relations_for_model(u, model, UrlReader)
s_modeldata == b_modeldata == f_modeldata == u_modeldata
The relationsetlabel
function finds the description property of an individual relation set.
dseurn = Cite2Urn("urn:cite2:hmt:hmtdse.v1:all")
s_label = relationsetlabel(s, dseurn)
Or from any other source:
b_label = relationsetlabel(blocks(s), dseurn)
f_label = relationsetlabel(f, dseurn, FileReader)
u_label = relationsetlabel(u, dseurn, UrlReader)
s_label == b_label == f_label == u_label