aboutsummaryrefslogtreecommitdiff
path: root/examples/classification.scm
diff options
context:
space:
mode:
Diffstat (limited to 'examples/classification.scm')
-rwxr-xr-xexamples/classification.scm152
1 files changed, 152 insertions, 0 deletions
diff --git a/examples/classification.scm b/examples/classification.scm
new file mode 100755
index 0000000..64aeef3
--- /dev/null
+++ b/examples/classification.scm
@@ -0,0 +1,152 @@
+#! /usr/bin/env guile
+!#
+
+(use-modules (srfi srfi-1)
+ (srfi srfi-26)
+ (ice-9 getopt-long)
+ (ice-9 match)
+ (ice-9 regex)
+ (transform strings)
+ (transform sql)
+ (transform triples)
+ (transform special-forms))
+
+
+
+(define (remap-species-identifiers str)
+ "This procedure remaps identifiers to standard binominal. Obviously this should
+ be sorted by correcting the database!"
+ (match str
+ ["Fly (Drosophila melanogaster dm6)" "Drosophila melanogaster"]
+ ["Oryzias latipes (Japanese medaka)" "Oryzias latipes"]
+ ["Macaca mulatta" "Macaca nemestrina"]
+ ["Bat (Glossophaga soricina)" "Glossophaga soricina"]
+ [str str]))
+
+;; Classification Scheme
+(define-transformer classification-scheme-species
+ (tables (Species))
+ (schema-triples
+ (gnc:ResourceClassificationScheme a skos:ConceptScheme)
+ (gnc:ResourceClassificationScheme skos:prefLabel "GeneNetwork Classification Scheme For Resources")
+ (gnc:ResourceClassificationScheme xkos:numberOfLevels "3")
+ (gnc:ResourceClassificationScheme xkos:levels "( gnc:Type gnc:Set gnc:Species )")
+ (gnc:Type a xkos:ClassificationLevel)
+ (gnc:Type skos:prefLabel "The Type of a Dataset which can be a ProbeSet, Genotype, or Phenotype")
+ (gnc:Type xkos:depth "1")
+ (gnc:Type skos:member gn:ProbeSet)
+ (gnc:Type skos:member gn:Genotype)
+ (gn:Genotype skos:altLabel "DNA Markers and SNPs")
+ (gn:Genotype skos:prefLabel "Genotype")
+ (gnc:Type skos:member gn:Phenotype)
+ (gn:Phenotype skos:prefLabel "Phenotype")
+ (gn:Phenotype skos:altLabel "Traits and Cofactors")
+ (gnc:Species a xkos:ClassificationLevel)
+ (gnc:Species skos:prefLabel "The species in which this resource belongs")
+ (gnc:Species xkos:depth "3")
+ (gnc:Species xkos:specializes gnc:Set))
+ (triples "gnc:Species"
+ (set skos:member (string->identifier "" (remap-species-identifiers (field Species Fullname))
+ #:separator ""
+ #:proc string-capitalize-first))))
+
+(define-transformer classification-scheme-set
+ (tables (InbredSet))
+ (schema-triples
+ (gnc:Set a xkos:ClassificationLevel)
+ (gnc:Set skos:prefLabel "The Type of Set, Ie InbredSet/OutbredSet that a resource can belong to")
+ (gnc:Set xkos:depth "2")
+ (gnc:Set xkos:generalizes gnc:Species))
+ (triples "gnc:Set"
+ (set skos:member
+ (string->identifier
+ "set" (field InbredSet Name)
+ #:separator ""
+ #:proc string-capitalize-first))))
+
+(define-transformer species
+ (tables (Species))
+ (schema-triples
+ (gnt:family a owl:ObjectProperty)
+ (gnt:family rdfs:domain gnc:Species)
+ (gnt:family skos:definition "This resource belongs to this family"))
+ (triples
+ (string->identifier "" (remap-species-identifiers (field Species Fullname))
+ #:separator ""
+ #:proc string-capitalize-first)
+ (set skos:inScheme 'gnc:ResourceClassificationScheme)
+ (set rdfs:label (field Species FullName))
+ (set skos:prefLabel (field Species MenuName))
+ (set skos:altLabel (field Species SpeciesName))
+ (set skos:altLabel (field Species Name))
+ (set gnt:family (field Species Family))
+ (set skos:notation (ontology
+ 'taxon:
+ (field Species TaxonomyId)))))
+
+(define-transformer inbred-set
+ (tables (InbredSet
+ (left-join Species "ON InbredSet.SpeciesId=Species.Id")
+ (left-join MappingMethod
+ "ON InbredSet.MappingMethodId=MappingMethod.Id")))
+ (schema-triples
+ (gnt:geneticType a owl:ObjectProperty)
+ (gnt:geneticType rdfs:domain gnc:set)
+ (gnt:code a owl:ObjectProperty)
+ (gnt:code rdfs:domain gnc:set)
+ ;; Already defined as an owl prop in species
+ (gnt:family rdfs:domain gnc:Set)
+ (gnt:mappingMethod a owl:ObjectProperty)
+ (gnt:mappingMethod rdfs:domain gnc:set))
+ (triples (string->identifier
+ "set" (field InbredSet Name)
+ #:separator ""
+ #:proc string-capitalize-first)
+ (set skos:inScheme 'gnc:ResourceClassificationScheme)
+ (set rdfs:label (field InbredSet FullName))
+ (set skos:prefLabel (field InbredSet Name))
+ (set gnt:geneticType (field InbredSet GeneticType))
+ (set gnt:family (field InbredSet Family))
+ (set gnt:mappingMethod (field MappingMethod Name))
+ (set gnt:code (field InbredSet InbredSetCode))
+ (set xkos:generalizes
+ (string->identifier "" (remap-species-identifiers (field Species Fullname))
+ #:separator ""
+ #:proc string-capitalize-first))))
+
+
+
+(let* ((option-spec
+ '((settings (single-char #\s) (value #t))
+ (output (single-char #\o) (value #t))
+ (documentation (single-char #\d) (value #t))))
+ (options (getopt-long (command-line) option-spec))
+ (settings (option-ref options 'settings #f))
+ (output (option-ref options 'output #f))
+ (documentation (option-ref options 'documentation #f))
+ (%connection-settings
+ (call-with-input-file settings
+ read)))
+
+ (with-documentation
+ (name "Species Metadata")
+ (connection %connection-settings)
+ (table-metadata? #f)
+ (prefixes
+ '(("gn:" "<http://genenetwork.org/id/>")
+ ("gnc:" "<http://genenetwork.org/category/>")
+ ("owl:" "<http://www.w3.org/2002/07/owl#>")
+ ("gnt:" "<http://genenetwork.org/term/>")
+ ("skos:" "<http://www.w3.org/2004/02/skos/core#>")
+ ("xkos:" "<http://rdf-vocabulary.ddialliance.org/xkos#>")
+ ("rdf:" "<http://www.w3.org/1999/02/22-rdf-syntax-ns#>")
+ ("rdfs:" "<http://www.w3.org/2000/01/rdf-schema#>")
+ ("taxon:" "<http://purl.uniprot.org/taxonomy/>")))
+ (inputs
+ (list classification-scheme-species
+ classification-scheme-set
+ species
+ inbred-set))
+ (outputs
+ `(#:documentation ,documentation
+ #:rdf ,output))))