Esempio n. 1
0
 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
Esempio n. 2
0
 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
Esempio n. 3
0
 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