|
1 | 1 | import logging |
| 2 | +import urllib |
2 | 3 | from abc import abstractmethod |
3 | 4 | from typing import Optional, Any, Dict |
4 | 5 |
|
@@ -35,13 +36,18 @@ def as_rdf_graph(self, element: YAMLRoot, schemaview: SchemaView, prefix_map: Di |
35 | 36 | logging.debug(f'PREFIXMAP={prefix_map}') |
36 | 37 | if prefix_map: |
37 | 38 | for k, v in prefix_map.items(): |
38 | | - schemaview.namespaces()[k] = v |
39 | | - g.namespace_manager.bind(k, URIRef(v)) |
| 39 | + if k == "@base": |
| 40 | + schemaview.namespaces()._base = v |
| 41 | + else: |
| 42 | + schemaview.namespaces()[k] = v |
| 43 | + g.namespace_manager.bind(k, URIRef(v)) |
40 | 44 | for prefix in schemaview.namespaces(): |
41 | 45 | g.bind(prefix, URIRef(schemaview.namespaces()[prefix])) |
42 | 46 | else: |
43 | 47 | for prefix in schemaview.namespaces(): |
44 | 48 | g.bind(prefix, URIRef(schemaview.namespaces()[prefix])) |
| 49 | + if schemaview.namespaces()._base: |
| 50 | + g.base = schemaview.namespaces()._base |
45 | 51 | self.inject_triples(element, schemaview, g) |
46 | 52 | return g |
47 | 53 |
|
@@ -84,14 +90,15 @@ def inject_triples(self, element: Any, schemaview: SchemaView, graph: Graph, tar |
84 | 90 | return Literal(element) |
85 | 91 | element_vars = {k: v for k, v in vars(element).items() if not k.startswith('_')} |
86 | 92 | if len(element_vars) == 0: |
87 | | - return URIRef(schemaview.expand_curie(str(element))) |
| 93 | + id_slot = schemaview.get_identifier_slot(target_type) |
| 94 | + return self._as_uri(element, id_slot.range, schemaview) |
| 95 | + #return URIRef(schemaview.expand_curie(str(element))) |
88 | 96 | element_type = type(element) |
89 | 97 | cn = element_type.class_name |
90 | 98 | id_slot = schemaview.get_identifier_slot(cn) |
91 | 99 | if id_slot is not None: |
92 | 100 | element_id = getattr(element, id_slot.name) |
93 | | - logging.debug(f'ELEMENT_ID={element_id} // {id_slot.name}') |
94 | | - element_uri = namespaces.uri_for(element_id) |
| 101 | + element_uri = self._as_uri(element_id, id_slot.range, schemaview) |
95 | 102 | else: |
96 | 103 | element_uri = BNode() |
97 | 104 | type_added = False |
@@ -150,3 +157,9 @@ def dumps(self, element: YAMLRoot, schemaview: SchemaView = None, |
150 | 157 | return self.as_rdf_graph(element, schemaview, prefix_map=prefix_map).\ |
151 | 158 | serialize(format=fmt) |
152 | 159 |
|
| 160 | + def _as_uri(self, element_id: str, id_slot_range: str, schemaview: SchemaView) -> URIRef: |
| 161 | + if schemaview.is_type_percent_encoded(id_slot_range): |
| 162 | + return URIRef(urllib.parse.quote(element_id)) |
| 163 | + else: |
| 164 | + return schemaview.namespaces().uri_for(element_id) |
| 165 | + |
0 commit comments