146 lines
12 KiB
Python
146 lines
12 KiB
Python
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") |