Per datasource gerarchici si intende la famiglia dei ds progettata per interfacciarsi a strutture dati nidificate come filesystem, file xml, ldap. Dal un punto di vista logico non vi è alcuna differenza tra un ds relazione e ds gerarchico entrambi si interfacciano in lettura/scrittura ad una fonte dati, le differenze riguardano gli attributi utilizzati, nei ds gerarchici gli attributi in gioco sono:
- base: percorso da cui iniziare la ricerca
- scope: profondità di ricerca a partire dal valore specificato nell'attributo base
- filter: filtro per ottenere un sottoinsieme dei risultati.
- justthese: restituisce solo i campi specificati.
- alias: il nome da dare al nodo root, se non specificato gli verrà assegnato quando definito nell'attributo base
<idtag typeobj="ds" conn="conn4" scope="onelevel" dskey="key" base="/jamp/data" dslimit="10" />
I ds gerarchici offrono anche la possibilità di effettuare ricerche su rami distinti:
<idtag typeobj="ds" conn="conn4" dsname="filename">
<hierarchy>
<root1 base="/jamp/data/class" alias="Classi" scope="base" />
<root2 base="/jamp/data/obj" alias="Oggetti" scope="base" />
</hierarchy>
</idtag>
La sintassi con il quale si specifica il valore da assegnare all'attributo base dipende dal tipo di DS gerarchico:
- Filesystem: come un normale path di un filesystem(es. /var/www in ambiente UNIX o c:\php in ambiente Windows)
- File XML: si gestisce come se si trattasse del path di un filesystem UNIX, se ad esempio avessimo un file del tipo:
<?xml version="1.0" encoding="utf-8"?>
<jamp>
<azienda>
<reparto attributo1="....." attributo2=".....">
<commerciale attributo1="....." attributo2="......." />
<vendite attributo1="........" attributo2="......" />
<tecnico attributo1="........." attributo2="" />
</reparto>
</azienda>
</jamp>
per iniziare la ricerca dal nodo reparto bisognerebbe scrivere base="/azienda/reparto".
- LDAP: Specificare il dn(esempio dn="ou=Groups,dc=jamp,dc=it")
Con tale attributo si stabilisce il livello di profondità dell'interrogazione:
- base: la ricerca restituirà solo il nodo selezionato
- onelevel: la ricerca restituirà tutti i nodi relativi al nodo selezionato
- tree: la ricerca restituirà il nodo con tutti i suoi nodi e sottonodi.
Utilizzato per filtrare i risultati in base alla tipologia di ds gerarchico l'attributo filter accetta:
- Filesystem: "nofiles"(esclude i files), "nodirectory"(esclude le directory) o un espressione regolare
- File XML: espessione regolare
- LDAP: sintassi completa clicca qui
E' possibile specificare nell'attributo justthese i soli campi che l'interrogazione dovrà restituire. In base alla tipologia di ds gerarchico l'attributo justthese accetta i seguenti valori(usare la , come separatore):
- Filesystem
// dev device number
// ino inode number *
// mode inode protection mode
// nlink number of links
// uid userid of owner *
// gid groupid of owner *
// rdev device type, if inode device
// size size in bytes
// atime time of last access (Unix timestamp)
// mtime time of last modification (Unix timestamp)
// ctime time of last inode change (Unix timestamp)
// blksize blocksize of filesystem IO **
// blocks number of blocks allocated **
// md5 md5 checksum
* On Windows this will always be 0.
** Only valid on systems supporting the st_blksize type - other systems (e.g. Windows) return -1.
- ftp
// perms permissions
// number inode number *
// owner userid of owner
// group group of owner
// size size in bytes
// datetime datatime m-d H:i
// md5 md5 checksum
* On Windows this will always be 0.
- ssh
// perms permissions
// number inode number *
// owner userid of owner
// group group of owner
// size size in bytes
// datetime datatime m-d H:i
// md5 md5 checksum
* On Windows this will always be 0.
- File XML: nome degli attributi da restituire
- LDAP: il nome degli attributi della entry(es. dn, uid, cn)'