Descripteur de format JSON
Exemple d'un fichier descripteur de format pour le fichier d'importation JSON :
<LOADFORMAT>
<TABLE PATH="" NAME="ORGANISATION" ROOTTABLE="1">
<TABLE PATH="Employees">
<COLUMN PATH="Name" />
<COLUMN PATH="Function" />
<COLUMN PATH="Address.Street" NAME="ADDRESS_STREET"/>
<COLUMN PATH="Address.ZipCode" NAME="ADDRESS_ZIPCODE"/>
<COLUMN PATH="Address.City" NAME="ADDRESS_CITY"/>
</TABLE>
<COLUMN PATH="Name" NAME="ORGANISATION_NAME" />
</TABLE>
</LOADFORMAT>
Exemple de fichier JSON à charger :
{"Name":"Selligent","Employees":[
{"Name":"Name 1","Function":"Function
1","Address":{"Street":"Street 1","ZipCode":"1000","City":"City
1"}},
{"Name":"Name 2","Function":"Function
2","Address":{"Street":"Street 2","ZipCode":"1001","City":"City
2"}},
{"Name":"Name 3","Function":"Function
3","Address":{"Street":"Street 3","ZipCode":"1002","City":"City
3"}},
{"Name":"Name 4","Function":"Function
4","Address":{"Street":"Street 4","ZipCode":"1003","City":"City
4"}},
{"Name":"Name 5","Function":"Function
5","Address":{"Street":"Street 5","ZipCode":"1004","City":"City
5"}},
{"Name":"Name 6","Function":"Function
6","Address":{"Street":"Street 6","ZipCode":"1005","City":"City
6"}},
{"Name":"Name 7","Function":"Function
7","Address":{"Street":"Street 7","ZipCode":"1006","City":"City
7"}},
{"Name":"Name 8","Function":"Function
8","Address":{"Street":"Street 8","ZipCode":"1007","City":"City
8"}},
{"Name":"Name 9","Function":"Function
9","Address":{"Street":"Street 9","ZipCode":"1008","City":"City
9"}},
{"Name":"Name 10","Function":"Function
10","Address":{"Street":"Street 10","ZipCode":"1009","City":"City
10"}}]}
Le descripteur xml commence par un élément racine <LOADFORMAT>.
Puis viennent les éléments TABLE et COLUMN.
- Les éléments COLUMN doivent faire partie d'un élément TABLE.
- Les éléments TABLE peuvent être imbriqués (relations parent-enfant).
Les éléments TABLE ne sont mis en correspondance qu'avec les tableaux json, excepté la table racine indiquée avec l'attribut ROOTTABLE="1". Elle correspond à l'élément json racine et ne contiendra donc qu'une seule ligne de tables csv/de base de données.
Il ne peut y avoir qu'une seule table racine (un élément TABLE descripteur avec l'attribut ROOTTABLE="1"). Si plusieurs tables racines sont définies, une exception est lancée (et la tâche échoue).
Chaque élément TABLE et COLUMN peut posséder les attributs suivants :
-
PATH — Le chemin de l'élément json à mettre en correspondance. Pour les éléments du descripteur de la table racine, le chemin est, en principe, vide. Pour les éléments du descripteur des colonnes et de la table enfant, le chemin est en relation avec la table parent de cette table.
-
Les valeurs des attributs du chemin (path) sont séparées par des points ".", sans jeton array "[" and "]" (le cas échéant)(exemple : <COLUMN PATH="Address.Street" NAME="ADDRESS_STREET"/>).
-
Les noms de chemin ne distinguent pas les minuscules et les majuscules.
-
-
NAME
-
Pour les éléments du descripteur TABLE, le nom est utilisé pour dériver le nom du fichier CSV et le nom de table de base de données correspondante.
-
Pour les éléments du descripteur COLUMN, le nom est utilisé pour définir l'en-tête de la colonne CSV et les noms des colonnes des tables de base de données correspondantes. Si l'attribut du nom n'est pas défini ou vide, il est dérivé de la valeur de l'attribut PATH (dernière sous-chaîne après le dernier point "." du chemin, ou si le chemin ne contient aucun point, juste le nom du chemin lui-même).
Si le nom reste vide après la dérivation, une exception est lancée pendant le chargement du descripteur. -
Les noms des TABLES de même niveau (tables racine, tables enfant) doivent être uniques (dérivés ou non).
-
Les noms des colonnes d'une table doivent également être uniques (dérivés ou non). Si cet impératif n'est pas respecté, des problèmes peuvent survenir, car aucune logique ne vérifie les règles d'unicité des noms.
-
-
KEY — Cet attribut met en correspondance le nom de la colonne sous-jacente qui doit utiliser une valeur clé de colonne. Une valeur clé de colonne est utilisée pour la relation de ses tables enfants. Elle est présente sous forme de clé étrangère (sans contrainte) dans la table de la base de données enfant.
Ce format de descripteur devrait être relativement simple, bien qu'il soit peut être encore difficile de déterminer les valeurs de l'attribut du chemin. Il devrait pourtant être beaucoup moins complexe que les descripteurs XML.