IFC v2.3 json schema and parsing tool to regenerate it (#2501)

* IFC v2.3 json schema and parsing tool to regenerate it

Added entities and propeties schema in json format.

ifc2x3_entities.json format:
entity_name -> description, url, attributes;
attributes format: attribute_name -> attribute_descrption

ifc2x3_properties.json format:
property_set_name -> property_name -> description, children
children format: child_property_name -> child_property_description.

Also added doc.py script that can generate the same json schema files but requires docs IFC 2.3 docs in the same folder (https://github.com/buildingSMART/IFC/tree/Ifc2.3.0.1)

* Moved all json schema files to /util/schema

* Moved json files back to /util/, changed doc.py export location

* Added specification urls for entities and properties

Added specification urls for entities and properties.
Also added a function to parse actual property sets domain from the website to generate specification urls (domain on website and on github do not match).

Schema structure was changed:

ifc2x3_entities.json format:
entity_name -> description, spec_url, attributes;
attributes format: attribute_name -> attribute_descrption

ifc2x3_properties.json format:
property_set_name -> properties, spec_url
properties format: property_name -> description, children_properties
children_properties format: child_property_name -> child_property_description.

ifc2x3_property_sets_domains.json format:
property_set_name -> ifc_domain
This commit is contained in:
Andrej730
2022-10-15 02:14:34 +06:00
committed by GitHub
parent 0810fa7564
commit 28aab490df
4 changed files with 12627 additions and 0 deletions
@@ -0,0 +1,230 @@
# IfcOpenShell - IFC toolkit and geometry engine
# Copyright (C) 2022 @Andrej730
#
# This file is part of IfcOpenShell.
#
# IfcOpenShell is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# IfcOpenShell is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with IfcOpenShell. If not, see <http://www.gnu.org/licenses/>.
import glob
from pathlib import Path
import json
import urllib.parse
from markdown import markdown
from bs4 import BeautifulSoup
from pprint import pprint
import requests
DOCS_LOCATION = 'Ifc2.3.0.1'
class DocExtractor:
def extract_ifc2x3(self):
parse_data_location = Path(DOCS_LOCATION)
if not parse_data_location.is_dir():
raise Exception(
f'Docs for IFC 2.3.0.1 expected to be in folder "{parse_data_location.resolve()}\\"\n'
'For doc extraction please either setup docs as described above \n'
'or change DOCS_LOCATION in doc.py accordingly.'
)
# need to parse actual domains from the website
# since domains from github paths do not match domains from the websites
# probably due domains on the website being from 4_0
# example (property set / github domain / website domain):
# Pset_AirTerminalBoxPHistory IfcControlExtension IfcHvacDomain
self.extract_ifc2x3_property_sets_domains()
self.extract_ifc2x3_entities()
self.extract_ifc2x3_property_sets()
def extract_ifc2x3_property_sets_domains(self):
property_sets_domains = dict()
r = requests.get('https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/psd/psd_index.htm')
html = BeautifulSoup(r.content, features='lxml')
for a in html.find_all('a'):
domain, pset = a['href'].removeprefix('./').removesuffix('.xml').split('/')
property_sets_domains[pset] = domain
# export property sets data
with open('schema/ifc2x3_property_sets_domains.json', 'w', encoding='utf-8') as fo:
print(f'{len(property_sets_domains)} property sets domains were parsed from the website')
json.dump(
property_sets_domains, fo,
sort_keys=True, indent=4
)
def extract_ifc2x3_entities(self):
entities_dict = dict()
# search
entities_paths = [filepath for filepath in glob.iglob(f'{DOCS_LOCATION}/Sections/**/Entities', recursive=True)]
for parse_folder_path in entities_paths:
for entity_path in glob.iglob(f'{parse_folder_path}/**/'):
entity_path = Path(entity_path)
entity_name = entity_path.stem
entities_dict[entity_name] = dict()
# utf-8-sig because of \ufeff occcurs - meaning it's utf bom encoded
md_path = entity_path / 'Documentation.md'
xml_path = entity_path / 'DocEntity.xml'
github_md_url = f'https://github.com/buildingSMART/IFC/blob/{urllib.parse.quote(str(md_path.as_posix()))}'
with open(md_path, 'r', encoding='utf-8-sig') as fi:
# convert markdown to html for easier parsing
html = markdown(fi.read())
description = BeautifulSoup(html, features="lxml").find('p').text
description = description.replace('\n', ' ')
description = description.replace('\u00a0', ' ')
with open(xml_path, 'r', encoding='utf-8') as fi:
bs_tree = BeautifulSoup(fi.read(), features='lxml')
entity_attrs = dict()
for html_attr in bs_tree.find_all('docattribute'):
description = html_attr.text.strip()
description = description.replace('\n', ' ')
description = description.replace('\u00a0', ' ')
entity_attrs[html_attr['name']] = description
if entity_attrs:
entities_dict[entity_name]['attributes'] = entity_attrs
entities_dict[entity_name]['description'] = description
spec_url = 'https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/' \
f'{md_path.parents[2].name.lower()}/lexical/{entity_name.lower()}.htm'
entities_dict[entity_name]['spec_url'] = spec_url
# export entities data
with open('schema/ifc2x3_entities.json', 'w', encoding='utf-8') as fo:
print(f'{len(entities_dict)} entities parsed')
json.dump(
entities_dict, fo,
sort_keys=True, indent=4
)
def extract_ifc2x3_property_sets(self):
property_sets_dict = dict()
property_sets_references = dict()
property_sets_spec_urls = dict()
# extract lists of properties and theirs references for each property set
parsed_paths = [filepath for filepath in glob.iglob(f'{DOCS_LOCATION}/Sections/**/PropertySets', recursive=True)]
# prepare property sets domains from the website we extracted earlier
with open('schema/ifc2x3_property_sets_domains.json', 'r') as fi:
property_sets_site_domains = json.load(fi)
for parse_folder_path in parsed_paths:
for property_set_path in glob.iglob(f'{parse_folder_path}/**/'):
property_set_path = Path(property_set_path)
property_set_name = property_set_path.stem
property_references = list()
xml_path = property_set_path / 'DocPropertySet.xml'
with open(xml_path, 'r', encoding='utf-8') as fi:
bs_tree = BeautifulSoup(fi.read(), features='lxml')
entity_attrs = dict()
for html_attr in bs_tree.find_all('docproperty'):
property_references.append(html_attr['href'])
property_sets_references[property_set_name] = property_references
property_set_domain = property_sets_site_domains[property_set_name]
spec_url = f'https://standards.buildingsmart.org/IFC/RELEASE/IFC2x3/TC1/HTML/psd/{property_set_domain}/{property_set_name}.xml'
property_sets_spec_urls[property_set_name] = spec_url
# setup references look up tables to convert property hrefs to actual data paths
references_paths_lookup = dict()
glob_query = f'{DOCS_LOCATION}/Properties/*/*'
for parsed_path in [filepath for filepath in glob.iglob(glob_query, recursive=False)]:
parsed_path = Path(parsed_path)
# all references omit "$" character, I've checked
# need to check it if moving to next IFC version
property_reference = parsed_path.name.replace('$', '')
references_paths_lookup[property_reference] = parsed_path
# setup a function because we'll need to check child properties recusively
def get_property_info_by_href(href):
property_dict = dict()
property_path = references_paths_lookup[href]
md_path = property_path / 'Documentation.md'
xml_path = property_path / 'DocProperty.xml'
github_md_url = f'https://github.com/buildingSMART/IFC/blob/{urllib.parse.quote(str(md_path.as_posix()))}'
github_xml_url = f'https://github.com/buildingSMART/IFC/blob/{urllib.parse.quote(str(xml_path.as_posix()))}'
with open(xml_path, 'r', encoding='utf-8') as fi:
bs_tree = BeautifulSoup(fi.read(), features='lxml')
entity_attrs = dict()
tags = bs_tree.find_all('docproperty')
# check for child properties - if they are present parse their data recursively
elements_tag = bs_tree.find('elements')
if elements_tag is not None:
child_tags = elements_tag.find_all('docproperty')
child_tags_dict = dict()
for child_tag in child_tags:
child_tag_href = child_tag['href']
child_tag_name, child_tag_dict = get_property_info_by_href(child_tag_href)
child_tags_dict[child_tag_name] = child_tag_dict
tags.remove(child_tag)
property_dict['children'] = child_tags_dict
print(f'Child nodes found inside property xml. Url: {github_xml_url}')
if len(tags) != 1:
print(f'WARNING. Found more properties inside property xml, '
f'only first one were parsed (number of properties: {len(tags)}). Url: {github_xml_url}.')
property_name = tags[0]['name']
if not md_path.is_file():
print('WARNING. Property is missing documentation.md, description will be set to empty. '
f'Url: {github_xml_url}')
description = ''
else:
with open(md_path, 'r', encoding='utf-8-sig') as fi:
# convert markdown to html for easier parsing
html = markdown(fi.read())
description = BeautifulSoup(html, features="lxml").find('p').text
description = description.replace('\n', ' ')
description = description.replace('\u00a0', ' ')
property_dict['description'] = description
return (property_name, property_dict)
# lookup each property reference and save it's name and description
for property_set_name in property_sets_references:
properties_dict = dict()
for property_reference in property_sets_references[property_set_name]:
property_name, property_dict = get_property_info_by_href(property_reference)
properties_dict[property_name] = property_dict
property_sets_dict[property_set_name] = {
'properties': properties_dict,
'spec_url': property_sets_spec_urls[property_set_name]
}
# export property sets data
with open('schema/ifc2x3_properties.json', 'w', encoding='utf-8') as fo:
print(f'{len(property_sets_dict)} property sets parsed')
json.dump(
property_sets_dict, fo,
sort_keys=True, indent=4
)
if __name__ == '__main__':
extractor = DocExtractor()
extractor.extract_ifc2x3()
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,319 @@
{
"Pset_ActionRequest": "IfcFacilitiesMgmtDomain",
"Pset_ActorCommon": "IfcKernel",
"Pset_ActuatorTypeCommon": "IfcBuildingControlsDomain",
"Pset_ActuatorTypeElectricActuator": "IfcBuildingControlsDomain",
"Pset_ActuatorTypeHydraulicActuator": "IfcBuildingControlsDomain",
"Pset_ActuatorTypeLinearActuation": "IfcBuildingControlsDomain",
"Pset_ActuatorTypePneumaticActuator": "IfcBuildingControlsDomain",
"Pset_ActuatorTypeRotationalActuation": "IfcBuildingControlsDomain",
"Pset_AirSideSystemInformation": "IfcSharedBldgServiceElements",
"Pset_AirTerminalBoxPHistory": "IfcHvacDomain",
"Pset_AirTerminalBoxTypeCommon": "IfcHvacDomain",
"Pset_AirTerminalPHistory": "IfcHvacDomain",
"Pset_AirTerminalTypeCommon": "IfcHvacDomain",
"Pset_AirTerminalTypeRectangular": "IfcHvacDomain",
"Pset_AirTerminalTypeRound": "IfcHvacDomain",
"Pset_AirTerminalTypeSlot": "IfcHvacDomain",
"Pset_AirTerminalTypeSquare": "IfcHvacDomain",
"Pset_AirToAirHeatRecoveryPHist": "IfcHvacDomain",
"Pset_AirToAirHeatRecoveryTypeCommon": "IfcHvacDomain",
"Pset_AnalogInput": "IfcBuildingControlsDomain",
"Pset_AnalogOutput": "IfcBuildingControlsDomain",
"Pset_Asset": "IfcSharedFacilitiesElements",
"Pset_BeamCommon": "IfcSharedBldgElements",
"Pset_BinaryInput": "IfcBuildingControlsDomain",
"Pset_BinaryOutput": "IfcBuildingControlsDomain",
"Pset_BoilerPHistory": "IfcHvacDomain",
"Pset_BoilerTypeCommon": "IfcHvacDomain",
"Pset_BoilerTypeSteam": "IfcHvacDomain",
"Pset_BuildingCommon": "IfcProductExtension",
"Pset_BuildingElementProxyCommon": "IfcProductExtension",
"Pset_BuildingStoreyCommon": "IfcProductExtension",
"Pset_BuildingUse": "IfcProductExtension",
"Pset_BuildingUseAdjacent": "IfcProductExtension",
"Pset_BuildingWaterStorage": "IfcProductExtension",
"Pset_CableCarrierSegmentTypeCableLadderSegment": "IfcElectricalDomain",
"Pset_CableCarrierSegmentTypeCableTraySegment": "IfcElectricalDomain",
"Pset_CableCarrierSegmentTypeCableTrunkingSegment": "IfcElectricalDomain",
"Pset_CableCarrierSegmentTypeConduitSegment": "IfcElectricalDomain",
"Pset_CableSegmentTypeCableSegment": "IfcElectricalDomain",
"Pset_CableSegmentTypeConductorSegment": "IfcElectricalDomain",
"Pset_ChillerPHistory": "IfcHvacDomain",
"Pset_ChillerTypeCommon": "IfcHvacDomain",
"Pset_CoilPHistory": "IfcHvacDomain",
"Pset_CoilTypeCommon": "IfcHvacDomain",
"Pset_CoilTypeHydronic": "IfcHvacDomain",
"Pset_ColumnCommon": "IfcSharedBldgElements",
"Pset_CompressorPHistory": "IfcHvacDomain",
"Pset_CompressorTypeCommon": "IfcHvacDomain",
"Pset_ConcreteElementGeneral": "IfcStructuralElementsDomain",
"Pset_ConcreteElementQuantityGeneral": "IfcStructuralElementsDomain",
"Pset_ConcreteElementSurfaceFinishQuantityGeneral": "IfcStructuralElementsDomain",
"Pset_CondenserPHistory": "IfcHvacDomain",
"Pset_CondenserTypeCommon": "IfcHvacDomain",
"Pset_ControllerTypeCommon": "IfcBuildingControlsDomain",
"Pset_ControllerTypeProportional": "IfcBuildingControlsDomain",
"Pset_ControllerTypeTwoPosition": "IfcBuildingControlsDomain",
"Pset_CooledBeamPHistory": "IfcHvacDomain",
"Pset_CooledBeamPHistoryActive": "IfcHvacDomain",
"Pset_CooledBeamTypeActive": "IfcHvacDomain",
"Pset_CooledBeamTypeCommon": "IfcHvacDomain",
"Pset_CoolingTowerPHistory": "IfcHvacDomain",
"Pset_CoolingTowerTypeCommon": "IfcHvacDomain",
"Pset_CoveringCeiling": "IfcProductExtension",
"Pset_CoveringCommon": "IfcProductExtension",
"Pset_CoveringFlooring": "IfcProductExtension",
"Pset_CurtainWallCommon": "IfcSharedBldgElements",
"Pset_DamperPHistory": "IfcHvacDomain",
"Pset_DamperTypeCommon": "IfcHvacDomain",
"Pset_DamperTypeControlDamper": "IfcHvacDomain",
"Pset_DamperTypeFireDamper": "IfcHvacDomain",
"Pset_DamperTypeFireSmokeDamper": "IfcHvacDomain",
"Pset_DamperTypeSmokeDamper": "IfcHvacDomain",
"Pset_DesignPoint": "IfcPlumbingFireProtectionDomain",
"Pset_DiscreteAccessoryAnchorBolt": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryColumnShoe": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryCornerFixingPlate": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryDiagonalTrussConnector": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryEdgeFixingPlate": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryFixingSocket": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryLadderTrussConnector": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryStandardFixingPlate": "IfcSharedComponentElements",
"Pset_DiscreteAccessoryWireLoop": "IfcSharedComponentElements",
"Pset_DistributionChamberElementTypeFormedDuct": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeInspectionChamber": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeInspectionPit": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeManhole": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeMeterChamber": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeSump": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeTrench": "IfcSharedBldgServiceElements",
"Pset_DistributionChamberElementTypeValveChamber": "IfcSharedBldgServiceElements",
"Pset_DistributionFlowElementCommon": "IfcSharedBldgServiceElements",
"Pset_DistributionPortDuct": "IfcSharedBldgServiceElements",
"Pset_DistributionPortPipe": "IfcSharedBldgServiceElements",
"Pset_DoorCommon": "IfcSharedBldgElements",
"Pset_DoorWindowGlazingType": "IfcSharedBldgElements",
"Pset_DoorWindowShadingType": "IfcSharedBldgElements",
"Pset_DrainageCatchment": "IfcPlumbingFireProtectionDomain",
"Pset_DrainageCulvert": "IfcPlumbingFireProtectionDomain",
"Pset_DrainageOutfall": "IfcPlumbingFireProtectionDomain",
"Pset_DrainageReserve": "IfcPlumbingFireProtectionDomain",
"Pset_Draughting": "IfcProductExtension",
"Pset_DuctConnection": "IfcHvacDomain",
"Pset_DuctDesignCriteria": "IfcHvacDomain",
"Pset_DuctFittingPHistory": "IfcHvacDomain",
"Pset_DuctFittingTypeCommon": "IfcHvacDomain",
"Pset_DuctSegmentPHistory": "IfcHvacDomain",
"Pset_DuctSegmentTypeCommon": "IfcHvacDomain",
"Pset_DuctSilencerPHistory": "IfcHvacDomain",
"Pset_DuctSilencerTypeCommon": "IfcHvacDomain",
"Pset_ElectricDistributionPointCommon": "IfcElectricalDomain",
"Pset_ElectricGeneratorTypeCommon": "IfcElectricalDomain",
"Pset_ElectricHeaterTypeElectricalCableHeater": "IfcElectricalDomain",
"Pset_ElectricHeaterTypeElectricalMatHeater": "IfcElectricalDomain",
"Pset_ElectricHeaterTypeElectricalPointHeater": "IfcElectricalDomain",
"Pset_ElectricMotorTypeCommon": "IfcElectricalDomain",
"Pset_ElectricalCircuit": "IfcElectricalDomain",
"Pset_ElectricalDeviceCommon": "IfcElectricalDomain",
"Pset_ElementShading": "IfcProductExtension",
"Pset_EnergyConsumptionPHistoryElectricity": "IfcHvacDomain",
"Pset_EnergyConsumptionPHistoryFuel": "IfcHvacDomain",
"Pset_EnergyConsumptionPHistorySteam": "IfcHvacDomain",
"Pset_EnergyConversionDeviceCoil": "IfcSharedBldgServiceElements",
"Pset_EnergyConversionDeviceSpaceHeaterPanel": "IfcSharedBldgServiceElements",
"Pset_EnergyConversionDeviceSpaceHeaterSectional": "IfcSharedBldgServiceElements",
"Pset_EvaporativeCoolerPHistory": "IfcHvacDomain",
"Pset_EvaporativeCoolerTypeCommon": "IfcHvacDomain",
"Pset_EvaporatorPHistory": "IfcHvacDomain",
"Pset_EvaporatorTypeCommon": "IfcHvacDomain",
"Pset_FanPHistory": "IfcHvacDomain",
"Pset_FanTypeCommon": "IfcHvacDomain",
"Pset_FanTypeSmokeControl": "IfcHvacDomain",
"Pset_FilterPHistory": "IfcHvacDomain",
"Pset_FilterTypeAirParticleFilter": "IfcHvacDomain",
"Pset_FilterTypeCommon": "IfcHvacDomain",
"Pset_FireRatingProperties": "IfcSharedBldgServiceElements",
"Pset_FireSuppressionTerminalTypeBreechingInlet": "IfcPlumbingFireProtectionDomain",
"Pset_FireSuppressionTerminalTypeFireHydrant": "IfcPlumbingFireProtectionDomain",
"Pset_FireSuppressionTerminalTypeHoseReel": "IfcPlumbingFireProtectionDomain",
"Pset_FireSuppressionTerminalTypeSprinkler": "IfcPlumbingFireProtectionDomain",
"Pset_FlowControllerDamper": "IfcSharedBldgServiceElements",
"Pset_FlowControllerFlowMeter": "IfcSharedBldgServiceElements",
"Pset_FlowFittingDuctFitting": "IfcSharedBldgServiceElements",
"Pset_FlowFittingPipeFitting": "IfcSharedBldgServiceElements",
"Pset_FlowInstrumentTypePressureGauge": "IfcBuildingControlsDomain",
"Pset_FlowInstrumentTypeThermometer": "IfcBuildingControlsDomain",
"Pset_FlowMeterTypeCommon": "IfcHvacDomain",
"Pset_FlowMeterTypeEnergyMeter": "IfcHvacDomain",
"Pset_FlowMeterTypeGasMeter": "IfcHvacDomain",
"Pset_FlowMeterTypeOilMeter": "IfcHvacDomain",
"Pset_FlowMeterTypeWaterMeter": "IfcHvacDomain",
"Pset_FlowMovingDeviceCompressor": "IfcSharedBldgServiceElements",
"Pset_FlowMovingDeviceFan": "IfcSharedBldgServiceElements",
"Pset_FlowMovingDeviceFanCentrifugal": "IfcSharedBldgServiceElements",
"Pset_FlowMovingDevicePump": "IfcSharedBldgServiceElements",
"Pset_FlowSegmentDuctSegment": "IfcSharedBldgServiceElements",
"Pset_FlowSegmentPipeSegment": "IfcSharedBldgServiceElements",
"Pset_FlowStorageDeviceTank": "IfcSharedBldgServiceElements",
"Pset_FlowTerminalAirTerminal": "IfcSharedBldgServiceElements",
"Pset_FurnitureTypeChair": "IfcSharedFacilitiesElements",
"Pset_FurnitureTypeCommon": "IfcSharedFacilitiesElements",
"Pset_FurnitureTypeDesk": "IfcSharedFacilitiesElements",
"Pset_FurnitureTypeFileCabinet": "IfcSharedFacilitiesElements",
"Pset_FurnitureTypeTable": "IfcSharedFacilitiesElements",
"Pset_GasTerminalPHistory": "IfcHvacDomain",
"Pset_GasTerminalTypeCommon": "IfcHvacDomain",
"Pset_GasTerminalTypeGasAppliance": "IfcHvacDomain",
"Pset_GasTerminalTypeGasBurner": "IfcHvacDomain",
"Pset_HeatExchangerTypeCommon": "IfcHvacDomain",
"Pset_HeatExchangerTypePlate": "IfcHvacDomain",
"Pset_HumidifierPHistory": "IfcHvacDomain",
"Pset_HumidifierTypeCommon": "IfcHvacDomain",
"Pset_LampTypeCommon": "IfcElectricalDomain",
"Pset_LightFixtureTypeCommon": "IfcElectricalDomain",
"Pset_LightFixtureTypeExitSign": "IfcElectricalDomain",
"Pset_LightFixtureTypeThermal": "IfcElectricalDomain",
"Pset_ManufacturerOccurrence": "IfcSharedFacilitiesElements",
"Pset_ManufacturerTypeInformation": "IfcSharedFacilitiesElements",
"Pset_MemberCommon": "IfcSharedBldgElements",
"Pset_MultiStateInput": "IfcBuildingControlsDomain",
"Pset_MultiStateOutput": "IfcBuildingControlsDomain",
"Pset_OpeningElementCommon": "IfcProductExtension",
"Pset_OutletTypeCommon": "IfcElectricalDomain",
"Pset_OutsideDesignCriteria": "IfcSharedBldgServiceElements",
"Pset_PackingInstructions": "IfcFacilitiesMgmtDomain",
"Pset_Permit": "IfcFacilitiesMgmtDomain",
"Pset_PipeConnection": "IfcHvacDomain",
"Pset_PipeConnectionFlanged": "IfcHvacDomain",
"Pset_PipeFittingPHistory": "IfcHvacDomain",
"Pset_PipeFittingTypeCommon": "IfcHvacDomain",
"Pset_PipeSegmentPHistory": "IfcHvacDomain",
"Pset_PipeSegmentTypeCommon": "IfcHvacDomain",
"Pset_PipeSegmentTypeGutter": "IfcHvacDomain",
"Pset_PlateCommon": "IfcSharedBldgElements",
"Pset_PrecastConcreteElementGeneral": "IfcStructuralElementsDomain",
"Pset_ProductRequirements": "IfcKernel",
"Pset_ProjectCommon": "IfcKernel",
"Pset_ProjectOrderChangeOrder": "IfcSharedMgmtElements",
"Pset_ProjectOrderMaintenanceWorkOrder": "IfcSharedMgmtElements",
"Pset_ProjectOrderMoveOrder": "IfcSharedMgmtElements",
"Pset_ProjectOrderPurchaseOrder": "IfcSharedMgmtElements",
"Pset_ProjectOrderWorkOrder": "IfcSharedMgmtElements",
"Pset_ProjectionElementShadingDevicePHistory": "IfcHvacDomain",
"Pset_PropertyAgreement": "IfcSharedFacilitiesElements",
"Pset_ProtectiveDeviceTypeCircuitBreaker": "IfcElectricalDomain",
"Pset_ProtectiveDeviceTypeCommon": "IfcElectricalDomain",
"Pset_ProtectiveDeviceTypeEarthFailureDevice": "IfcElectricalDomain",
"Pset_ProtectiveDeviceTypeFuseDisconnector": "IfcElectricalDomain",
"Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker": "IfcElectricalDomain",
"Pset_ProtectiveDeviceTypeResidualCurrentSwitch": "IfcElectricalDomain",
"Pset_ProtectiveDeviceTypeVaristor": "IfcElectricalDomain",
"Pset_PumpPHistory": "IfcHvacDomain",
"Pset_PumpTypeCommon": "IfcHvacDomain",
"Pset_QuantityTakeOff": "IfcProductExtension",
"Pset_RailingCommon": "IfcSharedBldgElements",
"Pset_RampCommon": "IfcSharedBldgElements",
"Pset_RampFlightCommon": "IfcSharedBldgElements",
"Pset_ReinforcementBarCountOfIndependentFooting": "IfcStructuralElementsDomain",
"Pset_ReinforcementBarPitchOfBeam": "IfcStructuralElementsDomain",
"Pset_ReinforcementBarPitchOfColumn": "IfcStructuralElementsDomain",
"Pset_ReinforcementBarPitchOfContinuousFooting": "IfcStructuralElementsDomain",
"Pset_ReinforcementBarPitchOfSlab": "IfcStructuralElementsDomain",
"Pset_ReinforcementBarPitchOfWall": "IfcStructuralElementsDomain",
"Pset_ReinforcingBarBendingsBECCommon": "IfcStructuralElementsDomain",
"Pset_ReinforcingBarBendingsBS8666Common": "IfcStructuralElementsDomain",
"Pset_ReinforcingBarBendingsDIN135610Common": "IfcStructuralElementsDomain",
"Pset_ReinforcingBarBendingsISOCD3766Common": "IfcStructuralElementsDomain",
"Pset_Reliability": "IfcSharedFacilitiesElements",
"Pset_Risk": "IfcSharedFacilitiesElements",
"Pset_RoofCommon": "IfcSharedBldgElements",
"Pset_SanitaryTerminalTypeBath": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeBidet": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeCistern": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeSanitaryFountain": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeShower": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeSink": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeToiletPan": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeUrinal": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeWCSeat": "IfcPlumbingFireProtectionDomain",
"Pset_SanitaryTerminalTypeWashHandBasin": "IfcPlumbingFireProtectionDomain",
"Pset_SensorTypeCO2Sensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeFireSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeGasSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeHeatSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeHumiditySensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeLightSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeMovementSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypePressureSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeSmokeSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeSoundSensor": "IfcBuildingControlsDomain",
"Pset_SensorTypeTemperatureSensor": "IfcBuildingControlsDomain",
"Pset_SiteCommon": "IfcProductExtension",
"Pset_SlabCommon": "IfcSharedBldgElements",
"Pset_SpaceCommon": "IfcProductExtension",
"Pset_SpaceFireSafetyRequirements": "IfcProductExtension",
"Pset_SpaceHeaterPHistoryCommon": "IfcHvacDomain",
"Pset_SpaceHeaterTypeCommon": "IfcHvacDomain",
"Pset_SpaceHeaterTypeHydronic": "IfcHvacDomain",
"Pset_SpaceLightingRequirements": "IfcProductExtension",
"Pset_SpaceOccupancyRequirements": "IfcProductExtension",
"Pset_SpaceParking": "IfcProductExtension",
"Pset_SpaceParkingAisle": "IfcProductExtension",
"Pset_SpaceProgramCommon": "IfcArchitectureDomain",
"Pset_SpaceThermalDesign": "IfcSharedBldgServiceElements",
"Pset_SpaceThermalPHistory": "IfcHvacDomain",
"Pset_SpaceThermalRequirements": "IfcProductExtension",
"Pset_StairCommon": "IfcSharedBldgElements",
"Pset_StairFlightCommon": "IfcSharedBldgElements",
"Pset_SwitchingDeviceTypeCommon": "IfcElectricalDomain",
"Pset_SwitchingDeviceTypeContactor": "IfcElectricalDomain",
"Pset_SwitchingDeviceTypeEmergencyStop": "IfcElectricalDomain",
"Pset_SwitchingDeviceTypeStarter": "IfcElectricalDomain",
"Pset_SwitchingDeviceTypeSwitchDisconnector": "IfcElectricalDomain",
"Pset_SwitchingDeviceTypeToggleSwitch": "IfcElectricalDomain",
"Pset_SystemFurnitureElementTypeCommon": "IfcSharedFacilitiesElements",
"Pset_SystemFurnitureElementTypePanel": "IfcSharedFacilitiesElements",
"Pset_SystemFurnitureElementTypeWorkSurface": "IfcSharedFacilitiesElements",
"Pset_TankTypeCommon": "IfcHvacDomain",
"Pset_TankTypeExpansion": "IfcHvacDomain",
"Pset_TankTypePreformed": "IfcHvacDomain",
"Pset_TankTypePressureVessel": "IfcHvacDomain",
"Pset_TankTypeSectional": "IfcHvacDomain",
"Pset_ThermalLoadAggregate": "IfcSharedBldgServiceElements",
"Pset_ThermalLoadDesignCriteria": "IfcSharedBldgServiceElements",
"Pset_TransformerTypeCommon": "IfcElectricalDomain",
"Pset_TransportElementCommon": "IfcProductExtension",
"Pset_TransportElementElevator": "IfcProductExtension",
"Pset_TubeBundleTypeCommon": "IfcHvacDomain",
"Pset_TubeBundleTypeFinned": "IfcHvacDomain",
"Pset_UnitaryEquipmentTypeAirConditioningUnit": "IfcHvacDomain",
"Pset_UnitaryEquipmentTypeAirHandler": "IfcHvacDomain",
"Pset_UtilityConsumption": "IfcSharedBldgServiceElements",
"Pset_ValvePHistory": "IfcHvacDomain",
"Pset_ValveTypeAirRelease": "IfcHvacDomain",
"Pset_ValveTypeCommon": "IfcHvacDomain",
"Pset_ValveTypeDrawOffCock": "IfcHvacDomain",
"Pset_ValveTypeFaucet": "IfcHvacDomain",
"Pset_ValveTypeFlushing": "IfcHvacDomain",
"Pset_ValveTypeGasTap": "IfcHvacDomain",
"Pset_ValveTypeIsolating": "IfcHvacDomain",
"Pset_ValveTypeMixing": "IfcHvacDomain",
"Pset_ValveTypePressureReducing": "IfcHvacDomain",
"Pset_ValveTypePressureRelief": "IfcHvacDomain",
"Pset_VibrationIsolatorTypeCommon": "IfcHvacDomain",
"Pset_WallCommon": "IfcSharedBldgElements",
"Pset_Warranty": "IfcSharedFacilitiesElements",
"Pset_WasteTerminalTypeFloorTrap": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeFloorWaste": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeGreaseInterceptor": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeGullySump": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeGullyTrap": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeOilInterceptor": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypePetrolInterceptor": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeRoofDrain": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeWasteDisposalUnit": "IfcPlumbingFireProtectionDomain",
"Pset_WasteTerminalTypeWasteTrap": "IfcPlumbingFireProtectionDomain",
"Pset_WindowCommon": "IfcSharedBldgElements",
"Pset_ZoneCommon": "IfcProductExtension"
}