shapes_converter/shex_to_sparql/
triple_pattern.rs1use prefixmap::{IriRef, PrefixMap, PrefixMapError};
2
3use crate::shex_to_sparql::Var;
4
5pub struct TriplePattern {
6 subj: Var,
7 pred: IriRef,
8 obj: Var,
9}
10
11impl TriplePattern {
12 pub fn new(subj: &Var, pred: &IriRef, obj: &Var) -> TriplePattern {
13 TriplePattern {
14 subj: subj.clone(),
15 pred: pred.clone(),
16 obj: obj.clone(),
17 }
18 }
19
20 pub fn show_qualified(
21 &self,
22 formatter: &mut std::fmt::Formatter<'_>,
23 prefixmap: &PrefixMap,
24 ) -> Result<(), PrefixMapError> {
25 let pred_str = match &self.pred {
26 IriRef::Iri(iri) => prefixmap.qualify(iri),
27 IriRef::Prefixed { prefix, local } => {
28 let iri = prefixmap.resolve_prefix_local(prefix, local)?;
29 iri.to_string()
30 }
31 };
32 write!(formatter, "{} {} {} .", self.subj, pred_str, self.obj).map_err(|e| {
33 PrefixMapError::FormatError {
34 error: format!("{e}"),
35 }
36 })?;
37 Ok(())
38 }
39}