make sure @vocab url has a trailing #. Its needed to construct better triple predicat...
[htsworkflow.git] / htsworkflow / submission / encoded.py
index 507271355988db469a83cb34560c8fb15cabaf93..05813fd550e7a352a6177ac7195c2c1586a167d9 100644 (file)
@@ -109,7 +109,7 @@ class ENCODED:
             self.username = authenticators[0]
             self.password = authenticators[2]
 
-    def add_jsonld_context(self, tree, contexts, base):
+    def add_jsonld_context(self, tree, default_base):
         """Add contexts to various objects in the tree.
 
         tree is a json tree returned from the DCC's encoded database.
@@ -118,11 +118,10 @@ class ENCODED:
         base, if supplied allows setting the base url that relative
             urls will be resolved against.
         """
-        tree['@context'] = contexts[None]
-        tree['@context']['@base'] = base
-        self.add_jsonld_child_context(tree, contexts)
+        self.add_jsonld_child_context(tree, default_base)
+        self.add_jsonld_namespaces(tree['@context'])
 
-    def add_jsonld_child_context(self, obj, contexts):
+    def add_jsonld_child_context(self, obj, default_base):
         '''Add JSON-LD context to the encoded JSON.
 
         This is recursive because some of the IDs were relative URLs
@@ -205,7 +204,7 @@ class ENCODED:
         '''
         url = self.prepare_url(obj_id)
         json = self.get_json(obj_id, **kwargs)
-        self.add_jsonld_context(json, self.context, url)
+        self.add_jsonld_context(json, url)
         return json
 
     def get_object_type(self, obj):
@@ -218,7 +217,7 @@ class ENCODED:
     def get_schema_url(self, obj):
         obj_type = self.get_object_type(obj)
         if obj_type:
-            return self.prepare_url(ENCODED_SCHEMA_ROOT + obj_type + '.json')
+            return self.prepare_url(ENCODED_SCHEMA_ROOT + obj_type + '.json') + '#'
 
     def _is_encoded_object(self, obj):
         '''Test to see if an object is a JSON-LD object