@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

xsd:
	a owl:Ontology ;
	rdfs:comment "XML Schema Datatypes" .

xsd:anySimpleType
	a rdfs:Datatype ;
	rdfs:comment "The base class of any primitive XSD dataype." ;
	rdfs:label "any simple type" .

xsd:anyURI
	a rdfs:Datatype ;
	rdfs:label "any URI" ;
	owl:onDatatype xsd:anySimpleType .

xsd:base64Binary
	a rdfs:Datatype ;
	rdfs:comment "Base64-encoded arbitrary binary data." ;
	rdfs:label "base64 binary" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "(([A-Za-z0-9+/] *[A-Za-z0-9+/] *[A-Za-z0-9+/] *[A-Za-z0-9+/] *)*(([A-Za-z0-9+/] *[A-Za-z0-9+/] *[A-Za-z0-9+/] *[A-Za-z0-9+/])|([A-Za-z0-9+/] *[A-Za-z0-9+/] *[AEIMQUYcgkosw048] *=)|([A-Za-z0-9+/] *[AQgw] *= *=)))?"
		]
	) .

xsd:boolean
	a rdfs:Datatype ;
	rdfs:label "boolean" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "(true|false|0|1)"
		]
	) .

xsd:byte
	a rdfs:Datatype ;
	rdfs:label "byte" ;
	owl:onDatatype xsd:short ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "127"^^xsd:byte
		] [
			xsd:minInclusive "-128"^^xsd:byte
		]
	) .

xsd:date
	a rdfs:Datatype ;
	rdfs:label "date" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?[0-9][0-9][0-9][0-9][0-9]*-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|[-+][0-2][0-9]:[0-5][0-9])?"
		]
	) .

xsd:dateTime
	a rdfs:Datatype ;
	rdfs:label "date time" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?[0-9][0-9][0-9][0-9][0-9]*-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([0-1][0-9])|(2[0-4])):[0-5][0-9]:[0-5][0-9](.[0-9]+)?(Z|[-+][0-2][0-9]:[0-5][0-9])?"
		]
	) .

xsd:decimal
	a rdfs:Datatype ;
	rdfs:comment "A subset of the real numbers, which can be represented by decimal numerals." ;
	rdfs:label "decimal" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?INF|NaN|[+-]?(([0-9]+[.]?[0-9]*)|([0-9]*[.]?[0-9]+))([eE][-+]?[0-9]+)?"
		]
	) .

xsd:double
	a rdfs:Datatype ;
	rdfs:comment "IEEE double-precision 64-bit floating point." ;
	rdfs:label "double" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?INF|NaN|[+-]?(([0-9]+[.]?[0-9]*)|([0-9]*[.]?[0-9]+))([eE][-+]?[0-9]+)?"
		]
	) .

xsd:duration
	a rdfs:Datatype ;
	rdfs:label "duration" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?P([0-9]+Y)?([0-9]+M)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?)?"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

xsd:float
	a rdfs:Datatype ;
	rdfs:comment "IEEE single-precision 32-bit floating point." ;
	rdfs:label "float" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?INF|NaN|[+-]?(([0-9]+[.]?[0-9]*)|([0-9]*[.]?[0-9]+))([eE][-+]?[0-9]+)?"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

xsd:fractionDigits
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "The total number of digits to the right of the decimal point required to represent a value." ;
	rdfs:label "fraction digits" ;
	rdfs:range xsd:nonNegativeInteger .

xsd:hexBinary
	a rdfs:Datatype ;
	rdfs:comment "Hex-encoded arbitrary binary data." ;
	rdfs:label "hex binary" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "([0-9A-Fa-f][0-9A-Fa-f])*"
		]
	) .

xsd:int
	a rdfs:Datatype ;
	rdfs:label "int" ;
	owl:onDatatype xsd:long ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "2147483647"^^xsd:int
		] [
			xsd:minInclusive "-2147483648"^^xsd:int
		]
	) .

xsd:integer
	a rdfs:Datatype ;
	rdfs:label "integer" ;
	owl:onDatatype xsd:decimal ;
	owl:withRestrictions (
		[
			xsd:pattern "[-+]?[0-9]+"
		] [
			xsd:fractionDigits 0
		]
	) .

xsd:language
	a rdfs:Datatype ;
	rdfs:label "language" ;
	owl:onDatatype xsd:token ;
	owl:withRestrictions (
		[
			xsd:pattern "[a-zA-Z][a-zA-Z]?[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?(-[a-zA-Z0-9][a-zA-Z0-9]?[a-zA-Z0-9]?[a-zA-Z0-9]?[a-zA-Z0-9]?[a-zA-Z0-9]?[a-zA-Z0-9]?[a-zA-Z0-9]?)*"
		]
	) .

xsd:long
	a rdfs:Datatype ;
	rdfs:label "long" ;
	owl:onDatatype xsd:integer ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "9223372036854775807"^^xsd:long
		] [
			xsd:minInclusive "-9223372036854775808"^^xsd:long
		]
	) .

xsd:maxExclusive
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "The exclusive upper bound of an ordered datatype." ;
	rdfs:label "max exclusive" .

xsd:maxInclusive
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "The inclusive upper bound of an ordered datatype." ;
	rdfs:label "max inclusive" .

xsd:minExclusive
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "The exclusive lower bound of an ordered datatype." ;
	rdfs:label "min exclusive" .

xsd:minInclusive
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "The inclusive lower bound of an ordered datatype." ;
	rdfs:label "min inclusive" .

xsd:negativeInteger
	a rdfs:Datatype ;
	rdfs:label "negative integer" ;
	owl:onDatatype xsd:nonPositiveInteger ;
	owl:withRestrictions (
		[
			xsd:maxInclusive -1
		]
	) .

xsd:nonNegativeInteger
	a rdfs:Datatype ;
	rdfs:label "non-negative integer" ;
	owl:onDatatype xsd:integer ;
	owl:withRestrictions (
		[
			xsd:pattern "[+]?[0-9]+"
		] [
			xsd:minInclusive 0
		]
	) .

xsd:nonPositiveInteger
	a rdfs:Datatype ;
	rdfs:label "non-positive integer" ;
	owl:onDatatype xsd:integer ;
	owl:withRestrictions (
		[
			xsd:pattern "(0|-[0-9]+)"
		] [
			xsd:maxInclusive 0
		]
	) .

xsd:normalizedString
	a rdfs:Datatype ;
	rdfs:comment "The set of strings that do not contain the carriage return (#xD), line feed (#xA) nor tab (#x9) characters." ;
	rdfs:label "normalized string" ;
	owl:onDatatype xsd:string .

xsd:pattern
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "A regular expression that matches complete valid literals." ;
	rdfs:label "pattern" .

xsd:positiveInteger
	a rdfs:Datatype ;
	rdfs:label "positive integer" ;
	owl:onDatatype xsd:nonNegativeInteger ;
	owl:withRestrictions (
		[
			xsd:pattern "[+]?[0-9]*[1-9]+[0-9]*"
		] [
			xsd:minInclusive 1
		]
	) .

xsd:short
	a rdfs:Datatype ;
	rdfs:label "short" ;
	owl:onDatatype xsd:int ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "32767"^^xsd:short
		] [
			xsd:minInclusive "-32768"^^xsd:short
		]
	) .

xsd:string
	a rdfs:Datatype ;
	rdfs:comment "A character string." ;
	rdfs:label "string" ;
	owl:onDatatype xsd:anySimpleType .

xsd:time
	a rdfs:Datatype ;
	rdfs:label "time" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "(([0-1][0-9])|(2[0-4])):[0-5][0-9]:[0-5][0-9](.[0-9]+)?(Z|[-+][0-2][0-9]:[0-5][0-9])?"
		]
	) .

xsd:token
	a rdfs:Datatype ;
	rdfs:comment "The set of strings that do not contain the carriage return (#xD), line feed (#xA) nor tab (#x9) characters, that have no leading or trailing spaces (#x20) and that have no internal sequences of two or more spaces." ;
	rdfs:label "token" ;
	owl:onDatatype xsd:normalizedString .

xsd:unsignedByte
	a rdfs:Datatype ;
	rdfs:label "unsigned byte" ;
	owl:onDatatype xsd:unsignedShort ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "255"^^xsd:unsignedByte
		]
	) .

xsd:unsignedInt
	a rdfs:Datatype ;
	rdfs:label "unsigned int" ;
	owl:onDatatype xsd:unsignedLong ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "4294967295"^^xsd:unsignedInt
		]
	) .

xsd:unsignedLong
	a rdfs:Datatype ;
	rdfs:label "unsigned long" ;
	owl:onDatatype xsd:nonNegativeInteger ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "18446744073709551615"^^xsd:unsignedLong
		]
	) .

xsd:unsignedShort
	a rdfs:Datatype ;
	rdfs:label "unsigned short" ;
	owl:onDatatype xsd:unsignedInt ;
	owl:withRestrictions (
		[
			xsd:maxInclusive "65535"^^xsd:unsignedShort
		]
	) .

xsd:whiteSpace
	a rdf:Property ,
		owl:DatatypeProperty ;
	rdfs:comment "A string that describes whitespace normalization for a string type." ;
	rdfs:label "white space" ;
	rdfs:range [
		a rdfs:Datatype ;
		owl:onDatatype xsd:string ;
		owl:withRestrictions (
			[
				xsd:pattern "(preserve|replace|collapse)"
			]
		)
	] .

