示例#1
0
        /// <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();
        }
示例#2
0
        public static udtOutputOptions DefaultOutputOptions()
        {
            var outputOptions = new udtOutputOptions()
            {
                IncludeDefinition         = false,
                StripQuotesFromDefinition = false,
                IncludeComment            = false,
                IncludeParentTerms        = true,
                IncludeGrandparentTerms   = true
            };

            return(outputOptions);
        }
示例#3
0
        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);
            }
        }