English

Web Data Service - WDS-Cookbook 1.0.0

Revisé le : 2010-04-16

Introduction

La multitude de formats et d'outils disponibles afin de conserver et d'exploiter les données engendre une panoplie de solutions. Cette richesse soulève une autre problèmatique, soit le niveau de connaissances et les technologies nécessaires afin d'exploiter des sources de données utilisants des solutions et des orientations différentes. Les environnements ne sont pas homogènes. C'est une problématique qui survient lorsqu'il s'agit d'exploiter les données de divers fournisseurs.  Le résultat de cette expérience est le Web Data Service, qui se veut une piste de solution répondant en grande partie aux besoins d'exploitation de données.

Un Web Data Service (WDS) consiste en un Framework visant à favoriser l'interopérabilité entre les systèmes en encadrant le développement de services Web de données. Le Framework met en application les bonnes pratiques en SOA (Service Oriented Architecture).

La technologie SOAP et le protocole HTTP sont utilisés afin de réaliser le Framework WDS. Les services WDS peuvent être développés dans le langage et l'infrastructure de son choix.

La technologie SOAP est disponible sur la plupart des plateformes et des langages de programmation. Cette particularité permet de réduire le couplage des systèmes et le niveau de connaissances nécessaires pour l'exploitation des données. L'expertise est conservée dans les bonnes sphères, le développeur d'un système client n'ayant plus besoin d'acquérir l'expertise de la source de données. Le système client utilise simplement un client SOAP pour accéder aux données d'un service WDS. Aucune connaissance spécifique de l'architecture des données n'est nécessaire.

Architecture WDS

WDS Architecture

Spécifications génériques


Diagramme de classes

Diagramme de classes

Interface WDS

Cette interface fournit les fonctionnalités nécessaires pour créer un service d'accès aux données. L'interface WDS est utilisée pour mettre en place un service web WDS.

Méthode getVersion()
getVersion() : string

Cette méthode permet d'obtenir la version du Framework WDS implanté dans le service de données.
Méthode getName()
getName() : string

Cette méthode permet d'obtenir le nom du service de données.
Méthode getInfo()
getInfo() : string

Cette méthode permet d'obtenir diverses informations génériques sur le service de données.
Méthode getStatus()
getStatus() : Status

Cette méthode permet d'obtenir l'état du service de données.
Méthode getBoundarySpatial()
getBoundarySpatial() : BoundarySpatial

Cette méthode permet d'obtenir les limites spatiales du service de données.
Méthode getBoundaryDepth()
getBoundaryDepth() : BoundaryDepth

Cette méthode permet d'obtenir les limites de profondeur du service de données.
Méthodes getBoundaryDate()
getBoundaryDate() : BoundaryDate

Cette méthode permet d'obtenir les limites temporelles du service de données.
Méthode getMetadataInfo()
getMetadataInfo() : Metadata[]

Cette méthode permet d'obtenir de l'information sur les métadonnées fournies par le service de données.
Méthode getMetadata()
getMetadata : Metadata[]

Cette méthode permet d'obtenir les métadonnées du service de données.
Méthode getDataInfo()
getDataInfo : Metadata[]

Cette méthode permet d'obtenir de l'information sur les données offertes par le service de données.
Méthode search()
search(dataname : string,
       latitudeMin : double,
       latitudeMax: double,
       longitudeMin: double,
       longitudeMax: double,
       depthMin: double,
       depthMax: double,
       dateMin : string,
       dateMax : string,
       start: integer,
       sizeMax: integer,
       metadata: Bool,
       metadataSelection: string,
       order: String) :
ResultSet

Cette méthode permet d'effectuer une recherche dans le service de données. Les résultats sont ordonnés par date.

Description des paramètres :

dataname : nom de la donnée
latitudeMin : latitude minimum
latitudeMax : latitude maximum
longitudeMin : longitude minimum
longitudeMax : longitude maximum
depthMin : profondeur minimum
depthMax : profondeur maximum
dateMin : date de début
dateMax : date de fin
start : numéro de départ des résultats (>0)
sizeMax : nombre maximum de résultats (>0)
metadata : inclusion des métadonnées dans les résultats
metadataSelection : critères de sélection sur les métadonnées ("" = aucun)

Ce paramètre permet de spécifier les valeurs que doivent avoir les métadonnées pour que les données correspondantes soient sélectionnées. Le paramètre metadata n'a pas d'influence sur le paramètre metadataSelection.

Syntaxe : "metadata_1=valeur::metadata_2=valeur::metadata_n=valeur"
Exemple: "station_name=Rimouski"
Exemple: "station_name=Rimouski::semaphore=2"

order : ordre de tri des données ("asc" ou "desc")

asc : ascendant (de la plus ancienne à la plus récente)
desc : descendant (de la plus récente à la plus ancienne)

Datatype ResultSet

Ce type représente les résultats d'une recherche.

boundarySpatial : BoundarySpatial
Limites spatiales des résultats.
boundaryDepth : BoundaryDepth
Limites de profondeur des résultats.
boundaryDate : BoundaryDate
Limites temporelles des résultats.
status : Status
État des résultats.
size : int
Nombre de résultats (données).
metadata[] : Metadata
Métadonnées des résultats.
boundaryValues : BoundaryValue
Limites des valeurs des résultats.
data[] : Data
Les résultats (données).

Datatype BoundarySpatial

Ce type représente des limites spatiales.

latitude : RealBoundary
Les limites en latitude.
longitude : RealBoundary
Les limites en longitude

Datatype BoundaryDepth

Ce type représente des limites de profondeur en mètres.

min : double
La profondeur minimale.
max : double
La profondeur maximale.

Datatype BoundaryDate

Ce type représente des limites temporelles (ISO-8601).

min : string
Date minimum.
max : string
Date maximum.

Datatype Status

Ce type représente un état.

status : string
État {ok | error}.
message : string
Message sur l'état.

Datatype Metadata

Ce type représente une métadonnée.

name : string
Nom de la métadonnée.
value : string
Valeur de la métadonnée.

Datatype Data

Ce type représente une donnée.

spatialCoordinates[] : SpatialCoordinate

Liste de coordonnées spatiales représentant la donnée.

point : une seule coordonnée
ligne : liste de coordonnées
polygone : liste de coordonnées dont la première et la dernière ont la même valeur
boundaryDepth : BoundaryDepth
Limites de profondeur de la donnée.
boundaryDate : BoundaryDate
Limites temporelles de la donnée.
metadata[] : Metadata
Métadonnées de la donnée.
value : string
Valeur de la donnée.

Comment créer un Web Data Service (WDS)

La création d'un WDS est une opération simple. Il suffit d'implanter l'interface WDS (voir le diagramme de classes) dans le langage de son choix et de le rendre disponible sur un serveur SOAP de son choix. L'implantation est régie par une suite de règles qui doivent être suivies afin de respecter le Framework et de rendre le comportement du service conforme à la spécification WDS. Les spécifications génériques décrites initialement doivent toujours êtres respectées.

Règles

Méthode getVersion()
Le format adopte la convention de numérotation généralement utilisée en développement de système. Le format est le suivant "majeur.mineur.interne".
Exemple : "1.5.4". Cette information est nécessaire afin de connaître la conformité du service avec le Framework. Cette version du cookbook est conforme à la version "1.0.0".
Méthode getName()
Tous les caractères sont acceptés à l'exception du point (".").
Méthode getInfo()
L'information doit être brève.
Exemple : une courte description avec le contact et l'URL pour obtenir de l'information.
Méthode getStatus()
Seules les valeurs suivantes sont autorisées : "ok", "error".
Méthode getBoundaryDepth()
  • l'unité est le mètre
  • les valeurs négatives sont interdites
Méthode getBoundaryDate()
  • La norme ISO-8601 est utilisé pour représenter les dates (YYYY-MM-DD hh:mm:ss). Tous les éléments du format doivent être présents.
  • Le fuseau horaire est UTC.
Méthode getMetadataInfo()
Toutes les métadonnées du service doivent être décrites brièvement.
Méthode getMetadata()
  • La norme ISO 19115 doit être utilisée pour les métadonnées de nature géospatiale. Les métadonnées minimales de la norme sont essentielles. Elle sont décrites ci-dessous :
contact : responsable du service
date : date de création du service
langage : langage du service
topic : sujet du service
name : nom du service
abstract : brève description du service
reference_date : les limites temporelles du service
  • Il est recommandé d'utiliser une norme reconnue pour les autres types de metadonnées.
Méthode getDataInfo()
L'information pertinente à toutes les données du service doit être décrite brièvement.
Méthode search()
  • Tous les paramètres de la méthode sont obligatoires et doivent être validés.
  • Les données excédant les limites (spatiale, profondeur, temporelle) du service doivent être rejetées.
Méthode search
  • Les données ne rencontrant pas les exigences du paramètre metadataSelection doivent être rejetées.
  • Les données doivent être ordonnées par la date selon la valeur du paramètre order.
  • Le paramètre start s'applique une fois les données ordonnées.
  • Un nombre maximal de données pour une recherche doit être défini afin de prévenir la surexploitation de la source de données.  Le paramètre sizeMax pourrait être un nombre très grand.
  • Les métadonnées doivent être incluses (ResultSet, Data) lorsque le paramètre metadata l'indique.
  • Les coordonnées associées à une donnée (Data) doivent respecter une structure appropriée au type d'objet spatial.
point : une seule coordonnée
ligne : liste de coordonnées
polygone : liste de coodonnées dont la première et la dernière sont identiques.
  • Au minimum, un tableau doit être de dimension 0.

Comment exploiter un Web Data Service (WDS)

Les assises d'une architecture basée sur SOAP rendent son exploitation par un système d'une grande simplicité. Il suffit d'utiliser un client SOAP sur la plateforme et dans le langage de son choix pour accéder au service WDS et interagir avec les méthodes de l'interface WDS.

Exemple de langage Python
import sys  
from SOAPpy import WSDL  
server = WSDL.Proxy(sys.argv[1] + "?wsdl") #connect
bnds = server.getBoundarySpatial() #call
print "lat: (%.2f, %.2f) lon: (%.2f, %.2f)" %\ #digest
(bnds.latitude.min, bnds.latitude.max,
bnds.longitude.min, bnds.longitude.max)
#results