This repository contains software used for quality assurance of IDS files according to the buildingSMART standard.
It is comprised of two major components:
- an executable command-line tool for direct usage from a console, and
- a reusable library that can be embedded in other applications.
Both components are implemented using Microsoft .NET, and can be used under multiple operating systems.
The tool itself is a .NET console application tha returns feedback on ids files that you want to test.
If you are a final user, read the tool documentation.
If you are a developer, read the library documentation.
We are planning to implement a number of audits (the ones with a check-mark are completed)
- XSD Schema check
- Use Xsd from disk
- Use relevant Xsd from resource
- IFC Schema check (individual facets)
- IfcEntity
- Predefined types
- Predefined types Names are hardcoded in the library (Ifc2x3, Ifc4, Ifc4x3)
- Predefined types are tested against values provided from the schema.
- Meaningful test cases
- IfcTypeNames
- IfcType Names are hardcoded in the library (Ifc2x3, Ifc4, Ifc4x3)
- Simple type names are audited
- More complex case of type match need to be audited
- Regex matches
- Multiple values allowed
- Attribute names
- Attribute Names are hardcoded in the library
- Simple attribute names are audited
- More complex case of type match need to be audited
- Regex matches
- Multiple values allowed
- Predefined types
- Properties
- Prepare metadata infrastructure
- Prop and PropertySet names are treated as case sensitive
- no extensions of standard
Psets
- properties are limited to the agreed set
- Includes IFC type inheritance
- Reserved prefix
- No custom PropertySet can mandate a property starting with "Pset_" this prefix is reserved for the standard
- SimpleValues
- Enumerations
- No custom PropertySet can mandate a property starting with "Pset_" this prefix is reserved for the standard
- Property Measures
- If a value is provided, it is checked against a closed list
- Discuss the scope of the list, currently only measures, IFCTEXT and IFCLABEL (but it's now datatype, so we should probably expand).
- The attribute is required, but it can be empty, is that valid?
- Test cases added
- Constrain datatype for properties identified in standard Psets
- If a value is provided, it is checked against a closed list
- Cardinality for facets (in requirements)
- partOf
- classification
- property
- material
- PartOf
- Entity
- Constrained to relation type
- Relation
- Entity
- IfcEntity
- Cardinality
- Min and Max values are intrinsically valid (xml constraints)
- Min and Max values are restricted to agreed patterns (IDS implementation agreement)
- Type coherence audits
- Excludes prohibited and optional clauses
- Coherence between applicability and requirements
- Inconsistent types between applicability and requirements
- Explicit Type constraining Facets
- PartOf (depending on relation)
- Entity
- Property sets
- determine type constraint by standard property sets
- Attribute
- limit type depending on attribute name
- Implicit Type constraining Facets
- Material and Classification both require a relation inheriting from IfcRelAssociates
- for Ifc4x3 - IfcObjectDefinition and IfcPropertyDefinition
- for Ifc4 - IfcObjectDefinition and IfcPropertyDefinition
- for Ifc2x3 - IfcRoot
- Material and Classification both require a relation inheriting from IfcRelAssociates
- Single IDS audit
- Run with stream and version enum
- Schema is taken from embedded resource
- Schema is taken from url
- requires buildingSmart to ensure content is available online
- Run with stream and no version
- Run with stream and version enum
- Batch IDS audits on files and folders
- Get schema dependent on IDS content
- Load custom schema from file
- Load schema depending on IDS declaration
- Property facet
- No misplacement of properties (ON HOLD)
- Property with a recognized name (e.g. IsExternal) should not be outside of the agreed PSet.
- Options to discuss:
- perhaps just consider this a warning for user-defined property sets
- warning or error as configuration (strict mode?)
- Options to discuss:
- Property with a recognized name (e.g. IsExternal) should not be outside of the agreed PSet.
- Reserved prefix
- can the regex match any string starting with "Pset_".
- we have a working solution to be included, but it may raise the technical complexity for implementers considerably
- Perhaps one for the strict mode?
- can the regex match any string starting with "Pset_".
- Measures
- Clarify the list of valid measures.
- Only concrete measures?
- Do they follow inheritance?
- Clarify the case sensitivity logic of measures (currently UPPERCASE based on Development files)
- Clarify the list of valid measures.
- Clarify Misplacement of properties
- if a predefined property name has to be restricted to the predefined property set
- Look at IfcPropertyNameCoherenceAcrossSchemas for list of times where this does not happen for the predefined property sets
- No misplacement of properties (ON HOLD)
- Entity facet
- Should we handle User-defined behavior as special case?
The solution has an automated test project for quality control that helps reduce code regressions.
Some of the tests are designed to audit the ids files available in the main buildingSMART IDS repository.
This is useful for debugging and coherence checks against the main documentation site.
If such reposioty is not found under the same parent folder of this one, those tests are marked as skipped
.
To enable them, clone the two repositories next to each other under an arbitrary parent folder:
- Arbitrary parent folder
- [...]
- IDS repository
- IDS Audit tool repository
- [...]