diff --git a/src/ifcopenshell-python/ifcopenshell/util/doc.py b/src/ifcopenshell-python/ifcopenshell/util/doc.py index 218ff0f2c1..2bfa142326 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/doc.py +++ b/src/ifcopenshell-python/ifcopenshell/util/doc.py @@ -28,73 +28,81 @@ from bs4 import BeautifulSoup from bs4 import MarkupResemblesLocatorWarning import requests -IFC2x3_DOCS_LOCATION = 'Ifc2.3.0.1' -IFC4_DOCS_LOCATION = 'Ifc4.0.2.1' +BASE_MODULE_PATH = Path(__file__).parent +IFC2x3_DOCS_LOCATION = BASE_MODULE_PATH / 'Ifc2.3.0.1' +IFC4_DOCS_LOCATION = BASE_MODULE_PATH / 'Ifc4.0.2.1' SCHEMA_FILES = { 'IFC2X3': { - 'entities': Path('schema/ifc2x3_entities.json'), - 'properties': Path('schema/ifc2x3_properties.json') + 'entities': BASE_MODULE_PATH / 'schema/ifc2x3_entities.json', + 'properties': BASE_MODULE_PATH / 'schema/ifc2x3_properties.json' }, 'IFC4': { - 'entities': Path('schema/ifc4_entities.json'), - 'properties': Path('schema/ifc4_properties.json') + 'entities': BASE_MODULE_PATH / 'schema/ifc4_entities.json', + 'properties': BASE_MODULE_PATH / 'schema/ifc4_properties.json' } } -class DocAPI: - def __init__(self): - self.doc_database = {ifc_version: dict() for ifc_version in SCHEMA_FILES} - files_missing = False - for ifc_version in SCHEMA_FILES: - for data_type in SCHEMA_FILES[ifc_version]: - schema_path = SCHEMA_FILES[ifc_version][data_type] - if not schema_path.is_file(): - print(f"Schema file {schema_path} wasn't found.") - files_missing = True - continue - - with open(schema_path, 'r') as fi: - self.doc_database[ifc_version][data_type] = json.load(fi) - if files_missing: - raise Exception( - 'Some schema files are missing - they contain neccessary data for DocAPI to work. \n' - 'Make sure those files are present. To generate them you can run DocExtractor extract functions \n' - 'but it will require corresponding Ifc docs to be in the same directory as the script.' - ) - def check_version_name(self, version_name): - if version_name not in self.doc_database: - raise Exception( - f'Version: {version_name} is not supported. ' - f'Supported version: {", ".join(self.doc_database.keys())}') - return version_name +# singleton doc database +# required so that database would be loaded only once +class DocDatabase(): + def __new__(cls): + if not hasattr(cls, 'db'): + db = {ifc_version: dict() for ifc_version in SCHEMA_FILES} + files_missing = False + for ifc_version in SCHEMA_FILES: + for data_type in SCHEMA_FILES[ifc_version]: + schema_path = SCHEMA_FILES[ifc_version][data_type] + if not schema_path.is_file(): + print(f"Schema file {schema_path} wasn't found.") + files_missing = True + continue + + with open(schema_path, 'r') as fi: + db[ifc_version][data_type] = json.load(fi) - def get_entity_doc(self, version, entity): - version = self.check_version_name(version) - return self.doc_database[version]['entities'][entity] + if files_missing: + raise Exception( + 'Some schema files are missing - they contain neccessary data for DocAPI to work. \n' + 'Make sure those files are present. To generate them you can run DocExtractor extract functions \n' + 'but it will require corresponding Ifc docs to be in the same directory as the script.' + ) + cls.db = db + return cls.db - def get_attribute_doc(self, version, entity, attribute): - version = self.check_version_name(version) - return self.doc_database[version]['entities'][entity]['attributes'][attribute] - def get_property_set_doc(self, version, pset): - version = self.check_version_name(version) - return self.doc_database[version]['properties'][pset] +def check_version_name(version_name): + if version_name not in SCHEMA_FILES: + raise Exception( + f'Version: {version_name} is not supported. ' + f'Supported version: {", ".join(SCHEMA_FILES.keys())}') + return version_name - def get_property_doc(self, version, pset, prop): - version = self.check_version_name(version) - return self.doc_database[version]['properties'][pset]['properties'][prop] +def get_entity_doc(version, entity): + version = check_version_name(version) + return DocDatabase()[version]['entities'][entity] + +def get_attribute_doc(version, entity, attribute): + version = check_version_name(version) + return DocDatabase()[version]['entities'][entity]['attributes'][attribute] + +def get_property_set_doc(version, pset): + version = check_version_name(version) + return DocDatabase()[version]['properties'][pset] + +def get_property_doc(version, pset, prop): + version = check_version_name(version) + return DocDatabase()[version]['properties'][pset]['properties'][prop] class DocExtractor: def extract_ifc2x3(self): print('Parsing data for Ifc2.3.0.1') - parse_data_location = Path(IFC2x3_DOCS_LOCATION) - if not parse_data_location.is_dir(): + if not IFC2x3_DOCS_LOCATION.is_dir(): raise Exception( - f'Docs for IFC 2.3.0.1 expected to be in folder "{parse_data_location.resolve()}\\"\n' + f'Docs for IFC 2.3.0.1 expected to be in folder "{IFC2x3_DOCS_LOCATION.resolve()}\\"\n' 'For doc extraction please either setup docs as described above \n' 'or change IFC2x3_DOCS_LOCATION in doc.py accordingly. \n' 'You can download docs from the repository: \n' @@ -119,7 +127,9 @@ class DocExtractor: property_sets_domains[pset] = domain # export property sets data - with open('schema/ifc2x3_property_sets_site_domains.json', 'w', encoding='utf-8') as fo: + with open( + BASE_MODULE_PATH / 'schema/ifc2x3_property_sets_site_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, @@ -141,7 +151,8 @@ class DocExtractor: # 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()))}' + md_url_part = urllib.parse.quote(str(md_path.relative_to(Path(__file__).parent).as_posix())) + github_md_url = f'https://github.com/buildingSMART/IFC/blob/{md_url_part}' with open(md_path, 'r', encoding='utf-8-sig') as fi: # convert markdown to html for easier parsing @@ -189,7 +200,7 @@ class DocExtractor: entities_dict[entity_name]['spec_url'] = spec_url # export entities data - with open('schema/ifc2x3_entities.json', 'w', encoding='utf-8') as fo: + with open(BASE_MODULE_PATH / 'schema/ifc2x3_entities.json', 'w', encoding='utf-8') as fo: print(f'{len(entities_dict)} entities parsed') json.dump( entities_dict, fo, @@ -206,7 +217,7 @@ class DocExtractor: for filepath in glob.iglob(f'{IFC2x3_DOCS_LOCATION}/Sections/**/PropertySets', recursive=True)] # prepare property sets domains from the website we extracted earlier - with open('schema/ifc2x3_property_sets_site_domains.json', 'r') as fi: + with open(BASE_MODULE_PATH / 'schema/ifc2x3_property_sets_site_domains.json', 'r') as fi: property_sets_site_domains = json.load(fi) for parse_folder_path in parsed_paths: @@ -244,8 +255,10 @@ class DocExtractor: 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()))}' + md_url_part = urllib.parse.quote(str(md_path.relative_to(Path(__file__).parent).as_posix())) + xml_url_part = urllib.parse.quote(str(xml_path.relative_to(Path(__file__).parent).as_posix())) + github_md_url = f'https://github.com/buildingSMART/IFC/blob/{md_url_part}' + github_xml_url = f'https://github.com/buildingSMART/IFC/blob/{xml_url_part}' with open(xml_path, 'r', encoding='utf-8') as fi: bs_tree = BeautifulSoup(fi.read(), features='lxml') @@ -298,7 +311,7 @@ class DocExtractor: # export property sets data - with open('schema/ifc2x3_properties.json', 'w', encoding='utf-8') as fo: + with open(BASE_MODULE_PATH / '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, @@ -307,10 +320,9 @@ class DocExtractor: def extract_ifc4(self): print('Parsing data for Ifc4.0.2.1') - parse_data_location = Path(IFC4_DOCS_LOCATION) - if not parse_data_location.is_dir(): + if not IFC4_DOCS_LOCATION.is_dir(): raise Exception( - f'Docs for Ifc4.0.2.1 expected to be in folder "{parse_data_location.resolve()}\\"\n' + f'Docs for Ifc4.0.2.1 expected to be in folder "{IFC4_DOCS_LOCATION.resolve()}\\"\n' 'For doc extraction please either setup docs as described above \n' 'or change IFC4_DOCS_LOCATION in doc.py accordingly.' 'You can download docs from the repository: \n' @@ -349,7 +361,7 @@ class DocExtractor: property_sets_domains[pset] = domain # export property sets data - with open('schema/ifc4_property_sets_site_domains.json', 'w', encoding='utf-8') as fo: + with open(BASE_MODULE_PATH / 'schema/ifc4_property_sets_site_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, @@ -360,7 +372,8 @@ class DocExtractor: entities_dict = dict() # search - entities_paths = [filepath for filepath in glob.iglob(f'{IFC4_DOCS_LOCATION}/Sections/**/Entities', recursive=True)] + entities_paths = [filepath + for filepath in glob.iglob(f'{IFC4_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) @@ -370,7 +383,8 @@ class DocExtractor: # 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()))}' + md_url_part = urllib.parse.quote(str(md_path.relative_to(Path(__file__).parent).as_posix())) + github_md_url = f'https://github.com/buildingSMART/IFC/blob/{md_url_part}' with open(md_path, 'r', encoding='utf-8-sig') as fi: # convert markdown to html for easier parsing @@ -418,7 +432,7 @@ class DocExtractor: # entities_dict[entity_name]['github_url'] = github_md_url # export entities data - with open('schema/ifc4_entities.json', 'w', encoding='utf-8') as fo: + with open(BASE_MODULE_PATH / 'schema/ifc4_entities.json', 'w', encoding='utf-8') as fo: print(f'{len(entities_dict)} entities parsed') json.dump( entities_dict, fo, @@ -436,7 +450,7 @@ class DocExtractor: parsed_paths += [filepath for filepath in glob.iglob(f'{IFC4_DOCS_LOCATION}/Sections/**/QuantitySets', recursive=True)] # prepare property sets domains from the website we extracted earlier - with open('schema/ifc4_property_sets_site_domains.json', 'r') as fi: + with open(BASE_MODULE_PATH / 'schema/ifc4_property_sets_site_domains.json', 'r') as fi: property_sets_site_domains = json.load(fi) psets_test = set() @@ -492,8 +506,10 @@ class DocExtractor: md_path = property_path / 'Documentation.md' xml_path = property_path / ('DocQuantity.xml' if property_quantity else '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()))}' + md_url_part = urllib.parse.quote(str(md_path.relative_to(Path(__file__).parent).as_posix())) + github_md_url = f'https://github.com/buildingSMART/IFC/blob/{md_url_part}' + xml_url_part = urllib.parse.quote(str(xml_path.relative_to(Path(__file__).parent).as_posix())) + github_xml_url = f'https://github.com/buildingSMART/IFC/blob/{xml_url_part}' with open(xml_path, 'r', encoding='utf-8') as fi: bs_tree = BeautifulSoup(fi.read(), features='lxml') @@ -544,9 +560,8 @@ class DocExtractor: spec_url = property_sets_spec_urls[property_set_name] property_sets_dict[property_set_name]['spec_url'] = spec_url - # export property sets data - with open('schema/ifc4_properties.json', 'w', encoding='utf-8') as fo: + with open(BASE_MODULE_PATH / 'schema/ifc4_properties.json', 'w', encoding='utf-8') as fo: print(f'{len(property_sets_dict)} property sets parsed') json.dump( property_sets_dict, fo, @@ -554,22 +569,21 @@ class DocExtractor: ) def run_doc_api_examples(): - query = DocAPI() print('Entities:') - print(query.get_entity_doc('IFC2X3', 'IfcActionRequest')) - print(query.get_entity_doc('IFC4', 'IfcActionRequest')) + print(get_entity_doc('IFC2X3', 'IfcActionRequest')) + print(get_entity_doc('IFC4', 'IfcActionRequest')) print('Entity attributes:') - print(query.get_attribute_doc('IFC2X3', 'IfcActionRequest', 'RequestID')) - print(query.get_attribute_doc('IFC4', 'IfcActionRequest', 'PredefinedType')) + print(get_attribute_doc('IFC2X3', 'IfcActionRequest', 'RequestID')) + print(get_attribute_doc('IFC4', 'IfcActionRequest', 'PredefinedType')) print('Propety sets:') - print(query.get_property_set_doc('IFC2X3', 'Pset_ZoneCommon')) - print(query.get_property_set_doc('IFC4', 'Pset_ZoneCommon')) + print(get_property_set_doc('IFC2X3', 'Pset_ZoneCommon')) + print(get_property_set_doc('IFC4', 'Pset_ZoneCommon')) print('Propety sets attributes:') - print(query.get_property_doc('IFC2X3', 'Pset_ZoneCommon', 'Category')) - print(query.get_property_doc('IFC4', 'Pset_ZoneCommon', 'NetPlannedArea')) + print(get_property_doc('IFC2X3', 'Pset_ZoneCommon', 'Category')) + print(get_property_doc('IFC4', 'Pset_ZoneCommon', 'NetPlannedArea')) if __name__ == '__main__': @@ -582,3 +596,4 @@ if __name__ == '__main__': + diff --git a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc2x3_property_sets_domains.json b/src/ifcopenshell-python/ifcopenshell/util/schema/ifc2x3_property_sets_domains.json deleted file mode 100644 index c3db781695..0000000000 --- a/src/ifcopenshell-python/ifcopenshell/util/schema/ifc2x3_property_sets_domains.json +++ /dev/null @@ -1,319 +0,0 @@ -{ - "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" -} \ No newline at end of file