use rdftk_core::model::literal::Literal;
use rdftk_core::model::statement::Statement;
use rdftk_core::model::{literal::DataType, statement::BlankNode};
use rdftk_iri::Iri;
use rdftk_names::{rdf, rdfs};
use std::str::FromStr;
#[test]
fn make_a_statement() {
let st = Statement::new(
BlankNode::from_str("B01").unwrap(),
rdf::a_type().clone(),
rdfs::class(),
);
assert_eq!(st.to_string(), "_:B01 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Class>");
}
#[test]
fn reify_a_statement() {
let st = Statement::new(
BlankNode::from_str("B01").unwrap(),
rdf::a_type().clone(),
rdfs::class(),
);
let (_, sts) = st.reify().unwrap();
assert_eq!(sts.len(), 4);
}
#[test]
fn reify_nested_statement() {
let st = Statement::new(
BlankNode::from_str("B01").unwrap(),
rdf::a_type().clone(),
rdfs::class(),
);
let st = Statement::new(st, rdf::a_type().clone(), rdf::statement());
println!("{}", st);
let (_, sts) = st.reify().unwrap();
for st in &sts {
println!("{}", st);
}
assert_eq!(sts.len(), 8);
}
#[test]
fn make_literal_statement() {
let st = Statement::new(
BlankNode::from_str("B01").unwrap(),
rdfs::label().clone(),
Literal::plain("some thing"),
);
assert_eq!(
st.to_string(),
"_:B01 <http://www.w3.org/2000/01/rdf-schema#label> \"some thing\""
);
}
#[test]
fn make_typed_literal_statement() {
let st = Statement::new(
BlankNode::from_str("B01").unwrap(),
rdfs::label().clone(),
Literal::with_data_type("2020", DataType::Int),
);
assert_eq!(
st.to_string(),
"_:B01 <http://www.w3.org/2000/01/rdf-schema#label> 2020"
);
}
#[test]
fn make_an_embedded_statement() {
let about = Statement::new(
Iri::from_str("http://example.org/s").unwrap(),
Iri::from_str("http://example.org/p").unwrap(),
Iri::from_str("http://example.org/o").unwrap(),
);
let st = Statement::new(
BlankNode::from_str("a").unwrap(),
Iri::from_str("http://example.org/v/occurenceOf").unwrap(),
about,
);
assert_eq!(st.to_string(), "_:a <http://example.org/v/occurenceOf> << <http://example.org/s> <http://example.org/p> <http://example.org/o> >>");
}