@prefix : <https://ontology.inferal.com/modules/hypergraphs/> .
@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 set: <https://ontology.inferal.com/modules/sets/> .
@prefix vann: <http://purl.org/vocab/vann/> .

:
    a owl:Ontology, pubacc:PublicationManagedOntology ;
    dcterms:accessRights pubacc:PublicAccess ;
    owl:imports set: ;
    dcterms:title "Hypergraphs Ontology" ;
    dcterms:description "Terms for hypergraphs, vertices, hyperedges, and incidence occurrences." ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:source set: ;
    vann:preferredNamespacePrefix "hg" ;
    vann:preferredNamespaceUri "https://ontology.inferal.com/modules/hypergraphs/" ;
    mod:status "draft" ;
    rdfs:comment "This module models a hypergraph as a resource with a vertex set and a set of hyperedges. Each hyperedge is a set whose membership occurrences are incidences connecting the hyperedge to its vertices." ;
    owl:versionInfo "0.1.0" .

:Hypergraph
    a rdfs:Class ;
    rdfs:subClassOf set:Set ;
    rdfs:label "hypergraph" ;
    rdfs:comment "A set-like graph structure with vertices and hyperedges, where each hyperedge can be incident with zero or more vertices." .

:Vertex
    a rdfs:Class ;
    rdfs:label "vertex" ;
    rdfs:comment "A resource that can participate in hyperedges through incidence occurrences." .

:Hyperedge
    a rdfs:Class ;
    rdfs:subClassOf set:Set ;
    rdfs:label "hyperedge" ;
    rdfs:comment "A set-like edge resource whose members are vertices represented through incidence occurrences." .

:Incidence
    a rdfs:Class ;
    rdfs:subClassOf set:Membership ;
    rdfs:label "incidence" ;
    rdfs:comment "A first-class occurrence connecting exactly one hyperedge to exactly one incident vertex." .

:HyperedgeMembership
    a rdfs:Class ;
    rdfs:subClassOf set:Membership ;
    rdfs:label "hyperedge membership" ;
    rdfs:comment "A first-class occurrence connecting exactly one hypergraph to exactly one hyperedge contained in that hypergraph." .

:hasVertex
    a rdf:Property ;
    rdfs:label "has vertex" ;
    rdfs:comment "Connects a hypergraph to a vertex in its vertex set." ;
    rdfs:domain :Hypergraph ;
    rdfs:range :Vertex .

:vertexInHypergraph
    a rdf:Property ;
    rdfs:label "vertex in hypergraph" ;
    rdfs:comment "Connects a vertex to a hypergraph in which it is available as a vertex." ;
    rdfs:domain :Vertex ;
    rdfs:range :Hypergraph .

:hasHyperedge
    a rdf:Property ;
    rdfs:subPropertyOf set:hasMember ;
    rdfs:label "has hyperedge" ;
    rdfs:comment "Connects a hypergraph to one of its hyperedges." ;
    rdfs:domain :Hypergraph ;
    rdfs:range :Hyperedge .

:edgeInHypergraph
    a rdf:Property ;
    rdfs:label "edge in hypergraph" ;
    rdfs:comment "Connects a hyperedge to a hypergraph that contains it." ;
    rdfs:domain :Hyperedge ;
    rdfs:range :Hypergraph .

:hasHyperedgeMembership
    a rdf:Property ;
    rdfs:subPropertyOf set:hasMembership ;
    rdfs:label "has hyperedge membership" ;
    rdfs:comment "Connects a hypergraph to a membership occurrence for one of its contained hyperedges." ;
    rdfs:domain :Hypergraph ;
    rdfs:range :HyperedgeMembership .

:membershipHypergraph
    a rdf:Property ;
    rdfs:subPropertyOf set:inSet ;
    rdfs:label "membership hypergraph" ;
    rdfs:comment "Connects a hyperedge membership occurrence to the hypergraph in which it occurs." ;
    rdfs:domain :HyperedgeMembership ;
    rdfs:range :Hypergraph .

:membershipHyperedge
    a rdf:Property ;
    rdfs:subPropertyOf set:member ;
    rdfs:label "membership hyperedge" ;
    rdfs:comment "Connects a hyperedge membership occurrence to the hyperedge that is a member of the hypergraph." ;
    rdfs:domain :HyperedgeMembership ;
    rdfs:range :Hyperedge .

:hasIncidence
    a rdf:Property ;
    rdfs:subPropertyOf set:hasMembership ;
    rdfs:label "has incidence" ;
    rdfs:comment "Connects a hyperedge to an incidence occurrence for one of its incident vertices." ;
    rdfs:domain :Hyperedge ;
    rdfs:range :Incidence .

:incidentEdge
    a rdf:Property ;
    rdfs:subPropertyOf set:inSet ;
    rdfs:label "incident edge" ;
    rdfs:comment "Connects an incidence occurrence to the hyperedge in which it occurs." ;
    rdfs:domain :Incidence ;
    rdfs:range :Hyperedge .

:incidentVertex
    a rdf:Property ;
    rdfs:subPropertyOf set:member ;
    rdfs:label "incident vertex" ;
    rdfs:comment "Connects an incidence occurrence to the vertex that participates in the hyperedge." ;
    rdfs:domain :Incidence ;
    rdfs:range :Vertex .
