about summary refs log tree commit diff
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))))