# Hierarchical Data Format

El format de dades jeràrquiques HDF (Hierarchical Data Format, en anglès) és un conjunt de formats de fitxers (HDF4, HDF5) dissenyat per a emmagatzemar i organitzar grans quantitats de dades. Va ser desenvolupat al Centre Nacional d'Aplicacions per a la Supercomputació dels Estats Units. Actualment, aquest format és mantingut per The HDF Group, una organització sense ànim de lucre que té com a objectiu seguir desenvolupant les tecnologies HDF i mantenir l'accés a dades emmagatzemades en aquest format.
Les eines i biblioteques de codi HDF es poden usar lliurement, ja que d'una llicència de programari lliure de tipus BSD. HDF és donat suport per molt anunci i programari no comercial plataformes i llenguatges de programació. La distribució gratuïta de l'HDF es compon de la biblioteca de codi, programes per a la línia de comandes, codi de mostra i validació, una interfície Java i una eina de visualització, HDFView, també basada en Java.
La versió actual, HDF5, és significativament diferent de la versió HDF4 tant pel que fa al disseny com a les Interfícies de Programació d'Aplicacions (API) que utilitzen.

## Història

El 1987, el Centre Nacional d'Aplicacions per a la Supercomputació dels EUA va començar a desenvolupar un format per a emmagatzemar dades científiques de manera jeràrquica portàtil. El projecte fou inicialment conegut com a AEHOO («All Encompassing Hierarchical Object Oriented format», en anglès). Aquest projecte va ser finançat amb beques de la Fundació Nacional per a la Ciència (NSF) el 1990 i el 1992, i va culminar amb l'elecció del format HDF com un nou estàndard dos anys més tard.

## HDF4

HDF4 és la versió més antiga del format HDF, tot i que segueix sent mantinguda per The HDF Group. Permet emmagatzemar dades en diferents models, incloent vectors multidimensionals, mapes de bits o taules. Cada model defineix un tipus de dades específic i està associat a una API que permet llegir, escriure i organitzar dades i metadades.
El format HDF és auto-descriptiu, cosa que permet que qualsevol aplicació n'interpreti l'estructura i els continguts sense que calgui informació externa. Un arxiu HDF pot contenir una barreja d'objectes organitzats jeràrquicament, que poden ser llegits com un conjunt o com a objectes individuals. Els usuaris poden crear els seus propis grups, anomenats "vgroups."
El format HDF4 té diverses limitacions. No té un model d'objecte clar, la qual cosa dificulta el manteniment del codi. Degut a què utilitza diferents estils d'interfície per a accedir a diferents tipus de dades (vectors, imatges, taules...), la seva API és excessivament complicada. A més a més, la manera com s'interpreten les metadades depèn de la interfície que s'estigui utilitzant: algunes són flexibles i permeten qualsevol tipus d'atributs, mentre que d'altres només funcionen amb metadades pre-definides. La limitació més important, però, és que el format HDF4 té un límit de 2GB d'emmagatzematge, degut a què es basa sencers de 32 bits.

## HDF5

El format HDF5 va ser dissenyat per a resoldre algunes de les limitacions, presents i anticipades, de l'antic format HDF4. El 2002 va guanyar un R&D 100 Award.
HDF5 simplifica l'estructura de l'arxiu, que ara es basa en només dos tipus d'objecte:
* Conjunts de dades o «datasets», els quals són vectors multidimensionals de tipus homogeni.
* Grups, els quals són elements contenidors que poden incloure tant datasets com altres grups.
Aquesta organització permet que les dades emmagatzemades en format HDF5 puguin ser llegides de manera jeràrquica, com si fossin un sistema de fitxers. De fet, és possible accedir a dades HDF5 mitjançant una sintaxi de ruta d'estil POSIX. Les metadades es poden desar com a atributs addicionals definits per l'usuari, i també es poden combinar metadades, datasets i grups per a definir continguts complexes com ara taules i imatges.
A més d'aquests avenços, HDF5 inclou un sistema de tipus millorat, i un sistema per seleccionar regions concretes dels datasets. A més a més, la seva API està dissenyada per a poder treballar amb els diferents tipus d'objectes de què es compon el format (datasets, grups, atributs, tipus, espais de dades i llistats de propietats).
La darrera versió de NetCDF (4) està basada en HDF5.
Degut a què HDF5 utilitza B-arbres com a índex de la taula d'objectes, aquest format es pot fer servir per a emmagatzemar sèries de dades temporals com ara valors borsaris, informació de control de xarxa, o dades meteorològiques. El gruix de dades s'emmagatzema en forma de vectors fàcilment accessibles (més ràpidament que una base de dades SQL), mentre que l'índex en format B-arbre facilita l'accés a les dades no vectorials.

### Crítiques

El format HDF5 ha estat criticat degut al seu disseny monolític i a la llargada de la seva especificació formal.
* HDF5 no força l'ús de la codificació de caràcters tipus UTF-8, de manera que es poden construir aplicacions que necessitin dades en altres formats.
* Només és possible extreure datasets continguts en un fitxer HDF5 mitjançant eines externes (h5repack).

## Interfícies
### APIs amb suport oficial

* C
* C++
* CLI - .Net
* Fortran, Fortran 90
* HDF5 Lite (H5LT) – un interfície lleugera basada en C
* HDF5 Image (H5IM) – una interfície per a imatges i mapes de bits
* HDF5 Table (H5TB) – un interfície per a taules, basada en C
* HDF5 Packet Table (H5PT) – interfícies en C i C++ per manipular paquets de dades, accessibles a gran velocitat.
* HDF5 Dimension Scale (H5DS) – permet afegir escales dimensionals a HDF5
* Java

### Aplicacions de tercers

* Python pot utilitzar HDF5 mitjançant h5py, PyTables i el paquet pandas. HDF4 està disponible mitjançant Python-HDF4 i/o PyHDF.
* R pot utilitzar HDF mitjançant rhdf5 i hdf5r.
* Rust pot utilitzar fitxers HDF mitjançant hdf5.
* Mathematica
* Perl
* La biblioteca hdf5-cffi de Common <a href="./Lisp" rel="mw:WikiLink" data-linkid="undefined" data-cx="{&amp;quot;userAdded&amp;quot;:true,&amp;quot;adapted&amp;quot;:true}">Lisp</a>
* GNU Data Language
* Go, mitjançant el paquet hdf5 de gonum.
* JSON, mitjançant hdf5-json.
* Julia, amb HDF5 suport a través de l'HDF5 paquet.
* LabVIEW, amb h5labview i lvhdf5.
* Lua a través de lua-hdf5
* MATLAB, Scilab o Octave

## Referències

* ↑ «HDF5 version 1.10.7 released on 2020-09-16». [Consulta: 16 setembre 2020].
* ↑ «Java-based HDF Viewer (HDFView)». Arxivat de l'original el 2016-08-11. [Consulta: 11 abril 2021].
* ↑ «History of HDF Group». Arxivat de l'original el 19 de juliol 2014. [Consulta: 15 juliol 2014].
* ↑ «How is HDF5 different from HDF4?». Arxivat de l'original el 2009-03-30. [Consulta: 11 abril 2021].
* ↑ «Are there limitations to HDF4 files?». Arxivat de l'original el 2016-04-19. [Consulta: 29 març 2009].
* ↑ R&D 100 Awards Archives Arxivat 2011-01-04 a Wayback Machine.
* ↑ Rossant, Cyrille. «Moving away from HDF5». cyrille.rossant.net. [Consulta: 21 abril 2016].
* ↑ HDF Import and Export Mathematica documentation
* ↑ PDL::IO::HDF5

## Enllaços externs

* Hierarchical Data Format - Lloc web oficial
* Quin és HDF5?
* HDF-Eines d'EOS i Centre d'Informació
* Superfície de Navegació oberta
This article is based on material taken from the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the GFDL, version 1.3 or later.