/// <summary> /// Constructor /// </summary> /// <param name="primaryKeySuffix">String appended to the ontology term identifier when creating the primary key for the Term_PK column</param> public clsOwlConverter(string primaryKeySuffix = DEFAULT_PRIMARY_KEY_SUFFIX) { if (string.IsNullOrWhiteSpace(primaryKeySuffix)) { mPrimaryKeySuffix = string.Empty; } else { mPrimaryKeySuffix = primaryKeySuffix; } OutputOptions = DefaultOutputOptions(); }
public static udtOutputOptions DefaultOutputOptions() { var outputOptions = new udtOutputOptions() { IncludeDefinition = false, StripQuotesFromDefinition = false, IncludeComment = false, IncludeParentTerms = true, IncludeGrandparentTerms = true }; return(outputOptions); }
private bool WriteOwlInfoToFile(IReadOnlyCollection <OwlEntry> ontologyEntries, FileSystemInfo outputFile) { try { OnStatusEvent("Creating " + outputFile.FullName); using (var writer = new StreamWriter(new FileStream(outputFile.FullName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))) { var columnHeaders = new List <string> { "Term_PK", "Term_Name", "Identifier", "Is_Leaf", "Synonyms" }; if (OutputOptions.IncludeDefinition) { columnHeaders.Add("Definition"); } if (OutputOptions.IncludeComment) { columnHeaders.Add("Comment"); } if (OutputOptions.IncludeGrandparentTerms && !OutputOptions.IncludeParentTerms) { // Force-enable inclusion of parent terms because grandparent terms will be included var updatedOptions = OutputOptions; updatedOptions.IncludeParentTerms = true; OutputOptions = updatedOptions; } if (OutputOptions.IncludeParentTerms) { columnHeaders.Add("Parent_term_name"); columnHeaders.Add("Parent_term_ID"); } if (OutputOptions.IncludeGrandparentTerms) { columnHeaders.Add("GrandParent_term_name"); columnHeaders.Add("GrandParent_term_ID"); } writer.WriteLine(string.Join("\t", columnHeaders)); var idToNameMap = new Dictionary <string, string>(); // Make a map from term ID to term Name var warningCount = 0; foreach (var ontologyTerm in ontologyEntries) { if (idToNameMap.ContainsKey(ontologyTerm.Identifier)) { warningCount++; if (warningCount < 5) { OnWarningEvent( $"Identifier {ontologyTerm.Identifier} is defined multiple times in th ontology entries; " + "parent name lookup will use the first occurrence"); } continue; } idToNameMap.Add(ontologyTerm.Identifier, ontologyTerm.Name); } foreach (var ontologyTerm in ontologyEntries) { if (ontologyTerm.ParentTerms.Count == 0 || !OutputOptions.IncludeParentTerms) { var lineOut = OntologyTermNoParents(ontologyTerm); if (OutputOptions.IncludeParentTerms) { lineOut.Add(string.Empty); // Parent term name lineOut.Add(string.Empty); // Parent term ID } writer.WriteLine(string.Join("\t", lineOut)); continue; } foreach (var parentTerm in ontologyTerm.ParentTerms) { var ancestor = GetAncestor(ontologyEntries, parentTerm.Key); if (ancestor == null || ancestor.ParentTerms.Count == 0 || !OutputOptions.IncludeGrandparentTerms) { // No grandparents (or grandparents are disabled) var lineOut = OntologyTermWithParents(ontologyTerm, parentTerm, idToNameMap); if (OutputOptions.IncludeGrandparentTerms) { lineOut.Add(string.Empty); // Grandparent term name lineOut.Add(string.Empty); // Grandparent term ID } writer.WriteLine(string.Join("\t", lineOut)); continue; } foreach (var grandParent in ancestor.ParentTerms) { var lineOut = OntologyTermWithParents(ontologyTerm, parentTerm, idToNameMap); lineOut.Add(LookupNameById(idToNameMap, grandParent.Key)); // Get Grandparent Name using ID lineOut.Add(grandParent.Key); // Grandparent ID writer.WriteLine(string.Join("\t", lineOut)); } } // ForEach } // ForEach } // Using return(true); } catch (Exception ex) { OnErrorEvent("Error writing to file " + outputFile.FullName + ": " + ex.Message); return(false); } }