Adds some constant NamedNodes for basic vocabularies

pull/10/head
Tpt 6 years ago
parent 6423ee8d05
commit 66ba1cea5e
  1. 1
      src/model/mod.rs
  2. 86
      src/model/vocab.rs
  3. 19
      src/rio/turtle/turtle_grammar.rustpeg

@ -1 +1,2 @@
pub mod data;
pub mod vocab;

@ -0,0 +1,86 @@
///! Provides ready to use NamedNode for basic RDF vocabularies
pub mod rdf {
use model::data::NamedNode;
use std::str::FromStr;
lazy_static! {
pub static ref FIRST: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#first").unwrap();
pub static ref HTML: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#HTML").unwrap();
pub static ref LANG_STRING: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#langString").unwrap();
pub static ref NIL: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil").unwrap();
pub static ref REST: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#rest").unwrap();
pub static ref TYPE: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#type").unwrap();
pub static ref XML_LITERAL: NamedNode =
NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral").unwrap();
}
}
pub mod xsd {
///! NamedNodes for [RDF compatible XSD datatypes](https://www.w3.org/TR/rdf11-concepts/#dfn-rdf-compatible-xsd-types)
use model::data::NamedNode;
use std::str::FromStr;
lazy_static! {
/// true, false
pub static ref BOOLEAN: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#boolean").unwrap();
/// Dates (yyyy-mm-dd) with or without timezone
pub static ref DATE: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#date").unwrap();
/// Duration of time (days, hours, minutes, seconds only)
pub static ref DAY_TIME_DURATION: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#dayTimeDuration").unwrap();
/// Date and time with or without timezone
pub static ref DATE_TIME: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#dateTime").unwrap();
/// Date and time with required timezone
pub static ref DATE_TIME_STAMP: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#dateTimeStamp").unwrap();
/// Arbitrary-precision decimal numbers
pub static ref DECIMAL: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#decimal").unwrap();
/// 64-bit floating point numbers incl. ±Inf, ±0, NaN
pub static ref DOUBLE: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#double").unwrap();
/// Duration of time
pub static ref DURATION: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#duration").unwrap();
/// 32-bit floating point numbers incl. ±Inf, ±0, NaN
pub static ref FLOAT: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#float").unwrap();
/// Gregorian calendar day of the month
pub static ref G_DAY: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#gDay").unwrap();
/// Gregorian calendar month
pub static ref G_MONTH: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#gMonth").unwrap();
/// Gregorian calendar month and day
pub static ref G_MONTH_DAY: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#gMonthDay").unwrap();
/// Gregorian calendar year
pub static ref G_YEAR: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#gYear").unwrap();
/// Gregorian calendar year and month
pub static ref G_YEAR_MONTH: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#gYearMonth").unwrap();
/// Arbitrary-size integer numbers
pub static ref INTEGER: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#integer").unwrap();
/// Times (hh:mm:ss.sss…) with or without timezone
pub static ref TIME: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#time").unwrap();
/// Character strings (but not all Unicode character strings)
pub static ref STRING: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#string").unwrap();
/// Duration of time (months and years only)
pub static ref YEAR_MONTH_DURATION: NamedNode =
NamedNode::from_str("http://www.w3.org/2001/XMLSchema#yearMonthDuration").unwrap();
}
}

@ -3,7 +3,8 @@
use std::char;
use url::Url;
use model::data::*;
use std::str::FromStr;
use model::vocab::rdf;
use model::vocab::xsd;
use std::iter;
use rio::turtle::ParserState;
@ -71,7 +72,7 @@ objectList -> () = object _ ("," _ object _)*
//[9]
verb -> NamedNode = predicate /
"a" { NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#type").unwrap() }
"a" { rdf::TYPE.clone() }
// [10]
subject -> NamedOrBlankNode =
@ -116,13 +117,11 @@ blankNodePropertyList_open -> () = "[" {
//[15]
collection -> NamedOrBlankNode = '(' _ o:(collection_value*) ')' {
let first = NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#first").unwrap();
let rest = NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#rest").unwrap();
let mut current_list_node = NamedOrBlankNode::from(NamedNode::from_str("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil").unwrap());
let mut current_list_node = NamedOrBlankNode::from(rdf::NIL.clone());
for obj in o.into_iter().rev() {
let new_blank_node = NamedOrBlankNode::from(data_factory.new_blank_node());
buffer.push(Triple::new(new_blank_node.clone(), first.clone(), obj));
buffer.push(Triple::new(new_blank_node.clone(), rest.clone(), current_list_node));
buffer.push(Triple::new(new_blank_node.clone(), rdf::FIRST.clone(), obj));
buffer.push(Triple::new(new_blank_node.clone(), rdf::REST.clone(), current_list_node));
current_list_node = new_blank_node;
}
current_list_node
@ -131,9 +130,9 @@ collection_value -> Term = o:object_value _ { o }
//[16]
NumericLiteral -> Literal =
d:$(DOUBLE) { data_factory.typed_literal(d, NamedNode::from_str("http://www.w3.org/2001/XMLSchema#double").unwrap()) } /
d:$(DECIMAL) { data_factory.typed_literal(d, NamedNode::from_str("http://www.w3.org/2001/XMLSchema#decimal").unwrap()) } /
i:$(INTEGER) { data_factory.typed_literal(i, NamedNode::from_str("http://www.w3.org/2001/XMLSchema#integer").unwrap()) }
d:$(DOUBLE) { data_factory.typed_literal(d, xsd::DOUBLE.clone()) } /
d:$(DECIMAL) { data_factory.typed_literal(d, xsd::DECIMAL.clone()) } /
i:$(INTEGER) { data_factory.typed_literal(i, xsd::INTEGER.clone()) }
//[128s]
RDFLiteral -> Literal =

Loading…
Cancel
Save