Eine Wandprüfung, Schritt für Schritt¶
Bilderreise: Seite 3 von 3
Dieses Beispiel macht aus einer geschriebenen Anforderung drei klare Prüfungen. Die ganze Seite ist ohne Code verständlich. Quellbeispiele bleiben eingeklappt, bis Sie sie anzeigen möchten.
Ein Lernbeispiel
Diese Seite ist keine Rechts- oder Normenberatung. Sie verwendet ein geprüftes Lernbeispiel auf Grundlage der DIN-276-Kostengruppe 331. Nutzen Sie für die Produktion die lizenzierte Norm und die Klassifikationsregeln Ihres Projekts.
Das Ziel¶
Für jedes Objekt mit dem System DIN 276:2018-12 und dem Code 331 werden drei Fragen gestellt:
| Frage | Erwartete Antwort |
|---|---|
| Ist es eine Wand? | Ja, einschließlich unterstützter Wanduntertypen |
| Ist es tragend? | Ja, im benannten Wand-Property-Set |
| Ist es außenliegend? | Ja, überall dort, wo das unterstützte Modell diese Information speichert |
Die öffentliche IFC-Dokumentation bestätigt, dass Pset_WallCommon für Wände LoadBearing und IsExternal als Ja-/Nein-Eigenschaften definiert.
Schritt 1: Die wichtigen Dinge benennen¶
Wörterbuch
Zuerst erhalten die Ideen stabile Namen: eine Wand sowie die Informationen „tragend“ und „außenliegend“. Das Beispiel hält auch die passenden IFC-Namen fest. Die Prüfungen verwenden diese gemeinsamen Namen. Falls ein anderes Modellformat andere Namen nutzt, kann ein Werkzeug sie mit denselben Ideen verbinden.
Pkl-Quelltext anzeigen
objectTypes {
["axioval:example.ifc.wall"] = new Definitions.ObjectTypeDefinition {
id = "axioval:example.ifc.wall"
name = new Types.LocalizedText { default = "Wall" }
externalNames {
new Definitions.ExternalName {
typeSystem = "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3"
name = "IfcWall"
}
}
}
}
properties {
["axioval:example.ifc.load-bearing"] = new Definitions.PropertyDefinition {
id = "axioval:example.ifc.load-bearing"
name = new Types.LocalizedText { default = "Load bearing" }
valueKind = "boolean"
externalNames {
new Definitions.ExternalName {
typeSystem = "https://identifier.buildingsmart.org/uri/buildingsmart/ifc/4.3"
name = "LoadBearing"
}
}
}
}
Schritt 2: Wiederverwendbare Prüfungsarten beschreiben¶
Rezept
Das Beispiel braucht zwei Rezepte: Den Typ eines Objekts mit einem erwarteten Typ vergleichen und eine Ja-/Nein-Information mit der erwarteten Antwort vergleichen. Ein Werkzeug muss ein Rezept bereits verstehen, bevor es es verwenden kann. Ein gemeinsames Paket beschreibt Prüfungen, fügt einem Werkzeug aber kein neues Prüfverhalten hinzu.
Pkl-Quelltext anzeigen
["axioval:example.boolean-property-equals"] = new Definitions.RuleDefinition {
id = "axioval:example.boolean-property-equals"
capability = "axioval:capability.property-value-equals"
name = new Types.LocalizedText { default = "Boolean property equals" }
parameters {
["property"] = new Definitions.ParameterDefinition {
id = "property"
kind = "propertyReference"
referencedValueKind = "boolean"
}
["expected"] = new Definitions.ParameterDefinition {
id = "expected"
kind = "boolean"
}
}
}
Schritt 3: Festlegen, was geprüft wird¶
Umfang
Wählen Sie jedes Objekt mit Code 331 aus, nicht nur Wände. Wäre eine Platte fälschlich als 331 markiert, würde eine Auswahl nur von Wänden sie verbergen, bevor die Wandprüfung sie melden könnte.
Pkl-Quelltext anzeigen
Schritt 4: Die Wandprüfung ausfüllen¶
Ausgefüllte Karte
Nun wird das Rezept „Objekttyp gleich“ mit dem gemeinsamen Namen Wall verbunden und auf alle in Schritt 3 gewählten Objekte angewendet.
Pkl-Quelltext anzeigen
new RuleSets.RuleInstance {
id = "kg331-is-wall"
definitionId = "axioval:example.entity-type-equals"
name = new Types.LocalizedText { default = "KG 331 objects are walls" }
parameters {
["objectType"] = new Values.ObjectTypeReferenceValue {
objectType = "axioval:example.ifc.wall"
includeSubtypes = true
}
}
applicability = kg331Objects
}
Schritt 5: Sagen, wann der Ort wichtig ist¶
Zwei Möglichkeiten
Die beiden Eigenschaftsprüfungen treffen bewusst unterschiedliche Entscheidungen.
Tragend: Der benannte Ort ist wichtig¶
Das Projekt erwartet LoadBearing in Pset_WallCommon. Die Prüfung nennt sowohl die Information als auch diesen genauen Ort. Dieselbe Information an anderer Stelle genügt nicht.
Pkl-Quelltext anzeigen
Außenliegend: Jeder unterstützte Ort ist in Ordnung¶
Diese Prüfung interessiert die Antwort, nicht der Name ihres Speicherorts. Ein Werkzeug durchsucht seine unterstützten Orte. Findet es widersprüchliche Antworten, muss es einen Konflikt melden, statt still eine auszuwählen.
Pkl-Quelltext anzeigen
Schritt 6: Das vollständige Paket prüfen¶
Bereit zum Teilen
Die abschließende Prüfung liest die Paketbezeichnung, öffnet nur die aufgelisteten Dateien, löst jeden gemeinsamen Namen auf, bestätigt jeden Wert und vergleicht das Ergebnis mit geprüften Beispielen. Fehlende, unbekannte, widersprüchliche oder falsch typisierte Teile stoppen den Ablauf.
Das Beispiel ist vollständig
Eine Objektgruppe wird ausgewählt. Drei getrennte Fragen werden gestellt. Jeder Fehler kann genau erklären, was falsch war.
Wie es weitergeht¶
Wann ist der Ort wichtig?
Entdecken Sie die zwei Möglichkeiten, auf eine Eigenschaft zu verweisen.
Leitfaden öffnenWie nimmt ein Werkzeug ein Paket an?
Lesen Sie den geordneten Vertrag für Sicherheit und Prüfung.
Vertiefung öffnenImplementierungsaufgaben für Werkzeugentwickler
Ein Prüfwerkzeug löst externe Namen im aktiven Modellformat auf, liest Klassifikationen und Eigenschaftsbeziehungen, unterscheidet fehlende, widersprüchliche, ungültige und aufgelöste Informationen, implementiert jede deklarierte Fähigkeit und meldet jede fehlgeschlagene Regel mit einer stabilen Nachricht.
Der vollständige geprüfte Quelltext liegt unter examples/din-276-331.