# Copyright (C) 2021 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 # This is RelaxNG compact schema for qLocaleXML interemediate locale data # representation format produced and consumed by the qlocalexml module. # # To validate an xml file run: # # jing -c qlocalexml.rnc # # You can download jing from https://relaxng.org/jclark/jing.html if your # package manager lacks the jing package. start = element localeDatabase { attribute versionCldr { text }, attribute versionQt { text }, element languageList { Naming+ }, element scriptList { Naming+ }, element territoryList { Naming+ }, element likelySubtags { LikelySubtag+ }, element zoneAliases { ZoneAlias+ }, element windowsZone { MsLandZones+, MsZoneIana+ }, element landZones { LandZone+ }, element metaZones { MetaZone+ }, element zoneStories { ZoneStory+ }, element localeList { Locale+ } } Naming = element naming { attribute id { xsd:nonNegativeInteger }, attribute code { text }, text } LikelySubtag = element likelySubtag { element from { LocaleTriplet }, element to { LocaleTriplet } } LocaleTriplet = ( attribute language { xsd:nonNegativeInteger }, attribute script { xsd:nonNegativeInteger }, attribute territory { xsd:nonNegativeInteger } ) # TODO: xsd patterns for IANA IDs and space-joined lists of them ZoneAlias = element zoneAlias { attribute alias { text }, attribute iana { text } } MsLandZones = element msLandZones { attribute territory { text }, element msid { text }, element ianaids { text } } MsZoneIana = element msZoneIana { attribute iana { text }, element msid { text } } LandZone = element landZone { attribute territory { text }, text } MetaZone = element metaZone { attribute metakey { xsd:positiveInteger }, element metaname { text }, LandZone+ } ZoneStory = element zoneStory { attribute iana { text }, MetaInterval+ } MetaInterval = element metaInterval { attribute start { xsd:nonNegativeInteger }, attribute stop { xsd:nonNegativeInteger }, attribute metakey { xsd:positiveInteger } } WeekDay = ("sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat") Digit = xsd:string { pattern = "\d" } Punctuation = xsd:string { pattern = "\p{P}" } GroupSizes = xsd:string { pattern = "\d;\d;\d" } ZoneForms = element zoneForms { attribute name { text }, # 'regionFormats', 'short' or 'long' element generic { text }?, element standard { text }?, element daylightSaving { text }? } ZoneNames = element zoneNames { attribute name { text }, # IANA ID of zone, or CLDR metazone name element exemplar { text }?, # metaZoneNaming omits exemplar ZoneForms* # for name in {'short', 'long'} } Locale = element locale { element language { text }, element script { text }, element territory { text }, element decimal { Punctuation }, element group { text }, element zero { Digit }, element list { Punctuation }, element percent { text }, element minus { text }, element plus { text }, element exp { text }, element languageEndonym { text }, element territoryEndonym { text }, element quotationStart { Punctuation }, element quotationEnd { Punctuation }, element alternateQuotationStart { Punctuation }, element alternateQuotationEnd { Punctuation }, element listPatternPartStart { text }, element listPatternPartMiddle { text }, element listPatternPartEnd { text }, element listPatternPartTwo { text }, element byte_unit { text }, element byte_si_quantified { text }, element byte_iec_quantified { text }, element am { text }, element pm { text }, element firstDayOfWeek { text }, element weekendStart { WeekDay }, element weekendEnd { WeekDay }, element longDateFormat { text }, element shortDateFormat { text }, element longTimeFormat { text }, element shortTimeFormat { text }, element currencyIsoCode { text }, element currencySymbol { text }, element currencyDisplayName { text }, element currencyFormat { text }, element currencyNegativeFormat { text }, # Timezone (and metazone) format data element positiveOffsetFormat { text }, element negativeOffsetFormat { text }, element gmtOffsetFormat { text }, element fallbackZoneFormat { text }, # Day names element longDays { text }, element standaloneLongDays { text }, element shortDays { text }, element standaloneShortDays { text }, element narrowDays { text }, element standaloneNarrowDays { text }, # Some of these entries may be absent depending on command line arguments element longMonths_gregorian { text }?, element longMonths_persian { text }?, element longMonths_islamic { text }?, element standaloneLongMonths_gregorian { text }?, element standaloneLongMonths_persian { text }?, element standaloneLongMonths_islamic { text }?, element shortMonths_gregorian { text }?, element shortMonths_persian { text }?, element shortMonths_islamic { text }?, element standaloneShortMonths_gregorian { text }?, element standaloneShortMonths_persian { text }?, element standaloneShortMonths_islamic { text }?, element narrowMonths_gregorian { text }?, element narrowMonths_persian { text }?, element narrowMonths_islamic { text }?, element standaloneNarrowMonths_gregorian { text }?, element standaloneNarrowMonths_persian { text }?, element standaloneNarrowMonths_islamic { text }?, element groupSizes { GroupSizes }, element currencyDigits { xsd:nonNegativeInteger }, element currencyRounding { xsd:nonNegativeInteger }, # Timezone (and metazone) naming data ZoneForms?, # name is 'regionFormats' element zoneNaming { ZoneNames+ }?, element metaZoneNaming { ZoneNames+ }? }