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)
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)
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)