class RdfInference

Public Class Methods

new() click to toggle source
# File lib/rdf_inference.rb, line 8
def initialize
        prefix = "PREFIX rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
        PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>
        PREFIX wdc:    <http://vieslav.pl/csv/0.1/>
        PREFIX owl:  <http://www.w3.org/2002/07/owl#> \n"
        @query_list = {}

        @query_list[:subClassOf] = prefix + "CONSTRUCT {?r rdf:type ?B .}  
        WHERE { ?A rdfs:subClassOf ?B .
        ?r rdf:type ?A .
        FILTER NOT EXISTS {?r rdf:type ?B}
        }" 
        @query_list[:subPropertyOf] = prefix + "CONSTRUCT {?x ?r ?y .
        [ rdf:subject ?x;
        rdf:predicate ?r;
        rdf:object ?y ] a wdc:DerivationRelationship .}  
        WHERE { 
        ?q rdfs:subPropertyOf ?r .
        ?x ?q ?y .
        
        FILTER NOT EXISTS {?x ?r ?y }
        }"
        @query_list[:RDFS_Plus_TransitiveProperty] = prefix + "CONSTRUCT {?x ?p ?z .
        [ rdf:subject ?x;
        rdf:predicate ?p;
        rdf:object ?z ] a wdc:DerivationRelationship .}  
        WHERE { 
        ?p rdf:type owl:TransitiveProperty .
        ?x ?p ?y .
        ?y ?p ?z .
        
        FILTER NOT EXISTS {?x ?p ?z }
        }"

        @query_list[:WIDU_shortCut] = prefix + "CONSTRUCT {?x ?p ?z .
        [ rdf:subject ?x;
        rdf:predicate ?r;
        rdf:object ?y ] a wdc:DerivationRelationship .}  
        WHERE { 
        ?class1 wdc:shortCut ?class3.
        ?x a ?class1 .
        ?y a ?class2 .
        ?z a ?class3 .
        ?x ?p ?y .
        ?y ?p ?z .
        
        FILTER NOT EXISTS { ?x ?p ?z }
        FILTER NOT EXISTS { ?y a ?class1 }
        FILTER NOT EXISTS { ?y a ?class3 }
        }"

        @query_list[:WIDU_isWeakerThan1] = prefix + "CONSTRUCT {?x ?p ?z .
        [ rdf:subject ?x;
        rdf:predicate ?p;
        rdf:object ?z ] a wdc:DerivationRelationship .}  
        WHERE { 
        ?p wdc:isWeakerThan ?p2 .
        ?x ?p ?y .
        ?y ?p2 ?z .
        
        FILTER NOT EXISTS { ?x ?p ?z }
        
        }"


        @query_list[:WIDU_isWeakerThan2] = prefix + "CONSTRUCT {?x ?p2 ?z .
        [ rdf:subject ?x;
        rdf:predicate ?p2;
        rdf:object ?z ] a wdc:DerivationRelationship .}  
        WHERE { 
        ?p2 wdc:isWeakerThan ?p .     
        ?x ?p ?y .
        ?y ?p2 ?z .
        
        FILTER NOT EXISTS { ?x ?p2 ?z }
        
        }"



        @query_list[:RDFS_Plus_inverseOf9] = prefix + "CONSTRUCT {?y ?q ?x .
        [ rdf:subject ?x;
        rdf:predicate ?r;
        rdf:object ?y ] a wdc:DerivationRelationship .}  
        WHERE { 
        ?p owl:inverseOf ?q .
        ?x ?p ?y .
        FILTER (?p != owl:inverseOf)
        FILTER NOT EXISTS { ?y ?q ?x }
        }"

        @query_list[:RDFS_domain] = prefix + "CONSTRUCT {?x rdf:type ?D .}  
        WHERE { ?P rdfs:domain ?D .
        ?x ?P ?y .
        FILTER NOT EXISTS { ?x rdf:type ?D }
        }"

        @query_list[:RDFS_range] = prefix + "CONSTRUCT {?y rdf:type ?D .}  
        WHERE { ?P rdfs:range ?D .
        ?x ?P ?y .
        FILTER NOT EXISTS { ?y rdf:type ?D }
        }"

end

Public Instance Methods

inference(graph) click to toggle source
# File lib/rdf_inference.rb, line 113
def inference(graph)
        @rdfs_inferred = RDF::Repository.new
        @rdfs_inferred_all = RDF::Repository.new
        begin
                @rdfs_inferred = RDF::Repository.new
                @query_list.each do |klucz, query|
                        puts klucz
                        @rdfs_inferred << SPARQL.execute(query, graph)
                end
                graph << @rdfs_inferred
                @rdfs_inferred_all << @rdfs_inferred
                puts "Inference count:"
                puts @rdfs_inferred.count
        end    until @rdfs_inferred.count == 0
        puts "Inference count all:"
        puts @rdfs_inferred_all.count
        @rdfs_inferred_all
end