private void LoadReferences( out int numErrors ) { numErrors = 0; if ( dependantTaxonomies.Count == 0 ) { int errs = LoadDependantTaxonomies(this.schemaPath); numErrors += errs; numRefErrors += errs; } if ( referenceFile == null ) { referenceFile = GetLinkbaseReference( TARGET_LINKBASE_URI + REFERENCE_ROLE ); } int errors = 0; if ( referenceTable == null ) { referenceTable = new Hashtable(); } if ( referenceFile != null ) { foreach ( string refFile in referenceFile ) { Reference reference = new Reference(); reference.OwnerHandle = OwnerHandle; reference.loadingTaxonomy = this.GetLoadingTaxonomy(); reference.PromptUser = this.PromptUser; if ( refFile != null ) { reference.Load( refFile, out numErrors ); if (IsAucentExtension && skipAucentExtensions && !this.innerTaxonomy && reference.IsDocumentCreatedByRivet()) { //if this is a top level aucent extension taxonomy and ... //if the skipAucentExtensions is set to true ... we want to load just the no rivet created files... //as we will merge the rivet created files later.... continue ; } if ( reference.ErrorList.Count > 0 ) { for ( int i = 0; i < reference.ErrorList.Count; i++ ) Common.WriteError( "XBRLParser.Error.Exception", validationErrors, SchemaFile + ": REFERENCE_ROLE Error: " + reference.ErrorList[i] ); } reference.Parse( out errors ); if ( errors > 0 ) { numErrors += errors; errorList.AddRange( reference.ErrorList ); numRefErrors += errors; } LinkbaseFileInfo refLinkbaseInfo = new LinkbaseFileInfo(); refLinkbaseInfo.LinkType = LinkbaseFileInfo.LinkbaseType.Reference; refLinkbaseInfo.Filename = refFile; refLinkbaseInfo.XSDFileName = schemaFile; this.linkbaseFileInfos.Add(refLinkbaseInfo); } if ( reference.ReferencesTable != null ) { IDictionaryEnumerator enumer = reference.ReferencesTable.GetEnumerator(); foreach( ReferenceLocator otherRL in reference.ReferencesTable.Values ) { if (referenceTable.Contains(otherRL.HRef)) { //TODO: add merge code similar to label locators int i = 0; ++i; ReferenceLocator rl = (ReferenceLocator)referenceTable[otherRL.HRef]; rl.Merge( otherRL ); } else { referenceTable[otherRL.HRef] = otherRL; } } } } } if ( !innerTaxonomy ) { //append the references to the root level referenceTable foreach ( Taxonomy t in dependantTaxonomies ) { if ( t.referenceTable != null && t.referenceTable.Count > 0 ) { errors = 0; // now append the references IDictionaryEnumerator enumer = t.referenceTable.GetEnumerator(); while ( enumer.MoveNext() ) { if ( referenceTable.ContainsKey( enumer.Key ) ) { ++numWarnings; Common.WriteWarning( "XBRLParser.Warning.DuplicateReference", errorList, enumer.Key.ToString() ); continue; } // otherwise, add it referenceTable[enumer.Key] = enumer.Value; } } } } }