Upload files to "ifcParser"
This commit is contained in:
146
ifcParser/ifcProject.py
Normal file
146
ifcParser/ifcProject.py
Normal file
@@ -0,0 +1,146 @@
|
||||
from rdflib import Graph, Namespace, URIRef, Literal, RDF, RDFS, XSD
|
||||
|
||||
|
||||
class project():
|
||||
|
||||
def __init__(self, IfcProject, g, ontology, resource):
|
||||
self.IfcProject = IfcProject
|
||||
self.g = g
|
||||
self.ontology = ontology
|
||||
self.resource = resource
|
||||
|
||||
def ifcProjectFunction(self):
|
||||
for proj in self.IfcProject:
|
||||
projectID = proj['globalId']
|
||||
#basic information
|
||||
self.g.add((self.resource[projectID], RDF.type, self.ontology.Project))
|
||||
try:#add history
|
||||
projectHistory = proj['ownerHistory']['ref']
|
||||
self.g.add((self.resource[projectHistory], RDF.type, self.ontology.History))
|
||||
self.g.add((self.resource[projectID], self.ontology.hasHistory, self.resource[projectHistory]))
|
||||
except Exception:
|
||||
pass
|
||||
try: # name is not always there
|
||||
projName = proj['name']
|
||||
self.g.add((self.resource[projectID], self.ontology.name, Literal(projName)))
|
||||
except Exception:
|
||||
pass
|
||||
try: # description is not always there
|
||||
projDescription = proj['description']
|
||||
self.g.add((self.resource[projectID], self.ontology.description, Literal(projDescription)))
|
||||
except Exception:
|
||||
pass
|
||||
try: # description is not always there
|
||||
projLongName = proj['longName']
|
||||
self.g.add((self.resource[projectID], self.ontology.longName, Literal(projLongName)))
|
||||
except Exception:
|
||||
pass
|
||||
try: # description is not always there
|
||||
projPhase = proj['phase']
|
||||
self.g.add((self.resource[projectID], self.ontology.phase, Literal(projPhase)))
|
||||
except Exception:
|
||||
pass
|
||||
try: # representationContexts is not always there
|
||||
for representationContexts in proj['representationContexts']:
|
||||
context = representationContexts['ref']
|
||||
self.g.add((self.resource[context], RDF.type, self.ontology.Context))
|
||||
self.g.add((self.resource[projectID], self.ontology.hasRepresentationContext, self.resource[context]))
|
||||
except Exception:
|
||||
pass
|
||||
try: # definedby is not always there
|
||||
for defined in proj['isDefinedBy']:
|
||||
issdefined = defined['ref']
|
||||
self.g.add((self.resource[issdefined], RDF.type, self.ontology.PropertySet))
|
||||
self.g.add((self.resource[projectID], self.ontology.isDefinedBy, self.resource[issdefined]))
|
||||
except Exception:
|
||||
pass
|
||||
try: # decompose is not always there
|
||||
for representation in proj['isDecomposedBy']:
|
||||
rep = representation['ref']
|
||||
self.g.add((self.resource["building_" + projectID], RDF.type, self.ontology.Object))
|
||||
self.g.add((self.resource[rep], self.ontology.isDecomposedBy, self.resource["building_" + projectID]))
|
||||
except Exception:
|
||||
pass
|
||||
try: # decompose is not always there
|
||||
for representation in proj['declares']:
|
||||
rep = representation['ref']
|
||||
self.g.add((self.resource["declaration_" + projectID], RDF.type, self.ontology.RelationDeclaration))
|
||||
self.g.add((self.resource[rep], self.ontology.declares, self.resource["declaration_" + projectID]))
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
count, countElement = 1, 1
|
||||
for unit in proj['unitsInContext']['units']:
|
||||
unitType = unit['type']
|
||||
print(unitType)
|
||||
if unitType == "IfcSIUnit":
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], RDF.type, self.ontology.IfcSIUnit))
|
||||
self.g.add((self.resource[projectID], self.ontology.hasUnit, self.resource["ifcUnit_" + projectID + "_" + str(count)]))
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.unitType, Literal(unit['unitType'])))
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.name, Literal(unit['name'])))
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.dimensionType, Literal(unit['dimensions']['type'])))
|
||||
if 'prefix' in list(unit.keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.prefix, Literal(unit['prefix'])))
|
||||
if 'LengthExponent' in list(unit['dimensions'].keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.LengthExponent, Literal(unit['dimensions']['LengthExponent'])))
|
||||
if 'TimeExponent' in list(unit['dimensions'].keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.TimeExponent, Literal(unit['dimensions']['TimeExponent'])))
|
||||
if 'ThermodynamicTemperatureExponent' in list(unit['dimensions'].keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.ThermodynamicTemperatureExponent, Literal(unit['dimensions']['ThermodynamicTemperatureExponent'])))
|
||||
if 'MassExponent' in list(unit['dimensions'].keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.MassExponent, Literal(unit['dimensions']['MassExponent'])))
|
||||
if 'ElectricCurrentExponent' in list(unit['dimensions'].keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.ElectricCurrentExponent, Literal(unit['dimensions']['ElectricCurrentExponent'])))
|
||||
if 'LuminousIntensityExponent' in list(unit['dimensions'].keys()):
|
||||
self.g.add((self.resource["ifcUnit_" + projectID + "_" + str(count)], self.ontology.LuminousIntensityExponent, Literal(unit['dimensions']['LuminousIntensityExponent'])))
|
||||
elif unitType == "IfcConversionBasedUnit":
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], RDF.type, self.ontology.ConversionBasedUnit))
|
||||
self.g.add((self.resource[projectID], self.ontology.hasUnit, self.resource["conversionBasedUnit_" + projectID + "_" + str(count)]))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.unitType, Literal(unit['unitType'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.name, Literal(unit['name'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.coversionType, Literal(unit['conversionFactor']['valueComponent']['type'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.coversionValue, Literal(unit['conversionFactor']['valueComponent']['value'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.componentType, Literal(unit['conversionFactor']['unitComponent']['unitType'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.componentName, Literal(unit['conversionFactor']['unitComponent']['name'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.dimensionType, Literal(unit['conversionFactor']['unitComponent']['dimensions']['type'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.LengthExponent, Literal(unit['dimensions']['lengthExponent'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.MassExponent, Literal(unit['dimensions']['massExponent'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.TimeExponent, Literal(unit['dimensions']['timeExponent'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.ElectricCurrentExponent, Literal(unit['dimensions']['electricCurrentExponent'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.ThermodynamicTemperatureExponent, Literal(unit['dimensions']['thermodynamicTemperatureExponent'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.AmountOfSubstanceExponent, Literal(unit['dimensions']['amountOfSubstanceExponent'])))
|
||||
self.g.add((self.resource["conversionBasedUnit_" + projectID + "_" + str(count)], self.ontology.LuminousIntensityExponent, Literal(unit['dimensions']['luminousIntensityExponent'])))
|
||||
elif unitType == "IfcDerivedUnit":
|
||||
self.g.add((self.resource["derivedUnit_" + projectID + "_" + str(count)], RDF.type, self.ontology.DerivedUnit))
|
||||
self.g.add((self.resource[projectID], self.ontology.hasUnit, self.resource["derivedUnit_" + projectID + "_" + str(count)]))
|
||||
self.g.add((self.resource["derivedUnit_" + projectID + "_" + str(count)], self.ontology.unitType, Literal(unit['unitType'])))
|
||||
for element in unit['elements']:
|
||||
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)], RDF.type, self.ontology.DerivedUnit))
|
||||
self.g.add((self.resource["derivedUnit_" + projectID + "_" + str(count)], self.ontology.hasElement, self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)]))
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)], self.ontology.type, Literal(element['unit']['unitType'])))
|
||||
try:
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)],
|
||||
self.ontology.prefix, Literal(element['prefix'])))
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)], self.ontology.name, Literal(element['unit']['name'])))
|
||||
except Exception:
|
||||
pass
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)], self.ontology.exponent, Literal(element['exponent'])))
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)], self.ontology.dimensionType, Literal(element['unit']['dimensions']['type'])))
|
||||
for k in list(element['unit']['dimensions'].keys()):
|
||||
if str(k) != "type":
|
||||
self.g.add((self.resource["derivedUnitElement_" + projectID + "_" + str(countElement)], self.ontology[k], Literal(element['unit']['dimensions'][k])))
|
||||
countElement += 1
|
||||
else:
|
||||
pass
|
||||
count += 1
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Create RDF triples
|
||||
# Serialize and save the RDF graph to a TTL file
|
||||
file_path = "output.ttl"
|
||||
self.g.serialize(destination=file_path, format="turtle")
|
||||
Reference in New Issue
Block a user