@@ -216,6 +216,7 @@ pub struct Ontology {
216216 pub last_updated : Option < DateTime < Utc > > ,
217217 #[ serde_as( as = "HashMap<LocalType, _>" ) ]
218218 version_properties : HashMap < NamedNode , String > ,
219+ namespace_map : HashMap < String , String > ,
219220}
220221
221222// impl display; name + location + last updated, then indented version properties
@@ -247,6 +248,7 @@ impl Default for Ontology {
247248 location : None ,
248249 last_updated : None ,
249250 version_properties : HashMap :: new ( ) ,
251+ namespace_map : HashMap :: new ( ) ,
250252 }
251253 }
252254}
@@ -310,40 +312,8 @@ impl Ontology {
310312 serde_json:: to_string_pretty ( self ) . unwrap ( )
311313 }
312314
313- pub fn get_namespace_map ( & self ) -> Result < HashMap < String , String > > {
314- let graph = self . graph ( ) ?;
315- let mut namespace_map = HashMap :: new ( ) ;
316-
317- let declare_prop = NamedNode :: new_unchecked ( "http://www.w3.org/ns/shacl#declare" ) ;
318- let prefix_prop = NamedNode :: new_unchecked ( "http://www.w3.org/ns/shacl#prefix" ) ;
319- let namespace_prop = NamedNode :: new_unchecked ( "http://www.w3.org/ns/shacl#namespace" ) ;
320-
321- let ontology_name_subject: Subject = self . name ( ) . into ( ) ;
322-
323- for decl_obj_ref in
324- graph. objects_for_subject_predicate ( ontology_name_subject. as_ref ( ) , declare_prop. as_ref ( ) )
325- {
326- let decl_subj: SubjectRef = match decl_obj_ref {
327- TermRef :: NamedNode ( n) => n. into ( ) ,
328- TermRef :: BlankNode ( b) => b. into ( ) ,
329- _ => continue ,
330- } ;
331-
332- let prefix_term = graph. object_for_subject_predicate ( decl_subj, prefix_prop. as_ref ( ) ) ;
333- let namespace_term =
334- graph. object_for_subject_predicate ( decl_subj, namespace_prop. as_ref ( ) ) ;
335-
336- if let ( Some ( TermRef :: Literal ( prefix_lit) ) , Some ( TermRef :: Literal ( namespace_lit) ) ) =
337- ( prefix_term, namespace_term)
338- {
339- namespace_map. insert (
340- prefix_lit. value ( ) . to_string ( ) ,
341- namespace_lit. value ( ) . to_string ( ) ,
342- ) ;
343- }
344- }
345-
346- Ok ( namespace_map)
315+ pub fn namespace_map ( & self ) -> & HashMap < String , String > {
316+ & self . namespace_map
347317 }
348318
349319 pub fn from_graph (
@@ -377,6 +347,36 @@ impl Ontology {
377347 }
378348 } ;
379349 debug ! ( "got ontology name: {}" , ontology_name) ;
350+
351+ let mut namespace_map = HashMap :: new ( ) ;
352+
353+ let declare_prop = NamedNode :: new_unchecked ( "http://www.w3.org/ns/shacl#declare" ) ;
354+ let prefix_prop = NamedNode :: new_unchecked ( "http://www.w3.org/ns/shacl#prefix" ) ;
355+ let namespace_prop = NamedNode :: new_unchecked ( "http://www.w3.org/ns/shacl#namespace" ) ;
356+
357+ for decl_obj_ref in
358+ graph. objects_for_subject_predicate ( ontology_name. as_ref ( ) , declare_prop. as_ref ( ) )
359+ {
360+ let decl_subj: SubjectRef = match decl_obj_ref {
361+ TermRef :: NamedNode ( n) => n. into ( ) ,
362+ TermRef :: BlankNode ( b) => b. into ( ) ,
363+ _ => continue ,
364+ } ;
365+
366+ let prefix_term = graph. object_for_subject_predicate ( decl_subj, prefix_prop. as_ref ( ) ) ;
367+ let namespace_term =
368+ graph. object_for_subject_predicate ( decl_subj, namespace_prop. as_ref ( ) ) ;
369+
370+ if let ( Some ( TermRef :: Literal ( prefix_lit) ) , Some ( TermRef :: Literal ( namespace_lit) ) ) =
371+ ( prefix_term, namespace_term)
372+ {
373+ namespace_map. insert (
374+ prefix_lit. value ( ) . to_string ( ) ,
375+ namespace_lit. value ( ) . to_string ( ) ,
376+ ) ;
377+ }
378+ }
379+
380380 let imports: Vec < TermRef > = graph
381381 . objects_for_subject_predicate ( ontology_name. as_ref ( ) , IMPORTS )
382382 . collect :: < Vec < _ > > ( ) ;
@@ -458,6 +458,7 @@ impl Ontology {
458458 location : Some ( location) ,
459459 version_properties,
460460 last_updated : None ,
461+ namespace_map,
461462 } )
462463 }
463464
0 commit comments