teacup/rnc/bloomsbury-mods.rnc
2021-12-15 11:29:23 +00:00

327 lines
14 KiB
Plaintext

# This file is a customization of DocBook V5.0 initially created by
# Corbas Consulting Ltd on behalf of Bloomsbury Academic, and
# subsequently (2013) considerably extended by Brad Scott,
# Brambletye Publishing.
# This schema customizes the DocBook Publishers Schema version 1.0
#
# Copyright 1992-2007 HaL Computer Systems, Inc.,
# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
# Corporation, Norman Walsh, Sun Microsystems, Inc., and the
# Organization for the Advancement of Structured Information
# Standards (OASIS).
#
#
#
# Permission to use, copy, modify and distribute the DocBook schema
# and its accompanying documentation for any purpose and without fee
# is hereby granted in perpetuity, provided that the above copyright
# notice and this paragraph appear in all copies. The copyright
# holders make no representation about the suitability of the schema
# for any purpose. It is provided "as is" without expressed or implied
# warranty.
#
# If you modify the DocBook schema in any way, label your schema as a
# variant of DocBook. See the reference documentation
# (http://docbook.org/tdg5/en/html/ch05.html#s-notdocbook)
# for more information.
#
# Please direct all questions, bug reports, or suggestions for changes
# to the docbook@lists.oasis-open.org mailing list. For more
# information, see http://www.oasis-open.org/docbook/.
# -------------------
# Version history
#
# 20171115: added olink/@type='glossary'
# 20171005: added otherHardback as @role value on biblioid[@class='isbn']
# 20170602: added philosopherName as @role value on phrase
# 20170412: trailing citations in bibliodiv now optional
# 20170221: added section/@role='recipe'
# 20160720: added annotations as @role value on note
# 20160707: added caseName as @role value on phrase; and extension so @label allowed on informalexample
# 20160705: added support for legal case reports, incl note/@role
# 20160314: added openAccess as value of biblioid/@role
# 20160210: added specialEdition as value of biblioid/@role
# 20151209: added info as @role value on para; and recording and film as values on bibliomixed
# 20151123: added companionWebsite as value of biblioset/@role to support the text block that may sometimes appear
# 20151101: added set, pack, otherVolume as permissible valies of biblioid/@role for ISBN types
# 20151029: added end-para-note as an option for footnote/@role, for legal texts
# 20150930: added period and gender for para/@role for additional reference support
# 20150928: added oao as value for para/@role to support Oxford Art Online link blocks
# 20150515: added fashionKeywords as a @role option for keywordset; and @role=fpa to mediaobject for FPA articles
# removed species as a @role option on bibliomisc
# added taxonRank, taxonName, taxonEnglish to phrase/@role
# added taxonForeign to foreignphrase/@role
# added taxonAuthority to para/@role
# 20150313: added @role="lawStatedAt" to date element to support legal books
# 20150224: added trade-pbk as a ISBN type
# 20141022: added @role=legalContents to preface for tables of cases and statutes etc
# extended content model of formalpara for legal texts
# 20141008: added @role=embeddedArticle to sidebar for features in complex reference works, eg BEWDF
# 20140910: added @role=continuation to phrase for textual notes that indicate when text continues, in case this needs to be displayed differently
# 20140908: added @role=snapshotArticle to article for BEWDF and related content
# added @role=noPrintRights to releaseinfo
# 20140704: added @role ="synonym" | "pronunciation" | "origin" to phrase, for dictionary granularity
# added @role="category" | "species" to bibliomisc, for article classification, and natural history content
# added @role=articleGroup to article for groups of articles in A-Z reference
# added @role=subArticle to section for article groups
# 20140623: added @role = "overview-objectives" | "terms" | "exercises-activities" to section and sidebar
# 20140619: added keywordset + bibliography @role values for BEWDF and wider support, and new @role values for article
# 20140422: added olink @type value
# 20140421: added @role=relative to link to support links to media in the data package
# 20140311: added @role=toc to itemizedlist to support inline toc processing
# 20140125: added @role to link to support better checking of targets
# 20140123: allowed drama and poetry within epigraph
# 20140121: added @role=impressions on para
# 20140113: added @role=titlePage to cover, and @role=imprintLogo to mediaobject
# 20140110: added @role=translation to title
# 20140108: added @role=description to bibliomisc for other general content in some biblio items
# 20131219: added title/@role value "keepWithNext" for some A-Z support
# added para[@role=see] for A-Z articles
# 20131218: allowed @role on article
# 20131213: allowed nested <part>s
# -------------------
namespace ctrl = "http://nwalsh.com/xmlns/schema-control/"
namespace rng = "http://relaxng.org/ns/structure/1.0"
namespace s = "http://www.ascc.net/xml/schematron"
namespace db = "http://docbook.org/ns/docbook"
default namespace = "http://docbook.org/ns/docbook"
include "publishers-51cr.rnc"
{
# Extensions to the DocBook schema
db.epigraph =
element epigraph {
db.epigraph.attlist,
db.epigraph.info,
db.attribution?,
(db.para.blocks | db.literallayout | db.linegroup | db.dialogue | db.poetry | db.drama)+
}
# Legal books sometimes have more than just a para in a numbered item
db.formalpara =
## A paragraph with a title
element formalpara {
db.formalpara.attlist,
db.formalpara.info,
db.indexing.inlines*,
(db.all.blocks)+
}
# this has been loosened to allow daggers etc as footnote marks (was NMTOKEN)
## Identifies the desired footnote mark
db.footnote.label.attribute = attribute label { text }
# some books have nested part divisions, so we need to add db.part here
db.components =
db.dedication
| db.acknowledgements
| db.preface
| db.chapter
| db.appendix
| db.article
| db.colophon
| db.part
db.toc.components = db.toc
# Add @label to informalexample, since you can get numbered examples, even if they have no title
db.informalexample.attlist =
db.informalexample.role.attribute?
& db.informalexample.label.attribute?
& db.common.attributes
& db.common.linking.attributes
& db.informalexample.floatstyle.attribute?
& (db.informalexample.width.attribute
| db.informalexample.pgwide.attribute)?
# Constraints added to tighten schema
# enforce @xml:id in some places
db.book.attlist =
db.book.role.attribute
& db.xml.id.attribute
& db.common.base.attributes
& db.common.linking.attributes
& db.label.attribute?
& db.book.status.attribute?
db.book.role.attribute = attribute role { "fullText" | "pdfOnly"}
db.preface.role.attribute = attribute role { "prelims" | "contributors" | "legalContents" }
db.part.role.attribute = attribute role { "front" | "back" | "labelOverRide" }
db.article.role.attribute = attribute role { "xref" | "lessonPlan" | "biblioArticle" | "articleGroup" | "snapshotArticle"}
db.chapter.role.attribute = attribute role { "notes" | "labelOverRide" }
db.appendix.role.attribute = attribute role { "ancillary" }
db.section.role.attribute = attribute role { "overview-objectives" | "terms" | "exercises-activities" | "notes" | "labelOverRide" | "bibliography" | "subArticle" | "recipe" }
db.figure.role.attribute = attribute role { "labelOverRide" }
db.olink.type.attribute = attribute type { "otherBook" | "otherArticle" | "glossary" }
db.keywordset.role.attribute = attribute role { "BergGlossary" | "BergKeywords" | "fashionKeywords"}
db.bibliography.role.attribute = attribute role { "further-reading" }
db.bibliomixed.role.attribute = attribute role { "monograph" | "serial" | "contribution" | "article" | "message" | "website" | "unpublished" | "case" | "legislation" | "other" | "series" | "recording" | "film"}
db.bibliomixed.attlist =
db.bibliomixed.role.attribute
& db.xml.id.attribute
& db.common.base.attributes
& db.annotations.attribute?
db.personname.role.attribute = attribute role { "first-last" | "last-first" }
db.bibliomisc.role.attribute = attribute role { "series" | "imprint" | "previousTitle" | "legalRef" | "heading1" | "heading2" | "contributorStatement" | "anon" | "description" | "category"}
db.bibliomisc.attlist =
db.bibliomisc.role.attribute
& db.common.attributes
& db.common.linking.attributes
db.date.role.attribute = attribute role { "accessed" | "lawStatedAt" }
db.pubdate.role.attribute = attribute role { "published" }
db.link.role.attribute = attribute role { "bib" | "figure" | "table" | "xref" | "relative" }
db.mediaobject.role.attribute = attribute role { "imprintLogo" | "fpa" }
db.releaseinfo.role.attribute = attribute role { "noDigitalRights" | "noPrintRights"}
db.bridgehead.role.attribute = attribute role { "level1" | "level2" | "level3" | "level4" }
db.biblioid.role.attribute = attribute role { "hardback" | "paperback" | "xml" | "epdf" | "epub" | "trade-pbk" | "set" | "pack" | "otherVolume" | "specialEdition" | "openAccess" | "otherHardback" }
db.phrase.role.attribute = attribute role { "resp" | "stageDirection" | "source" | "term" | "articleTitle" | "bookTitle" | "periodicalTitle" | "seg" | "synonym" | "pronunciation" | "origin" | "continuation" | "taxonRank" | "taxonName" | "taxonEnglish" | "caseName" | "philosopherName"}
db.foreignphrase.role.attribute = attribute role { "taxonForeign" }
db.itemizedlist.role.attribute = attribute role { "toc" }
db.abstract.role.attribute = attribute role { "blurb" | "authorAbstract" | "extract" }
db.abstract.attlist =
db.abstract.role.attribute
& db.common.attributes
& db.common.linking.attributes
db.firstname.role.attribute = attribute role { "initials" }
db.othername.role.attribute = attribute role { "middle" | "middle-initials" }
db.othercredit.role.attribute = attribute role { "etal" }
db.lineage.role.attribute = attribute role { "comma-before" }
db.imageobject.role.attribute = attribute role { "suppressPDF" }
db.legalnotice.role.attribute = attribute role { "CIP" | "CC" | "Open" }
db.note.role.attribute = attribute role { "disposition" | "facts" | "history" | "holding" | "judgment" | "annotations" }
db.para.role.attribute = attribute role { "right" | "left" | "center" | "fullOut" | "spaceBefore" | "see" | "impressions" | "source" | "taxonAuthority" | "oao" | "gender" | "period" | "info" | "caseNumber" | "court" | "panel" | "hearingDate" | "catchwords" | "legalRepresentation" | "judgmentDate" | "judgmentBy"}
db.address.role.attribute = attribute role { "right" | "left" | "center" }
db.attribution.role.attribute = attribute role { "right" | "left" | "center" }
db.footnote.role.attribute = attribute role { "end-ch-note" | "end-bk-note" | "end-para-note" | "margin1" | "margin2" }
db.line.role.attribute = attribute role { "right" | "left" | "center" | "stageDirection" | "partInitial" | "partMedial" | "partFinal"}
db.dialogue.role.attribute = attribute role { "line-follows-speaker" | "line-below-speaker" }
db.dialogue.attlist =
db.dialogue.role.attribute
& db.common.attributes
& db.common.linking.attributes
db.title.role.attribute = attribute role { "series" | "keepWithNext" | "translation" }
db.volumenum.role.attribute = attribute role { "series" }
db.sidebar.role.attribute = attribute role { "overview-objectives" | "terms" | "exercises-activities" | "sidebar1" | "sidebar2" | "sidebar3" | "sidebar4" | "sidebar5" | "sidebar6" | "sidebar7" | "sidebar8" | "sidebar9" | "plateSection" | "embeddedArticle" }
# enforce info/title at chunks
db.book.info = db._info.title.req
db.preface.info = db._info.title.req
db.chapter.info = db._info.title.req
db.part.info = db._info.title.req
db.acknowledgements.info = db._info.title.req
db.appendix.info = db._info.title.req
db.glossary.info = db._info.title.req
db.bibliography.info = db._info.title.req
db.index.info = db._info.title.req
db.condition.attribute = attribute condition { "hidden" | "display" | "mathml" | "non-mathml" }
db.outputformat.attribute =
## Indicates the output format (for example, print or epub) to which the element applies
attribute outputformat { "print"| "web" | "epub" | "e-Only" }
db.emphasis.role.attribute = attribute role { "italic" | "bold" | "underline" | "line-through" | "roman" | "monospace" | "smallcaps" | "larger" | "smaller" | "sans-serif" | "serif"}
db.emphasis.attlist =
db.emphasis.role.attribute
& db.common.attributes
& db.common.linking.attributes
db.bibliolist.role.attribute = attribute role { "inline" }
db.relation.attribute =
## Identifies the relationship between the bibliographic elements
attribute relation { "book" | "journal" | "article" | "part" | "originalLang" | "translation" | "otherEdition"}
db.bibliomset.relation.attribute = db.relation.attribute
db.bibliomset.role.attribute = attribute role { text }
db.bibliomset.attlist =
db.bibliomset.role.attribute?
& db.common.attributes
& db.common.linking.attributes
& db.bibliomset.relation.attribute
db.biblioset.role.attribute = attribute role { "publisher" | "isbns" | "series" | "companionWebsite"}
db.cover.role.attribute = attribute role { "halfTitleVerso" | "series" | "titlePage"}
db.cover.attlist =
db.cover.role.attribute
& db.common.attributes
& db.common.linking.attributes
}
# extensions to DocBook
# new @role on table
db.table.role.attribute = attribute role { "labelOverRide" }
# new @label on informalexample
db.informalexample.label.attribute = db.label.attribute
# trailing citations in bibliodiv now optional
db.bibliodiv |=
## A section of a bibliography
element bibliodiv {
db.bibliodiv.attlist,
db.bibliodiv.info,
db.all.blocks*,
(db.biblioentry | db.bibliomixed)*
}