# Langage de description de format de document

Un langage de description de format de document est un langage permettant de définir un jeu de règles et contraintes qui seront utilisées pour savoir si une instance de document est valide par rapport à ce même jeu de règles et contraintes.

## Exemples

Par exemple, si on invente un format dont la principale caractéristique est de préciser les contraintes par rapport à la taille du fichier que nous essayons de catégoriser (valide ou non valide). On utilisera une syntaxe proche de la syntaxe mathématique, en définissant une ou plusieurs équations vérifiées par la variable TailleFichier :
Ainsi un fichier contenant le mot « non » qui comporte trois lettres en ASCII est un fichier valide par rapport à ce jeu de règles, de même qu'un fichier contenant le mot« oui ».

## Extensions

Un langage de description de format n'est pas nécessairement définitif, dans le sens où, il peut être complété pour fournir d'autres règles, permettant de catégoriser plus finement.
Si on définit un ensemble de règle A pour dire si un document est une instance de A. Il suffit d'ajouter un ensemble de règle B, non contradictoire avec celle de A, pour créer un sous-langage de A, vérifiant A et B.

## Les fichiers binaires

Le binaire est constitué de deux chiffres 0 et 1 (base de 2). Votre ordinateur code tout en 0 et 1: votre adresse ip est codée en base de 2 mais pour se simplifier les choses on utilise la base de 16; votre ordinateur "voit" une image en 0 et 1, il a une référence (par exemple: 11001001 est égal à du rouge foncé).
| base 10 | base 16 | base 2 | base 2 | base 2 | base 2 |
| 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 | 1 |
| 2 | 2 | 0 | 0 | 1 | 0 |
| 3 | 3 | 0 | 0 | 1 | 1 |
| 4 | 4 | 0 | 1 | 0 | 0 |
| 5 | 5 | 0 | 1 | 0 | 1 |
| 6 | 6 | 0 | 1 | 1 | 0 |
| 7 | 7 | 0 | 1 | 1 | 1 |
| 8 | 8 | 1 | 0 | 0 | 0 |
| 9 | 9 | 1 | 0 | 0 | 1 |
| 10 | A | 1 | 0 | 1 | 0 |
| 11 | B | 1 | 0 | 1 | 1 |
| 12 | C | 1 | 1 | 0 | 0 |
| 13 | D | 1 | 1 | 0 | 1 |
| 14 | E | 1 | 1 | 1 | 0 |
| 15 | F | 1 | 1 | 1 | 1 |

## Les fichiers textes
### La syntaxe BNF (pour Backus Naur Form)

Voir l'article : Forme de Backus-Naur.

### Les langages balisés
#### La famille SGML

En SGML, il y a trois niveaux de description d'un document :
* Le langage de définition de la syntaxe concrète (qui permet de préciser les caractères utilisés pour déterminer les ouvertures et fermetures de balise par exemple)
* Le langage de définition de la syntaxe abstraite (qui permet de définir les DTD SGML)
* La DTD SGML qui permet de définir des instances de documents valides par rapport à cette DTD
Ce sont ces trois niveaux qui ont fait de SGML, une norme très difficile à percevoir et à mettre en œuvre.

#### La famille dérivée : XML

En XML, on emploie par exemple le langage de description de format de document XML Schema, le langage Relax NG, ou plus anciennement les DTD. Ces langages permettent également la validation de documents (voir DSDL).

### Langages de description de textes
#### HTML

Le langage de description de textes le plus connu est HTML. Il est utilisé pratiquement sur tous les sites internet.

#### Autres langages de description de texte

Parmi les autres langages de description de texte sont
* LaTeX : pour les textes scientifiques comprenant des formules mathématiques
* roff : historiquement, c'était un langage de description de texte utilisé autrefois sous Multics et Unix