@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 .

xsd:ENTITY
	a rdfs:Datatype ;
	owl:onDatatype xsd:NCName .

xsd:ID
	a rdfs:Datatype ;
	owl:onDatatype xsd:NCName .

xsd:IDREF
	a rdfs:Datatype ;
	owl:onDatatype xsd:NCName .

xsd:NCName
	a rdfs:Datatype ;
	owl:onDatatype xsd:Name .

xsd:NMTOKEN
	a rdfs:Datatype ;
	owl:onDatatype xsd:token .

xsd:Name
	a rdfs:Datatype ;
	owl:onDatatype xsd:token .

xsd:QName
	a rdfs:Datatype ;
	rdfs:label "XML qualified name" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

xsd:anyURI
	a rdfs:Datatype ;
	rdfs:label "URI reference" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

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+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

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

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

xsd:date
	a rdfs:Datatype ;
	rdfs:label "date" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

xsd:dateTime
	a rdfs:Datatype ;
	rdfs:label "date time" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "-?([1-9][0-9]{3,}|0[0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\\.[0-9]+)?|(24:00:00(\\.0+)?))(Z|(\\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

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 "[+-]?[0-9]*\\.?[0-9]*"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

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 "[+-]?[0-9]*\\.?[0-9]*([eE][-+]?[0-9]+)?"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

xsd:duration
	a rdfs:Datatype ;
	rdfs:label "duration" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			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 "[+-]?[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:gDay
	a rdfs:Datatype ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

xsd:gMonth
	a rdfs:Datatype ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

xsd:gMonthDay
	a rdfs:Datatype ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

xsd:gYear
	a rdfs:Datatype ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

xsd:gYearMonth
	a rdfs:Datatype ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

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-F]*"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

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

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]{1,8}(-[a-zA-Z0-9]{1,8})*"
		]
	) .

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

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 ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "replace"
		]
	) .

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

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)"
			]
		)
	] .

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

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

xsd:string
	a rdfs:Datatype ;
	rdfs:comment "A character string." ;
	rdfs:label "string" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "preserve"
		]
	) .

xsd:time
	a rdfs:Datatype ;
	rdfs:label "time" ;
	owl:onDatatype xsd:anySimpleType ;
	owl:withRestrictions (
		[
			xsd:pattern "[1-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]"
		] [
			xsd:whiteSpace "collapse"
		]
	) .

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 ;
	owl:withRestrictions (
		[
			xsd:whiteSpace "collapse"
		]
	) .

xsd:totalDigits
	a rdf:Property ,
	owl:DatatypeProperty ;
	rdfs:comment "The maximum number of decimal digits required to represent a value." ;
	rdfs:label "total digits" ;
	rdfs:range xsd:positiveInteger .

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

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

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

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