def resolveUri(self, hrefObject=None, uri=None, dtsModelXbrl=None): if dtsModelXbrl is None: dtsModelXbrl = self.modelXbrl doc = None if hrefObject: hrefElt, doc, id = hrefObject elif uri: from arelle import UrlUtil url, id = UrlUtil.splitDecodeFragment(uri) if url == "": doc = self.modelDocument else: normalizedUrl = self.modelXbrl.modelManager.cntlr.webCache.normalizeUrl( url, self.modelDocument.baseForElement(self)) doc = dtsModelXbrl.urlDocs.get(normalizedUrl) from arelle import ModelDocument if isinstance(doc, ModelDocument.ModelDocument): if id is None: return doc elif id in doc.idObjects: return doc.idObjects[id] else: from arelle.XmlUtil import xpointerElement xpointedElement = xpointerElement(doc, id) # find element for docModelObject in doc.modelObjects: if docModelObject == xpointedElement: doc.idObjects[id] = docModelObject # cache for reuse return docModelObject return None
def resolveUri(self, hrefObject=None, uri=None, dtsModelXbrl=None): if dtsModelXbrl is None: dtsModelXbrl = self.modelXbrl doc = None if hrefObject: hrefElt,doc,id = hrefObject elif uri: from arelle import UrlUtil url, id = UrlUtil.splitDecodeFragment(uri) if url == "": doc = self.modelDocument else: normalizedUrl = self.modelXbrl.modelManager.cntlr.webCache.normalizeUrl( url, self.modelDocument.baseForElement(self)) doc = dtsModelXbrl.urlDocs.get(normalizedUrl) from arelle import ModelDocument if isinstance(doc, ModelDocument.ModelDocument): if id is None: return doc elif id in doc.idObjects: return doc.idObjects[id] else: from arelle.XmlUtil import xpointerElement xpointedElement = xpointerElement(doc,id) # find element for docModelObject in doc.modelObjects: if docModelObject == xpointedElement: doc.idObjects[id] = docModelObject # cache for reuse return docModelObject return None
def resolveUri(self, hrefObject=None, uri=None, dtsModelXbrl=None): """Returns the modelObject within modelDocment that resolves a URI based on arguments relative to this element :param hrefObject: an optional tuple of (hrefElement, modelDocument, id), or :param uri: An (element scheme pointer), and dtsModelXbrl (both required together if for a multi-instance href) :type uri: str :param dtsModelXbrl: DTS of href resolution (default is the element's own modelXbrl) :type dtsModelXbrl: ModelXbrl :returns: ModelObject -- Document node corresponding to the href or resolved uri """ if dtsModelXbrl is None: dtsModelXbrl = self.modelXbrl doc = None if hrefObject: hrefElt,doc,id = hrefObject elif uri: from arelle import UrlUtil url, id = UrlUtil.splitDecodeFragment(uri) if url == "": doc = self.modelDocument else: normalizedUrl = self.modelXbrl.modelManager.cntlr.webCache.normalizeUrl( url, self.modelDocument.baseForElement(self)) doc = dtsModelXbrl.urlDocs.get(normalizedUrl) from arelle import ModelDocument if isinstance(doc, ModelDocument.ModelDocument): if id is None: return doc elif id in doc.idObjects: return doc.idObjects[id] else: from arelle.XmlUtil import xpointerElement xpointedElement = xpointerElement(doc,id) # find element for docModelObject in doc.xmlRootElement.iter(): if docModelObject == xpointedElement: doc.idObjects[id] = docModelObject # cache for reuse return docModelObject return None