def find_used_contexts(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) q = rdflib.plugins.sparql.prepareQuery( """ SELECT DISTINCT ?context_subject ?ContextType WHERE { ?context_subject rdf:type/rdfs:subClassOf* pv2:Context . ?context_subject rdf:type ?ContextType . } """, initNs=NSUtil.get_binding_namespaces()) # ns = dict(pv=Namespace("<https://ontology.hviidnet.com/2020/01/03/privacyvunl.ttl#>")) ro = inputModel_temp.query(q) used_contexts = {} for row in ro: used_contexts[row[0]] = row[1] return used_contexts
def find_all_data_creates_from_data_types(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) q = rdflib.plugins.sparql.prepareQuery( """ SELECT DISTINCT ?transformation ?datainput ?outputType WHERE { ?transformation pv2:creates ?output . ?output rdf:type ?outputType . ?datainput pv:feeds ?transformation . # ?datainput rdf:type ?datainput_type . # ?datainput_type rdf:type/rdfs:subClassOf pv:Data . ?outputType rdf:type/rdfs:subClassOf pv:Data . } """, initNs=NSUtil.get_binding_namespaces()) # ns = dict(pv=Namespace("<https://ontology.hviidnet.com/2020/01/03/privacyvunl.ttl#>")) ro = inputModel_temp.query(q) domain_data_found_using_data = {} for row in ro: if not row[1] in domain_data_found_using_data: domain_data_found_using_data[row[1]] = [] domain_data_found_using_data[row[1]].append(row[2]) return domain_data_found_using_data
def find_used_data_types(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) q = rdflib.plugins.sparql.prepareQuery( """ SELECT DISTINCT ?inputName ?individualData ?datatypes WHERE { ?individualData rdf:type owl:NamedIndividual . ?inputName rdf:type ?individualData . } """, initNs=NSUtil.get_binding_namespaces()) # ns = dict(pv=Namespace("<https://ontology.hviidnet.com/2020/01/03/privacyvunl.ttl#>")) ro = inputModel_temp.query(q) used_data_types = {} for row in ro: used_data_types[row[0]] = row[1] return used_data_types
def _find_spatial_resolution_for_transformation(self): transformation_temp = self.transformation transformation_temp.parse(self.domain_path) transformation_temp.parse(self.extention_ontology_path) transformation_temp.parse(self.base_ontology_path) q = rdflib.plugins.sparql.prepareQuery( """ SELECT ?data ?transformationName ?input ?output WHERE { ?dataTypes rdfs:subClassOf pv:Data . ?data rdf:type ?dataTypes . ?req pv:feeds ?data . ?req rdf:type pv2:Constraint . ?req pv:feeds ?transformationName . ?transformationName rdf:type pv:Transformation . ?srTypes rdf:type pv2:SpatialResolution . ?srTypes pv2:spatialInput ?input . ?srTypes pv2:spatialOutput ?output . ?req pv:feeds ?srTypes } """, initNs=NSUtil.get_binding_namespaces()) ro = transformation_temp.query( q) #, initBindings={'transformation': transformation_name} spatial_relations = {} for row in ro: if not row[0] in spatial_relations: spatial_relations[row[0]] = [] spatial_relations[row[0]].append( SpatialRelation(row[0], row[1], row[2], row[3])) return spatial_relations
def _find_output_for_template(self): model_temp = self.transformation model_temp.parse(self.domain_path) model_temp.parse(self.base_ontology_path) q = rdflib.plugins.sparql.prepareQuery( """ SELECT ?outputSubject ?dataType ?outputDataType WHERE { ?dataType rdfs:subClassOf pv:Data . ?outputSubject rdf:type ?dataType . ?transformationName rdf:type pv:Transformation . ?transformationName pv:feeds ?outputSubject . ?outputSubject rdf:type ?outputDataType . ?outputDataType rdf:type ?dataType . } """, initNs=NSUtil.get_binding_namespaces()) ro = model_temp.query(q) dataTypes = [] for row in ro: return row[0], row[1], row[2]
def find_all_input_data_old(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) q = rdflib.plugins.sparql.prepareQuery( """ SELECT DISTINCT ?context ?inputName ?individualData ?resolution ?templateCount ?context_type WHERE { ?individualData rdf:type owl:NamedIndividual . ?inputName rdf:type ?individualData . ?dataTypes rdfs:subClassOf pv:Data . ?inputName rdf:type ?dataTypes . ?context rdf:type/rdfs:subClassOf* pv2:Context . ?context pv2:has* ?directDataInputName . ?context rdf:type ?context_type . #Finds datatypes supported by domain ?directDataInputName pv:feeds* ?inputName . #Find transformation count for datainput if it is set OPTIONAL { ?inputName pv2:TemplateCount ?templateCount . }. OPTIONAL { ?inputName pv2:TemporalResolution ?resolution . } FILTER ( !bound(?templateCount) || ?templateCount < ?max_count ) } """, initNs=NSUtil.get_binding_namespaces() # , # initNs = {} ) ro = inputModel_temp.query( q, initBindings={'?max_count': self.max_transformation_count}) supported_data_types = {} for row in ro: if not row[0] in supported_data_types: supported_data_types[row[0]] = [] template_count = 0 if row[4] is None else int(row[4]) resolution = None if row[3] is None else float(row[3]) supported_data_types[row[0]].append( Data(row[2], resolution, subject_name=row[1], template_count=template_count, context=row[5], context_subject=row[0])) return supported_data_types
def find_contexts(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) ro = inputModel_temp.query(""" SELECT DISTINCT ?sub_class_subject WHERE { ?class_types rdfs:subClassOf* pv2:Context . ?sub_class_subject rdf:type ?class_types . } """, initNs=NSUtil.get_binding_namespaces()) contexts = [] for row in ro: contexts.append(row[0]) # import pdb; pdb.set_trace() return contexts
def _find_time_resolution_for_transformation(self): transformation_temp = self.transformation transformation_temp.parse(self.domain_path) transformation_temp.parse(self.extention_ontology_path) transformation_temp.parse(self.base_ontology_path) q = rdflib.plugins.sparql.prepareQuery( """ SELECT ?req ?data ?temporalResolution ?spatialResolution ?transformationName ?trTypes ?input ?output ?trName WHERE { ?dataTypes rdfs:subClassOf pv:Data . ?data rdf:type ?dataTypes . ?req pv:feeds ?data . ?req rdf:type pv2:Constraint . ?req pv2:TemporalResolution ?temporalResolution . # ?req pv2:SpatialResolution ?spatialResolution . ?req pv:feeds ?transformationName . ?transformationName rdf:type pv:Transformation . ?trTypes rdfs:subClassOf pv2:TimeResolution . ?trName rdf:type ?trTypes . ?trName pv2:TimeInput ?input . ?trName pv2:TimeOutput ?output . ?req pv:feeds ?trName } """, initNs=NSUtil.get_binding_namespaces()) ro = transformation_temp.query( q) #, initBindings={'transformation': transformation_name} dataTypes = [] for row in ro: dataTypes.append( ResolutionForTransformation(row[0], row[1], float(row[2].value), row[3], row[4], row[5], float(row[6].value), float(row[7].value), row[8])) return dataTypes
def find_all_data_types_for_domain_data(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) q = rdflib.plugins.sparql.prepareQuery( """ SELECT DISTINCT ?individualData ?inputName ?individualData_subData WHERE { ?individualData rdf:type owl:NamedIndividual . ?inputName rdf:type ?individualData . ?dataTypes rdfs:subClassOf pv:Data . ?inputName rdf:type ?dataTypes . ?individualData_subData rdf:type owl:NamedIndividual . ?inputName_subData rdf:type ?individualData_subData . ?dataTypes_subData rdfs:subClassOf pv:Data . ?inputName_subData rdf:type ?dataTypes_subData . ?inputName pv:feeds* ?feedsRelations . ?feedsRelations rdf:type ?individualData_subData . } """, initNs=NSUtil.get_binding_namespaces()) # ns = dict(pv=Namespace("<https://ontology.hviidnet.com/2020/01/03/privacyvunl.ttl#>")) ro = inputModel_temp.query(q) domain_data_found_using_data = {} for row in ro: if not row[1] in domain_data_found_using_data: domain_data_found_using_data[row[1]] = [] domain_data_found_using_data[row[1]].append(row[2]) return domain_data_found_using_data
def _find_domain_supported_data_streams(self): #all inputs needs to be in the inputModel in order to use the template. model = Graph() #Load domain ontology model.parse(self.domain_path) #Load base ontology model.parse(self.base_ontology_path) ro = model.query(""" SELECT ?data WHERE { ?dataTypes rdfs:subClassOf pv:Data . ?data rdf:type ?dataTypes . } """, initNs=NSUtil.get_binding_namespaces()) dataTypes = [] for row in ro: dataTypes.append(row[0]) return dataTypes
def __find_domain_supported_contexts(self): model = Graph() model.parse(self.domain_path) q = rdflib.plugins.sparql.prepareQuery(""" SELECT ?individualData WHERE { ?individualData rdfs:subClassOf* pv2:Context . } """, initNs = NSUtil.get_binding_namespaces() # , # initNs = {} ) ro = model.query(q) supported_contexts = [] for row in ro: supported_contexts.append(row[0]) return supported_contexts
def _find_output_for_template(self): model_temp = self.privacy_attack model_temp.parse(self.domain_path) model_temp.parse(self.base_ontology_path) # import pdb; pdb.set_trace() q = rdflib.plugins.sparql.prepareQuery(""" SELECT ?templateSubject ?outputSubject ?description ?privacyRiskScore ?privacyStrategy WHERE { ?templateSubject rdf:type pv:PrivacyAttack . ?templateSubject pv:creates ?outputSubject . ?outputSubject rdf:type pv:PrivacyRisk . OPTIONAL { ?outputSubject pv2:description ?description . } . OPTIONAL { ?outputSubject pv2:privacyRiskScore ?privacyRiskScore . } OPTIONAL { ?outputSubject pv2:privacyStrategy ?privacyStrategy . } } """, initNs = NSUtil.get_binding_namespaces() ) ro = model_temp.query(q) privacyStrategies = [] for row in ro: privacy_risk_score = 1 if row[3] is not None: privacy_risk_score = row[3].value if row[4] is not None: privacyStrategies.append(row[4].value) if row is not None: return row[0], self.PRIVVULN.PrivacyRisk, row[1], row[2], privacy_risk_score, privacyStrategies
def find_context_structure(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) ro = inputModel_temp.query(""" SELECT ?sub_class_types ?sub_class_subject ?root_type ?root_subject WHERE { ?root_subject rdf:type ?root_type . ?root_subject pv:star ?sub_class_subject . ?sub_class_types rdfs:subClassOf* pv2:Context . ?sub_class_subject rdf:type ?sub_class_types . } """, initNs=NSUtil.get_binding_namespaces()) contexts = {} for row in ro: contexts[row[1]] = ContextInput(row[0], row[1], row[2], row[3]) return contexts
def _find_context_roots(self,input_model): input_model_temp = copy.deepcopy(input_model) input_model_temp.parse(self.domain_path) input_model_temp.parse(self.extention_ontology_path) input_model_temp.parse(self.base_ontology_path) q = rdflib.plugins.sparql.prepareQuery(""" SELECT ?context WHERE { ?context rdf:type/rdfs:subClassOf* pv2:Context . FILTER NOT EXISTS { ?subject pv2:star ?context} } """, initNs = NSUtil.get_binding_namespaces() ) ro = input_model_temp.query(q) context_roots = [] for row in ro: context_roots.append(row[0]) return context_roots
def find_all_domain_types_from_input_data_old(self, inputModel): inputModel_temp = copy.deepcopy(inputModel) inputModel_temp.parse(self.domain_url) inputModel_temp.parse(self.extention_ontology_url) inputModel_temp.parse(self.base_ontology_url) q = rdflib.plugins.sparql.prepareQuery( """ # SELECT DISTINCT ?inputName ?individualData ?inputName_subData ?individualData_subData ?templateCount ?resolution ?context ?contextType SELECT DISTINCT ?inputName ?individualData ?inputName_subData ?individualData_subData ?templateCount ?resolution ?context ?contextType WHERE { ?individualData rdf:type owl:NamedIndividual . ?inputName rdf:type ?individualData . ?inputName rdf:type/rdfs:subClassOf pv:Data . # ?inputName rdf:type ?dataTypes . ?individualData_subData rdf:type owl:NamedIndividual . ?inputName_subData rdf:type ?individualData_subData . ?dataTypes_subData rdfs:subClassOf pv:Data . ?inputName_subData rdf:type ?dataTypes_subData . ?inputName pv:feeds* ?inputName_subData . ?context pv2:has ?inputName . ?context rdf:type/rdfs:subClassOf* pv2:Context . ?context rdf:type ?contextType . #Find transformation count for datainput if it is set OPTIONAL { ?inputName_subData pv2:TemplateCount ?templateCount . }. OPTIONAL { ?inputName_subData pv2:TemporalResolution ?resolution . } FILTER ( !bound(?templateCount) || ?templateCount < ?max_count ) } """, initNs=NSUtil.get_binding_namespaces()) seconds = time.time() ro = inputModel_temp.query( q, initBindings={'?max_count': self.max_transformation_count}) domain_data_found_using_data = {} for row in ro: print("Loop:", time.time() - seconds) if not row[6] in domain_data_found_using_data: domain_data_found_using_data[row[6]] = {} if not row[1] in domain_data_found_using_data[row[6]]: domain_data_found_using_data[row[6]][row[1]] = [] template_count = 0 if row[4] is None else int(row[4]) resolution = None if row[5] is None else float(row[5]) domain_data_found_using_data[row[6]][row[1]].append( Data(row[3], resolution, subject_name=row[2], template_count=template_count, base_subject_name=row[0], spatial_resolutions=row[7])) # domain_data_found_using_data[row[1]].append(row[2]) return domain_data_found_using_data