# Semantische Anforderungen Die semantischen Anforderungen sind meistens auf Attributbasis. Daraus ergeben sich 3 Fehlerzustände für ein Attribut: * **SE_ATTRIBUTE_WRONG_VALUE:** Wenn ein Attribut ein falschen Wert hat. * **SE_ATTRIBUTE_MISSING:** Wenn ein Attribut fehlt, aber vorhanden sein sollte. * **SE_ATTRIBUTE_INVALID:** Wenn ein Attribut vorhanden ist aber verboten ist. !!! warning **SE_ATTRIBUTE_INVALID:** ist noch nicht in CityDoctor und der QualityADE umgesetzt ist aber geplant in einer neuen Version zu unterstützen. ## Schematron In CityDoctor wurde das [XML Validierungssystem Schematron](https://de.wikipedia.org/wiki/Schematron) integriert um flexibel Attributprüfungen anzupassen und zu unterstützen. Hier ist ein Beispiel für eine Schematron Datei die CityDoctor integrieren kann: ### CityDoctor >= 3.13.0 ``` xml ||||SE_ATTRIBUTE_MISSING||any solid ||||SE_ATTRIBUTE_MISSING||any solid ``` ### CityDoctor < 3.13.0 ``` xml ||||SE_ATTRIBUTE_MISSING||any solid||false ||||SE_ATTRIBUTE_MISSING||any solid||false ``` Diese Datei prüft, dass alle Buildings in sich selbst oder in einem ihrer Unterelementen ein Solid beliebigen LODSs vorhanden ist. Außerdem stellt die Datei sicher, dass jedes BuildingPart ein Solid enthält. Wenn dies nicht der Fall ist wird eine Fehlermeldung ausgegeben. Die Fehlermeldung ist dabei so formattiert, dass CityDoctor sie interpretieren und in das interne Datenmodell einbinden kann. ### Fehlerformat Das Fehlerformat ist ein CSV-Format mit || als Trennzeichen ``` parent id||child id||error code||error type||is generic attribute ``` Die Fehlermeldung besteht aus den folgenden Teilen: * Die `parent id` ist die gml id des obersten Elements z.B. Building oder Bridge. * Falls der Fehler in einem Unterelement aufgetreten ist so kann diese ID in dem Feld für die `child id` eingetragen werden. * Im Feld `error type` ist einer der 3 Fehlertypen einzutragen: `SE_ATTRIBUTE_WRONG_VALUE, SE_ATTRIBUTE_MISSING, SE_ATTRIBUTE_INVALID`. note Nur in CityDoctor < 3.13.0: * Um ein generisches Attribut mit dem Namen `measuredHeight` von dem nicht generischen Attribut zu unterscheiden ist im letzten Feld vorgesehen `true` einzutragen wenn es sich um ein generisches Attribut handelt ansonsten `false`.