Пример #1
0
 def _parse_meta(self, json, elt, pkg):
     meta = json.get("meta")
     if meta:
         for key, val in meta.iteritems():
             if key in UNPREFIXED_DC:
                 key = DC_NS_PREFIX + key
             elif _SUFFIX.match(key):
                 key = CAM_NS_PREFIX + key.replace("_", "-")
             elif _CURIE.match(key):
                 prefix, suffix = key.split(":")
                 key = self.namespaces.get(prefix, prefix+":") + suffix
             if not isinstance(val, dict):
                 elt.set_meta(key, val, False)
             else:
                 val = val.get("id_ref", val.get("id-ref", val))
                 if isinstance(val, dict):
                     # IRI misinterpretation
                     # We could not find an id_ref. Serialize the dict as a string
                     elt.set_meta(key, unicode(val))
                 elif val.find(":") > 0: # imported
                     elt.set_meta(key, val, True)
                 else:
                     elt.set_meta(key, pkg[val])
     if elt is not pkg:
         inherit_bk_metadata(elt, pkg)
Пример #2
0
    def _parse_meta(self, node, elt):
        for _, prop, val in self.graph.triples((node, None, None)):
            if prop.startswith(CLD) or prop == RDF.type:
                continue
            if self.node2idpath(prop, False) is not None:
                continue
                # probably a relation type, so skip
            prop = str(prop)

            if isinstance(val, BNode):
                raise ParserError("Can not set metadata with bnode {} <{}>".format(elt, prop))
            elif isinstance(val, Literal):
                elt.set_meta(prop, str(val))
            else:  # URIRef
                val_id = self.node2idpath(val, False)
                if val_id is None:
                    elt.set_meta(prop, str(val))
                else:
                    if val_id.find(":") > 0:  # imported
                        elt.set_meta(prop, val_id, True)
                    else:
                        val = self.package[val_id]
                        elt.set_meta(prop, val)
        if elt is not self.package:
            inherit_bk_metadata(elt, self.package)
Пример #3
0
 def manage_meta(self, xelt, celt):
     meta_tag = self.tag_template % "meta"
     meta_xelt = xelt.find(meta_tag)
     if meta_xelt is not None:
         for child in meta_xelt:
             key = child.tag
             if key.startswith("{"):
                 cut = key.find("}")
                 key = key[1:cut] + key[cut+1:]
             val = child.get("id-ref")
             if val is None:
                 text = child.text or "" # because child.text could be None
                 celt.enter_no_event_section()
                 try:
                     celt.set_meta(key, text, False)
                 finally:
                     celt.exit_no_event_section()
             elif val.find(":") > 0: # imported
                 celt.enter_no_event_section()
                 try:
                     celt.set_meta(key, val, True)
                 finally:
                     celt.exit_no_event_section()
             else:
                 self.do_or_postpone(val, partial(celt.set_meta, key))
 
     inherit_bk_metadata(celt, self.package)