def _inlineURNs(self, root, rdfContainer): for relation in [ {"tag": "oa:annotatedBy", "partname": "foafAgent"}, {"tag": "oa:hasBody", "partname": "oacBody"}, {"tag": "oa:hasSource"}, {"tag": "oa:hasSelector"}, {"tag": "oa:hasTarget", "partname": "oacConstrainedTarget"}, ]: nodes = xpath(root, "%s[@rdf:resource]" % relation["tag"]) for node in nodes: urn = getAttrib(node, "rdf:resource") if urn: resolvedNode = rdfContainer.resolve(urn) if resolvedNode is not None and not isAnnotation(resolvedNode): node.append(resolvedNode) self._inlineURNs(resolvedNode, rdfContainer) del node.attrib[expandNs("rdf:resource")] elif urn.startswith(self._baseUrl): if self.call.isAvailable(identifier=urn, partname="oacBody") == (True, True): data = self.call.getStream(identifier=urn, partname="oacBody") node.append(parse(StringIO(data.read())).getroot()) del node.attrib[expandNs("rdf:resource")] elif "partname" in relation and self.call.isAvailable( identifier=urn, partname=relation["partname"] ) == (True, True): data = self.call.getStream(identifier=urn, partname=relation["partname"]) node.append(parse(StringIO(data.read())).getroot()) del node.attrib[expandNs("rdf:resource")]