@prefix : <https://ontology.inferal.com/modules/sets/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mod: <https://w3id.org/mod#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pubacc: <https://ontology.inferal.com/modules/publication-access/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

:
    a owl:Ontology, pubacc:PublicationManagedOntology ;
    dcterms:accessRights pubacc:PublicAccess ;
    dcterms:title "Sets Ontology" ;
    dcterms:description "Terms for classical RDF-resource sets and explicit membership occurrences." ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    vann:preferredNamespacePrefix "set" ;
    vann:preferredNamespaceUri "https://ontology.inferal.com/modules/sets/" ;
    mod:status "draft" ;
    rdfs:comment "This module provides a small vocabulary for sets whose members are RDF resources. Membership is modeled as a first-class occurrence so other modules can specialize it for incidence, endpoint roles, ordering, provenance, and validation." ;
    owl:versionInfo "0.1.0" .

:Set
    a rdfs:Class ;
    rdfs:label "set" ;
    rdfs:comment "A classical set of RDF resources. A conforming set has at most one membership occurrence for any given member resource." .

:Membership
    a rdfs:Class ;
    rdfs:label "membership" ;
    rdfs:comment "A first-class occurrence connecting exactly one set to exactly one member resource." .

:hasMembership
    a rdf:Property ;
    rdfs:label "has membership" ;
    rdfs:comment "Connects a set to a membership occurrence for one of its member resources." ;
    rdfs:domain :Set ;
    rdfs:range :Membership .

:inSet
    a rdf:Property ;
    rdfs:label "in set" ;
    rdfs:comment "Connects a membership occurrence to the set in which it occurs." ;
    rdfs:domain :Membership ;
    rdfs:range :Set .

:member
    a rdf:Property ;
    rdfs:label "member" ;
    rdfs:comment "Connects a membership occurrence to the RDF resource that is a member of the set." ;
    rdfs:domain :Membership ;
    rdfs:range rdfs:Resource .

:hasMember
    a rdf:Property ;
    rdfs:label "has member" ;
    rdfs:comment "Direct relation from a set to a member resource. It may be asserted by producers, materialized by SPARQL, or inferred from Membership occurrences by the OWL property chain on this property. When asserted directly, it should agree with explicit membership occurrences." ;
    rdfs:domain :Set ;
    rdfs:range rdfs:Resource .

:cardinality
    a rdf:Property ;
    rdfs:label "cardinality" ;
    rdfs:comment "Optional asserted number of explicit membership occurrences in a finite set. Validation can compare this value with explicit membership occurrences when the data graph is complete." ;
    rdfs:domain :Set ;
    rdfs:range xsd:integer .
