pub struct RdfXmlParser { /* private fields */ }Expand description
A RDF/XML streaming parser.
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:IDs 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:
use oxrdf::NamedNodeRef;
use oxrdf::vocab::rdf;
use oxrdfxml::RdfXmlParser;
let file = r#"<?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 schema_person = NamedNodeRef::new("http://schema.org/Person")?;
let mut count = 0;
for triple in RdfXmlParser::new().for_reader(file.as_bytes()) {
let triple = triple?;
if triple.predicate == rdf::TYPE && triple.object == schema_person.into() {
count += 1;
}
}
assert_eq!(2, count);Implementations§
Source§impl RdfXmlParser
impl RdfXmlParser
Sourcepub fn new() -> Self
pub fn new() -> Self
Builds a new RdfXmlParser.
Sourcepub fn lenient(self) -> Self
pub fn lenient(self) -> Self
Assumes the file is valid to make parsing faster.
It will skip some validations.
Note that if the file is actually not valid, the parser might emit broken RDF.
pub fn unchecked(self) -> Self
Use lenient() instead
pub fn with_base_iri( self, base_iri: impl Into<String>, ) -> Result<Self, IriParseError>
Sourcepub fn for_reader<R: Read>(self, reader: R) -> ReaderRdfXmlParser<R> ⓘ
pub fn for_reader<R: Read>(self, reader: R) -> ReaderRdfXmlParser<R> ⓘ
Parses a RDF/XML file from a Read implementation.
Count the number of people:
use oxrdf::NamedNodeRef;
use oxrdf::vocab::rdf;
use oxrdfxml::RdfXmlParser;
let file = r#"<?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 schema_person = NamedNodeRef::new("http://schema.org/Person")?;
let mut count = 0;
for triple in RdfXmlParser::new().for_reader(file.as_bytes()) {
let triple = triple?;
if triple.predicate == rdf::TYPE && triple.object == schema_person.into() {
count += 1;
}
}
assert_eq!(2, count);Sourcepub fn for_slice(
self,
slice: &(impl AsRef<[u8]> + ?Sized),
) -> SliceRdfXmlParser<'_> ⓘ
pub fn for_slice( self, slice: &(impl AsRef<[u8]> + ?Sized), ) -> SliceRdfXmlParser<'_> ⓘ
Parses a RDF/XML file from a byte slice.
Count the number of people:
use oxrdf::NamedNodeRef;
use oxrdf::vocab::rdf;
use oxrdfxml::RdfXmlParser;
let file = r#"<?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 schema_person = NamedNodeRef::new("http://schema.org/Person")?;
let mut count = 0;
for triple in RdfXmlParser::new().for_slice(file) {
let triple = triple?;
if triple.predicate == rdf::TYPE && triple.object == schema_person.into() {
count += 1;
}
}
assert_eq!(2, count);Trait Implementations§
Source§impl Clone for RdfXmlParser
impl Clone for RdfXmlParser
Source§fn clone(&self) -> RdfXmlParser
fn clone(&self) -> RdfXmlParser
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more