<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rdf:RDF [
         <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
         <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
         <!ENTITY owl 'http://www.w3.org/2002/07/owl#'>
         <!ENTITY policy 'http://www.cs.umbc.edu/~lkagal1/rei/ontologies/ReiPolicy.owl#'>
         <!ENTITY action 'http://www.cs.umbc.edu/~lkagal1/rei/ontologies/ReiAction.owl#'>
         <!ENTITY constraint 'http://www.cs.umbc.edu/~lkagal1/rei/ontologies/ReiConstraint.owl#'>
         <!ENTITY deontic 'http://www.cs.umbc.edu/~lkagal1/rei/ontologies/ReiDeontic.owl#'>
         <!ENTITY entity 'http://www.cs.umbc.edu/~lkagal1/rei/ontologies/ReiEntity.owl#'>
         <!ENTITY dso 'http://www.dspace.org/objectModel#'>
         <!ENTITY dsr 'http://www.dspace.org/rules.rdfs#'>
         <!ENTITY inst 'http://www.dspace.org/instances.rdf#'>
         <!ENTITY history 'http://www.dspace.org/history#'>
         ]>
         
<rdf:RDF xmlns:rdf="&rdf;"
             xmlns:rdfs="&rdfs;"
             xmlns:owl="&owl;"
             xmlns:policy="&policy;"
             xmlns:action="&action;"
             xmlns:constraint="&constraint;"
             xmlns:deontic="&deontic;"
             xmlns:entity="&entity;"
             xmlns:dso="&dso;"
             xmlns:dsr="&dsr;"
             xmlns:inst="&inst;"
             xmlns:history="&history;"
               xml:base="http://www.dspace.org/instances.rdf#">
             
    <!-- CU-0008 Content Access
        
        Actual DSpace@MIT Policy Examples Expressed:
        
        1. For each [DSpace Item],
            there exists at least [one version]
            that <DSpace> makes available to the <MIT Community>,
            unless a [sponsor's contract] prohibits availability
            for a [fixed amount of time],
            or availability is blocked
            for [a period of time no greater than one year]. -->
    
    <entity:Variable rdf:ID="var1" policy:desc="An ePerson"/>
    
    <entity:Variable rdf:ID="var2" policy:desc="A DSpace Item"/>
    
    <entity:Variable rdf:ID="var3" policy:desc="Version of Item Available to MIT Community"/>
    
    <entity:Variable rdf:ID="var4" policy:desc="Sponsor Prohibition"/>
    
    <entity:Variable rdf:ID="var5" policy:desc="Blocked Availability"/>
        
    <!-- Each DSpace Item -->
    <constraint:SimpleConstraint rdf:ID="IsDSpaceItem">
        <constraint:subject rdf:resource="#var2"/>
        <constraint:predicate rdf:resource="&rdf;type"/>
        <constraint:object rdf:resource="&dso;Item"/>
        <policy:desc>All DSpace Items</policy:desc>
    </constraint:SimpleConstraint>
    
    <!-- Available Version -->
    <constraint:SimpleConstraint rdf:ID="IsVersion">
        <constraint:subject rdf:resource="#var3"/>
        <constraint:predicate rdf:resource="&dsr;isVersionOf"/>
        <constraint:object rdf:resource="#var2"/>
    </constraint:SimpleConstraint>
       
    <constraint:SimpleConstraint rdf:ID="IsMITCommunityMember">
        <constraint:subject rdf:resource="var1"/>
        <constraint:predicate rdf:resource="&rdf;type"/>
        <constraint:object rdf:resource="&dsr;MIT_User"/>
    </constraint:SimpleConstraint>
    
    <constraint:Not rdf:ID="NoSponsorProhibition">
        <constraint:subject rdf:resource="#var3"/>
        <constraint:predicate rdf:resource="&dsr;hasSponsorProhibition"/>
        <constraint:object rdf:resource="#var4"/>
    </constraint:Not>

    <constraint:Not rdf:ID="NoBlockedAvailability">
        <constraint:subject rdf:resource="#var3"/>
        <constraint:predicate rdf:resource="&dsr;hasBlockedAvailability"/>
        <constraint:object rdf:resource="#var5"/>
    </constraint:Not>
    
    <constraint:And rdf:ID="NoRestrictionsOnAvailability">
        <constraint:first rdf:resource="#NoSponsorProhibition"/>
        <constraint:second rdf:resource="#NoBlockedAvailability"/>
    </constraint:And>
    
    <constraint:And rdf:ID="IsMITAvailable">
        <constraint:first rdf:resource="#IsVersionOf"/>
        <constraint:second rdf:resource="#NoRestrictionOnAvailability"/>
    </constraint:And>
        
    <dsr:AccessingMITAvailableVersion rdf:ID="AccessMITAvailableVersion">
        <action:actor rdf:resource="#var1"/>
        <action:target rdf:resource="#var3"/>
    </dsr:AccessingMITAvailableVersion>
    
    <dsr:HavingVersion rdf:ID="HasMITAvailableVersion">
        <action:actor rdf:resource="#var2"/>
        <action:target rdf:resource="#var3"/>
    </dsr:HavingVersion>
        
    <deontic:Obligation rdf:ID="HaveMITAvailableVersion">
        <deontic:actor rdf:resource="#var2"/>
        <deontic:action rdf:resource="#HasMITAvailableVersion"/>
        <deontic:constraint rdf:resource="#IsMITAvailable"/>
    </deontic:Obligation>
    
    <deontic:Permission rdf:ID="VersionAccess" policy:desc="Members of MIT Community can access available version unless prohibited by sponsor's contract or blocked availability.">
        <deontic:actor rdf:resource="#var1"/>
        <deontic:action rdf:resource="#AccessMITAvailableVersion"/>
        <deontic:constraint rdf:resource="#IsMITAvailable"/>
    </deontic:Permission>
    
    <policy:Policy rdf:ID="CU0008ContentAccess">
        <policy:actor rdf:resource="#var2"/>
        <policy:context rdf:resource="#IsDSpaceItem"/>
        <policy:grants rdf:resource="#HaveMITAvailableVersion"/>
        <policy:grants rdf:resource="#Granting_VersionAccess"/>
    </policy:Policy>
    
    <policy:Granting rdf:ID="Granting_VersionAccess">
        <policy:to rdf:resource="#var1"/>
        <policy:deontic rdf:resource="#VersionAccess"/>
        <policy:requirement rdf:resource="#IsMITCommunityMember"/>
    </policy:Granting>
    
</rdf:RDF>
