@keywords is, of, a.

@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix : <http://dig.csail.mit.edu/2005/09/rein/network#> .

# Rein policy networks

<> rdfs:comment "Describes properties and classes used to define Rein policy networks".

# a resource has one or more policies that define access to it
:policy a rdf:Property;
	rdfs:comment "It is a property that associates a resource with its policies".

# every policy uses one or more policy languages to describe its rules
:policy-language a rdf:Property;
	rdfs:comment "It is a property that allows a policy to refer to the policy languages it uses".
	
# every policy-language has 1 or more sets of meta-policies that are used to
# resolve conflicts, set defaults, etc.
:meta-policy a rdf:Property;
	rdfs:comment "A policy language can have one or more meta policies for resolving conflicts, setting defaults, etc".

# a Request is used to check whether a certain
# access is valid
:Request a rdfs:Class;
	rdfs:comment "Request class is used to define a request for a resource in Rein".

:requester a rdf:Property;
        rdfs:domain :Request;
	rdfs:comment "authentication properties of the requester of the request".

:resource a rdf:Property;
        rdfs:domain :Request;
	rdfs:comment "URI resource being requested".

:access a rdf:Property;
        rdfs:domain :Request;
	rdfs:comment "method of access".

:ans a rdf:Property;
	rdfs:range :Ans;
        rdfs:domain :Request;
	rdfs:comment "Is the request valid ? ".

:Ans a rdfs:Class.
:Valid a :TrueOrFalse.
:Invalid a :TrueOrFalse.

# semantics of policy-language
@forAll RESOURCE, POLICY, LANG, META.
{ RESOURCE :policy POLICY. 
  POLICY.log:semantics log:includes { POLICY :policy-language LANG } 
} => {  POLICY :policy-language LANG }.

# semantics of meta-policy
{ RESOURCE :policy POLICY.
  POLICY.log:semantics log:includes { POLICY :policy-language LANG }.
  LANG.log:semantics log:includes { LANG :meta-policy META } 
} => { LANG :meta-policy META }.

#ends

