# Auto-generated AIR chaining policy.
# Policy is default non-compliant. Patterns assert compliance.

@prefix air: <http://dig.csail.mit.edu/TAMI/2007/amord/air#>.
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix math: <http://www.w3.org/2000/10/swap/math#>.
@prefix s: <http://dig.csail.mit.edu/2009/IARPA-PIR/sparql#>.
@prefix : <>.

# User-defined namespaces:
@prefix example: <http://www.example.com/#> .

@forAll :P, :Q, :T, :U, :V, :W.

:sample-chaining a air:Policy;
    air:label "A sample auto-generated default-noncompliant chaining policy.";
    air:rule :sample-chaining-check.
        
:sample-chaining-check a air:BeliefRule;
    air:label "sample-chaining query check";
    air:pattern {
        :Q a s:SPARQLQuery;
           s:retrieve :P;
           s:clause :W.
    };
    air:description ("Make sure this is a query.");
    # Goes to the first rule. If there are no attributes,
    # simply go to the default rule.
    air:rule :sample-chaining-rule-0.

:sample-chaining-rule-0 a air:BeliefRule;
    air:label "sample-chaining example:name presence check";
    air:pattern {
    # if RETRIEVE, or alternately, not USE
        :P s:var :V;
        :W s:triplePattern :T;
        :T log:includes { [] example:name :V } .
        };
    air:description ("Chaining has found the first pattern RETRIEVE in " :T );
    air:rule :sample-chaining-rule-1;
    air:alt [ air:rule :sample-chaining-default ] .
    
:sample-chaining-rule-1 a air:BeliefRule;
    air:label "sample-chaining example:age presence check";
    air:pattern {
    # if USE
        :W s:triplePattern :T;
        :T log:includes { [] example:age :V };
        :W s:triplePattern :U;
        :U log:includes { :V [] [] }.
        };
    air:description ("A restriction on the USE of example:age, violated by " :T );
    air:assert { :Q air:compliant-with :sample-chaining } ;
    # There are more policies, go to the next policy.
    air:alt [ air:rule :sample-chaining-rule-2 ] .
        
:sample-chaining-rule-2 a air:BeliefRule;
    air:label "sample-chaining example:dob presence check";
    air:pattern {
    # if RETRIEVE, or alternately, not USE
        :P s:var :V;
        :W s:triplePattern :T;
        :T log:includes { [] example:dob :V } .
        };
    air:description ("A restriction on the RETRIEVE of example:dob, violated by " :T );
    air:assert { :Q air:compliant-with :sample-chaining } ;
    # There are more policies, go to the next policy.
    air:alt [ air:rule :sample-chaining-rule-3 ] .
        
:sample-chaining-rule-3 a air:BeliefRule;
    air:label "sample-chaining example:ssn presence check";
    air:pattern {
    # if USE
        :W s:triplePattern :T;
        :T log:includes { [] example:ssn :V };
        :W s:triplePattern :U;
        :U log:includes { :V [] [] }.
        };
    air:description ("A restriction on the USE of example:ssn, violated by " :T );
    air:assert { :Q air:compliant-with :sample-chaining } ;
    # Not done yet! There is at least one filter to check.
    air:alt [ air:rule :sample-chaining-filter-0 ] .

:sample-chaining-filter-0 a air:BeliefRule;
    air:label "sample-chaining filter check";
    air:pattern {
         # Test for the filter.
        :W s:triplePattern :T;
        :T log:includes { [] example:age :V };
        :V math:lessThan 1991.
        };
    air:description ("A filter of the form (example:age math:lessThan 1991), matched in " :T );
    air:assert { :Q air:compliant-with :sample-chaining } ;
    # There are more filters, go to the next policy.
    air:alt [ air:rule :sample-chaining-filter-1 ] .
        
:sample-chaining-filter-1 a air:BeliefRule;
    air:label "sample-chaining filter check";
    air:pattern {
         # Test for the filter.
        :W s:triplePattern :T;
        :T log:includes { [] example:age :V };
        :V math:greaterThan 18.
        };
    air:description ("A filter of the form (example:age math:greaterThan 18), matched in " :T );
    air:assert { :Q air:compliant-with :sample-chaining } ;
    # No more filters, go to the default case.
    air:alt [ air:rule :sample-chaining-default ] .

:sample-chaining-default a air:BeliefRule;
    air:label "sample-chaining default rule";
    air:pattern { # Empty search.
        };
    air:description ("No restricted attributes found.");
    air:assert { :Q air:non-compliant-with :sample-chaining } ;
#ends
