Why are IfcBridge and IfcRailway defined in differnet layers?

In IFC 4.3.1, both IfcBridge and IfcRailway are derived from IfcFacility, but IfcBridge (and IfcBuilding) is defined in the Core Layer 5.4.3.7, and IfcRailway (and IfcRoad, IfcMaringFacility) is defined in the Domain Layer 7.8.3.3. It’s confusing. Maybe there are some historical reasons. In my opinion, all subtypes of IfcFacility should be defined in the same Layer. I do not know if my understanding is correct.

It is confusing and inconsistent, but I do think the current situation is our best attempt at providing modules that are as self-contained and specific as possible.

In the old days of IFC4 we didn’t have infra domains. IfcBuilding was a core concept because it addressed (nearly) all disciplines in scope of IFC. Now it can indeed be considered domains specific, but at that time it wasn’t.

Then, infrastructure domains where added any maybe there wasn’t a further explicit subdivision as we have for buildings. So the respective top level facility elements were inserted right into the specific domains.

And then there isn’t an IfcBridge domain schema, so was added to core.

In IFC5 there will be opportunity again to properly realign the various traits and various domains. But for now I think this is the best we can do. What specifically would you propose otherwise and, maybe another question, how important do you find the assignment to subschemas, because in the end they cannot be used modularly and frankly if you’ll take a good look you’ll find more inconsistencies, because it doesn’t affect day to day use of the standard.