From 762e323bef39d297fa19cfc3ef108f56e85a045d Mon Sep 17 00:00:00 2001
From: David Robillard <d@drobilla.net>
Date: Sun, 9 Sep 2012 05:34:59 +0000
Subject: Use stricter datatype definitions conformant with the XSD and OWL
 specifications for better validation.

---
 schemas/xsd.ttl | 261 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 205 insertions(+), 56 deletions(-)

(limited to 'schemas')

diff --git a/schemas/xsd.ttl b/schemas/xsd.ttl
index 27f6d4b..aa67f2b 100644
--- a/schemas/xsd.ttl
+++ b/schemas/xsd.ttl
@@ -1,74 +1,147 @@
-@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@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#> .
+
+<>
+	a owl:Ontology ;
+	rdfs:comment "XML Schema Datatypes" .
 
 xsd:ID
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:anyURI ,
-		xsd:Name .
+	owl:onDatatype xsd:NCName .
 
 xsd:IDREF
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:anyURI ,
-		xsd:Name .
+	owl:onDatatype xsd:NCName .
+
+xsd:ENTITY
+	a rdfs:Datatype ;
+	owl:onDatatype xsd:NCName .
 
 xsd:NCName
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:anyURI ,
-		xsd:Name .
+	owl:onDatatype xsd:Name .
 
 xsd:NMTOKEN
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:token .
+	owl:onDatatype xsd:token .
 
 xsd:Name
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:NMTOKEN .
+	owl:onDatatype xsd:token .
+
+xsd:totalDigits
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:range xsd:positiveInteger ;
+	rdfs:comment "The maximum number of decimal digits required to represent a value." .
+
+xsd:fractionDigits
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:range xsd:nonNegativeInteger ;
+	rdfs:comment "The total number of digits to the right of the decimal point required to represent a value." .
 
 xsd:pattern
-	a rdf:Property ;
-	rdfs:domain rdfs:Datatype ;
-	rdfs:range xsd:string ;
-	rdfs:comment "A regular expression that matches literals of this type." .
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:comment "A regular expression that matches complete valid literals." .
+
+xsd:maxInclusive
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:comment "The inclusive upper bound of an ordered datatype." .
+
+xsd:maxExclusive
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:comment "The exclusive upper bound of an ordered datatype." .
+
+xsd:minInclusive
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:comment "The inclusive lower bound of an ordered datatype." .
+
+xsd:minExclusive
+	a rdf:Property ,
+		owl:DatatypeProperty ;
+	rdfs:comment "The exclusive lower bound of an ordered datatype." .
+
+xsd:QName
+	a rdfs:Datatype ;
+	rdfs:comment "XML qualified names." .
 
 xsd:anyURI
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:token .
+	rdfs:comment "URI reference." .
 
 xsd:base64Binary
 	a rdfs:Datatype ;
-	xsd:pattern "(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" .
+	rdfs:comment "Base64-encoded arbitrary binary data." ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?"
+		]
+	) .
 
 xsd:boolean
 	a rdfs:Datatype ;
-	xsd:pattern "(true|false)$" .
+	owl:withRestrictions (
+		[
+			xsd:pattern "(true|false)"
+		]
+	) .
 
 xsd:byte
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:short ;
-	xsd:pattern "[0-9A-F][0-9A-F]$" .
+	owl:onDatatype xsd:short ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[0-9A-F][0-9A-F]"
+		] [
+			xsd:maxInclusive 127
+		] [
+			xsd:minInclusive -128
+		]
+	) .
 
 xsd:date
 	a rdfs:Datatype ;
-	xsd:pattern "-?[0-9][0-9][0-9][0-9]([0-9]*)?-(0[1-9]|1[0-1])-([0-3][1-9])([+-][0-1][0-9]:[0-6][0-9])?$" .
+	owl:withRestrictions (
+		[
+			xsd:pattern "-?[0-9][0-9][0-9][0-9]([0-9]*)?-(0[1-9]|1[0-1])-([0-3][1-9])([+-][0-1][0-9]:[0-6][0-9])?"
+		]
+	) .
 
 xsd:dateTime
 	a rdfs:Datatype .
 
 xsd:decimal
 	a rdfs:Datatype ;
-	xsd:pattern "[+-]?[0-9]*\\.?[0-9]*$" .
+	rdfs:comment "A subset of the real numbers, which can be represented by decimal numerals." ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[+-]?[0-9]*\\.?[0-9]*"
+		]
+	) .
 
 xsd:double
 	a rdfs:Datatype ;
-	xsd:pattern "[+-]?[0-9]*\\.?[0-9]*([eE][-+]?[0-9]+)$" .
+	rdfs:comment "IEEE double-precision 64-bit floating point." ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[+-]?[0-9]*\\.?[0-9]*([eE][-+]?[0-9]+)"
+		]
+	) .
 
 xsd:duration
 	a rdfs:Datatype .
 
 xsd:float
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:double .
+	rdfs:comment "IEEE single-precision 32-bit floating point." ;
+	owl:onDatatype xsd:double .
 
 xsd:gDay
 	a rdfs:Datatype .
@@ -87,86 +160,162 @@ xsd:gYearMonth
 
 xsd:hexBinary
 	a rdfs:Datatype ;
-	xsd:pattern "[0-9A-F]*$" .
+	rdfs:comment "Hex-encoded arbitrary binary data." ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[0-9A-F]*"
+		]
+	) .
 
 xsd:int
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:long ,
-		xsd:double .
+	owl:onDatatype xsd:long ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 2147483647
+		] [
+			xsd:minInclusive -2147483648
+		]
+	) .
 
 xsd:integer
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:decimal ;
-	xsd:pattern "[-+]?[0-9]+$" .
+	owl:onDatatype xsd:decimal ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[-+]?[0-9]+"
+		] [
+			xsd:fractionDigits 0
+		]
+	) .
 
 xsd:language
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:NCName ,
-		xsd:ID ,
-		xsd:IDREF ;
-	xsd:pattern "[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$" .
+	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:subClassOf xsd:integer .
+	owl:onDatatype xsd:integer ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 9223372036854775807
+		] [
+			xsd:minInclusive -9223372036854775808
+		]
+	) .
 
 xsd:negativeInteger
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:nonPositiveInteger .
+	owl:onDatatype xsd:nonPositiveInteger ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive -1
+		]
+	) .
 
 xsd:nonNegativeInteger
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:integer ;
-	xsd:pattern "[0-9]*$" .
+	owl:onDatatype xsd:integer ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[0-9]*"
+		] [
+			xsd:minInclusive 0
+		]
+	) .
 
 xsd:nonPositiveInteger
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:integer ;
-	xsd:pattern "(0|-[0-9]+)$" .
+	owl:onDatatype xsd:integer ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "(0|-[0-9]+)"
+		] [
+			xsd:maxInclusive 0
+		]
+	) .
 
 xsd:normalizedString
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:string .
+	owl:onDatatype xsd:string ;
+	rdfs:comment "The set of strings that do not contain the carriage return (#xD), line feed (#xA) nor tab (#x9) characters." .
 
 xsd:positiveInteger
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:nonNegativeInteger ;
-	xsd:pattern "+?[0-9]+$" .
+	owl:onDatatype xsd:nonNegativeInteger ;
+	owl:withRestrictions (
+		[
+			xsd:pattern "[+]?[0-9]+"
+		] [
+			xsd:minInclusive 1
+		]
+	) .
 
 xsd:short
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:int ,
-		xsd:float .
+	owl:onDatatype xsd:int ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 32767
+		] [
+			xsd:minInclusive -32768
+		]
+	) .
 
 xsd:string
-	a rdfs:Datatype .
+	a rdfs:Datatype ;
+	rdfs:comment "A character string." .
 
 xsd:time
 	a rdfs:Datatype ;
-	xsd:pattern "[1-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]$" .
+	owl:withRestrictions (
+		[
+			xsd:pattern "[1-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]"
+		]
+	) .
 
 xsd:token
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:normalizedString .
+	owl:onDatatype xsd:normalizedString ;
+	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." .
 
 xsd:unsignedByte
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:short ,
-		xsd:unsignedShort ;
-	xsd:pattern "([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$" .
+	owl:onDatatype xsd:unsignedShort ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 255
+		]
+	) .
 
 xsd:unsignedInt
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:long ,
-		xsd:double ,
-		xsd:unsignedLong .
+	owl:onDatatype xsd:unsignedLong ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 4294967295
+		]
+	) .
 
 xsd:unsignedLong
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:nonNegativeInteger .
+	owl:onDatatype xsd:nonNegativeInteger ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 18446744073709551615
+		]
+	) .
 
 xsd:unsignedShort
 	a rdfs:Datatype ;
-	rdfs:subClassOf xsd:int ,
-		xsd:float ,
-		xsd:unsignedInt .
+	owl:onDatatype xsd:unsignedInt ;
+	owl:withRestrictions (
+		[
+			xsd:maxInclusive 65535
+		]
+	) .
-- 
cgit v1.2.1