Add ci test: validate against RNG schema
Change-Id: Ic13374c57db47b15480cc3c1ff82301bae573fa8
diff --git a/schemas/csl-terms.rnc b/schemas/csl-terms.rnc
new file mode 100644
index 0000000..93f3fc5
--- /dev/null
+++ b/schemas/csl-terms.rnc
@@ -0,0 +1,175 @@
+namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
+
+
+## Terms
+div {
+ terms =
+ terms.gender-assignable
+ | terms.gender-variants
+ | terms.locator
+ | item-types
+ |
+ ## Contributor roles
+ variables.names
+ | "editortranslator"
+ |
+ ## Miscellaneous terms
+ "accessed"
+ | "ad"
+ | "advance-online-publication"
+ | "album"
+ | "and"
+ | "and others"
+ | "anonymous"
+ | "at"
+ | "audio-recording"
+ | "available at"
+ | "bc"
+ | "bce"
+ | "by"
+ | "ce"
+ | "circa"
+ | "cited"
+ | "et-al"
+ | "film"
+ | "forthcoming"
+ | "from"
+ | "henceforth"
+ | "ibid"
+ | "in"
+ | "in press"
+ | "internet"
+ | "interview"
+ | "letter"
+ | "loc-cit"
+ | "no date"
+ | "no-place"
+ | "no-publisher"
+ | "on"
+ | "online"
+ | "op-cit"
+ | "original-work-published"
+ | "personal-communication"
+ | "podcast"
+ | "podcast-episode"
+ | "preprint"
+ | "presented at"
+ | "radio-broadcast"
+ | "radio-series"
+ | "radio-series-episode"
+ | "reference"
+ | "retrieved"
+ | "review-of"
+ | "scale"
+ | "special-issue"
+ | "special-section"
+ | "television-broadcast"
+ | "television-series"
+ | "television-series-episode"
+ | "video"
+ | "working-paper"
+ |
+ ## Punctuation
+ "open-quote"
+ | "close-quote"
+ | "open-inner-quote"
+ | "close-inner-quote"
+ | "page-range-delimiter"
+ | "colon"
+ | "comma"
+ | "semicolon"
+ |
+ ## Seasons
+ "season-01"
+ | "season-02"
+ | "season-03"
+ | "season-04"
+
+ ## Terms to which a gender may be assigned
+ terms.gender-assignable =
+
+ ## Months
+ "month-01"
+ | "month-02"
+ | "month-03"
+ | "month-04"
+ | "month-05"
+ | "month-06"
+ | "month-07"
+ | "month-08"
+ | "month-09"
+ | "month-10"
+ | "month-11"
+ | "month-12"
+ | terms.non-locator-number-variables
+ | terms.locator-number-variables
+
+ ## Terms for which gender variants may be specified
+ terms.gender-variants = terms.ordinals | terms.long-ordinals
+ terms.ordinals =
+
+ ## Ordinals
+ xsd:string { pattern = "ordinal(-\d{2})?" }
+ terms.long-ordinals =
+
+ ## Long ordinals
+ "long-ordinal-01"
+ | "long-ordinal-02"
+ | "long-ordinal-03"
+ | "long-ordinal-04"
+ | "long-ordinal-05"
+ | "long-ordinal-06"
+ | "long-ordinal-07"
+ | "long-ordinal-08"
+ | "long-ordinal-09"
+ | "long-ordinal-10"
+
+ ## Locators
+ terms.locator =
+ "act"
+ | "appendix"
+ | "article-locator"
+ | "book"
+ | "canon"
+ | "chapter"
+ | "column"
+ | "elocation"
+ | "equation"
+ | "figure"
+ | "folio"
+ | "line"
+ | "note"
+ | "opus"
+ | "paragraph"
+ | "rule"
+ | "scene"
+ | "sub-verbo"
+ | "table"
+ | "timestamp"
+ | "title-locator"
+ | "verse"
+ | terms.locator-number-variables
+
+ ## Locator terms with matching number variables
+ terms.locator-number-variables =
+ "issue"
+ | "page"
+ | "part"
+ | "section"
+ | "supplement"
+ | "version"
+ | "volume"
+
+ ## Non-locator terms accompanying number variables
+ terms.non-locator-number-variables =
+ "chapter-number"
+ | "citation-number"
+ | "collection-number"
+ | "edition"
+ | "first-reference-note-number"
+ | "number"
+ | "number-of-pages"
+ | "number-of-volumes"
+ | "page-first"
+ | "printing"
+}