This commit is contained in:
2026-08-26 19:44:18 -04:00
parent 35477a3658
commit 948b415d5a
6 changed files with 184 additions and 84 deletions
+2 -2
View File
@@ -8,14 +8,14 @@ pub enum Category {
impl Category {
pub fn to_named_node(&self) -> NamedNodeRef<'_> {
match self {
Category::AudioBook => vocab::gl::AUDIO_BOOK,
Category::AudioBook => vocab::glo::AUDIO_BOOK,
}
}
pub fn try_from_named_node<'a>(node: impl Into<NamedNodeRef<'a>>) -> Option<Self> {
let node = node.into();
match node {
vocab::gl::AUDIO_BOOK => Some(Category::AudioBook),
vocab::glo::AUDIO_BOOK => Some(Category::AudioBook),
_ => None,
}
}
+39 -1
View File
@@ -1,7 +1,8 @@
use std::collections::HashMap;
use std::fmt::Display;
use oxigraph::model::{NamedNode, NamedNodeRef};
use oxigraph::model::{Graph, Literal, NamedNode, NamedNodeRef, NamedOrBlankNode, Term, Triple};
use oxilangtag::LanguageTag;
use url::Url;
use gl_search::Schema;
use crate::language::LanguageCondition;
use crate::vocab;
@@ -45,6 +46,14 @@ impl Class {
Class::Manifestation,
];
pub const CREATABLE: &[Class] = &[
Class::Work,
Class::Person,
Class::CorporateBody,
Class::Expression,
Class::Manifestation,
];
pub fn to_named_node(&self) -> NamedNodeRef<'_> {
match self {
Class::RdfProperty => vocab::rdf::PROPERTY,
@@ -105,4 +114,33 @@ impl Class {
],
}
}
pub fn next_url(&self) -> Option<Url> {
match self {
Class::Work => Some(Url::parse("http://fedora.quill.lan/rest/#Work").unwrap()),
_ => None,
}
}
pub fn template(&self, subject: NamedNode) -> Graph {
let empty_english_string = Term::Literal(Literal::new_language_tagged_literal_unchecked("", "en"));
let empty_node = Term::NamedNode(NamedNode::new_unchecked("#"));
match self {
Class::RdfProperty => Graph::new(),
Class::RdfsClass => Graph::new(),
Class::SkosConcept => Graph::new(),
Class::Work => Graph::from_iter([
Triple::new(NamedOrBlankNode::NamedNode(subject), vocab::rdawd::TITLE_OF_WORK, empty_english_string)
]),
Class::Person => Graph::from_iter([
Triple::new(NamedOrBlankNode::NamedNode(subject.clone()), vocab::rdaao::IDENTIFIER_FOR_PERSON, empty_node),
Triple::new(NamedOrBlankNode::NamedNode(subject.clone()), vocab::rdaad::GIVEN_NAME, empty_english_string.clone()),
Triple::new(NamedOrBlankNode::NamedNode(subject), vocab::rdaad::SURNAME, empty_english_string),
]),
Class::CorporateBody => Graph::new(),
Class::Expression => Graph::new(),
Class::Manifestation => Graph::new(),
}
}
}
+11 -1
View File
@@ -1,7 +1,7 @@
pub use oxigraph::model::vocab::rdf;
pub use oxigraph::model::vocab::rdfs;
pub mod gl {
pub mod glo {
use oxigraph::model::NamedNodeRef;
pub const AUDIO_BOOK: NamedNodeRef =
@@ -9,6 +9,9 @@ pub mod gl {
pub const READ_ONLY: NamedNodeRef =
NamedNodeRef::new_unchecked("https://graphofliberty.org/2026/04/ont/readOnly");
pub const NEXT_URL: NamedNodeRef =
NamedNodeRef::new_unchecked("https://graphofliberty.org/2026/04/ont/nextUrl");
}
pub mod skos {
@@ -57,6 +60,13 @@ pub mod rdaad {
NamedNodeRef::new_unchecked("http://rdaregistry.info/Elements/a/datatype/P50032");
}
pub mod rdaao {
use oxigraph::model::NamedNodeRef;
pub const IDENTIFIER_FOR_PERSON: NamedNodeRef =
NamedNodeRef::new_unchecked("http://rdaregistry.info/Elements/a/object/P50094");
}
pub mod rdawd {
use oxigraph::model::NamedNodeRef;