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"
+}