Doc API is now accessible without setting up DocAPI class

Now you can access Doc API functions directly (like `ifcopenshell.util.doc.get_entity_doc(...)`) without setting up DocAPI class.
To make it work I've set up singleton DocDatabase class and made all paths relative to module location.
This commit is contained in:
Andrej730
2022-10-16 16:54:05 +06:00
parent 1eeb820d26
commit 81d80ee415
2 changed files with 90 additions and 394 deletions
@@ -28,73 +28,81 @@ from bs4 import BeautifulSoup
from bs4 import MarkupResemblesLocatorWarning from bs4 import MarkupResemblesLocatorWarning
import requests 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 = { SCHEMA_FILES = {
'IFC2X3': { 'IFC2X3': {
'entities': Path('schema/ifc2x3_entities.json'), 'entities': BASE_MODULE_PATH / 'schema/ifc2x3_entities.json',
'properties': Path('schema/ifc2x3_properties.json') 'properties': BASE_MODULE_PATH / 'schema/ifc2x3_properties.json'
}, },
'IFC4': { 'IFC4': {
'entities': Path('schema/ifc4_entities.json'), 'entities': BASE_MODULE_PATH / 'schema/ifc4_entities.json',
'properties': Path('schema/ifc4_properties.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): # singleton doc database
if version_name not in self.doc_database: # required so that database would be loaded only once
raise Exception( class DocDatabase():
f'Version: {version_name} is not supported. ' def __new__(cls):
f'Supported version: {", ".join(self.doc_database.keys())}') if not hasattr(cls, 'db'):
return version_name 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): if files_missing:
version = self.check_version_name(version) raise Exception(
return self.doc_database[version]['entities'][entity] '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): def check_version_name(version_name):
version = self.check_version_name(version) if version_name not in SCHEMA_FILES:
return self.doc_database[version]['properties'][pset] 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): def get_entity_doc(version, entity):
version = self.check_version_name(version) version = check_version_name(version)
return self.doc_database[version]['properties'][pset]['properties'][prop] 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: class DocExtractor:
def extract_ifc2x3(self): def extract_ifc2x3(self):
print('Parsing data for Ifc2.3.0.1') print('Parsing data for Ifc2.3.0.1')
parse_data_location = Path(IFC2x3_DOCS_LOCATION) if not IFC2x3_DOCS_LOCATION.is_dir():
if not parse_data_location.is_dir():
raise Exception( 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' 'For doc extraction please either setup docs as described above \n'
'or change IFC2x3_DOCS_LOCATION in doc.py accordingly. \n' 'or change IFC2x3_DOCS_LOCATION in doc.py accordingly. \n'
'You can download docs from the repository: \n' 'You can download docs from the repository: \n'
@@ -119,7 +127,9 @@ class DocExtractor:
property_sets_domains[pset] = domain property_sets_domains[pset] = domain
# export property sets data # 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') print(f'{len(property_sets_domains)} property sets domains were parsed from the website')
json.dump( json.dump(
property_sets_domains, fo, property_sets_domains, fo,
@@ -141,7 +151,8 @@ class DocExtractor:
# utf-8-sig because of \ufeff occcurs - meaning it's utf bom encoded # utf-8-sig because of \ufeff occcurs - meaning it's utf bom encoded
md_path = entity_path / 'Documentation.md' md_path = entity_path / 'Documentation.md'
xml_path = entity_path / 'DocEntity.xml' 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: with open(md_path, 'r', encoding='utf-8-sig') as fi:
# convert markdown to html for easier parsing # convert markdown to html for easier parsing
@@ -189,7 +200,7 @@ class DocExtractor:
entities_dict[entity_name]['spec_url'] = spec_url entities_dict[entity_name]['spec_url'] = spec_url
# export entities data # 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') print(f'{len(entities_dict)} entities parsed')
json.dump( json.dump(
entities_dict, fo, entities_dict, fo,
@@ -206,7 +217,7 @@ class DocExtractor:
for filepath in glob.iglob(f'{IFC2x3_DOCS_LOCATION}/Sections/**/PropertySets', recursive=True)] for filepath in glob.iglob(f'{IFC2x3_DOCS_LOCATION}/Sections/**/PropertySets', recursive=True)]
# prepare property sets domains from the website we extracted earlier # 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) property_sets_site_domains = json.load(fi)
for parse_folder_path in parsed_paths: for parse_folder_path in parsed_paths:
@@ -244,8 +255,10 @@ class DocExtractor:
md_path = property_path / 'Documentation.md' md_path = property_path / 'Documentation.md'
xml_path = property_path / 'DocProperty.xml' xml_path = property_path / 'DocProperty.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_xml_url = f'https://github.com/buildingSMART/IFC/blob/{urllib.parse.quote(str(xml_path.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: with open(xml_path, 'r', encoding='utf-8') as fi:
bs_tree = BeautifulSoup(fi.read(), features='lxml') bs_tree = BeautifulSoup(fi.read(), features='lxml')
@@ -298,7 +311,7 @@ class DocExtractor:
# export property sets data # 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') print(f'{len(property_sets_dict)} property sets parsed')
json.dump( json.dump(
property_sets_dict, fo, property_sets_dict, fo,
@@ -307,10 +320,9 @@ class DocExtractor:
def extract_ifc4(self): def extract_ifc4(self):
print('Parsing data for Ifc4.0.2.1') print('Parsing data for Ifc4.0.2.1')
parse_data_location = Path(IFC4_DOCS_LOCATION) if not IFC4_DOCS_LOCATION.is_dir():
if not parse_data_location.is_dir():
raise Exception( 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' 'For doc extraction please either setup docs as described above \n'
'or change IFC4_DOCS_LOCATION in doc.py accordingly.' 'or change IFC4_DOCS_LOCATION in doc.py accordingly.'
'You can download docs from the repository: \n' 'You can download docs from the repository: \n'
@@ -349,7 +361,7 @@ class DocExtractor:
property_sets_domains[pset] = domain property_sets_domains[pset] = domain
# export property sets data # 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') print(f'{len(property_sets_domains)} property sets domains were parsed from the website')
json.dump( json.dump(
property_sets_domains, fo, property_sets_domains, fo,
@@ -360,7 +372,8 @@ class DocExtractor:
entities_dict = dict() entities_dict = dict()
# search # 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 parse_folder_path in entities_paths:
for entity_path in glob.iglob(f'{parse_folder_path}/**/'): for entity_path in glob.iglob(f'{parse_folder_path}/**/'):
entity_path = Path(entity_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 # utf-8-sig because of \ufeff occcurs - meaning it's utf bom encoded
md_path = entity_path / 'Documentation.md' md_path = entity_path / 'Documentation.md'
xml_path = entity_path / 'DocEntity.xml' 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: with open(md_path, 'r', encoding='utf-8-sig') as fi:
# convert markdown to html for easier parsing # convert markdown to html for easier parsing
@@ -418,7 +432,7 @@ class DocExtractor:
# entities_dict[entity_name]['github_url'] = github_md_url # entities_dict[entity_name]['github_url'] = github_md_url
# export entities data # 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') print(f'{len(entities_dict)} entities parsed')
json.dump( json.dump(
entities_dict, fo, 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)] 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 # 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) property_sets_site_domains = json.load(fi)
psets_test = set() psets_test = set()
@@ -492,8 +506,10 @@ class DocExtractor:
md_path = property_path / 'Documentation.md' md_path = property_path / 'Documentation.md'
xml_path = property_path / ('DocQuantity.xml' if property_quantity else 'DocProperty.xml') 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()))}' md_url_part = urllib.parse.quote(str(md_path.relative_to(Path(__file__).parent).as_posix()))
github_xml_url = f'https://github.com/buildingSMART/IFC/blob/{urllib.parse.quote(str(xml_path.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: with open(xml_path, 'r', encoding='utf-8') as fi:
bs_tree = BeautifulSoup(fi.read(), features='lxml') bs_tree = BeautifulSoup(fi.read(), features='lxml')
@@ -544,9 +560,8 @@ class DocExtractor:
spec_url = property_sets_spec_urls[property_set_name] spec_url = property_sets_spec_urls[property_set_name]
property_sets_dict[property_set_name]['spec_url'] = spec_url property_sets_dict[property_set_name]['spec_url'] = spec_url
# export property sets data # 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') print(f'{len(property_sets_dict)} property sets parsed')
json.dump( json.dump(
property_sets_dict, fo, property_sets_dict, fo,
@@ -554,22 +569,21 @@ class DocExtractor:
) )
def run_doc_api_examples(): def run_doc_api_examples():
query = DocAPI()
print('Entities:') print('Entities:')
print(query.get_entity_doc('IFC2X3', 'IfcActionRequest')) print(get_entity_doc('IFC2X3', 'IfcActionRequest'))
print(query.get_entity_doc('IFC4', 'IfcActionRequest')) print(get_entity_doc('IFC4', 'IfcActionRequest'))
print('Entity attributes:') print('Entity attributes:')
print(query.get_attribute_doc('IFC2X3', 'IfcActionRequest', 'RequestID')) print(get_attribute_doc('IFC2X3', 'IfcActionRequest', 'RequestID'))
print(query.get_attribute_doc('IFC4', 'IfcActionRequest', 'PredefinedType')) print(get_attribute_doc('IFC4', 'IfcActionRequest', 'PredefinedType'))
print('Propety sets:') print('Propety sets:')
print(query.get_property_set_doc('IFC2X3', 'Pset_ZoneCommon')) print(get_property_set_doc('IFC2X3', 'Pset_ZoneCommon'))
print(query.get_property_set_doc('IFC4', 'Pset_ZoneCommon')) print(get_property_set_doc('IFC4', 'Pset_ZoneCommon'))
print('Propety sets attributes:') print('Propety sets attributes:')
print(query.get_property_doc('IFC2X3', 'Pset_ZoneCommon', 'Category')) print(get_property_doc('IFC2X3', 'Pset_ZoneCommon', 'Category'))
print(query.get_property_doc('IFC4', 'Pset_ZoneCommon', 'NetPlannedArea')) print(get_property_doc('IFC4', 'Pset_ZoneCommon', 'NetPlannedArea'))
if __name__ == '__main__': if __name__ == '__main__':
@@ -582,3 +596,4 @@ if __name__ == '__main__':
@@ -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"
}