namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" namespace sch = "http://purl.oclc.org/dsdl/schematron" start = fx-anything fx-anything = element * - (# There are context-dependent models for these elements: body | div | h1 | p | span | # Deprecated phrases, see # http://apex.infogridpacific.com/fx/fx03-inline.html#h365: cite | code | command | dfn | em | embed | kbd | keygen | mark | meter | output | progress | q | ruby | samp | small | strong | time | var | wbr | # I think it was mentioned somewhere that the HTML5 section # and article elements are deprecated, too: section | article # section is ruled out explicitly only for galley sections: # http://apex.infogridpacific.com/fx/fx01-galley.html#h4287 ){ fx-any-atts, (text | fx-body | fx-anymixed)* } | fx-block | fx-dialog | fx-p fx-any-atts = (attribute * - (rid | continued-from | glyph-data | headers) { text } )* fx-anymixed = (text | fx-anything | fx-span)* fx-non-class-atts = (attribute * - class { text } ) * fx-other-class = xsd:token { pattern = "..?.?|.+[^\-][^r][^w]" } fx-body = element body { fx-any-atts, fx-galley } fx-galley = element div { fx-non-class-atts, attribute class { list { "galley-rw", fx-other-class* } }, fx-metadata*, fx-frontmatter, # For some non-obvious reason, if we don’t allow fx-References before bodymatter, # the fx-References model constraints won’t be used for the completions in the # actual backmatter references. Maybe an oXygen issue? fx-References?, fx-bodymatter, fx-backmatter, fx-processor* } fx-alignment-classes = "align-center-rw" | "align-justified-rw" | "align-left-rw" | "align-right-rw" fx-font-switch-classes = "alt-rw" | "sans-serif-rw" | "serif-rw" | "handwriting-rw" fx-indentation-classes = "firstpara-rw" | "hanging-rw" | "text-indent-rw" | "indent-para-rw" fx-presentation-classes = fx-alignment-classes | fx-font-switch-classes | fx-indentation-classes fx-vertical-spacer-classes = "blank-line-rw" | "full-line-below-rw" | "half-line-below-rw" | "quarter-line-below-rw" fx-note-classes = "notes-rw" | "footnotes-rw" fx-decoration-classes = "decoration-rw" | "ornament-rw" fx-structural-classes = fx-vertical-spacer-classes | fx-note-classes | fx-decoration-classes fx-descriptive-classes = "code-rw" | "source-rw" fx-drama-classes = "direction-rw" | "stage-direction-rw" fx-para-classes = fx-presentation-classes | fx-structural-classes | fx-descriptive-classes | fx-drama-classes fx-inline-styling-classes = "alt-rw" | "lowercase-rw" | "no-hyphens-rw" | "smallcaps-rw" | "smallcaps-titlecase-rw" | "subscript-rw" | "superscript-rw" | "titlecase-rw" | "uppercase-rw" fx-inline-descriptive-classes = "author-rw" | "code-rw" | "date-rw" | "equation-rw" | "handwriting-rw" | "headword-rw" | "label-rw" | "marginnote-rw" | "number-rw" | "term-rw" fx-inline-processing-classes = "pagebreak-nw" | "linebreak-nw" | "stage-direction-rw" fx-dropcap-classes = "dropcap-rw" | "dropcap-3lines-rw" | "dropcap-4lines-rw" | "dropcap-5lines-rw" | "raisedcap-rw" fx-inline-media-classes = "media-inline-rw" | "character-inline-rw" | "symbol-inline-rw" | "audio-inline-rw" fx-counter-ref-classes = "ref-footnote-rw" | "num-footnote-rw" | "ref-glossary-rw" # | … fx-inline-classes = fx-inline-media-classes | fx-dropcap-classes | fx-inline-processing-classes | fx-inline-descriptive-classes | fx-inline-styling-classes | fx-counter-ref-classes | "speaker-rw" fx-p = element p { fx-non-class-atts, attribute class { list { ( fx-para-classes | fx-other-class)* } } ?, fx-anymixed } fx-span = element span { fx-non-class-atts, attribute class { list { ( fx-inline-classes | fx-other-class)* } } ?, fx-anymixed } fx-metadata = element div { fx-non-class-atts, attribute class { list { "metadata-rw", fx-other-class* } }, fx-anything } fx-processor = element div { fx-non-class-atts, attribute class { list { "processor-rw", fx-other-class* } }, fx-anything } fx-specials = element div { fx-non-class-atts, attribute class { list { "specials-rw", fx-other-class* } }, fx-anything } fx-frontmatter = fx-specials*, fx-BookTitlePage?, fx-specials*, fx-Copyright?, fx-specials*, (fx-Introduction | fx-Epigraph | fx-Dedication | fx-Acknowledgements-fm | fx-Foreword | fx-specials )* # |fx-list-ofs-fm fx-backmatter = (fx-Appendix | fx-References | fx-specials)* fx-BookTitlePage = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "BookTitlePage-rw", fx-other-class* } }, fx-title-block? } fx-Copyright = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "Copyright-rw", fx-other-class* } }, element div { fx-non-class-atts, attribute class { list { "copyright-rw", fx-other-class* } }, fx-anything* } } fx-Acknowledgements-fm = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "Acknowledgements-rw", fx-other-class* } }, fx-Acknowledgements-model } fx-Acknowledgements-bm = element div { fx-non-class-atts, attribute class { list { "backmatter-rw", "Acknowledgements-rw", fx-other-class* } }, fx-Acknowledgements-model } fx-Acknowledgements-model = fx-title-block?, fx-anything*, (fx-list-acknowledgements | fx-acknowledgements-lists), fx-anything* fx-list-acknowledgements = element div { fx-non-class-atts, attribute class { list { "list-acknowledgements-rw", fx-other-class* } }, fx-anything* } fx-acknowledgements-lists = element div { fx-non-class-atts, attribute class { list { "acknowledgements-lists-rw", fx-other-class* } }, (fx-list-acknowledgements | fx-anything)+ } fx-Dedication = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "Dedication-rw", fx-other-class* } }, fx-title-block?, fx-anything* } fx-Foreword = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "Foreword-rw", fx-other-class* } }, fx-title-block?, fx-anything* } fx-Introduction = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "Introduction-rw", fx-other-class* } }, fx-title-block?, fx-anything* } fx-Epigraph = element div { fx-non-class-atts, attribute class { list { "frontmatter-rw", "Epigraph-rw", fx-other-class* } }, fx-title-block?, fx-anything* } #fx-list-ofs-fm = # (fx-ListOfAbbreviations-fm | fx-ListOfFigures-fm | fx-ListOfTables-fm) fx-bodymatter = (fx-Chapter+ | fx-Part+ | fx-Unit+) fx-Part = element div { fx-non-class-atts, attribute class { list { "body-rw", "Part-rw", fx-other-class* } }, fx-title-block?, fx-anything* }, fx-specials*, fx-Chapter+ fx-Unit = element div { fx-non-class-atts, attribute class { list { "body-rw", "Unit-rw", fx-other-class* } }, fx-title-block?, fx-anything* }, fx-specials*, fx-Chapter+ fx-Chapter = element div { fx-non-class-atts, attribute class { list { "body-rw", "Chapter-rw", fx-other-class* } }, fx-title-block?, fx-anything* }, fx-specials* fx-Appendix = element div { fx-non-class-atts, attribute class { list { "backmatter-rw", "Appendix-rw", fx-other-class* } }, fx-title-block?, fx-anything* } fx-References = element div { fx-non-class-atts, attribute class { list { "backmatter-rw", "References-rw", fx-other-class* } }, fx-title-block?, fx-cite-p+ } fx-cite-p = element p { fx-non-class-atts, attribute class { list { ("cite-rw", ("publication-type-journal-rw" | "publication-type-book-rw" | "publication-type-chapter-rw" | "publication-type-data-rw" | "publication-type-patent-rw" | "publication-type-standard-rw")?, ( fx-para-classes | fx-other-class)*) } }, (fx-mixed-citation)* } fx-title-block = element div { fx-non-class-atts, attribute class { list { "title-block-rw", fx-other-class* } }, (h1 | fx-title-num | fx-title-other | fx-title-author | fx-title-sub | fx-title-epigraph)* } fx-title-epigraph = element div { fx-non-class-atts, # This is an example for how complicated it is to allow any token order in lists. # (list/interleave used to be possible: http://markmail.org/message/tsxlnvj5kickwl2j) # Do we need to support any token order in class attributes when validating docs? attribute class { list {fx-other-class*, "block-rw", fx-other-class*, "epigraph-rw", fx-other-class*} | list {fx-other-class*, "epigraph-rw", fx-other-class*, "block-rw", fx-other-class*} }, fx-anything* } fx-title-other = element p { fx-non-class-atts, attribute class { list { "title-other-rw", (fx-para-classes | fx-other-class)* } }, fx-anymixed } fx-title-sub = element p { fx-non-class-atts, attribute class { list { "title-sub-rw", (fx-para-classes | fx-other-class)* } }, fx-anymixed } fx-title-author = element p { fx-non-class-atts, attribute class { list { "title-author-rw", (fx-para-classes | fx-other-class)* } }, fx-anymixed } fx-title-num = element p { fx-non-class-atts, attribute class { list { "title-num-rw", (fx-para-classes | fx-other-class)* } }, fx-anymixed } h1 = element h1 { fx-any-atts, fx-anymixed } h2 = element h2 { fx-any-atts, fx-anymixed } fx-block = element div { fx-non-class-atts, attribute class { list { "block-rw", ( "footnotes-rw" | ( ( "extract-rw" | "extract-verse-rw" )?, ( "list-simple-rw" | "headline-rw" )? )? ), fx-other-class* } }, fx-anything* } fx-dialog = element div { fx-non-class-atts, attribute class { list { "dialog-rw", fx-other-class* } }, fx-anything* } # JATS mixed-citations fx-mixed-citation = text | annotation | article-title | chapter-title | collab | comment | conf-acronym | conf-date | conf-loc | conf-name | conf-sponsor | date | date-in-citation | day | edition | email | elocation-id | etal | ext-link | fpage | gov | institution | isbn | issn | issn-l | issue | issue-id | issue-part | issue-title | lpage | month | name | object-id | page-range | part-title | patent | person-group | pub-id | publisher-loc | publisher-name | role | season | series | size | source | std | string-name | supplement | trans-source | trans-title | uri | version | volume | volume-id | volume-series | year # See http://apex.infogridpacific.com/fx/fx03-inline-selectors.html#h2222 # Only allowed these classes to be applied to span elements here. Vindicated? annotation = element span { fx-non-class-atts, attribute class { list { ("annotation-rw", ( fx-other-class)*) } }, fx-anymixed } article-title = element span { fx-non-class-atts, attribute class { list { ("article-title-rw", ( fx-other-class)*) } }, fx-anymixed } chapter-title = element span { fx-non-class-atts, attribute class { list { ("chapter-title-rw", ( fx-other-class)*) } }, fx-anymixed } collab = element span { fx-non-class-atts, attribute class { list { ("collab-rw", ( fx-other-class)*) } }, fx-anymixed } comment = element span { fx-non-class-atts, attribute class { list { ("comment-rw", ( fx-other-class)*) } }, fx-anymixed } conf-acronym = element span { fx-non-class-atts, attribute class { list { ("conf-acronym-rw", ( fx-other-class)*) } }, fx-anymixed } conf-date = element span { fx-non-class-atts, attribute class { list { ("conf-date-rw", ( fx-other-class)*) } }, fx-anymixed } conf-loc = element span { fx-non-class-atts, attribute class { list { ("conf-loc-rw", ( fx-other-class)*) } }, fx-anymixed } conf-name = element span { fx-non-class-atts, attribute class { list { ("conf-name-rw", ( fx-other-class)*) } }, fx-anymixed } conf-sponsor = element span { fx-non-class-atts, attribute class { list { ("conf-sponsor-rw", ( fx-other-class)*) } }, fx-anymixed } date = element span { fx-non-class-atts, attribute class { list { ("date-rw", ( fx-other-class)*) } }, fx-anymixed } date-in-citation = element span { fx-non-class-atts, attribute class { list { ("date-in-citation-rw", ( fx-other-class)*) } }, fx-anymixed } day = element span { fx-non-class-atts, attribute class { list { ("day-rw", ( fx-other-class)*) } }, fx-anymixed } edition = element span { fx-non-class-atts, attribute class { list { ("edition-rw", ( fx-other-class)*) } }, fx-anymixed } email = element span { fx-non-class-atts, attribute class { list { ("email-rw", ( fx-other-class)*) } }, fx-anymixed } elocation-id = element span { fx-non-class-atts, attribute class { list { ("elocation-id-rw", ( fx-other-class)*) } }, fx-anymixed } etal = element span { fx-non-class-atts, attribute class { list { ("etal-rw", ( fx-other-class)*) } }, fx-anymixed } ext-link = element a { fx-non-class-atts, attribute class { list { ("ext-link-rw", ( fx-other-class)*) } }, fx-anymixed } fpage = element span { fx-non-class-atts, attribute class { list { ("fpage-rw", ( fx-other-class)*) } }, fx-anymixed } gov = element span { fx-non-class-atts, attribute class { list { ("gov-rw", ( fx-other-class)*) } }, fx-anymixed } institution = element span { fx-non-class-atts, attribute class { list { ("institution-rw", ( fx-other-class)*) } }, fx-anymixed } isbn = element span { fx-non-class-atts, attribute class { list { ("isbn-rw", ( fx-other-class)*) } }, fx-anymixed } issn = element span { fx-non-class-atts, attribute class { list { ("issn-rw", ( fx-other-class)*) } }, fx-anymixed } issn-l = element span { fx-non-class-atts, attribute class { list { ("issn-l-rw", ( fx-other-class)*) } }, fx-anymixed } issue = element span { fx-non-class-atts, attribute class { list { ("issue-rw", ( fx-other-class)*) } }, fx-anymixed } issue-id = element span { fx-non-class-atts, attribute class { list { ("issue-id-rw", ( fx-other-class)*) } }, fx-anymixed } issue-part = element span { fx-non-class-atts, attribute class { list { ("issue-part-rw", ( fx-other-class)*) } }, fx-anymixed } issue-title = element span { fx-non-class-atts, attribute class { list { ("issue-title-rw", ( fx-other-class)*) } }, fx-anymixed } lpage = element span { fx-non-class-atts, attribute class { list { ("lpage-rw", ( fx-other-class)*) } }, fx-anymixed } month = element span { fx-non-class-atts, attribute class { list { ("month-rw", ( fx-other-class)*) } }, fx-anymixed } name = element span { fx-non-class-atts, attribute class { list { ("name-rw", ( fx-other-class)*) } }, person-model } person-model = ((surname, given-names?) | given-names), prefix?, suffix? object-id = element span { fx-non-class-atts, attribute class { list { ("object-id-rw", ( fx-other-class)*) } }, fx-anymixed } page-range = element span { fx-non-class-atts, attribute class { list { ("page-range-rw", ( fx-other-class)*) } }, fx-anymixed } part-title = element span { fx-non-class-atts, attribute class { list { ("part-title-rw", ( fx-other-class)*) } }, fx-anymixed } patent = element span { fx-non-class-atts, attribute class { list { ("patent-rw", ( fx-other-class)*) } }, fx-anymixed } person-group = element span { fx-non-class-atts, attribute class { list { ("person-group-rw", ( fx-other-class)*) } }, (collab | name | fx-anymixed)* } pub-id = element span { fx-non-class-atts, attribute class { list { ("pub-id-rw", ( fx-other-class)*) } }, fx-anymixed } publisher-loc = element span { fx-non-class-atts, attribute class { list { ("publisher-loc-rw", ( fx-other-class)*) } }, fx-anymixed } publisher-name = element span { fx-non-class-atts, attribute class { list { ("publisher-name-rw", ( fx-other-class)*) } }, fx-anymixed } role = element span { fx-non-class-atts, attribute class { list { ("role-rw", ( fx-other-class)*) } }, fx-anymixed } season = element span { fx-non-class-atts, attribute class { list { ("season-rw", ( fx-other-class)*) } }, fx-anymixed } series = element span { fx-non-class-atts, attribute class { list { ("series-rw", ( fx-other-class)*) } }, fx-anymixed } size = element span { fx-non-class-atts, attribute class { list { ("size-rw", ( fx-other-class)*) } }, fx-anymixed } source = element span { fx-non-class-atts, attribute class { list { ("source-rw", ( fx-other-class)*) } }, fx-anymixed } std = element span { fx-non-class-atts, attribute class { list { ("std-rw", ( fx-other-class)*) } }, fx-anymixed } string-name = element span { fx-non-class-atts, attribute class { list { ("string-name-rw", ( fx-other-class)*) } }, person-model } supplement = element span { fx-non-class-atts, attribute class { list { ("supplement-rw", ( fx-other-class)*) } }, fx-anymixed } trans-source = element span { fx-non-class-atts, attribute class { list { ("trans-source-rw", ( fx-other-class)*) } }, fx-anymixed } trans-title = element span { fx-non-class-atts, attribute class { list { ("trans-title-rw", ( fx-other-class)*) } }, fx-anymixed } uri = element a | span { fx-non-class-atts, attribute class { list { ("uri-rw", ( fx-other-class)*) } }, fx-anymixed } version = element span { fx-non-class-atts, attribute class { list { ("version-rw", ( fx-other-class)*) } }, fx-anymixed } volume = element span { fx-non-class-atts, attribute class { list { ("volume-rw", ( fx-other-class)*) } }, fx-anymixed } volume-id = element span { fx-non-class-atts, attribute class { list { ("volume-id-rw", ( fx-other-class)*) } }, fx-anymixed } volume-series = element span { fx-non-class-atts, attribute class { list { ("volume-series-rw", ( fx-other-class)*) } }, fx-anymixed } year = element span { fx-non-class-atts, attribute class { list { ("year-rw", ( fx-other-class)*) } }, fx-anymixed } surname = element span { fx-non-class-atts, attribute class { list { ("surname-rw", ( fx-other-class)*) } }, fx-anymixed } given-names = element span { fx-non-class-atts, attribute class { list { ("given-names-rw", ( fx-other-class)*) } }, fx-anymixed } prefix = element span { fx-non-class-atts, attribute class { list { ("prefix-rw", ( fx-other-class)*) } }, fx-anymixed } suffix = element span { fx-non-class-atts, attribute class { list { ("suffix-rw", ( fx-inline-classes | fx-other-class)*) } }, fx-anymixed }