Struct rio_xml::RdfXmlParser
source · pub struct RdfXmlParser<R: BufRead> { /* private fields */ }
Expand description
A RDF/XML streaming parser.
It implements the TriplesParser
trait.
It reads the file in streaming.
It does not keep data in memory except a stack for handling nested XML tags, and a set of all
seen rdf:ID
s to detect duplicate ids and fail according to the specification.
Its performances are not optimized yet and hopefully could be significantly enhanced by reducing the number of allocations and copies done by the parser.
Count the number of people using the TriplesParser
API without proper error management:
use rio_xml::{RdfXmlParser, RdfXmlError};
use rio_api::parser::TriplesParser;
use rio_api::model::NamedNode;
let file = b"<?xml version=\"1.0\"?>
<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:schema=\"http://schema.org/\">
<rdf:Description rdf:about=\"http://example.com/foo\">
<rdf:type rdf:resource=\"http://schema.org/Person\" />
<schema:name>Foo</schema:name>
</rdf:Description>
<schema:Person rdf:about=\"http://example.com/bar\" schema:name=\"Bar\" />
</rdf:RDF>";
let rdf_type = NamedNode { iri: "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" };
let schema_person = NamedNode { iri: "http://schema.org/Person" };
let mut count = 0;
RdfXmlParser::new(file.as_ref(), None).parse_all(&mut |t| {
if t.predicate == rdf_type && t.object == schema_person.into() {
count += 1;
}
Ok(()) as Result<(), RdfXmlError>
})?;
assert_eq!(2, count);
Implementations§
Trait Implementations§
source§impl<R: BufRead> TriplesParser for RdfXmlParser<R>
impl<R: BufRead> TriplesParser for RdfXmlParser<R>
type Error = RdfXmlError
source§fn parse_step<E: From<RdfXmlError>>(
&mut self,
on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E>
) -> Result<(), E>
fn parse_step<E: From<RdfXmlError>>( &mut self, on_triple: &mut impl FnMut(Triple<'_>) -> Result<(), E> ) -> Result<(), E>
Parses a small chunk of the file and calls
on_triple
each time a new triple is read.
(A “small chunk” could be a line for an N-Triples parser.) Read more