![]() |
VOOZH | about |
dotnet add package Xbim.IDS.Validator.Extensions.COBie --version 1.0.187
NuGet\Install-Package Xbim.IDS.Validator.Extensions.COBie -Version 1.0.187
<PackageReference Include="Xbim.IDS.Validator.Extensions.COBie" Version="1.0.187" />
<PackageVersion Include="Xbim.IDS.Validator.Extensions.COBie" Version="1.0.187" />Directory.Packages.props
<PackageReference Include="Xbim.IDS.Validator.Extensions.COBie" />Project file
paket add Xbim.IDS.Validator.Extensions.COBie --version 1.0.187
#r "nuget: Xbim.IDS.Validator.Extensions.COBie, 1.0.187"
#:package Xbim.IDS.Validator.Extensions.COBie@1.0.187
#addin nuget:?package=Xbim.IDS.Validator.Extensions.COBie&version=1.0.187Install as a Cake Addin
#tool nuget:?package=Xbim.IDS.Validator.Extensions.COBie&version=1.0.187Install as a Cake Tool
Xbim.IDS.Validator.Extensions.COBie is a .net (core & framework) library which extends the base xbim IDS validator to support checking COBie models (in Microsoft Excel format, or other formats). This makes use of standard IDS schema specificiations with the only difference being specifiers can write requirements in terms of COBie Tables (Sheets) and columns rather than IFC entities and attributes. This makes use of exactly the same IDS 'facets' schema but uses COBie concepts rather than IFC.
By re-using the existing IDS standards and conventions it's possible to define requirements and undertake QA/QC checks on COBie deliverables using the same concepts and technologies used to specify and verify IFC models. While there are other COBie validator tools available, many are challenging for a user to make use of, or tricky to customise the rules, so adopting IDS as a specification language for both IFC and COBie just makes a lot of sense.
For instance it's simple using an IDS grammar to specify requirements for COBie like 'All Components must have a SerialNo attribute', or 'All Spaces should contain Components'. With IDS's built in support for complex constraints it's also easy to add specific information requirements to enforce naming conventions, range checks on values such as WarranteeDurations etc.
The xbim Core IDS implementation is built around xbim's IModel which abstracts the specific schema implementations of model being tested.
The specific instance (elements) in a model are all self-describing based on their underlying EXPRESS metadata.
That means IModels can work IFC2x3, IFC4, IFC4.3 schemas, or a future IFC standard in a way that is plugable - it just needs an xbim Express
IModel implementation.
XbimCobieExpress is an implementation of COBie from an Express schema, with full support for reading and writing Excel COBie data from Excel an other formats. Its schema is essentially COBie, where each entity type corresponds to a table in COBie.
So rather than an IFC schema like:
... we're simply working with a COBie equivalent:
... which is hopefully recognisable as a data model based on the COBie 2.4 data model. Note the introduction of a number
of base classes such as CobieAsset and CobieReferencedObject which help provide a common set of behaviours across sheets.
Ultimately, in place of a IDS facet specifying an IFC entity type such as IFCDOOR, or IFCSPACE, in COBie we can specify in terms of a COBIECOMPONENTS or COBIESPACE and their Attributes, Properties, Classifications etc.
Currently only Entity Type (Sheet), Attribute (Column) and Properties (Attributes sheet) are supported - however this alone gives access to the whole COBie domain. Other facets such as Classification can be expressed in terms of these two facets, and will be introduced in a future update for completeness.
| IDS Facet | COBie Equivalent |
|---|---|
| Entity Type | Cobie Table |
| Attribute | Cobie Field/Column |
| Property | WIP:* Mapped to COBie Attributes sheet |
| Classification | TO DO: Mapped through to Cobie Category |
| Part Of | TO DO: Mapped Assemblies / Spatial tables |
| Material | Not supported? |
Just like a typical IDS spec. A typical example using COBie:
<?xml version="1.0" encoding="utf-8"?>
<ids xsi:schemaLocation="http://standards.buildingsmart.org/IDS http://standards.buildingsmart.org/IDS/0.9.7/ids.xsd" xmlns="http://standards.buildingsmart.org/IDS" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info>
<title>Components have valid installation date</title>
</info>
<specifications>
<specification name="All components should have a InstallationDate after Dec 2023" ifcVersion="COBIE2.4">
<applicability minOccurs="1" maxOccurs="unbounded">
<entity>
<name>
<simpleValue>COBIECOMPONENT</simpleValue>
</name>
</entity>
</applicability>
<requirements>
<attribute cardinality="required">
<name>
<simpleValue>InstallationDate</simpleValue>
</name>
<value>
<xs:restriction base="xs:string">
<xs:minExclusive value="2023-12-01" fixed="false" />
</xs:restriction>
</value>
</attribute>
</requirements>
</specification>
</specifications>
</ids>
Note: while this is completely valid IDS according to the latest IDS XSD schema, the file will raise warnings in an IDS Audit since the IfcVersion 'COBIE2.4' is unsupported and 'COBIECOMPONENT' is not a recognised IFC type, so you may see 'Content Warnings'. The implementation of this feature is proprietary to xbim, so the file is unlikely to be supported by other software implementations, where 'COBIE2.4' will not be recognised.
A fully functional Console application is included in this repo in the Xbim.IDS.Validator.Console project that can operate on COBie inputs.
Xbim.IDS.Validator.Console.exe --ids cobie.ids -m CobieSheet.xlsx
dotnet add package Xbim.IDS.Validator.Core.Extensions.COBie
... which will include the Core IDS validator as a dependency.
Given an IDS file such as and an input COBie Excel file such as , a basic implementation might look like:
// during application startup/bootstrap:
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddIdsValidation(cfg =>
cfg.AddCOBie() // < === Adds COBie conventions
);
// Build service provider if not using DI
var provider = serviceCollection.BuildServiceProvider();
// Get IdsModelValidator from an IServiceProvider / or inject to your service
var idsValidator = provider.GetRequiredService<IIdsModelValidator>();
// Open a model
IModel model = OpenCOBie("SampleFile.xlsx");
// optionally you can over-ride some behaviours
var options = new VerificationOptions
{
OutputFullEntity = true, // Returns the full COBie entity in results, not just key
PerformInPlaceSchemaUpgrade = true, // Update old IDS schemas to latest version
PermittedIdsAuditStatuses = VerificationOptions.Relaxed, // Silently ignore some IDS schema errors - just log the fault
AllowDerivedAttributes = true, // Allow Derived attributes to be tested - IMPORTANT for COBie navigation between tables
};
// Invoke the validation checking asynchronously. Also supports cancellation and async progress updating.
ValidationOutcome outcome = await idsValidator.ValidateAgainstIdsAsync(model, "example.ids", logger, verificationOptions: options);
// Present the results
foreach (ValidationRequirement requirement in outcome.ExecutedRequirements)
{
// ApplicableResults contains details of the applicable COBie entities (rows) tested
var entitiesTested = requirement.ApplicableResults.Count();
var entitiesPassed = requirement.ApplicableResults.Count(e => e.ValidationStatus == ValidationStatus.Pass);
Console.WriteLine("[{0,-8}] : [{1}/{2}] met {3} specification '{4}' ",
requirement.Status,
entitiesPassed, entitiesTested,
requirement.Specification.Cardinality.Description,
requirement.Specification.Name
);
// Detail the failure reasons against applicable entities.
foreach(var entity in requirement.ApplicableResults.Where(e => e.ValidationStatus != ValidationStatus.Pass))
{
Console.WriteLine(" Failed COBie Entity: {0}", entity.FullEntity);
foreach(var failure in entity.Messages)
{
// Reasons for failure
Console.WriteLine(" {0}", failure);
}
}
}
static IModel OpenCOBie(string cobieFile)
{
var mapping = Xbim.IO.CobieExpress.CobieModel.GetMapping();
// Optionally control the tables imported
// mapping.ClassMappings.RemoveAll(m => m.Class.StartsWith("Attribute"));
var model = Xbim.IO.CobieExpress.CobieModel.ImportFromTable(cobieFile, out string report, mapping);
return model;
}
This is experimental addon module. It currently support just two of the six IDS facets:
Feedback welcome. For issues please raise an Issue in the Xbim.IDS.Validator Github project
This library is made available by xbim Ltd under the GNU Affero General Public License v3. Please note this is different to the Open Source license used by other libraries in the xbim Toolkit (CDDL), and means that, while you are free to use this software for evaluation, personal, and non-commercial use, it is not compatible for use use in 'proprietary' (closed-source) commercial software.
If you are a developer wishing to use this library in commercial software please contact sales@xbim.net to discuss a commercial license, or contact @andyward on github.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 was computed. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 netstandard2.1 is compatible. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.187 | 128 | 4/10/2026 |
| 1.0.186 | 105 | 3/26/2026 |
| 1.0.185 | 117 | 2/13/2026 |
| 1.0.184 | 454 | 11/11/2025 |
| 1.0.183 | 211 | 11/7/2025 |
| 1.0.182 | 206 | 11/7/2025 |
| 1.0.181 | 218 | 10/19/2025 |
| 1.0.179 | 182 | 10/17/2025 |
| 1.0.178 | 225 | 10/14/2025 |
| 1.0.177 | 251 | 10/7/2025 |
| 1.0.176 | 239 | 9/30/2025 |
| 1.0.175 | 231 | 9/30/2025 |
| 1.0.174 | 178 | 9/26/2025 |
| 1.0.173 | 330 | 9/17/2025 |
| 1.0.172 | 278 | 9/15/2025 |
| 1.0.171 | 263 | 8/1/2025 |
| 1.0.170 | 170 | 8/1/2025 |
| 1.0.169 | 197 | 7/30/2025 |
| 1.0.168 | 242 | 6/25/2025 |
| 1.0.166 | 252 | 3/31/2025 |