Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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]
Esempio n. 6
0
    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
Esempio n. 8
0
    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
Esempio n. 9
0
    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
Esempio n. 10
0
    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
Esempio n. 13
0
    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
Esempio n. 15
0
    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