# Tuto MSD / Knapsack
### Update Mai 2023
Ressource TURTLE de Knapsack : https://ddbj.nig.ac.jp/public/rdf/metabobank/knapsack/dev/
fichiers TP:
https://nextcloud.inrae.fr/s/MjSxdt7bRtd8A3P
## 0) Deposer le fichier csv knapsack sur le cluster
- ligne de commande
- spark-shell
- programme spark (Jupiter ou exe depuis ara-unh-saroumane)
## 1) read/write/check/quality/stats rdf file
Avec le fichier correspondant RDF de knapsack (celui-ci est fournit) utiliser SANSA via Jupiter / via programme
Exemples SANSA : https://github.com/SANSA-Stack/SANSA-Stack/tree/develop/sansa-examples/sansa-examples-spark/src/main/scala/net/sansa_stack/examples/spark/rdf
## 2) Exercice Knapsack TTL
Il existe 50899 metabolites dans la base
rechercher : les metabolites dont la masse est supérieure 300.0 Da et inférieure à 1000 Da (count: 37117)
```sql
PREFIX c_metabohub: <http://semanticweb.org/inrae/metabohub/forum/class#>
PREFIX p_metabohub: <http://semanticweb.org/inrae/metabohub/forum/property#>
select distinct ?metabolite ?label ?cas ?formula ?inchikey where {
?metabolite a c_metabohub:Metabolite.
?metabolite p_metabohub:mw ?mass.
?metabolite rdfs:label ?label .
?metabolite p_metabohub:cas ?cas .
?metabolite p_metabohub:formula ?formula .
?metabolite p_metabohub:inchikey ?inchikey .
filter( ?mass > 300.0 && ?mass < 1000.0 )
}
```
validation possible avec le endpoint : https://openstack-192-168-101-49.vm.openstack.genouest.org/sparql/
## 3) Utilisation de la base de connassance ChEBI
/rdf/ebi/chebi/16-Feb-2021/chebi.owl
Considérons le composé
```
http://semanticweb.org/inrae/metabohub/forum/entity#C00000025
"Gibberellin A25,GA25"@en
"28535-69-5"
"C20H26O6"
"XOUJCIPAKFLTCI-CNOFLNOFNA-N"
```
Page banque de données: http://www.knapsackfamily.com/knapsack_core/information.php?word=C00000025
XOUJCIPAKFLTCI-CNOFLNOFNA-N
Page CheBI https://www.ebi.ac.uk/chebi/searchId.do?chebiId=CHEBI:72601
XOUJCIPAKFLTCI-POPXMCHDSA-N
a) Quels sont les identifiants chebi qui correspondent à ce composé de knapsack ?
b) Vérifier que les formules chimiques (datatype property 'formula') correspondent bien à C20H26O6 ?
```sql
select distinct * where {
?chebi <http://purl.obolibrary.org/obo/chebi/inchikey> ?inchi .
?chebi <http://purl.obolibrary.org/obo/chebi/formula> ?formula .
FILTER( strstarts(str(?inchi),"XOUJCIPAKFLTCI") ) .
}
```
### reponse
```
http://purl.obolibrary.org/obo/CHEBI_143959
"XOUJCIPAKFLTCI-POPXMCHDSA-K"^^<http://www.w3.org/2001/XMLSchema#string>
"C20H23O6"^^<http://www.w3.org/2001/XMLSchema#string>
http://purl.obolibrary.org/obo/CHEBI_72601
"XOUJCIPAKFLTCI-POPXMCHDSA-N"^^<http://www.w3.org/2001/XMLSchema#string>
"C20H26O6"^^<http://www.w3.org/2001/XMLSchema#string>
```
## 4) Associer un Chebi ID à chacune des entrées knapsack et écrire dans des fichiers parquet
NOTE : S'appuyer sur l'exemple SPARQL / SANSA( retourne un RDD , à priori pas de DF....)
- https://github.com/SANSA-Stack/SANSA-Stack/blob/develop/sansa-examples/sansa-examples-spark/src/main/scala/net/sansa_stack/examples/spark/query/SPARQLExample.scala
## Notes
### Exemples SANSA
https://github.com/SANSA-Stack/SANSA-Stack/tree/develop/sansa-examples/sansa-examples-spark/src/main/scala/net/sansa_stack/examples/spark