Understanding Rule Structure
Each rule consists of one or more conditions that work together to validate model elements. Rules use a structured logic system:| Component | Description |
|---|---|
| Logic | How conditions combine: WHERE (filter), AND (additional filter), CHECK (final validation) |
| Property Name | The object property to check (e.g., category, width, baseline.length) |
| Predicate | The comparison (UI labels such as Equals and Exists; TSV files use phrases like equal to and exists) |
| Value | The reference value for comparison |
| Message | Description shown in validation results (auto-generated but can be overwritten) |
| Report Severity | Defines the importance: ERROR, WARNING, or INFO |
Creating Your First Rule
Example: Checking Wall Thickness
Let’s create a rule that checks if walls are at least 200 units thick:-
WHERE condition: Filter for walls
- Property:
Category - Predicate: Equals (in TSV:
equal to) - Value:
Walls
- Property:
-
CHECK condition: Validate thickness
- Property:
Width - Predicate: Less than (in TSV:
less than) - Value:
200 - Severity:
ERROR - Message: “Wall thickness must be at least 200” (auto-generated, but can be customized)
- Property:
Adding Multiple Conditions
You can add multipleAND conditions between WHERE and CHECK to create more complex filters:
Example: Check steel beams that are too long
WHERECategory = BeamsANDMaterial = SteelCHECKLength > 5000
Predicates in the UI
Property Checker, Model Validation, and dashboard filters share the same predicate picker. Labels match what you see in the dropdown; they depend on property type (text, number, or boolean). For text properties, predicates are grouped as Existence, Comparison, and Text:| Group | UI label | Meaning |
|---|---|---|
| Existence | Exists | The property is present |
| Existence | Does not exist | The property is not present |
| Existence | Has value | The property is present and not empty |
| Comparison | Equals | Exact match (one value) |
| Comparison | Does not equal | Not equal to one value |
| Comparison | Is one of | Matches any of the chosen values |
| Comparison | Is not one of | Matches none of the chosen values |
| Text | Matches pattern | Wildcards or regex (case-insensitive) |
| Text | Contains | Substring match |
| Text | Does not contain | Excludes substring |
| Group | UI labels |
|---|---|
| Existence | Exists, Does not exist, Has value |
| Comparison | Equals, Does not equal, Is one of, Is not one of, Is equal to, Is not equal to, Is greater than, Is less than |
| Range | Is between |
TSV predicate strings
Legacy TSV rulesets use a fixed Predicate column. The strings in the table match what appears in that column and map to the UI labels above.TSV is an older interchange format for rulesets. Prefer defining and editing rules in Intelligence. Keep this table
when you still import, export, or maintain existing TSV files.
TSV Predicate value | Typical UI label |
|---|---|
exists | Exists |
not exists | Does not exist |
has value | Has value |
equal to | Equals or Is equal to |
not equal to | Does not equal or Is not equal to |
in list | Is one of |
not in list | Is not one of |
is like | Matches pattern |
contains | Contains |
does not contain | Does not contain |
greater than | Is greater than |
less than | Is less than |
in range | Is between (min and max) |
is true | Is true |
is false | Is false |
identical to; it is treated like equal to when loading rules.
Rule Types
Property Existence
Check whether specific properties exist on model elements. Useful for ensuring required data is present. Example:CHECK that acoustic rating uses Exists (TSV predicate exists).
Pattern Matching
Validate that property values match specific patterns or formats. For example, ensure element names follow a naming convention. Matches pattern in the UI (TSV predicateis like) supports two modes:
Wildcard mode (default):
%— matches any sequence of characters (including none)_— matches a single character (when supported)
- Wrap your pattern in forward slashes:
/pattern/ - Supports full regular expression syntax (character classes, anchors, alternation, quantifiers, etc.)
is like with wildcards for simple pattern
matching, or use /regex/ for complex validation. For substring matching without patterns, use Contains / contains.
Numeric Comparisons
Compare numeric property values against thresholds or ranges. Check that dimensions, areas, or other measurements meet requirements. In the UI, use Is greater than, Is less than, or Is between. In legacy TSV, the same checks usegreater than, less than, and in range.
Value Validation
Verify that properties contain expected values or fall within acceptable ranges. Examples (UI → TSV):- Equals →
equal to - Is one of →
in list(comma-separated values in the TSV Value column) - Does not equal →
not equal to
Rule Messages
Rule messages are auto-generated to help validate the logic you are testing for. The auto-generated message describes what the rule is checking, making it easier to understand the validation logic. You can overwrite the auto-generated message with a custom message if you want to provide more specific guidance or context.Best Practices
Use Specific Property Paths
Use exact property paths for accurate validation. Rules apply to properties in Speckle objects regardless of schema:- Direct properties:
category,name,id - Nested properties:
baseline.length,parameters.WIDTH.value - Revit parameters: Use parameter names like
Mark,Width,Assembly Code
Set Appropriate Severity Levels
- ERROR: Critical issues that must be fixed (e.g., “Wall thickness must be at least 200”)
- WARNING: Moderate concerns that should be reviewed (e.g., “Height should be no more than 3000”)
- INFO: Informational notifications (e.g., “Material is Concrete”)
Write Clear Messages
When customizing messages, make them actionable and specific. Avoid vague terms like “Wall thickness check” and instead say “Wall thickness must be at least 200mm.”Examples of Good vs. Bad Messages
| Rule Condition | Bad Message ❌ | Better Message ✅ |
|---|---|---|
Width less than 200 and ERROR | ”Wall thickness check" | "Wall thickness must be at least 200” |
Height greater than 3000 and WARNING | ”Height check" | "Height should be no more than 3000” |
Material equal to "Concrete" and INFO | ”Material info" | "Material is Concrete” |
Common Rule Patterns
Filter by Category
Multiple Filters
Property Existence Check
Value Range Check
Door Naming Convention
Using wildcards:Structural Column Height Range
Exporting and Importing Rulesets
Exporting
Rulesets can be exported as files for backup or sharing:- Open your project’s rulesets
- Select the ruleset you want to export
- Use the export option to download the ruleset
Exported files use the TSV (Tab-Separated Values) format. TSV files can be imported back into your project or shared with other projects or teams.
Importing Rules
If you have existing rules in a file, you can import them:- Open your project’s rulesets
- Click Import
- Provide a name and description for the imported ruleset
- Upload your file
Imported files should use the TSV (Tab-Separated Values) format. The file should have the following columns:
File Format
The file format should have the following columns:- Rule Number - Groups conditions into a single rule
- Logic - WHERE, AND, or CHECK
- Property Name - The object property to check
- Predicate - The comparison operation
- Value - The reference value for comparison
- Report Severity - ERROR, WARNING, or INFO
- Message - Description shown in validation results
Example File
Managing Multiple Rulesets
You can create multiple rulesets for a single project. This is useful for organizing different types of validation checks:- Building Code Compliance - Rules for code requirements
- Naming Conventions - Rules for element naming standards
- Material Standards - Rules for material specifications
- Dimensional Checks - Rules for size and dimension validation
FAQ
Can I use the auto-generated message as-is?
Can I use the auto-generated message as-is?
Yes, the auto-generated messages are designed to be clear and helpful. You can use them as-is or customize them to provide more specific guidance for your team.
What if I need to check multiple properties in one rule?
What if I need to check multiple properties in one rule?
You can add multiple
AND conditions between WHERE and CHECK to filter by multiple properties. However, the CHECK condition should validate a single property. If you need to check multiple properties, create separate rules.How do I know which property path to use?
How do I know which property path to use?
Use the exact property path as it appears in your model data. If you’re unsure, explore your model’s properties in the 3D viewer or use the property search in the validation interface to find the correct path.
Can I share exported files with other teams?
Can I share exported files with other teams?
How does validation relate to IDS (Information Delivery Specification)?
How does validation relate to IDS (Information Delivery Specification)?
IDS (Information Delivery Specification) is designed for IFC model checking, but IDS rules can be applied to all Speckle models regardless of their source format. There are important differences:
- IDS checks for rules that relate to assembly membership - IDS can validate relationships between elements and their assemblies
- Property- and Model Validation focus on data within an element - They validate properties and data within individual elements, not relationships between elements