[ xml:id = "datatypes-common" ] div { datatype.ID = datatype.ID.lexical datatype.IDREF = datatype.IDREF.lexical datatype.IDREFS = datatype.IDREFS.lexical datatype.languagecode = datatype.BCP47 # http://www.w3.org/TR/xmlschema11-2/#language datatype.BCP47 = xsd:language # http://www.w3.org/TR/xmlschema11-2/#ID datatype.ID.xsd = xsd:ID # http://www.w3.org/TR/xmlschema11-2/#NCName datatype.IDREF.lexical = xsd:NCName datatype.IDREFS.lexical = list { datatype.IDREF.lexical+ } datatype.ID.lexical = xsd:NCName # http://www.w3.org/TR/xmlschema11-2/#IDREF datatype.IDREF.xsd = xsd:IDREF # http://www.w3.org/TR/xmlschema11-2/#IDREFS datatype.IDREFS.xsd = xsd:IDREFS # http://www.w3.org/TR/xmlschema11-2/#NMTOKEN datatype.NMTOKEN = xsd:NMTOKEN # http://www.w3.org/TR/xmlschema11-2/#NMTOKENS datatype.NMTOKENS = xsd:NMTOKENS # http://www.w3.org/TR/xmlschema11-2/#string datatype.string = xsd:string datatype.string.nonempty = xsd:token { minLength='1' } datatype.text = text # http://www.w3.org/TR/xmlschema11-2/#nt-dateRep datatype.date = xsd:date # http://www.w3.org/TR/xmlschema11-2/#nt-dateTimeRep datatype.dateTime = xsd:dateTime # http://www.w3.org/TR/xmlschema11-2/#nt-timeRep datatype.date.or.dateTime = datatype.date | datatype.dateTime datatype.LEIRI = xsd:anyURI # http://www.w3.org/TR/xmlschema11-2/#anyURI # http://tools.ietf.org/html/rfc3986#appendix-B # http://www.w3.org/TR/html5/urls.html#valid-url-potentially-surrounded-by-spaces datatype.URI = xsd:anyURI datatype.URI.absolute = xsd:anyURI datatype.IRI = datatype.URI datatype.character.encoding = datatype.iana.charset datatype.iana.charset = xsd:NMTOKEN # http://www.w3.org/TR/html5/infrastructure.html#valid-mime-type # http://tools.ietf.org/html/rfc4288#section-4.2 # http://tools.ietf.org/html/rfc2616#section-3.7 datatype.mimetype = xsd:string { pattern='[a-zA-Z0-9!#$&+\-\^_]+/[a-zA-Z0-9!#$&+\-\^_]+.*' } datatype.mimetype.nocharset = datatype.mimetype # http://www.w3.org/TR/xmlschema11-2/#nonNegativeInteger # http://www.w3.org/TR/html5/common-microsyntaxes.html#non-negative-integers datatype.non-negative.integer = xsd:nonNegativeInteger # http://www.w3.org/TR/xmlschema11-2/#positiveInteger datatype.positive.integer = xsd:positiveInteger # http://www.w3.org/TR/xmlschema11-2/#integer datatype.integer = xsd:integer # http://www.w3.org/TR/xmlschema11-2/#nt-floatRep # http://www.w3.org/TR/html5/common-microsyntaxes.html#real-numbers datatype.float = xsd:float datatype.float.positive = xsd:float { minExclusive = '0'} datatype.float.non-negative = xsd:float { minInclusive = '0' } datatype.token = xsd:string { pattern = '[^\s]+' } datatype.space.separated.tokens = list { datatype.token* } } [ xml:id = "datatypes-smil" ] div { # http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Full-clock-value # http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Partial-clock-value # http://www.w3.org/TR/smil/smil-timing.html#TimingSyntax-Timecount-value datatype.smil.npt = xsd:string { pattern = "(\s*)[0-9]+:[0-5][0-9]:[0-5][0-9](\.[0-9]+)?(\s*)" } | xsd:string { pattern = "(\s*)[0-5][0-9]:[0-5][0-9](\.[0-9]+)?(\s*)" } | xsd:string { pattern = "(\s*)[0-9]+(\.[0-9]+)?(h|min|s|ms)?(\s*)" } } [ xml:id = "datatypes-vocab" ] div { datatype.property = xsd:NMTOKEN datatype.properties = xsd:NMTOKENS datatype.prefixdecl = text #\s*([\i-[:]][\c-[:]]*: +[^ ]+)(\s+[\i-[:]][\c-[:]]*: +[^ ]+)*\s* } [ xml:id = "datatypes-ssml" ] div { # http://www.w3.org/TR/speech-synthesis11/#edef_phoneme datatype.ssml.PhoneticExpression = xsd:string datatype.ssml.PhoneticAlphabet = xsd:string { pattern = "(ipa|x-.+)" } } [ xml:id = "datatypes-html5" ] div { datatype.html5.browsing.context.name.or.keyword = xsd:string { pattern = "()|([^_].*)|(_[bB][lL][aA][nN][kK])|(_[sS][eE][lL][fF])|(_[pP][aA][rR][eE][nN][tT])|(_[tT][oO][pP])" } datatype.html5.browsing.context.name = xsd:string { pattern = "()|([^_].*)" } datatype.html5.token = xsd:string { pattern = '[^\s]+' } # http://www.w3.org/TR/html5/common-microsyntaxes.html#space-separated-tokens datatype.html5.space.separated.tokens = list { datatype.html5.token* } datatype.html5.ordered.set.unique.tokens = datatype.html5.space.separated.tokens datatype.html5.URL.spaces = datatype.URI # http://dev.w3.org/csswg/css3-mediaqueries/#syntax # http://www.w3.org/TR/html5/common-microsyntaxes.html#mq datatype.html5.media.query = xsd:string datatype.html5.name = xsd:string datatype.html5.name.reference = xsd:string { pattern = "#.+" } datatype.html5.year = xsd:token { pattern ='[0-9]{4}' } datatype.html5.yearless = xsd:token { pattern ='(--)?(0[0-9]|1[0-2])-(0[0-9]|[1-2][0-9]|3[0-1])' } datatype.html5.duration = xsd:token { pattern ='(((P[0-9]+D)|(P([0-9]+D)?T((([0-9]+H)([0-9]+M)?([0-9]+(\.[0-9]{1,3})?S)?)|(([0-9]+H)?([0-9]+M)([0-9]+(\.[0-9]{1,3})?S)?)|(([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]{1,3})?S)))))|( *(([0-9]+ *[WDHM])|([0-9]+(\.[0-9]{1,3})? *S)) *)+)' } # http://www.w3.org/TR/html5/common-microsyntaxes.html#months datatype.html5.month = xsd:token { pattern ='([0-9]{4,})-([0-9]{2})' } # http://www.w3.org/TR/html5/common-microsyntaxes.html#dates datatype.html5.date = xsd:token { pattern ='([0-9]{4,})-([0-9]{2})-([0-9]{2})'} # http://www.w3.org/TR/html5/common-microsyntaxes.html#times datatype.html5.time = xsd:token { pattern ='([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]{1,3})?)?'} # http://www.w3.org/TR/html5/common-microsyntaxes.html#local-dates-and-times datatype.html5.datetime.local = xsd:token { pattern = '([0-9]{4,})-([0-9]{2})-([0-9]{2})([T ])([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]{1,3})?)?' } # http://www.w3.org/TR/html5/common-microsyntaxes.html#global-dates-and-times datatype.html5.datetime.global = xsd:token { pattern = '([0-9]{4,})-([0-9]{2})-([0-9]{2})([T ])([0-9]{2}):([0-9]{2})(:[0-9]{2}(\.[0-9]{1,3})?)?(Z|((\+|-)([0-9]{2}):?([0-9]{2})))?' } datatype.html5.datetime = datatype.html5.datetime.global # http://www.w3.org/TR/html5/common-microsyntaxes.html#vaguer-moments-in-time datatype.html5.date.or.time = datatype.html5.year | datatype.html5.yearless | datatype.html5.week | datatype.html5.date | datatype.html5.month | datatype.html5.time | datatype.html5.datetime.global | datatype.html5.duration # http://www.w3.org/TR/html5/common-microsyntaxes.html#vaguer-moments-in-time datatype.html5.date.optional.time = datatype.html5.date | datatype.html5.datetime.global datatype.html5.week = xsd:token { pattern ='([0-9]{4,})-W([0-9]{2})' } datatype.html5.accesskey = datatype.html5.ordered.set.unique.tokens datatype.html5.coords.rectangle = xsd:token { pattern = "-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+" } datatype.html5.coords.circle = xsd:token { pattern = "-?[0-9]+,-?[0-9]+,[0-9]+" } datatype.html5.coords.poly = xsd:token { pattern = "-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+,-?[0-9]+(,-?[0-9]+,-?[0-9]+)*" } datatype.html5.js = xsd:string datatype.html5.script = xsd:string datatype.html5.script.documentation = xsd:string datatype.html5.iframe.srcdoc.xml = xsd:string datatype.style = xsd:string datatype.html5.sizes = list { xsd:string { pattern = "[1-9][0-9]*x[1-9][0-9]*" }+ } datatype.html5.emailaddress = xsd:string { pattern = "[^@]+@[^@]+" } datatype.html5.emailaddresslist = xsd:string { pattern = "([^@]+@[^@]+,)*([^@]+@[^@]+)" } # http://www.w3.org/TR/html5/common-microsyntaxes.html#colors datatype.html5.color = xsd:string { pattern = '#([A-Fa-f0-9]{6})' } datatype.html5.sandboxallowlist = list { 'allow-top-navigation'?, 'allow-same-origin'?, 'allow-forms'?, 'allow-scripts'? } } [ xml:id = "datatypes-html5forms" ] div { datatype.html5.forms.mimetypelist = xsd:string # http://www.w3.org/TR/html5/forms.html#attr-form-accept-charset datatype.html5.forms.charsetlist = list { datatype.character.encoding+ } datatype.html5.forms.pattern = xsd:string datatype.html5.forms.string.nolinebreaks = xsd:string }