====== MKey WebServices Details ======
===== Webservice function : =====
The Mkey+ webservice provides 7 functions. These functions can be queried using
HTTP requests. They can be reached using URLs created with the webservice
address (http://mkey.services.identificationkey.fr) and a path
to a webservice function. **The seven functions are:**
1. /identification/getDescriptiveData
2. /identification/getRemainingItemsAndDescriptorsUsingIDs
3. /identification/getDescription
4. /identification/removeSDD
5. /identification/changeDescriptionHistory
(BETA)
6. /identification/getSimilarityMap
7. /identification/getSimilarityMapForRemainingItem
For instance, the URL to call the first function is : http://mkey.services.identificationkey.fr/identification/getDescriptiveData
These functions return Json objects, and each element returned has a specific name (see Development API).
===== Performing an Interactive Identification using Mkey+ and a custom client =====
**Development API**
The parameters in entry of the Mkey+ API functions only use the stringified*
version of the Mkey+ JSON objects.
The webservice listen to GET query methods and the dataType must be Jsonp.
Here is an example of a JQuery javascript code snippet that calls one of MKey+ function:
var webserviceURL = http://mkey.services.identificationkey.fr
var sddFileURL = http://yourServer.com/yourSddFile.xml
$.ajax({
url : webserviceURL + '/identification/getDescriptiveData',
data : {
sddURL : sddFileURL,
withGlobalWeigth : true
},
method : 'GET',
dataType : 'jsonp'
}).done(function(data) {
… response management …
}
* using the standard javascript function JSON.stringify()
===== 0. Basic Json objects used and returned by Mkey+ =====
**Item:** This object represents an item which can be described in a knowledge base.
For taxonomists, it usually is a taxon.
{
name : String, an item's name
alternativeName : String, an item's alternative name
detail : String, an item's detailed description
resourceIds : [long], the IDs of the resources associated to an item
id : long, an item's id, unique identifier generated sequentially by Mkey+
}
**Descriptor:** This object is a tool that serves to describe Items, essentialy a
Character for taxonomists. A Descriptor can be described with States (if it is a
categorical Descriptor), or a Quantitative Measure (If it is a quantitative
Descriptor).
{
name : String, a Descriptor's name
detail : String, a Descriptor's detailed description
resourceIds : [long], the IDs of the resources associated to a Descriptor
stateIds : [long], the IDs of the states associated to a Descriptor
inapplicableState = [long], the states of a parent Descriptor
for which a Descriptor is inapplicable
isCategoricalType = Boolean, true if the Descriptor is a categorical
Descriptor, false otherwise
isQuantitativeType = Boolean, true if the Descriptor is a quantitative
Descriptor, false otherwise
isCalculatedType = Boolean, true if the Descriptor is a calculated
Descriptor, false otherwise
id : long, this Descriptor's id, an unique identifier generated sequentially
by Mkey+
}
**State**: this object is a component of categorical Descriptors, e.g. for a
Descriptor named "Color of the eye", its States could be "Blue", "Black", etc...
{
name : String, a state's name
detail : String, a state's detailed description
resourceIds : [long], the IDs of the resources associated to a state
id : long, a state's id, an unique identifier generated sequentially by Mkey+
}
**Resource**: this object is a storage object, and is used to store media resources,
which can be associated to several objects, such as Items, Descriptors, States,
etc...
{
name : String, a resource's name
author : String, a resource's author
type : String, a resource's media type ("video","image","sound")
url : String, a resource's url
legend : String, a resource's legend
keywords : String, a resource's keywords
id : long, a resource's id, an unique identifier generated sequentially by
Mkey+
}
**DescriptionElement**: This object stores the description of an Item, according to
a single Descriptor, it represents the content of a single cell of the taxa /
characters matrix. It may contain the list of selected States if the Descriptor
is a categorical Descriptor, or a QuantitativeMeasure object, if the Descriptor
is a quantitative Descriptor.
{
calculatedStates : [state], the calculated states representing an item's
description
contextualWeight : int, the weigth of this description element
quantitativeMeasure : quantitativeMeasure, the quantitative measure re-
-prensenting an item description
states : [state], the states representing an item's description
unknown : boolean, true if this description element is unkwnow
}
**QuantitativeMeasure**: This object is associated to a DescriptionElement object,
for a given quantitative Descriptor and Item, it contains the quantitative
measures used to describe a specific Item for a given quantitative Descriptor.
{
min : long, this QuantitativeMeasure's minimum value
max : long, this QuantitativeMeasure's maximum
mean : long, this QuantitativeMeasure's mean
}
===== 1. Service : getDescriptiveData =====
First function to be called, //getDescriptiveData initializes the webservice// both
on the client and server side. It returns every element used in the
identification process, parsed from the SDD file.
**path :** /identification/getDescriptiveData(String SDDurl, Boolean withGlobalWeigth)
**parameter** (in the javascript before stringify):
* SDDurl = String
* withGlobalWeigth = Boolean
**returns** :
{descriptorsScoreMap,Items,Descriptors,States,Resources,DescriptorRootId,Depend-
-ancyTable,InverteddependencyTable}
* Items = [item], every item contained in the SDD
* Descriptors = [Descriptor], every Descriptor contained in the SDD
* States = [state], every states contained in the SDD
* Resources = [resource], every resources contained in the SDD
* descriptorsScoreMap = {Descriptor,float}, an associative map, which associates
to each Descriptor its discriminant power.
* DescriptorRootId = [int], ids of the node roots ( no dependency)
* InvertedDependencyTable = {long,long}, the first long is the ID of the descriptor which parent is the second long.
===== 2. Service : getJSONRemainingItemsAndRemainingDescriptorsScoreUsingIds =====
Main function, used to retrieve the remaining (i.e. non-discarded) Items based
on a submitted description. It also returns the remaining Descriptors, along
with their new discriminant power.
**path** :
/identification/getJSONRemainingItemsAndRemainingDescriptorsScoreUsingIds(String
SDDurl, String descriptions, String remainingItemsIDs, String discardedDescrip-
-torsIDs, Boolean withScoreMap, Boolean withGlobalWeigth)
**parameter** (in the javascript before stringify):
SDDurl = String
description = {
selectedStatesNames : [int]
quantitativeMeasure : {min=int,max=int,mean=int}
}
remainingItemsID = [int]
discardedDescriptorsID = [int]
withScoreMap = boolean
withGlobalWeigth = boolean
**returns** :
{discardedDescriptorsInIteration,remainingItems,descriptorScoreMap}
* remainingItems = [[item]], array of remaining items
* discardedDescriptorsInIteration = [[Descriptor]], array of discarded descriptor, child descriptor can be discarded with its parents.
* descriptorsScoreMap = {Descriptor,float}, an associative map, which associates to each Descriptor its discriminant power.
===== 3. Service : getDescription =====
Returns the description (i.e. the description of all the Descriptors) for an
Item whose name has been passed as an argument.
Used to display the item description window.
**path** : /identification/getDescription(String itemName, String SDDurl)
**parameter** (in the javascript before stringify):
* itemName : String
* SDDurl : String
**returns** :
{description,innapDescriptorId}
* description = [descriptionElement], array of description elements describing this item.
* innapDescriptorId = [int], array of inapplicable descriptor IDs
===== 4. Service : removeSDD =====
Delete the sdd from the Mkey+ server memory.
**path** : /identification/removeSDD(String SDDurl)
**parameter** (in the javascript before stringify):
* SDDurl : String
**returns** :
nothing
===== 5. Service : changeDescriptionHistory =====
Compute identification based on the description given in parameter. This function is used to modify at all time user's identification.
**path** : /identification/changeDescriptionHistory
**parameter** (in the javascript before stringify):
* SDDurl : String
* descriptions : [{selectedStatesNames : [int], quantitativeMeasure : {min=int,max=int,mean=int}}]
**returns** :
{discardedDescriptors,remainingItems,descriptorScoreMap,descriptions}
* remainingItems = [[item]], array of remaining items
* discardedDescriptorsInIteration = [[Descriptor]], array of discarded descriptor, child descriptor can be discarded with its parents.
* descriptorsScoreMap = {Descriptor,float}, an associative map, which associates to each Descriptor its discriminant power.
* descriptions = [{selectedStatesNames: [int],quantitativeMeasure : {min=int,max=int,mean=int}}], the new description computed by the function.
===== 6. Service : getSimilarityMap =====
Return a map which link items with a float representing a similarity score.
This score is computed base on the descriptions submitted by the user. Items
which have few difference with the descriptions given in parameter will have a
high score.
**path :** /identification/getSimilarityMap
**returns** : {similarityMap}
* similarityMap = [int,float], int is the item ID and float the corresponding similarity score.
===== 7. Service : getSimilarityMapForRemainingItem =====
Return a map which link items with a float representing a similarity score.
This score is computed base on a global description regrouping every remaining
items description elements. Items which have few difference with the descrip-
tions given in parameter will have a high score.
**path :** /identification/getSimilarityMapForRemainingItem
**returns** : {similarityMap}
* similarityMap = [int,float], int is the item ID and float the corresponding similarity score.