コード例 #1
0
        private void ReadLinkbaseReference(string ContainingDocumentUri, INode LinkbaseReferenceNode, XbrlFragment containingFragment)
        {
            var xlinkNode = new XlinkNode(LinkbaseReferenceNode);

            if (xlinkNode.IsInRole(XbrlDocument.XbrlCalculationLinkbaseReferenceRoleNamespaceUri) == true)
            {
                this.thisLinkbaseDocuments.Add(new CalculationLinkbaseDocument(ContainingDocumentUri, xlinkNode.Href, containingFragment));
            }
            else if (xlinkNode.IsInRole(XbrlDocument.XbrlDefinitionLinkbaseReferenceRoleNamespaceUri) == true)
            {
                this.thisLinkbaseDocuments.Add(new DefinitionLinkbaseDocument(ContainingDocumentUri, xlinkNode.Href, containingFragment));
            }
            else if (xlinkNode.IsInRole(XbrlDocument.XbrlLabelLinkbaseReferenceRoleNamespaceUri) == true)
            {
                this.thisLinkbaseDocuments.Add(new LabelLinkbaseDocument(ContainingDocumentUri, xlinkNode.Href, containingFragment));
            }
            else if (xlinkNode.IsInRole(XbrlDocument.XbrlPresentationLinkbaseReferenceRoleNamespaceUri) == true)
            {
                this.thisLinkbaseDocuments.Add(new PresentationLinkbaseDocument(ContainingDocumentUri, xlinkNode.Href, containingFragment));
            }
            else if (xlinkNode.IsInRole(XbrlDocument.XbrlReferenceLinkbaseReferenceRoleNamespaceUri) == true)
            {
                this.thisLinkbaseDocuments.Add(new ReferenceLinkbaseDocument(ContainingDocumentUri, xlinkNode.Href, containingFragment));
            }
            else
            {
                // At this point, the role is either not available or not in the list of supported roles.
                // Attempt to use a factory method to look at the linkbase document and attempt to discover
                // the correct document type.

                this.thisLinkbaseDocuments.Add(LinkbaseDocument.Create(ContainingDocumentUri, xlinkNode.Href, containingFragment));
            }
        }
コード例 #2
0
        //------------------------------------------------------------------------------------
        // Used for when a linkbaseRef element has no "role" attribute and the type of linkbase
        // document must be discovered. The 331-equivalentRelationships-instance-02.xml
        // document in the XBRL-CONF-2014-12-10 conformance suite is an example of this need.
        //------------------------------------------------------------------------------------
        internal static LinkbaseDocument Create(string containingDocumentUri, string href, XbrlFragment containingFragment)
        {
            var newLinkbaseDocument = new LinkbaseDocument(containingDocumentUri, href, containingFragment);
            var firstChild          = newLinkbaseDocument.thisLinkbaseNode.FirstChild;

            if (firstChild == null)
            {
                throw new NotSupportedException($"Linkbase node has no child nodes in document {href} at URI {containingDocumentUri}.");
            }
            string firstChildLocalName = firstChild.LocalName;

            firstChild          = null;
            newLinkbaseDocument = null;
            if (firstChildLocalName.Equals("calculationLink"))
            {
                return(new CalculationLinkbaseDocument(containingDocumentUri, href, containingFragment));
            }
            if (firstChildLocalName.Equals("definitionLink"))
            {
                return(new DefinitionLinkbaseDocument(containingDocumentUri, href, containingFragment));
            }
            if (firstChildLocalName.Equals("labelLink"))
            {
                return(new LabelLinkbaseDocument(containingDocumentUri, href, containingFragment));
            }
            if (firstChildLocalName.Equals("presentationLink"))
            {
                return(new PresentationLinkbaseDocument(containingDocumentUri, href, containingFragment));
            }
            if (firstChildLocalName.Equals("referenceLink"))
            {
                return(new ReferenceLinkbaseDocument(containingDocumentUri, href, containingFragment));
            }
            throw new NotSupportedException($"Linkbase node has unsupported child node with local name {firstChildLocalName} in document {href} at URI {containingDocumentUri}.");
        }
コード例 #3
0
 //------------------------------------------------------------------------------------
 //------------------------------------------------------------------------------------
 internal CalculationLink(LinkbaseDocument linkbaseDoc, INode CalculationLinkNode) : base(CalculationLinkNode)
 {
     this.Linkbase          = linkbaseDoc;
     this.Locators          = new List <Locator>();
     this.CalculationArcs   = new List <CalculationArc>();
     this.SummationConcepts = new List <SummationConcept>();
     this.RoleUri           = new Uri(this.Role);
     ReadChildLocators(CalculationLinkNode);
     ReadChildCalculationArcs(CalculationLinkNode);
     ResolveLocators();
     BuildSummationConcepts();
 }
コード例 #4
0
 //-------------------------------------------------------------------------------
 // Searches the given linkbase document, looking for facts that are referenced
 // in arc roles.
 //-------------------------------------------------------------------------------
 private void ValidateFactsReferencedInDefinitionArcRoles(LinkbaseDocument CurrentLinkbaseDocument)
 {
     foreach (DefinitionLink CurrentDefinitionLink in CurrentLinkbaseDocument.DefinitionLinks)
         ValidateFactsReferencedInDefinitionArcRoles(CurrentDefinitionLink);
 }