Skip to content

Commit

Permalink
Play around in playground
Browse files Browse the repository at this point in the history
  • Loading branch information
omaus committed May 14, 2024
1 parent 4258b67 commit acc8dd6
Showing 1 changed file with 81 additions and 23 deletions.
104 changes: 81 additions & 23 deletions playground.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,45 +24,103 @@ open type System.Environment
type OboOntology =

{
Terms : OboTerm list
TypeDefs : OboTypeDef list
FormatVersion : string
DataVersion : string option
Ontology : string option
Date : System.DateTime option
SavedBy : string option
AutoGeneratedBy : string option
Subsetdef : string option
Import : string option
Synonymtypedef : TermSynonym option // rethink type, maybe create a mother t
Terms : OboTerm list
TypeDefs : OboTypeDef list
FormatVersion : string
DataVersion : string option
Ontology : string option
Date : System.DateTime option
SavedBy : string option
AutoGeneratedBy : string option
Subsetdefs : string list option
Imports : string list option
Synonymtypedefs : TermSynonym list option // rethink type, maybe create a mother type (Union?)
IdSpaces : string list option // rethink as own Record type
DefaultRelationshipIdPrefix : string option
IdMappings : TermRelation<string> list option // rethink: maybe a new record? or plain string option?
Remarks : string list option
TreatXrefsAsEquivalents : string list option
TreatXrefsAsGenusDifferentias : TermRelation<string> list option // rethink: maybe a new record? or plain string option?
TreatXrefsAsRelationships : string list option // maybe better as its own (record/union?) type
TreatXrefsAsIsAs : string list option
RelaxUniqueIdentifierAssumptionForNamespaces : string list option
RelaxUniqueLabelAssumptionForNamespaces : string list option
}

static member create terms typedefs formatVersion =
static member create terms typedefs formatVersion dataVersion ontology date savedBy autoGeneratedBy subsetdefs imports synonymtypedefs idSpaces defaultRelationshipIdPrefix idMappings remarks treatXrefsAsEquivalents treatXrefsAsGenusDifferentias treatXrefsAsRelationships treatXrefsAsIsAs relaxUniqueIdentifierAssumptionForNamespaces relaxUniqueLabelAssumptionForNamespaces =
{
Terms = terms
TypeDefs = typedefs
FormatVersion = formatVersion
Terms = terms
TypeDefs = typedefs
FormatVersion = formatVersion
DataVersion = dataVersion
Ontology = ontology
Date = date
SavedBy = savedBy
AutoGeneratedBy = autoGeneratedBy
Subsetdefs = subsetdefs
Imports = imports
Synonymtypedefs = synonymtypedefs
IdSpaces = idSpaces
DefaultRelationshipIdPrefix = defaultRelationshipIdPrefix
IdMappings = idMappings
Remarks = remarks
TreatXrefsAsEquivalents = treatXrefsAsEquivalents
TreatXrefsAsGenusDifferentias = treatXrefsAsGenusDifferentias
TreatXrefsAsRelationships = treatXrefsAsRelationships
TreatXrefsAsIsAs = treatXrefsAsIsAs
RelaxUniqueIdentifierAssumptionForNamespaces = relaxUniqueIdentifierAssumptionForNamespaces
RelaxUniqueLabelAssumptionForNamespaces = relaxUniqueLabelAssumptionForNamespaces
}

static member Create(terms, typedefs, formatVersion, ?DataVersion, ?Ontology, ?Date, ?SavedBy, ?AutoGeneratedBy, ?Subsetdefs, ?Imports, ?Synonymtypedefs, ?IdSpaces, ?DefaultRelationshipIdPrefix, ?IdMappings, ?Remarks, ?TreatXrefsAsEquivalents, ?TreatXrefsAsGenusDifferentias, ?TreatXrefsAsRelationships, ?TreatXrefsAsIsAs, ?RelaxUniqueIdentifierAssumptionForNamespaces, ?RelaxUniqueLabelAssumptionForNamespaces) = {
Terms = terms
TypeDefs = typedefs
FormatVersion = formatVersion
DataVersion = DataVersion
Ontology = Ontology
Date = Date
SavedBy = SavedBy
AutoGeneratedBy = AutoGeneratedBy
Subsetdefs = Subsetdefs
Imports = Imports
Synonymtypedefs = Synonymtypedefs
IdSpaces = IdSpaces
DefaultRelationshipIdPrefix = DefaultRelationshipIdPrefix
IdMappings = IdMappings
Remarks = Remarks
TreatXrefsAsEquivalents = TreatXrefsAsEquivalents
TreatXrefsAsGenusDifferentias = TreatXrefsAsGenusDifferentias
TreatXrefsAsRelationships = TreatXrefsAsRelationships
TreatXrefsAsIsAs = TreatXrefsAsIsAs
RelaxUniqueIdentifierAssumptionForNamespaces = RelaxUniqueIdentifierAssumptionForNamespaces
RelaxUniqueLabelAssumptionForNamespaces = RelaxUniqueLabelAssumptionForNamespaces
}

/// Reads an OBO Ontology containing term and type def stanzas from lines.
static member fromLines verbose (input : seq<string>) =

let skipColonSpace s = String.skipWhile ((<>) ':') s |> String.skipWhile ((=) ' ')

let en = input.GetEnumerator()
let rec loop (en:System.Collections.Generic.IEnumerator<string>) terms typedefs lineNumber =
let rec loop (en : System.Collections.Generic.IEnumerator<string>) terms typedefs formatVersion dataVersion lineNumber =

match en.MoveNext() with
| true ->
match (en.Current |> trimComment) with
let enTrimmed = trimComment en.Current
match enTrimmed with
| "[Term]" ->
let lineNumber,parsedTerm = OboTerm.fromLines verbose en lineNumber "" "" false [] "" "" [] [] [] [] [] [] [] [] false [] [] [] false "" ""
loop en (parsedTerm :: terms) typedefs lineNumber
loop en (parsedTerm :: terms) typedefs formatVersion dataVersion lineNumber
| "[Typedef]" ->
let lineNumber,parsedTypeDef = OboTypeDef.fromLines verbose en lineNumber "" "" "" "" [] [] false false false false false false false
loop en terms (parsedTypeDef :: typedefs) lineNumber
| _ -> loop en terms typedefs (lineNumber + 1)
| false -> OboOntology.create (List.rev terms) (List.rev typedefs)

loop en [] [] 1
loop en terms (parsedTypeDef :: typedefs) formatVersion dataVersion lineNumber
| "format-version" -> loop en terms typedefs (skipColonSpace enTrimmed) dataVersion (lineNumber + 1)
| "data-version"
| "version" -> loop en terms typedefs formatVersion (skipColonSpace enTrimmed |> Some) (lineNumber + 1)
| _ -> loop en terms typedefs formatVersion dataVersion (lineNumber + 1)
| false -> OboOntology.create (List.rev terms) (List.rev typedefs) formatVersion dataVersion

loop en [] [] "" None 1



Expand Down

0 comments on commit acc8dd6

Please sign in to comment.