about summary refs log tree commit diff
path: root/examples/classification.scm
blob: 279dc863a223cc1529098a45b1db45585ce06259 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
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))



;; Classification Scheme
(define-transformer classification-scheme-species
  (tables (Species))
  (schema-triples
   (gnc:resource_classification_scheme a skos:ConceptScheme)
   (gnc:resource_classification_scheme skos:prefLabel "GeneNetwork Classification Scheme For Resources which are either defines as a dataset, an inbred group, or a species.")
   (gnc:resource_classification_scheme xkos:numberOfLevels "3")
   (gnc:resource_classification_scheme xkos:levels "( gnc:dataset_type gnc:set gnc:species )")
   (gnc:dataset_type a xkos:ClassificationLevel)
   (gnc:dataset_type skos:prefLabel "The Type of a Dataset which can be a ProbeSet, Genotype, or Phenotype")
   (gnc:dataset_type xkos:depth "1")
   (gnc:dataset_type skos:member gnc:probeset)
   (gnc:dataset_type skos:member gnc:genotype)
   (gnc:dataset_type skos:member gnc:phenotype)
   (gnc:probeset skos:prefLabel "mRNA Assay Datasets")
   (gnc:probeset skos:altLabel "ProbeSet")
   (gnc:genotype skos:prefLabel "Genotype")
   (gnc:genotype skos:altLabel "DNA Markers and SNPs")
   (gnc:phenotype skos:prefLabel "Phenotype")
   (gnc: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 "species" (remap-species-identifiers (field Species Fullname))
                             #:separator "_"
                             #:proc string-downcase))))

(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 InbredSetName)
          #:separator "_"))))

(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")
   (gnt:short_name a owl:ObjectProperty)
   (gnt:short_name rdfs:domain gnc:species)
   (gnt:short_name skos:definition "The short name of a given resource")
   (gnt:belongs_to_species a rdf:property)
   (gnt:belongs_to_species rdf:comment "This resource given to this species")
   (gnt:belongs_to_species rdf:label "belongsToSpecies"))
  (triples
      (string->identifier "species" (remap-species-identifiers (field Species Fullname))
                          #:separator "_"
                          #:proc string-downcase)
    (set skos:inScheme 'gnc:resource_classification_scheme)
    (set rdfs:label (remap-species-identifiers (field Species Fullname)))
    (set skos:prefLabel (field Species MenuName))
    (set skos:altLabel (field Species SpeciesName))
    (set gnt:short_name (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:genetic_type a owl:ObjectProperty)
   (gnt:genetic_type 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:mapping_method a owl:ObjectProperty)
   (gnt:mapping_method rdfs:domain gnc:set)
   (gnt:belongs_to_group a rdf:property)
   (gnt:belongs_to_group rdf:comment "This resource given to this group")
   (gnt:belongs_to_group rdf:label "belongs_to_group"))
  (triples (string->identifier
            "set" (field InbredSet Name InbredSetName)
            #:separator "_")
    (set skos:inScheme 'gnc:resource_classification_scheme)
    (set rdfs:label (field InbredSet FullName))
    (set skos:prefLabel (field InbredSet Name InbredSetName))
    (set gnt:genetic_type (field InbredSet GeneticType))
    (set gnt:family (field InbredSet Family))
    (set gnt:mapping_method (field MappingMethod Name))
    (set gnt:code (field InbredSet InbredSetCode))
    (set xkos:generalizes
         (string->identifier "species" (remap-species-identifiers (field Species Fullname))
                          #:separator "_"
                          #:proc string-downcase))))



(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))))