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