Methodology & Checks

Proxies: when they are acceptable and how to make them say what they are

Summary

A proxy (IfcBuildingElementProxy in IFC) is a generic object. It has a shape and a place in the model, but its class says nothing about what it is. A bearing, a kerb and a pump exported as proxies look the same to any software that reads the file.

Proxies are acceptable where no IFC class fits the object, provided each one carries a classification reference that names what it is, ideally with a URI. The report scores proxies on the Structure page and shows the detail in the card Proxies under the microscope.

Passing validation is not enough: a file in which every object is a proxy can pass the buildingSMART validation service. The service checks that the file is written correctly. Whether the objects are the right kind of thing is outside its scope. See Passing the buildingSMART validation is not the same as good data.

What an unclassified proxy costs you

IFC describes an asset as typed objects: IfcWall, IfcBeam, IfcBearing, IfcPump. This class, the IFC entity name of the object, is the first thing software reads. It decides which properties and quantities are expected, how a viewer filters and colours objects, and which objects an asset register picks up. A proxy skips that step. In practice an unclassified proxy means:

  • you cannot select all bearings, all pavement courses or all valves without opening each object and reading its name;
  • quantity take-off cannot tell an element measured by area from one measured by length or by count;
  • a maintenance system has no type to attach a maintenance regime or a warranty to;
  • whoever receives the model next has to identify and re-tag the objects by hand.

IFC 4.3 added classes for infrastructure, such as IfcBearing, IfcCourse, IfcPavement, IfcKerb, IfcEarthworksFill and IfcRail. Many objects that had to be proxies in IFC2X3 or IFC4 now have a proper class.

Why a proxy-only file passes the buildingSMART validation

The buildingSMART validation service checks whether a file is a correct IFC file. Its results appear in the report as checks with a buildingSMART tag: STEP syntax, IFC schema, Header syntax, Header fields, Prerequisites, Informal propositions, Implementer agreements and Industry practices. The Valid STEP file capability is earned when STEP syntax, IFC schema, Header syntax and Prerequisites are all valid.

IfcBuildingElementProxy is a legitimate class in every IFC version. A file of correctly written proxies therefore meets the schema, and none of these rules asks whether a pump was exported as a pump. Such a file earns Valid STEP file and can still fail Real IFC.

For an owner this matters at acceptance. If your information requirements only ask for a file that passes the validation service, a supplier can meet them with a model of generic shapes, and you pay for data you cannot use for asset management. Add a requirement on proxies, for example the two proxy conditions of Real IFC below, and one on classification, described in Classification in IFC: systems, references, URIs and bSDD.

When a proxy is acceptable

Use a proper IFC class wherever the file's IFC version has one. A proxy is acceptable when no class fits. It must then say what it is:

  1. through a classification reference (IfcClassificationReference, attached with IfcRelAssociatesClassification) with a code and a name from a recognised system such as Uniclass, OmniClass or a national system;
  2. ideally with a URI in the reference's Location that points to the definition of that code, for example in the buildingSMART Data Dictionary (bSDD).

The reference may sit on the proxy itself or on its type object; the report counts both. A reference that only points back to the IFC schema (a buildingSMART IFC URI) does not count as a classification. When such a URI names another IFC class than the element's own, the Classification integrity check on the Consistency page reports a schema class mismatch.

Where you meet proxies in the report

Proxies under the microscope (Structure page)

The Proxy Classification Funnel shows three bars: All proxy objects, …with a classification and …with a classification URI. Next to it, Most used classification references on proxies lists the eight most frequent references, so you can see what the proxies claim to be. URI links are found by matching each proxy's references to the file's reference inventory. Only the five most used references per class are listed in the metrics, so when there are more, the URI count is a minimum and the card says so.

Other places

  • What the model is made of (Structure page): each block is an IFC class sized by its number of elements, and proxies are hatched. The table view tags them proxy.
  • Coverage per class (Information page): the proxy row shows how many proxies are classified and how many of those have a URI.
  • Benchmark page: Effective proxy share and Proxies with a classification in the model structure table. The effective proxy share is explained below; it can be lower than the Share of proxies check, because classified proxies count for less.

How proxies are scored

Both checks are on the Structure page. Elements are all physical objects in the file (IfcElement) except openings.

CheckValueScoreWeight
Share of proxiesProxies as a share of all elements, with their number100 up to 5%, then falls in a straight line to 20 at 40% and above. Information only when every proxy is classified.1
Share of unclassified proxiesUnclassified proxies as a share of all proxies100 minus that share. Not scored when the file has no proxies.1.5 (key)

Classifying every proxy therefore changes both checks at once: Share of unclassified proxies scores 100, and Share of proxies becomes information only, whatever the share. Classified proxies also count towards classification coverage, which is part of the Completeness factor of the Forensic BIM score™.

Capabilities that depend on proxies

Two capabilities use the effective proxy share. An unclassified proxy counts as one, a classified proxy without a URI as a quarter, and a classified proxy with a URI as one twentieth; the sum is divided by the number of elements. In a model of 1,000 elements with 200 proxies, the effective share is 20% when none is classified and 1% when all of them have a classification with a URI.

CapabilityProxy condition
Real IFCEffective proxy share ≤ 10% and Unclassified proxies ≤ 2% of elements, next to two conditions on the data the elements carry
Coordination readyEffective proxy share ≤ 10%, one of six conditions
Clean exportSemantic IFC elements: not earned when the file is 100% unclassified proxies
Zero proxiesNo proxy objects, in a model of at least 50 elements

A file made only of proxies, with no classification references, is tagged non-IFC data on the Overview and gets no Benchmark page. The full rules are in the Capabilities directory.

What to ask your supplier for

  1. Map proxies to a proper IFC class where one exists. Most authoring tools export through a class mapping that can be corrected; for infrastructure, IFC 4.3 has far more classes to map to.
  2. Give every remaining proxy, or its type, a classification reference with a code and a name.
  3. Add the URI of each code's definition, for example from bSDD.
  4. Check the result with Examine new file: the funnel should show the second and third bars at full length.

Where proxies sit in the spatial structure matters as well; see Spatial structure and containment.

Frequently asked questions

Our file passed the buildingSMART validation. Why is Structure weak?

The validation confirms that the file is correct IFC. The Structure checks ask whether its objects are the right kind of thing and can be found. A file of unclassified proxies passes the first and fails the second.

Should we aim for zero proxies?

Only where a proper class exists. A well-classified proxy with a URI is better than an element forced into a class that does not describe it. The checks reflect this: with every proxy classified, the share of proxies is no longer scored.

Does it matter whether the classification is on the proxy or on its type?

Not for these checks. Both count. Putting it on the type means it is correct once for every occurrence.