628 lines
19 KiB
Text
628 lines
19 KiB
Text
namespace xl = "http://www.w3.org/1999/xlink"
|
|
default namespace db = "http://docbook.org/ns/docbook"
|
|
|
|
|
|
# 2015-12-14: Redefined toc info to accommodate subtitle; added math.inlines to extensions.inline so can have inline eqns in para; allowed attributes on inline equation; allowed any value for footnote/@label so can take asterisk, dagger etc
|
|
# 2015-12-11: Tweaked content model of db.bibliomisc and db.bibliographic.elements
|
|
# 2015-07-08: Added 'default' as option on phrase/@role for untyped elements mapped from new Bloomsbury DocBook
|
|
# 2011-10-20: Added @legDivType = article | title to chapter and section to support EU Legislation
|
|
# 2011-10-09: Add @role=signpost to formalpara, which will work better for them than sections
|
|
# 2011-09-23: Added @role="other" to toc; and @role="signpost" to section
|
|
# 2011-09-15: Added regulation and decision as values of part[@legType] to model the EU legislation in VAT Acts
|
|
# 2011-08-16: Added @legDivType and @legDivValue to para for use in SIs, and loosened formalpara so title not required so can act as annotations wrapper in some circumstances
|
|
# 2011-05-12: toc can only contain para blocks and tocdiv; toc/info is optional
|
|
# 2011-05-03: Added smallcaps as an option for emphasis[@role]
|
|
# 2011-05-03: Changed relatedTitle to relatedURI as values of biblio @class, since that is what we're using
|
|
# 2011-04-22: Added xref2 and pnxref to permitted values of phrase[@role] to support final conversion and not lose location of unresolved links -- remove it once all links fixed
|
|
# 2011-04-21: removed @chunking from part and appendix. Stupid error putting it there in the first place
|
|
# 2011-04-19: Added new enumerated values on biblio @class to support generation of PubFactory metadata files
|
|
# 2011-04-18: Removed lastUpdated as value in date[@role], Made @role mandatory for revision and added new revisions typology
|
|
# 2011-04-07: New schedulePart, regulation and order values for @legDivType and now allow @chunking on part and chapterand appendix, and slightly loosened fruther tocdiv
|
|
# 2011-04-01: new legType on part, and legDivType and legDivValue attributes on part, chapter, section to support legislation GoTo
|
|
# 2011-03-29: new hearings and caserefs elements for cases and remodelled info
|
|
# 2011-03-24: citation notAllowed
|
|
# 2011-03-23: Added @role=case on chapter
|
|
# 2011-03-22: Added strictness to IDs and info/title for chunks
|
|
# 2011-03-10: Added @role=precedentChunk to section
|
|
|
|
|
|
include "docbook.rnc" {
|
|
|
|
# reduce common attributes
|
|
db.common.base.attributes =
|
|
db.xml.lang.attribute?
|
|
& db.version.attribute?
|
|
& db.xreflabel.attribute?
|
|
|
|
# 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 { "commentary" | "legislation" | "cases" | "newsletter" | "precedents"}
|
|
|
|
db.chapter.role.attribute = attribute role { "case" }
|
|
|
|
db.acknowledgements.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.preface.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.dedication.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.glossary.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.appendix.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.part.attlist =
|
|
db.xml.id.attribute
|
|
& db.part.role.attribute?
|
|
& db.part.legType.attribute?
|
|
& db.part.legDivType.attribute?
|
|
& db.part.legDivValue.attribute?
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.chapter.attlist =
|
|
db.xml.id.attribute
|
|
& db.chapter.role.attribute?
|
|
& db.chapter.legDivType.attribute?
|
|
& db.chapter.legDivValue.attribute?
|
|
& db.chapter.chunking.attribute?
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.index.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.indexdiv.attlist =
|
|
db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
db.para.attlist =
|
|
db.para.role.attribute?
|
|
& db.para.legDivType.attribute?
|
|
& db.para.legDivValue.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
# enforce info/title at chunks
|
|
|
|
db.book.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
|
|
|
|
|
|
# enumerated lists
|
|
db.section.role.attribute = attribute role { "bibl" | "annotations" | "headnote" | "notes" | "tableSect" | "schedule" | "precedent" | "precedentChunk" | "signpost"}
|
|
|
|
db.itemizedlist.role.attribute = attribute role { "simple" | "bulleted" }
|
|
db.itemizedlist.attlist =
|
|
db.itemizedlist.role.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
& db.spacing.attribute?
|
|
|
|
|
|
db.emphasis.role.attribute = attribute role { "italic" | "bold" | "underline" | "roman" | "bi" | "smallcaps"}
|
|
db.emphasis.attlist =
|
|
db.emphasis.role.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
db.partintro.role.attribute = attribute role { "longTitle" | "other" }
|
|
db.partintro.attlist =
|
|
db.partintro.role.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
db.bibliolist.role.attribute = attribute role { "inline" | "block" }
|
|
db.bibliolist.attlist =
|
|
db.bibliolist.role.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
db.title.role.attribute = attribute role { "journal" | "book" | "article" }
|
|
db.title.attlist =
|
|
db.title.role.attribute?
|
|
& db.title.alphasort.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
db.biblioset.role.attribute = attribute role { "publisher" | "isbns" | "productMetadata" }
|
|
|
|
|
|
# biblio types
|
|
db.biblio.class.enumeration =
|
|
|
|
## A document object identifier.
|
|
"doi"
|
|
|
|
|
## An international standard book number in old 10 digit form.
|
|
"isbn10"
|
|
|
|
|
## An international standard book number in new 13 digit form.
|
|
"isbn13"
|
|
|
|
|
## An international standard technical report number (ISO 10444).
|
|
"isrn"
|
|
|
|
|
## An international standard serial number.
|
|
"issn"
|
|
|
|
|
## A Library of Congress reference number.
|
|
"libraryofcongress"
|
|
|
|
|
## A publication number (an internal number or possibly organizational standard).
|
|
"pubsnumber"
|
|
|
|
|
## A Uniform Resource Identifier
|
|
"uri"
|
|
|
|
|
## PubFactory book identifier
|
|
"pfID"
|
|
|
|
|
## PubFactory collection ID
|
|
"collection"
|
|
|
|
|
## PubFactory related-uri
|
|
"relatedURI"
|
|
|
|
|
## PubFactory Jurisdiction
|
|
"jurisdiction"
|
|
|
|
|
|
|
|
# toc: enumerated list and made role mandatory
|
|
db.toc.role.attribute = attribute role { "cases" | "statutes" | "legislation" | "other" }
|
|
db.toc.attlist =
|
|
db.toc.role.attribute
|
|
& db.xml.id.attribute
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
|
|
# Useful to allow subtitles in ToC
|
|
db.toc.info = db._info.title.req
|
|
|
|
|
|
db.toc = element toc {
|
|
db.toc.attlist,
|
|
db.toc.info,
|
|
db.para.blocks*,
|
|
(db.tocdiv | db.tocentry)*
|
|
}
|
|
|
|
# change db._text to db.all.inlines
|
|
db.bibliomisc =
|
|
|
|
## Untyped bibliographic information
|
|
element bibliomisc { db.bibliomisc.attlist, (db.all.inlines)+ }
|
|
|
|
# add ubiq.inlines
|
|
db.bibliographic.elements =
|
|
db.info.elements
|
|
| db.publishing.inlines
|
|
| db.ubiq.inlines
|
|
| db.citerefentry
|
|
| db.citetitle
|
|
| db.citebiblioid
|
|
| db.person
|
|
| db.personblurb
|
|
| db.personname
|
|
| db.subtitle
|
|
| db.title
|
|
| db.titleabbrev
|
|
|
|
|
|
|
|
# 24.11.2010: Made role mandatory
|
|
db.phrase.role.attribute = attribute role { "singleUnderline" | "doubleUnderline" | "casename" | "caseref" | "indexTerm" | "indexRefs" | "implied" | "xref2" | "pnxref" | "default"}
|
|
db.phrase.attlist =
|
|
db.phrase.role.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
db.phrase =
|
|
|
|
## A span of text
|
|
element phrase { db.phrase.attlist, db.all.inlines* }
|
|
|
|
|
|
# modified elements
|
|
|
|
# add db.pb (optional page break)
|
|
db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara | db.pb
|
|
|
|
# add pb, case, statute, and cut some elements
|
|
db.publishing.inlines =
|
|
(db.abbrev
|
|
| db.acronym
|
|
| db.date
|
|
| db.emphasis
|
|
| db.footnote
|
|
| db.footnoteref
|
|
| db.foreignphrase
|
|
| db.pb
|
|
| db.phrase
|
|
| db.quote
|
|
| db.subscript
|
|
| db.superscript
|
|
| db.statute
|
|
| db.case)
|
|
| db.glossary.inlines
|
|
| db.coref
|
|
|
|
# need to allow asterisk as footnote ref values
|
|
db.footnote.label.attribute = attribute label { text }
|
|
|
|
# modified (added db.para) to better support othercredit in book-level metadata
|
|
db.credit.contentmodel =
|
|
db.para? & (db.person.author.contentmodel | db.org.author.contentmodel)
|
|
|
|
# Enumerated list for revision @role
|
|
db.revision.role.attribute = attribute role { "major" | "minor"}
|
|
|
|
# Make @role mandatory on revision
|
|
db.revision.attlist =
|
|
db.revision.role.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
# modified date
|
|
# Enumerated value of @role, and add in new @value (declaration is later in the file)
|
|
db.date.role.attribute = attribute role { "lawStatedAt" | "published" | "accessed"}
|
|
db.date.attlist =
|
|
db.date.role.attribute?
|
|
& db.date.value.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
db.date =
|
|
|
|
## The date of publication or revision of a document
|
|
element date { db.date.attlist, text }
|
|
|
|
# modified abstract: extended content model to add lists
|
|
db.abstract =
|
|
|
|
## A summary
|
|
element abstract {
|
|
db.abstract.attlist, db.abstract.info, (db.para.blocks | db.list.blocks)+
|
|
}
|
|
|
|
# choices
|
|
db.table.choice = db.html.table
|
|
db.informaltable.choice = db.html.informaltable
|
|
|
|
|
|
# Math: loosened this up so can have mediaobject AND mathml
|
|
|
|
db.equation.content = (db.mediaobject | db.mathphrase | db._any.mml)+
|
|
|
|
|
|
# removed element groups
|
|
db.synopsis.blocks = notAllowed
|
|
db.technical.blocks = notAllowed
|
|
db.verbatim.blocks = notAllowed
|
|
db.domain.inlines = notAllowed
|
|
db.technical.inlines = notAllowed
|
|
db.product.inlines = notAllowed
|
|
db.error.inlines = notAllowed
|
|
db.programming.inlines = notAllowed
|
|
db.systemitem.inlines = notAllowed
|
|
db.gui.inlines = notAllowed
|
|
db.keyboard.inlines = notAllowed
|
|
db.verbatim.inlines = notAllowed
|
|
db.markup.inlines = notAllowed
|
|
db.userinput.inlines = notAllowed
|
|
db.oo.inlines = notAllowed
|
|
db.replaceable.inlines = notAllowed
|
|
|
|
# inlineequation
|
|
db.inlineequation.attlist = db.condition.attribute & db.common.attributes
|
|
|
|
# add an inline
|
|
db.extension.inlines = (db.userinput | db.math.inlines)*
|
|
|
|
db.userinput.role.attribute = attribute role { "blank" | "dots" }
|
|
db.userinput.attlist =
|
|
db.userinput.role.attribute
|
|
& db.userinput.length.attribute
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
|
|
# removed elements
|
|
db.bridgehead = notAllowed
|
|
db.caution = notAllowed
|
|
db.important = notAllowed
|
|
db.sect1 = notAllowed
|
|
db.sect2 = notAllowed
|
|
db.sect3 = notAllowed
|
|
db.sect4 = notAllowed
|
|
db.sect5 = notAllowed
|
|
db.area = notAllowed
|
|
db.callout = notAllowed
|
|
db.prompt = notAllowed
|
|
db.envar = notAllowed
|
|
db.filename = notAllowed
|
|
db.command = notAllowed
|
|
db.computeroutput = notAllowed
|
|
db.citation = notAllowed
|
|
|
|
#AMENDING THE DB.KEYWORDS
|
|
|
|
db.keyword =
|
|
|
|
element keyword { db.keyword.attlist,
|
|
db.indexing.inlines?,
|
|
db.recursive.blocks.or.sections+,
|
|
(text)+ }
|
|
|
|
|
|
#AMENDING THE DB.FORMALPARA
|
|
|
|
db.formalpara.role.attribute = attribute role { "overview" | "example" | "annotations" | "precedent" | "precedentNotes" | "signpost"}
|
|
|
|
db.formalpara =
|
|
|
|
element formalpara {
|
|
db.formalpara.attlist,
|
|
db.formalpara.info?,
|
|
db.indexing.inlines*,
|
|
db.recursive.blocks.or.sections+
|
|
}
|
|
|
|
# amend part, loosened so part.components can come before partintro. Needed for legislation so can have toc before partintro, and allow nested parts, also allowed section for cases in extremis in appendices etc
|
|
|
|
db.part =
|
|
element part {
|
|
db.part.attlist, db.part.info, (db.part | db.partintro | db.part.components | db.section)+
|
|
}
|
|
|
|
db.part.role.attribute = attribute role { "legislation" }
|
|
|
|
|
|
# AMEND tocdiv
|
|
|
|
db.tocdiv.role.attribute = attribute role { text }
|
|
# remove db.tocdiv.pagenum.attribute = db.toc.pagenum.attribute
|
|
db.tocdiv.attlist =
|
|
db.tocdiv.role.attribute?
|
|
& db.common.attributes
|
|
# & db.tocdiv.pagenum.attribute?
|
|
& db.linkend.attribute?
|
|
db.tocdiv.info = db._info.title.req
|
|
db.tocdiv =
|
|
|
|
## A division in a table of contents
|
|
# loosen model since we want to use variablelist since it gives more structure than tocentry, and content is optional since some legislation ToCs just have the headings, esp for Schedules
|
|
element tocdiv {
|
|
db.tocdiv.attlist,
|
|
db.tocdiv.info?,
|
|
(db.all.blocks | db.tocdiv)*
|
|
}
|
|
|
|
# Amend section
|
|
|
|
# made info optional; assume will have title at level 1 but not required lower in tree; this is to accommodate the commentary notes etc in legislation and commentary. New chunking attribute to force chunking of child sections
|
|
|
|
db.section.attlist =
|
|
db.section.role.attribute?
|
|
& db.section.chunking.attribute?
|
|
& db.section.legDivType.attribute?
|
|
& db.section.legDivValue.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
& db.label.attribute?
|
|
& db.section.status.attribute?
|
|
|
|
db.section =
|
|
|
|
element section {
|
|
db.section.attlist,
|
|
db.section.info?,
|
|
db.recursive.blocks.or.sections,
|
|
db.navigation.components*}
|
|
|
|
|
|
|
|
# add label, court, judge to info
|
|
db.info.elements =
|
|
(db.abstract
|
|
| db.address
|
|
| db.artpagenums
|
|
| db.author
|
|
| db.authorgroup
|
|
| db.authorinitials
|
|
| db.bibliocoverage
|
|
| db.biblioid
|
|
| db.bibliosource
|
|
| db.caserefs
|
|
| db.collab
|
|
| db.confgroup
|
|
| db.contractsponsor
|
|
| db.contractnum
|
|
| db.copyright
|
|
| db.cover
|
|
| db.date
|
|
| db.edition
|
|
| db.editor
|
|
| db.hearing
|
|
| db.issuenum
|
|
| db.jurisdiction
|
|
| db.keywordset
|
|
| db.legalnotice
|
|
| db.mediaobject
|
|
| db.org
|
|
| db.orgname
|
|
| db.othercredit
|
|
| db.pagenums
|
|
| db.printhistory
|
|
| db.pubdate
|
|
| db.publisher
|
|
| db.publishername
|
|
| db.releaseinfo
|
|
| db.revhistory
|
|
| db.seriesvolnums
|
|
| db.subjectset
|
|
| db.volumenum
|
|
| db.label
|
|
| db.info.extension)
|
|
| db.annotation
|
|
| db.extendedlink
|
|
| (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset)
|
|
| db.itermset
|
|
| (db.productname | db.productnumber)
|
|
|
|
|
|
}
|
|
#END INCLUDE
|
|
|
|
|
|
|
|
#NEW STATUTE ELEMENT
|
|
|
|
db.statute =
|
|
element statute { db.statute.attlist, (db.general.inlines | (text)+)+ }
|
|
|
|
db.statute.role.attribute = attribute role { "option1" | "option2" }
|
|
|
|
db.statute.attlist =
|
|
db.statute.role.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
#NEW CASE ELEMENT
|
|
|
|
db.case =
|
|
element case { db.case.attlist, db.all.inlines*, (text)+ }
|
|
|
|
db.case.role.attribute = attribute role { "option1" | "option2" }
|
|
|
|
db.case.attlist =
|
|
db.case.role.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
#NEW HEARING ELEMENT
|
|
|
|
db.hearing =
|
|
element hearing { db.hearing.attlist, (db.court | db.date | db.judge )+ }
|
|
|
|
|
|
db.hearing.attlist =
|
|
db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
|
|
|
|
#NEW COURT ELEMENT
|
|
|
|
db.court =
|
|
element court { db.court.attlist, db.all.inlines*, (text)+ }
|
|
|
|
db.court.role.attribute = attribute role { "Ireland" | "UK" | "EU" }
|
|
|
|
db.court.attlist =
|
|
db.court.role.attribute?
|
|
& db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
#NEW CASEREFS ELEMENT
|
|
|
|
db.caserefs =
|
|
element caserefs { db.caserefs.attlist, (db.phrase | (text))+ }
|
|
|
|
db.caserefs.attlist =
|
|
db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
|
|
|
|
#NEW JUDGE ELEMENT
|
|
|
|
db.judge =
|
|
element judge { db.judge.attlist, db.all.inlines?, db._text, (text)+ }
|
|
|
|
|
|
db.judge.attlist =
|
|
db.common.attributes
|
|
& db.common.linking.attributes
|
|
|
|
#NEW JURISDICTION ELEMENT
|
|
|
|
db.jurisdiction =
|
|
element jurisdiction { db.jurisdiction.attlist, db.all.inlines?, db._text, (text)+ }
|
|
|
|
db.jurisdiction.value.attribute = attribute value { (text) }
|
|
|
|
db.jurisdiction.attlist =
|
|
db.jurisdiction.value.attribute
|
|
|
|
#NEW PAGE BREAK ELEMENT
|
|
|
|
db.pb.value.attribute = attribute value { text }
|
|
db.pb.attlist =
|
|
db.pb.value.attribute
|
|
db.pb =
|
|
|
|
## A page break in the original printed document; not necessarily to be used as a formatting instruction
|
|
element pb { db.pb.attlist, empty }
|
|
|
|
|
|
# NEW VALUE ATTRIBUTE ON DATE
|
|
db.date.value.attribute = attribute value { xsd:date }
|
|
|
|
# New attribute on userinput
|
|
db.userinput.length.attribute = attribute length { text }
|
|
|
|
# New attribute on chapter, section
|
|
db.chapter.chunking.attribute = attribute chunking { "children" | "selfOnly" | "none"}
|
|
db.section.chunking.attribute = attribute chunking { "children" | "selfOnly" | "none"}
|
|
|
|
# New attribute on title
|
|
db.title.alphasort.attribute = attribute alphasort { text }
|
|
|
|
# New attributes to support legislation GoTo
|
|
|
|
db.part.legType.attribute = attribute legType { "statute" | "SI" | "order" | "directive" | "leaflet" | "regulation" | "decision"}
|
|
|
|
db.part.legDivType.attribute = attribute legDivType { "part" | "chapter" | "section" | "schedule"}
|
|
db.part.legDivValue.attribute = attribute legDivValue { text }
|
|
|
|
db.chapter.legDivType.attribute = attribute legDivType { "part" | "chapter" | "section" | "schedule" | "para" | "schedulePart" | "regulation" | "order" | "title" | "article"}
|
|
db.chapter.legDivValue.attribute = attribute legDivValue { text }
|
|
|
|
db.section.legDivType.attribute = attribute legDivType { "part" | "chapter" | "section" | "schedule" | "para" | "schedulePart" | "regulation" | "order" | "title" | "article"}
|
|
db.section.legDivValue.attribute = attribute legDivValue { text }
|
|
|
|
db.para.legDivType.attribute = attribute legDivType { "section" | "para" | "schedulePart"}
|
|
db.para.legDivValue.attribute = attribute legDivValue { text }
|