From 4b3bc7a3fec5b914288699c73d3148ada0c59797 Mon Sep 17 00:00:00 2001 From: Tpt Date: Mon, 18 Jun 2018 18:03:00 +0200 Subject: [PATCH] Adds xsd:string and xsd:boolean parsing to get proper equality --- src/model/literal.rs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/model/literal.rs b/src/model/literal.rs index 8c60ee56..dfa921ae 100644 --- a/src/model/literal.rs +++ b/src/model/literal.rs @@ -24,10 +24,18 @@ impl Literal { /// Builds a RDF [literal](https://www.w3.org/TR/rdf11-concepts/#dfn-literal) with a [datatype](https://www.w3.org/TR/rdf11-concepts/#dfn-datatype-iri) pub fn new_typed_literal(value: impl Into, datatype: impl Into) -> Self { - //TODO: proper casts - Literal::TypedLiteral { - value: value.into(), - datatype: datatype.into(), + let value = value.into(); + let datatype = datatype.into(); + if datatype == *xsd::BOOLEAN { + match value.as_str() { + "true" | "1" => Literal::Boolean(true), + "false" | "0" => Literal::Boolean(false), + _ => Literal::TypedLiteral { value, datatype }, + } + } else if datatype == *xsd::STRING { + Literal::String(value) + } else { + Literal::TypedLiteral { value, datatype } } }