@prefix :      <https://www.w3.org/2019/wot/json-schema#> .
@prefix schema: <http://schema.org/> .
@prefix owl:   <http://www.w3.org/2002/07/owl#> .
@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xml:   <http://www.w3.org/XML/1998/namespace> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix vann:  <http://purl.org/vocab/vann/> .
@prefix vs:    <http://www.w3.org/2003/06/sw-vocab-status/ns#> .
@prefix prov:  <http://www.w3.org/ns/prov#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .
@prefix dc:    <http://purl.org/dc/elements/1.1/> .

:title  a             owl:AnnotationProperty ;
        rdfs:comment  "Can be used to decorate a user interface with information about the data produced by this user interface. A title will preferably be short."@en ;
        rdfs:label    "title" .

:anyOf  a                      owl:ObjectProperty ;
        rdfs:comment           "Used to ensure that the data is valid against any of the specified schemas in the array."@en ;
        rdfs:label             "anyOf" ;
        schema:domainIncludes  :DataSchema ;
        schema:rangeIncludes   :DataSchema .

:IntegerSchema  a        owl:Class ;
        rdfs:comment     "Metadata describing data of type <code>integer</code>. This subclass is indicated by the value <code>integer</code> assigned to <code>type</code> in <code>DataSchema</code> instances."@en ;
        rdfs:subClassOf  :DataSchema .

:description  a       owl:AnnotationProperty ;
        rdfs:comment  "Can be used to decorate a user interface with information about the data produced by this user interface. a description will provide explanation about the purpose of the instance described by this schema."@en ;
        rdfs:label    "description" .

:required  a                   owl:DatatypeProperty ;
        rdfs:comment           "Defines which members of the object type are mandatory."@en ;
        rdfs:label             "required" ;
        rdfs:range             xsd:string ;
        schema:domainIncludes  :ObjectSchema .

:properties  a                 owl:ObjectProperty ;
        rdfs:comment           "Data schema nested definitions"@en ;
        rdfs:label             "properties" ;
        schema:domainIncludes  :ObjectSchema ;
        schema:rangeIncludes   :DataSchema .

:maxItems  a                   owl:DatatypeProperty ;
        rdfs:comment           "Defines the maximum number of items that have to be in the array."@en ;
        rdfs:label             "maxItems" ;
        rdfs:range             xsd:nonNegativeInteger ;
        schema:domainIncludes  :ArraySchema .

:writeOnly  a                  owl:DatatypeProperty ;
        rdfs:comment           "Boolean value that is a hint to indicate whether a property interaction / value is write only (=true) or not (=false)"@en ;
        rdfs:label             "writeOnly" ;
        rdfs:range             xsd:boolean ;
        schema:domainIncludes  :DataSchema .

:minimum  a                    owl:DatatypeProperty ;
        rdfs:comment           "Specifies a minimum numeric value. Only applicable for associated number or integer types."@en ;
        rdfs:label             "minimum" ;
        rdfs:range             xsd:decimal ;
        rdfs:seeAlso           schema:minValue ;
        schema:domainIncludes  :IntegerSchema , :NumberSchema .

:StringSchema  a         owl:Class ;
        rdfs:comment     "Metadata describing data of type <code>string</code>. This subclass is indicated by the value <code>string</code> assigned to <code>type</code> in <code>DataSchema</code> instances."@en ;
        rdfs:subClassOf  :DataSchema .

:NumberSchema  a         owl:Class ;
        rdfs:comment     "Metadata describing data of type <code>number</code>. This subclass is indicated by the value <code>number</code> assigned to <code>type</code> in <code>DataSchema</code> instances."@en ;
        rdfs:subClassOf  :DataSchema .

:format  a                     owl:DatatypeProperty ;
        rdfs:comment           "Allows validation based on a format pattern such as \"date-time\", \"email\", \"uri\", etc."@en ;
        rdfs:label             "format" ;
        rdfs:range             xsd:string ;
        schema:domainIncludes  :StringSchema .

:propertyName  a               owl:DatatypeProperty ;
        rdfs:comment           "Used to store the indexing name in the parent object when this schema appears as a property of an object schema."@en ;
        rdfs:label             "propertyName" ;
        rdfs:range             xsd:string ;
        schema:domainIncludes  :DataSchema .

:       a                              owl:Ontology ;
        rdfs:comment                   "Module for data schema specifications, part of the W3C Web of Things (WoT) Thing Description model"@en ;
        dc:publisher                   <https://www.w3.org/WoT/WG/> ;
        dc:title                       "JSON Schema in RDF"@en ;
        dcterms:creator                <https://vcharpenay.link/#me> ;
        dcterms:license                <http://purl.org/NET/rdflicense/cc-by4.0> ;
        vann:preferredNamespacePrefix  "jsonschema" ;
        vann:preferredNamespaceUri     "https://www.w3.org/2019/wot/json-schema#" ;
        owl:versionInfo                "0.6.0" .

:NullSchema  a           owl:Class ;
        rdfs:comment     "Metadata describing data of type <code>null</code>. This subclass is indicated by the value <code>null</code> assigned to <code>type</code> in <code>DataSchema</code> instances. This Subclass describes only one acceptable value, namely <code>null</code>. It can be used as part of a <code>oneOf</code> declaration, where it is used to indicate, that the data can also be <code>null</code>."@en ;
        rdfs:subClassOf  :DataSchema .

:const  a                      owl:DatatypeProperty ;
        rdfs:comment           "Provides a constant value."@en ;
        rdfs:label             "const" ;
        schema:domainIncludes  :DataSchema .

:allOf  a                      owl:ObjectProperty ;
        rdfs:comment           "Used to ensure that the data is valid against all of the specified schemas in the array."@en ;
        rdfs:label             "allOf" ;
        schema:domainIncludes  :DataSchema ;
        schema:rangeIncludes   :DataSchema .

:ObjectSchema  a         owl:Class ;
        rdfs:comment     "Metadata describing data of type <code>object</code>. This subclass is indicated by the value <code>object</code> assigned to <code>type</code> in <code>DataSchema</code> instances."@en ;
        rdfs:subClassOf  :DataSchema .

:DataSchema  a        owl:Class ;
        rdfs:comment  "Metadata that describes the data format used. It can be used for validation." .

:ArraySchema  a          owl:Class ;
        rdfs:comment     "Metadata describing data of type array. This subclass is indicated by the value <code>array</code> assigned to <code>type</code> in <code>DataSchema</code> instances."@en ;
        rdfs:subClassOf  :DataSchema .

:maximum  a                    owl:DatatypeProperty ;
        rdfs:comment           "Specifies a maximum numeric value. Only applicable for associated number or integer types."@en ;
        rdfs:label             "maximum" ;
        rdfs:range             xsd:decimal ;
        rdfs:seeAlso           schema:maxValue ;
        schema:domainIncludes  :IntegerSchema , :NumberSchema .

:enum   a                      owl:DatatypeProperty ;
        rdfs:comment           "Restricted set of values provided as an array."@en ;
        rdfs:label             "enum" ;
        schema:domainIncludes  :DataSchema .

:readOnly  a                   owl:DatatypeProperty ;
        rdfs:comment           "Boolean value that is a hint to indicate whether a property interaction / value is read only (=true) or not (=false)"@en ;
        rdfs:label             "readOnly" ;
        rdfs:range             xsd:boolean ;
        schema:domainIncludes  :DataSchema .

:items  a                      owl:ObjectProperty ;
        rdfs:comment           "Used to define the characteristics of an array."@en ;
        rdfs:label             "items" ;
        schema:domainIncludes  :ArraySchema ;
        schema:rangeIncludes   :DataSchema .

:oneOf  a                      owl:ObjectProperty ;
        rdfs:comment           "Used to ensure that the data is valid against exactly one of the specified schemas in the array."@en ;
        rdfs:label             "oneOf" ;
        schema:domainIncludes  :DataSchema ;
        schema:rangeIncludes   :DataSchema .

:BooleanSchema  a        owl:Class ;
        rdfs:comment     "Metadata describing data of type <code>boolean</code>. This subclass is indicated by the value <code>boolean</code> assigned to <code>type</code> in <code>DataSchema</code> instances."@en ;
        rdfs:subClassOf  :DataSchema .

:minItems  a                   owl:DatatypeProperty ;
        rdfs:comment           "Defines the minimum number of items that have to be in the array."@en ;
        rdfs:label             "minItems" ;
        rdfs:range             xsd:nonNegativeInteger ;
        schema:domainIncludes  :ArraySchema .
