1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
/*! ![io](https://img.shields.io/badge/RDFtk-io-BD1B89?logo=data:image/png;base64,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) This crate provides traits for reading and writing `Statement`s and `Graph`s as well as implementations of these for common representations. The following are some well-known formats (see [Wikipedia](https://en.wikipedia.org/wiki/Resource_Description_Framework#Serialization_formats) for a description of different serializations), support is indicated in the final column with an **R** for read support and **W** for write support. One additional module, `dot` allows for the creation of [GraphViz](https://graphviz.gitlab.io/) dot files for a visualization of a graph's structure. | Module | Name | MIME Type | R/W | |-----------|---------------------------------------------------------------------------------------------------- |-----------------------------|---------| | `nt` | [RDF 1.1 N-Triples](https://www.w3.org/TR/n-triples/); A line-based syntax for an RDF graph | `application/n-triples` | **W** | | `nq` | [RDF 1.1 N-Quads](https://www.w3.org/TR/n-quads/); A line-based syntax for RDF datasets | `application/n-quads` | **W** | | `turtle` | [RDF 1.1 Turtle](https://www.w3.org/TR/turtle/); Terse RDF Triple Language | `text/turtle` | **W** | | `trig` | [RDF 1.1 TriG](https://www.w3.org/TR/trig/); RDF Dataset Language | `application/trig` | | | `xml` | [RDF 1.1 XML Syntax](https://www.w3.org/TR/rdf-syntax-grammar/) | `application/rdf+xml` | **W** | | `json` | [RDF 1.1 JSON Alternate Serialization](https://www.w3.org/TR/rdf-json/) | `application/rdf+json` | **W** | | `n3` | [Notation3 (N3): A readable RDF syntax](https://www.w3.org/TeamSubmission/n3/) | `text/rdf+n3` | **W** | | TBD | [Binary RDF Representation for Publication and Exchange (HDT)](https://www.w3.org/Submission/HDT/) | N/A | | | TBD | [RDF Binary using Apache Thrift](https://afs.github.io/rdf-thrift/) | `application/x-binary-rdf` | | | TBD | [JSON-LD 1.1](https://www.w3.org/TR/json-ld/); A JSON-based Serialization for Linked Data | `application/ld+json` | | | TBD | [RDFa Core 1.1 - Third Edition](https://www.w3.org/TR/rdfa-core/) | `text/html` | | Each module will also provide public constants `NAME`, `FILE_EXTENSION`, and `MIME_TYPE`. # Example TBD */ #![warn( // ---------- Stylistic future_incompatible, nonstandard_style, rust_2018_idioms, trivial_casts, trivial_numeric_casts, // ---------- Public missing_debug_implementations, missing_docs, unreachable_pub, // ---------- Unsafe unsafe_code, // ---------- Unused unused_extern_crates, unused_import_braces, unused_qualifications, unused_results, )] #[macro_use] extern crate lazy_static; #[macro_use] extern crate log; #[cfg(any(feature = "nt", feature = "turtle"))] #[macro_use] extern crate pest_derive; use rdftk_core::data_set::DataSetRef; use rdftk_core::error::Result; use rdftk_core::graph::{GraphFactoryRef, GraphRef}; use std::io::{Read, Write}; // ------------------------------------------------------------------------------------------------ // Public Types // ------------------------------------------------------------------------------------------------ /// /// Read an entire `Graph` from the provided implementation of /// [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html). /// pub trait GraphReader { /// Read a graph from the read implementation `r`. fn read(&self, r: &mut impl Read, factory: GraphFactoryRef) -> Result<GraphRef>; } // ------------------------------------------------------------------------------------------------ /// /// Write all [`Statement`](../rdftk_core/statement/struct.Statement.html)s in the /// [`Graph`](../rdftk_graph/graph/trait.Graph.html) using the provided implementation of /// [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html). /// pub trait GraphWriter { /// Write the formatted graph `Graph` using the write implementation `w`. fn write(&self, w: &mut impl Write, graph: &GraphRef) -> Result<()>; } /// /// Write all [`Graph`](../rdftk_graph/graph/trait.Graph.html)s in the /// [`DataSet`](../rdftk_graph/data_set/trait.DataSet.html) using the provided implementation of /// [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html). /// pub trait DataSetWriter { /// Write the formatted graph `NamedGraph` using the write implementation `w`. fn write(&self, w: &mut impl Write, data_set: &DataSetRef) -> Result<()>; } // ------------------------------------------------------------------------------------------------ // Public Functions // ------------------------------------------------------------------------------------------------ /// /// A convenience function that will return a String containing the output of the `GraphWriter` /// for the given `Graph` instance. /// pub fn write_graph_to_string(w: &impl GraphWriter, graph: &GraphRef) -> Result<String> { use std::io::Cursor; let mut buffer = Cursor::new(Vec::new()); w.write(&mut buffer, graph)?; Ok(String::from_utf8(buffer.into_inner()).unwrap()) } /// /// A convenience function that will return a String containing the output of the `NamedGraphWriter` /// for the given `NamedGraph` instance. /// pub fn write_data_set_to_string(w: &impl DataSetWriter, data_set: &DataSetRef) -> Result<String> { use std::io::Cursor; let mut buffer = Cursor::new(Vec::new()); w.write(&mut buffer, data_set)?; Ok(String::from_utf8(buffer.into_inner()).unwrap()) } // ------------------------------------------------------------------------------------------------ // Modules // ------------------------------------------------------------------------------------------------ #[macro_use] mod common; #[cfg(feature = "dot")] pub mod dot; #[cfg(feature = "json")] pub mod json; #[cfg(feature = "n3")] #[doc(hidden)] pub mod n3; #[cfg(feature = "nq")] pub mod nq; #[cfg(feature = "nt")] pub mod nt; #[cfg(feature = "trig")] #[doc(hidden)] pub mod trig; #[cfg(feature = "turtle")] #[doc(hidden)] pub mod turtle; #[cfg(feature = "xml")] pub mod xml;