@prefix : <https://ontology.inferal.com/modules/json-values/> .
@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 rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .

<https://ontology.inferal.com/modules/json-values/owl>
    a owl:Ontology, pubacc:PublicationManagedOntology ;
    dcterms:accessRights pubacc:PublicAccess ;
    owl:imports : ;
    dcterms:title "JSON Values Ontology - OWL Addendum" ;
    dcterms:description "OWL class, property, individual, and structural axioms layered on the RDFS JSON Values Ontology." ;
    dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
    dcterms:source : ;
    vann:preferredNamespacePrefix "json" ;
    vann:preferredNamespaceUri "https://ontology.inferal.com/modules/json-values/" ;
    mod:status "draft" ;
    rdfs:label "JSON Values Ontology - OWL Addendum" ;
    rdfs:comment "This addendum imports the RDFS base vocabulary and adds OWL typing and axioms for consumers that want OWL reasoning support." ;
    owl:versionInfo "0.1.0" .

:Value
    a owl:Class ;
    owl:disjointUnionOf (
        :Object
        :Array
        :String
        :Number
        :Boolean
        :Null
    ) .

[
    a owl:AllDisjointClasses ;
    owl:members (
        :Value
        :Member
        :Element
    ) ;
] .

:Object a owl:Class .
:Array a owl:Class .
:String a owl:Class .
:Number a owl:Class .
:Boolean a owl:Class .

:Null
    a owl:Class ;
    owl:equivalentClass [
        a owl:Class ;
        owl:oneOf ( :null )
    ] .

:Member
    a owl:Class ;
    owl:hasKey (
        :memberOfObject
        :memberIndex
    ) .

:Element
    a owl:Class ;
    owl:hasKey (
        :elementOfArray
        :elementIndex
    ) .

:null a owl:NamedIndividual .

:hasMember
    a owl:ObjectProperty ;
    owl:inverseOf :memberOfObject .

:memberOfObject
    a owl:ObjectProperty,
        owl:FunctionalProperty .

:memberName
    a owl:DatatypeProperty,
        owl:FunctionalProperty .

:memberValue
    a owl:ObjectProperty,
        owl:FunctionalProperty .

:memberIndex
    a owl:DatatypeProperty,
        owl:FunctionalProperty .

:hasElement
    a owl:ObjectProperty ;
    owl:inverseOf :elementOfArray .

:elementOfArray
    a owl:ObjectProperty,
        owl:FunctionalProperty .

:elementIndex
    a owl:DatatypeProperty,
        owl:FunctionalProperty .

:elementValue
    a owl:ObjectProperty,
        owl:FunctionalProperty .

:stringValue
    a owl:DatatypeProperty,
        owl:FunctionalProperty .

:numberLexicalForm
    a owl:DatatypeProperty,
        owl:FunctionalProperty .

:booleanValue
    a owl:DatatypeProperty,
        owl:FunctionalProperty .
