@prefix :      <http://purl.org/reco#> .
@prefix dc:    <http://purl.org/dc/elements/1.1/> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl2xml: <http://www.w3.org/2006/12/owl2-xml#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix reco:  <http://purl.org/reco#> .
@prefix dct:   <http://purl.org/dc/terms/> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix wai:   <http://purl.org/wai#> .

reco:union  a         owl:ObjectProperty ;
        rdfs:comment  "A property which reifies a disjunction of constraints."@en ;
        rdfs:domain   reco:Pattern ;
        rdfs:label    "Union composition"@en ;
        rdfs:range    reco:Filter .

reco:utility  a       owl:DatatypeProperty ;
        rdfs:comment  "This property captures the utility value of a rating. The utility in RECO is measured in the real interval [-1,1]. In practice, other discrete scales can be also used to measure users' opinions on resources, such as the Likert scale. "@en ;
        rdfs:domain   reco:Preference ;
        rdfs:label    "Utility"@en ;
        rdfs:range    xsd:float .

reco:excludedPreference
        a                   owl:ObjectProperty ;
        rdfs:comment        "This property relates a demand with a particular preference P. The items that fulfill the constraints of P are excluded from the set of results calculated for this demand."@en ;
        rdfs:domain         reco:Demand ;
        rdfs:label          "Excluded Preference"@en ;
        rdfs:range          reco:Preference ;
        rdfs:subPropertyOf  reco:preference .

reco:holds  a         owl:ObjectProperty ;
        rdfs:comment  "This property relates a person with a preference."@en ;
        rdfs:domain   [ a            owl:Class ;
                        owl:unionOf  ( wai:Profile wai:Role foaf:Agent foaf:Group )
                      ] ;
        rdfs:label    "Holds"@en ;
        rdfs:range    reco:Preference .

reco:preference  a    owl:ObjectProperty ;
        rdfs:comment  "This property relates a demand with the set of preferences that defines its matchmaking conditions. "@en ;
        rdfs:domain   reco:Demand ;
        rdfs:label    "Preference"@en ;
        rdfs:range    reco:Preference .

reco:requiredPreference
        a                   owl:ObjectProperty ;
        rdfs:comment        "This property relates a demand with a preference P. The items fulfilling the constraints of P must be included in the final set of results for this demand."@en ;
        rdfs:domain         reco:Demand ;
        rdfs:label          "Required Preference"@en ;
        rdfs:range          reco:Preference ;
        rdfs:subPropertyOf  reco:preference .

reco:Demand  a           owl:Class ;
        rdfs:comment     "Groups of preferences representing users' requests at a given context or situation."@en ;
        rdfs:label       "Demand"@en ;
        rdfs:subClassOf  owl:Thing .

reco:filter  a        owl:ObjectProperty ;
        rdfs:comment  "A property that relates a pattern with a constraint of the value of a datatype property. For instance, \"less than 180 cms height\" or \"released before 1980\"."@en ;
        rdfs:domain   reco:Pattern ;
        rdfs:label    "Filter"@en ;
        rdfs:range    reco:Filter .

reco:about  a         owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment  "A property that relates a preference with its main pattern."@en ;
        rdfs:domain   reco:Preference ;
        rdfs:label    "About"@en ;
        rdfs:range    reco:Pattern .

reco:Rating  a        owl:Class ;
        rdfs:comment  "A rating is a quantitative measurement of the \"appealingness\" of a particular item to a user."@en ;
        rdfs:label    "Rating"@en .

reco:operator  a      owl:FunctionalProperty , owl:ObjectProperty ;
        rdfs:comment  "A property that relates a filter to the operator restraining the value of a datatype property."@en ;
        rdfs:domain   reco:Filter ;
        rdfs:label    "Operator"@en ;
        rdfs:range    reco:Operator .

reco:assignedBy  a    owl:ObjectProperty ;
        rdfs:comment  "This property relates a rating with the person having carried out it."@en ;
        rdfs:domain   reco:Rating ;
        rdfs:label    "Assigned by"@en ;
        rdfs:range    [ a            owl:Class ;
                        owl:unionOf  ( wai:Profile wai:Role foaf:Agent foaf:Group )
                      ] .

reco:Operator  a      owl:Class ;
        rdfs:comment  "Boolean operations on data values: string comparisons, numerical intervales and (in)equality. Operators are reused from the X-path specification to ensure interoperability."@en ;
        rdfs:label    "Operator"@en .

reco:Pattern  a       owl:Class ;
        rdfs:comment  "Patterns are reifications of constraints, which are conditions about the desired or preferred attributes of the resources. A constraint ranges over a set of individuals. RECO considers several kind of constraint expressions: (1) conjunction of constraints: \"music from the sixties\"; (2) disjunction of constraints: \"music or films\"; (3) composition of constraints: \"cars with powerful engines\"; (4) datatype constraints based on boolean operators: \"released before 1980\"."@en ;
        rdfs:label    "Pattern"@en .

reco:Preference  a       owl:Class ;
        rdfs:comment     "A preference is a qualitative description of the desired attributes that resources must ideally satisfy in order to be of interest for a user. A preference is described by a set of constraints."@en ;
        rdfs:label       "Preference"@en ;
        rdfs:subClassOf  owl:Thing .

reco:Filter  a        owl:Class ;
        rdfs:comment  "A datatype constraint based on boolean operators."@en ;
        rdfs:label    "Filter"@en .

reco:   a                 owl:Ontology ;
        rdfs:isDefinedBy  reco:reco.owl ;
        dc:contributor    "Diego Berrueta (Fundación CTIC)" , "Emilio Rubiera (Fundación CTIC)" , "Carlos Ruiz (iSOCO S.A.)" ;
        dc:creator        "Luis Polo (Fundación CTIC)" , "Iván Mínguez (Fundación CTIC)" ;
        dc:date           "August, 2011"@en ;
        dc:description    "The RECO ontology defines the vocabulary for representing prefereces-as-constraints and preferences-as-ratings as RDF graphs. This lightweight vocabulary provides domain-independent means to describe user profiles in a coherent and context-aware way. RECO has been designed as an extension of both Friend-Of-A-Friend (FOAF) and Who Am I! (WAI) ontologies."@en ;
        dc:rights         "Copyright by Fundación CTIC" ;
        dc:title          "RECommendations Ontology"@en ;
        dct:license       <http://creativecommons.org/licenses/by-sa/3.0/> ;
        owl:priorVersion  <http://ontologies.ezweb.morfeo-project.org/reco/spec/> .

reco:optionalPreference
        a                   owl:ObjectProperty ;
        rdfs:comment        "This property relates a demand to a preference P. The items that fulfill the constraints of P increase or decline their utility value according to the utility of P."@en ;
        rdfs:domain         reco:Demand ;
        rdfs:label          "Optional Preference"@en ;
        rdfs:range          reco:Preference ;
        rdfs:subPropertyOf  reco:preference .

reco:rates  a         owl:ObjectProperty ;
        rdfs:comment  "This property relates a rating with the resource assessed. Notice that this property has an open range (rdfs:Resource), therefore ratings can be applied to anything, including preferences themselves."@en ;
        rdfs:domain   reco:Rating ;
        rdfs:label    "Rates"@en .
