# NIAM

Natural language Information Analysis Method (NIAM) is een informatieanalyse- en datamodelleringmethode, ontwikkeld in de jaren zeventig door Sjir Nijssen en anderen. Kenmerkend is dat de analyse expliciet gebeurt door middel van uitspraken in gesproken taal, en dat de gebruikte modeltechniek verschilt van andere door het explicieter modelleren van rollen.
Vanuit NIAM zijn verschillende dialecten ontwikkeld, waaronder object role modeling en CogNIAM.

## Geschiedenis

* 1968: Fillmore introduceerde case grammar, het benoemen van rollen bij de analyse van zinnen in natuurlijke taal.
* 1974 Abrial publiceerde een informatiemodelleringstechniek met tweeplaatsige relaties waarin meer semantiek kon worden opgenomen dan in bijvoorbeeld Codd's relationele model.
* 1975: Falkenberg breidde deze techniek uit tot meerplaatsige relaties.
* 1976-1977: Nijssen ontwikkelde een notatie voor deze methode: ENALIM, Evolving Natural Language Information Model. Hij leidde een groep van onderzoekers uit België die deze methode verder ontwikkelde. De methode werd toen bekend als NIAM, Nijssen Information Analyse Methodology.
* Jaren tachtig: Nijssen en Falkenberg gingen op de Universiteit van Queensland samenwerken om de methode verder uit te werken.
* 1989: Nijssen schreef in samenwerking met Halpin het eerste boek over deze methode.
* Begin jaren negentig: Halpin ontwikkelde een dialect gebaseerd op NIAM: formal object role modeling en er ontstonden allerlei gereedschappen voor op de computer om met de NIAM methode informatie te modelleren.
* Halverwege jaren negentig: Guido Bakema, Jan Pieter Zwart en Harm van der Lek ontwikkelden FCO-IM, Volledig communicatie-georiënteerde informatiemodellering, uit NIAM.
NIAM betekent tegenwoordig Natural language Information Analysis Method, omdat Nijssen niet de enige was die aan deze methode had gewerkt, maar een heel team achter hem stond.

## Werkwijze

De werkwijze van NIAM is geheel anders dan bij de meeste andere informatieanalysemethoden. In plaats van entiteiten te zien als gerelateerde tabellen, zijn bij NIAM de relaties de entiteiten. In NIAM’s terminologie heet een relatie ook wel ‘rol’. Hierdoor is het bij NIAM moeilijk om entiteiten los van elkaar te zien. In NIAM is het de bedoeling om met behulp van de menselijke gesproken taal “feiten” vast te leggen. Deze feiten bestaat in NIAM dan uit entiteiten, attributen en domeinen.
Hieronder volgt een stappenplan hoe NIAM wordt toegepast. Achter elk kernwoord van de stappen staat wat het inhoudt.
* Verwoorden betekent dat je samen met een domeindeskundige (een persoon die met de informatie werkt die de analist gaat modelleren) het hele proces verwoordt. Dit gebeurt gewoon in zijn eigen taal, daarom is het verstandig dat de informatieanalist dit ook doet in samenwerking met de domeindeskundige en niet zelf gaat verwoorden. De domeindeskundige kan het beste verwoorden wat er allemaal gebeurt in het bedrijf.
* Classificeren is het indelen van feittypen in groepen.
* Kwalificeren is een betekenisvolle naam geven aan feittypen.
* IGD (Information Grammatica Diagram) is het uiteindelijke schema met allerlei symbolen en de bijbehorende verwoorde feiten.
* Toepassen van de beperkingregels in de IGD.
* Groeperen: zo veel mogelijk feittypen samenvoegen zonder dat er redundantie optreedt.
* Lexicaliseren de IGD zodanig veranderen dat de rollen worden gespeeld door labeltypen zonder dat er redundantie optreedt.
* Tabellen genereren. Normaal genereer je de kolommen van tabellen met de entiteiten. Niet bij NIAM, daar gebruik je de rollen om kolommen te maken. Twee of meer rollen tussen twee feittypen worden de kolommen.

## Schrijfwijze
### Symbolen

Hieronder in figuur 1 wordt een conceptueel schema getoond. Dit diagram bestaat uit een binair feittype bestaande uit 2 rollen, de linkerrol gespeeld door het entiteittype employee, de rechterrol gespeeld door het labeltype name.

### Beperkingregels

* Waardenregel: deze wordt opgelegd aan de labeltypen of rollen, en specificeert de waarden die instanties van deze labeltypen of rollen kunnen bevatten. Voorbeeld:
* Uniciteitsregel: dit is een beperkingsregel die je aan een rol of combinatie van rollen kan opleggen. Voorbeeld:
* Verplichtingsregel: dit is een beperkingsregel die je aan een rol oplegt. Iedere instantie van het objecttype dat de rol speelt, moet voorkomen in de populatie van het feittype waartoe de rol behoort. Voorbeeld: