Skip to main content

linked_data_schema/
lib.rs

1mod linked_data_schema_field_visitor;
2
3pub use linked_data_schema_derive::LinkedDataSchema;
4pub use linked_data_schema_field_visitor::LinkedDataSchemaFieldVisitor;
5use rudof_rdf::rdf_core::Rdf;
6use shacl_ast::ShaclSchema;
7use shacl_ast::component::Component;
8
9pub mod reexports {
10  pub use iri_s;
11  pub use prefixmap;
12  pub use rudof_rdf;
13  pub use shacl_ast;
14  pub use shacl_rdf;
15  pub use uuid;
16}
17
18pub trait LinkedDataSchema {
19  fn shacl<RDF: Rdf>() -> ShaclSchema<RDF>;
20
21  fn components() -> Vec<Component>;
22}
23
24#[macro_export]
25macro_rules! print_linked_data_schema_for {
26  ( $x:ty ) => {
27    let schema = <$x>::shacl();
28    {
29      use ::linked_data_schema::reexports::rudof_rdf::rdf_core::RDFFormat::Turtle;
30      use ::linked_data_schema::reexports::rudof_rdf::rdf_impl::InMemoryGraph;
31      use ::linked_data_schema::reexports::shacl_rdf::ShaclWriter;
32
33      let mut shacl_writer = ShaclWriter::<InMemoryGraph>::default();
34      shacl_writer.write(&schema).unwrap();
35
36      let mut cursor = Cursor::new(Vec::new());
37
38      shacl_writer.serialize(&Turtle, &mut cursor).unwrap();
39
40      let content = cursor.into_inner();
41      let s = String::from_utf8(content).unwrap();
42      println!("{}", s);
43    }
44  };
45}