# Declaratieve taal

In de informatica worden computertalen ingedeeld in declaratieve talen en imperatieve talen. Heel kort gezegd is het verschil dat men in een declaratieve taal opschrijft wat er aan de hand is, en in een imperatieve taal hoe iets moet gebeuren. Een volkomen helder onderscheid is niet te maken.
Een taal is declaratief als de basiselementen geen opdrachten zijn, maar beschrijvingen die tot ingewikkelder beschrijvingen worden samengesteld. Daarmee is nog niets gezegd over de aard van die beschrijvingen. Er is daarom een groot spectrum aan declaratieve talen. Naar vorm zijn tekstuele en visuele talen te onderscheiden, qua doel zijn onder andere algebra's, logica's, opmaaktalen, documentformaten en modelleertalen bekend. Omdat vorm en doel samenhangen is het niet zinvol om alle mogelijke combinaties te behandelen. Verderop worden de volgende soorten besproken:
* Tekstuele talen:
** talen uit de wiskunde: logica en algebra
** mark-uptalen
** documentformaten
* Visuele talen:
** modelleertalen
** symbolische en representerende visuele programmeertalen
Een boodschappenlijstje dat volgens vaste regels opgesteld is, vormt een eenvoudig voorbeeld van imperatieve taal. Een imperatieve taal hoeft dus geen programmeertaal te zijn, en een programmeertaal hoeft niet imperatief te zijn. Toch zijn de meest bekende imperatieve talen programmeertalen, zie daarom imperatief programmeren voor dit onderwerp. Ook declaratieve talen hoeven niets met computers te maken te hebben: een plattegrond kan een declaratieve taaluiting zijn, evenzo een gestructureerde beschrijving van een supermarkt of van het logistieke proces dat zich daar afspeelt. Op de computer zijn HTML-pagina's, tekst- en databasebestanden en vele andere gebaseerd op declaratieve talen.
Een zuiver imperatieve taal is onmogelijk: het imperatieve boodschappenlijstje moet noodzakelijkerwijs de boodschappen omschrijven, of specificeren hoe ze te vinden zijn; evenzo is een programma een tekstuele of visuele declaratie van een gewenst elektronisch proces. Een taal in algemene zin kan wél volledig declaratief zijn, bij een computertaal is dat minder duidelijk: elke declaratie impliceert immers een opdracht aan de computer om iets weer te geven. Dat aspect is bij veel bestanden echter uitbesteed aan het programma waarmee het bestand geopend wordt. Zo is een hyperlink wel een imperatief element in HTML, maar het wordt aan de webbrowser overgelaten om daar al dan niet iets mee te doen; daarom wordt HTML gewoonlijk toch als declaratief beschouwd. Wel bevatten veel imperatieve talen voorzieningen met een declaratief karakter, en omgekeerd.

## Tekstuele talen

In een tekstuele taal bestaan de uitdrukkingen uit tekenreeksen. De informatica kent een heel grote variatie aan tekstuele talen.

### Logica's

In een logica zijn de uitdrukkingen van de taal uitspraken (proposities), die met logische connectieven tot ingewikkelder uitspraken worden samengesteld. Logica wordt in de informatica erg veel gebruikt bij de beschrijving van eigenschappen van systemen en programma's; de standaard propositielogica en predicatenlogica, maar ook bijvoorbeeld modale logica, temporele logica en dynamische logica.
Ook is er veel werk verzet om uitdrukkingen in logica direct door de computer te laten evalueren. De logica fungeert dan als programmeertaal. De belangrijkste ontwikkelingen op dit gebied zijn de logische programmeertalen en de databasequerytalen.

### Algebra's

Ook talen met het karakter van een algebra worden veel gebruikt. Een algebra definieert een verzamelingen bewerkingen, regels voor het combineren van die bewerkingen, en equivalentieregels die vastleggen hoe combinaties van bewerkingen in elkaar kunnen worden omgezet. Tot op zekere hoogte kunnen ook functionele programmeertalen en ontwikkelingen in de objectgeoriënteerde programmeertalen als algebraïsch programmeren worden opgevat.

## Modelleertalen

Modelleertalen worden in de informatica veel gebruikt om beschrijvingen van de logische of technische structuur van systemen te geven. Zo'n beschrijving wordt dan een model genoemd, en heeft meestal tekstuele elementen naast een visuele weergave in de vorm van een of meerdere diagrammen en schema's. In het algemeen beschrijft een modelleertaal alleen een bepaald aspect van systemen.
Voorbeelden van modelleertalen:
* ER-diagrammen voor de beschrijving van de structuur van informatie, meestal gebruikt voor het ontwerp van relationele databases
* UML-diagramtechnieken voor de beschrijving van de structuur en werking van object-georiënteerde software
* CogNIAM-beschrijving van structurele informatie op basis van natuurlijke taal die omgezet kan worden naar object-georiënteerde software. Begrijpbaar voor zowel de business- als de development mensen.
* Gellish is een taal voor het modelleren van informatie over individuele dingen, kennis en vereisten en definities van zowel producten als processen in een voor mensen en computers interpreteerbaar formele subset van Nederlands of Engels. Omvat ook een uitgebreid woordenboek-taxonomie. Ook omvat het een specificatie van een universele Database voor opslag en van een Berichten Tabel voor uitwisseling van informatie.

## Markeertalen

Mark-up-talen (opmaaktalen) worden in de informatica gebruikt om teksten te voorzien van aanwijzingen voor de softwarematige verwerking. Voorbeelden:
* HTML
* LaTeX
* SGML en XML en toepassingen daarvan zoals DocBook en XHTML
* Wikitekst: de codes die gebruikt worden bij het bewerken van Wikipedia-pagina's

## Documentformaten

Alle programmatuur die met bestanden werkt, gebruikt een bepaalde manier om de vast te leggen informatie in die bestanden op te slaan. Die manier wordt het bestandsformaat van het bestand genoemd. Elk bestandsformaat is een taal; de meeste zijn declaratief van aard.
Strikt genomen is een bestandsformaat niet gebonden aan een bestand: een document hoeft immers niet per se in een bestand opgeslagen te worden, maar kan ook bijvoorbeeld in een webbrowser worden getoond of op een andere manier gebruikt. Het is dus juister om niet van bestandsformaat, maar van documentformaat te spreken.

## Visuele programmeertalen

De termen visuele taal en visueel programmeren worden in de informatica gebruikt voor niet-tekstuele representatiemethoden voor informatie. Er zijn twee soorten visuele talen: symbolische talen en representerende talen.

### Representerende visuele talen

De term representerende taal is geen gangbare vakterm, maar beschrijft dit type talen adequaat. Een representerende visuele taal wordt gebruikt voor specificaties van informatie die zelf visueel van aard is, en heeft als wezenskenmerk dat de specificatie analogie heeft met het gespecificeerde. Voorbeelden buiten de computerwereld zijn bouwtekeningen, kleimodellen, paspoppen en ontwerpschetsen, en zelfs simpele kleurstalen. Elk beeld dat voldoet aan overeengekomen conventies, en dat volgens die conventies informatie geeft over iets anders, is een representerende visuele taaluiting over dat andere.
Voorbeelden:
* Het programmeren van grafische gebruikersomgevingen met directe manipulatie.
* Het ontwerpen van elektronische formulieren zoals vragenlijsten, die een leek kan samenstellen door droplists en keuzerondjes naar de gewenste plek te slepen.
* query by example voor het ondervragen van databases
* graafgrammatica's voor het beschrijven van transformaties van grafen

### Symbolische visuele talen

In een visuele taal zijn de uitdrukkingen in de taal niet van dezelfde aard als de informatie waar de uitdrukkingen over gaan. Een visuele taal is meestal declaratief van aard. De meeste modelleertalen (zie boven) vallen in deze categorie. Een voorbeeld van een imperatieve visuele taal is het stroomdiagram.