From 0a72d7efb21aa234680ac38fceb3a82b03937714 Mon Sep 17 00:00:00 2001 From: "Rodolfo M. Raya" Date: Mon, 22 Jan 2024 17:16:15 -0300 Subject: [PATCH] Updated for release 4.29.0 --- .classpath | 2 +- README.md | 8 +- build.xml | 4 +- catalog/catalog.xml | 72 +- catalog/docbook5.2/assembly.nvdl | 26 + catalog/docbook5.2/catalog.xml | 605 + catalog/docbook5.2/dbits.nvdl | 26 + catalog/docbook5.2/docbook.nvdl | 26 + catalog/docbook5.2/rng/assembly.rnc | 10825 ++++++++ catalog/docbook5.2/rng/assembly.rng | 18266 ++++++++++++++ catalog/docbook5.2/rng/assemblyxi.rnc | 10858 ++++++++ catalog/docbook5.2/rng/assemblyxi.rng | 18359 ++++++++++++++ catalog/docbook5.2/rng/dbits.rnc | 12791 ++++++++++ catalog/docbook5.2/rng/dbits.rng | 20352 +++++++++++++++ catalog/docbook5.2/rng/dbitsxi.rnc | 12854 ++++++++++ catalog/docbook5.2/rng/dbitsxi.rng | 20575 ++++++++++++++++ catalog/docbook5.2/rng/docbook.rnc | 11999 +++++++++ catalog/docbook5.2/rng/docbook.rng | 18457 ++++++++++++++ catalog/docbook5.2/rng/docbookxi.rnc | 12060 +++++++++ catalog/docbook5.2/rng/docbookxi.rng | 18679 ++++++++++++++ catalog/docbook5.2/sch/assembly.sch | 270 + catalog/docbook5.2/sch/assemblyxi.sch | 270 + catalog/docbook5.2/sch/dbits.sch | 609 + catalog/docbook5.2/sch/dbitsxi.sch | 609 + catalog/docbook5.2/sch/docbook.sch | 609 + catalog/docbook5.2/sch/docbookxi.sch | 609 + catalog/xhtml1.1/xhtml-attribs-1.mod | 142 + catalog/xhtml1.1/xhtml-base-1.mod | 53 + catalog/xhtml1.1/xhtml-bdo-1.mod | 47 + catalog/xhtml1.1/xhtml-blkphras-1.mod | 164 + catalog/xhtml1.1/xhtml-blkpres-1.mod | 40 + catalog/xhtml1.1/xhtml-blkstruct-1.mod | 57 + catalog/xhtml1.1/xhtml-charent-1.mod | 39 + catalog/xhtml1.1/xhtml-csismap-1.mod | 114 + catalog/xhtml1.1/xhtml-datatypes-1.mod | 103 + catalog/xhtml1.1/xhtml-edit-1.mod | 66 + catalog/xhtml1.1/xhtml-events-1.mod | 135 + catalog/xhtml1.1/xhtml-form-1.mod | 292 + catalog/xhtml1.1/xhtml-framework-1.mod | 97 + catalog/xhtml1.1/xhtml-hypertext-1.mod | 54 + catalog/xhtml1.1/xhtml-image-1.mod | 51 + catalog/xhtml1.1/xhtml-inlphras-1.mod | 203 + catalog/xhtml1.1/xhtml-inlpres-1.mod | 138 + catalog/xhtml1.1/xhtml-inlstruct-1.mod | 62 + catalog/xhtml1.1/xhtml-link-1.mod | 59 + catalog/xhtml1.1/xhtml-list-1.mod | 129 + catalog/xhtml1.1/xhtml-meta-1.mod | 47 + catalog/xhtml1.1/xhtml-notations-1.mod | 114 + catalog/xhtml1.1/xhtml-object-1.mod | 60 + catalog/xhtml1.1/xhtml-param-1.mod | 48 + catalog/xhtml1.1/xhtml-pres-1.mod | 38 + catalog/xhtml1.1/xhtml-qname-1.mod | 318 + catalog/xhtml1.1/xhtml-ruby-1.mod | 242 + catalog/xhtml1.1/xhtml-script-1.mod | 67 + catalog/xhtml1.1/xhtml-ssismap-1.mod | 32 + catalog/xhtml1.1/xhtml-struct-1.mod | 136 + catalog/xhtml1.1/xhtml-style-1.mod | 48 + catalog/xhtml1.1/xhtml-table-1.mod | 333 + catalog/xhtml1.1/xhtml-text-1.mod | 52 + catalog/xliff2.2/catalog.xml | 15 + catalog/xliff2.2/fs.xsd | 79 + catalog/xliff2.2/glossary.xsd | 54 + .../readme.txt | 3 + .../w3c/xml.xsd | 287 + catalog/xliff2.2/its.xsd | 211 + catalog/xliff2.2/itsm.xsd | 18 + catalog/xliff2.2/matches.xsd | 70 + catalog/xliff2.2/metadata.xsd | 49 + catalog/xliff2.2/plural_gender_select.xsd | 15 + catalog/xliff2.2/resource_data.xsd | 80 + catalog/xliff2.2/size_restriction.xsd | 61 + catalog/xliff2.2/validation.xsd | 49 + catalog/xliff2.2/xliff_core_2.2.xsd | 421 + html/about.html | 2 +- jars/openxliff.jar | Bin 587342 -> 587721 bytes jars/xmljava.jar | Bin 58362 -> 58458 bytes package.json | 13 +- src/com/maxprograms/swordfish/CheckURL.java | 10 +- src/com/maxprograms/swordfish/Constants.java | 6 +- .../swordfish/GlossariesHandler.java | 20 +- .../swordfish/MemoriesHandler.java | 22 +- .../swordfish/ProjectsHandler.java | 156 +- .../maxprograms/swordfish/RemoteUtils.java | 15 +- .../swordfish/ServicesHandler.java | 17 +- src/com/maxprograms/swordfish/TmsServer.java | 7 +- .../swordfish/am/MatchAssembler.java | 19 +- src/com/maxprograms/swordfish/am/Term.java | 2 +- .../maxprograms/swordfish/models/Memory.java | 2 +- .../maxprograms/swordfish/models/Project.java | 2 +- .../swordfish/models/SourceFile.java | 2 +- src/com/maxprograms/swordfish/mt/MT.java | 186 - src/com/maxprograms/swordfish/mt/MTUtils.java | 188 - .../maxprograms/swordfish/tbx/Tbx2Tmx.java | 10 +- .../maxprograms/swordfish/tm/FuzzyIndex.java | 2 +- .../maxprograms/swordfish/tm/ITmEngine.java | 41 +- .../swordfish/tm/InternalDatabase.java | 32 +- src/com/maxprograms/swordfish/tm/Match.java | 2 +- .../swordfish/tm/MatchQuality.java | 2 +- src/com/maxprograms/swordfish/tm/NGrams.java | 2 +- .../swordfish/tm/RemoteDatabase.java | 63 +- src/com/maxprograms/swordfish/tm/TMUtils.java | 2 +- src/com/maxprograms/swordfish/tm/TU.java | 2 +- src/com/maxprograms/swordfish/tm/TuData.java | 2 +- .../maxprograms/swordfish/tm/TuDatabase.java | 2 +- src/com/maxprograms/swordfish/tm/Tuv.java | 2 +- .../swordfish/tmx/TMXContentHandler.java | 5 +- .../maxprograms/swordfish/tmx/TMXReader.java | 2 +- .../swordfish/tmx/TMXResolver.java | 2 +- .../swordfish/xliff/Compression.java | 2 +- .../swordfish/xliff/DifferenceTagger.java | 2 +- .../swordfish/xliff/Skeletons.java | 2 +- .../maxprograms/swordfish/xliff/Split.java | 2 +- .../swordfish/xliff/XliffStore.java | 157 +- .../swordfish/xliff/XliffUtils.java | 13 +- swordfish.pdf | Bin 2050921 -> 2213585 bytes ts/Main.ts | 2 +- ts/Swordfish.ts | 108 +- ts/about.ts | 2 +- ts/addFile.ts | 2 +- ts/addGlossary.ts | 2 +- ts/addMemory.ts | 2 +- ts/addNote.ts | 2 +- ts/addProject.ts | 2 +- ts/addTerm.ts | 2 +- ts/addXmlConfiguration.ts | 2 +- ts/applyTm.ts | 3 +- ts/browseDatabases.ts | 2 +- ts/changeCase.ts | 2 +- ts/concordanceSearch.ts | 2 +- ts/defaultLangs.ts | 2 +- ts/divider.ts | 2 +- ts/elementConfig.ts | 2 +- ts/filterConfig.ts | 2 +- ts/filterSegments.ts | 2 +- ts/gettingStarted.ts | 2 +- ts/glossaries.ts | 2 +- ts/goTo.ts | 2 +- ts/htmlViewer.ts | 2 +- ts/importGlossary.ts | 2 +- ts/importTmx.ts | 2 +- ts/importXliff.ts | 2 +- ts/keyboardHandler.ts | 2 +- ts/licenses.ts | 2 +- ts/locations.ts | 4 +- ts/memories.ts | 2 +- ts/messages.ts | 2 +- ts/mtContentHandler.ts | 139 + ts/mtManager.ts | 279 + ts/mtMatches.ts | 2 +- ts/notes.ts | 2 +- ts/preferences.ts | 4 +- ts/preferencesDialog.ts | 100 +- ts/projects.ts | 2 +- ts/replaceText.ts | 2 +- ts/serverSettings.ts | 2 +- ts/sortSegments.ts | 2 +- ts/spaceAnalysis.ts | 2 +- ts/spellingLangs.ts | 2 +- ts/systemInfo.ts | 2 +- ts/tabs.ts | 2 +- ts/tags.ts | 2 +- ts/tagsAnalysis.ts | 2 +- ts/termSearch.ts | 2 +- ts/termsPanel.ts | 2 +- ts/tmMatches.ts | 2 +- ts/translation.ts | 48 +- ts/updates.ts | 2 +- 167 files changed, 195725 insertions(+), 880 deletions(-) create mode 100755 catalog/docbook5.2/assembly.nvdl create mode 100755 catalog/docbook5.2/catalog.xml create mode 100755 catalog/docbook5.2/dbits.nvdl create mode 100755 catalog/docbook5.2/docbook.nvdl create mode 100755 catalog/docbook5.2/rng/assembly.rnc create mode 100755 catalog/docbook5.2/rng/assembly.rng create mode 100755 catalog/docbook5.2/rng/assemblyxi.rnc create mode 100755 catalog/docbook5.2/rng/assemblyxi.rng create mode 100755 catalog/docbook5.2/rng/dbits.rnc create mode 100755 catalog/docbook5.2/rng/dbits.rng create mode 100755 catalog/docbook5.2/rng/dbitsxi.rnc create mode 100755 catalog/docbook5.2/rng/dbitsxi.rng create mode 100755 catalog/docbook5.2/rng/docbook.rnc create mode 100755 catalog/docbook5.2/rng/docbook.rng create mode 100755 catalog/docbook5.2/rng/docbookxi.rnc create mode 100755 catalog/docbook5.2/rng/docbookxi.rng create mode 100755 catalog/docbook5.2/sch/assembly.sch create mode 100755 catalog/docbook5.2/sch/assemblyxi.sch create mode 100755 catalog/docbook5.2/sch/dbits.sch create mode 100755 catalog/docbook5.2/sch/dbitsxi.sch create mode 100755 catalog/docbook5.2/sch/docbook.sch create mode 100755 catalog/docbook5.2/sch/docbookxi.sch create mode 100644 catalog/xhtml1.1/xhtml-attribs-1.mod create mode 100644 catalog/xhtml1.1/xhtml-base-1.mod create mode 100644 catalog/xhtml1.1/xhtml-bdo-1.mod create mode 100644 catalog/xhtml1.1/xhtml-blkphras-1.mod create mode 100644 catalog/xhtml1.1/xhtml-blkpres-1.mod create mode 100644 catalog/xhtml1.1/xhtml-blkstruct-1.mod create mode 100644 catalog/xhtml1.1/xhtml-charent-1.mod create mode 100644 catalog/xhtml1.1/xhtml-csismap-1.mod create mode 100644 catalog/xhtml1.1/xhtml-datatypes-1.mod create mode 100644 catalog/xhtml1.1/xhtml-edit-1.mod create mode 100644 catalog/xhtml1.1/xhtml-events-1.mod create mode 100644 catalog/xhtml1.1/xhtml-form-1.mod create mode 100644 catalog/xhtml1.1/xhtml-framework-1.mod create mode 100644 catalog/xhtml1.1/xhtml-hypertext-1.mod create mode 100644 catalog/xhtml1.1/xhtml-image-1.mod create mode 100644 catalog/xhtml1.1/xhtml-inlphras-1.mod create mode 100644 catalog/xhtml1.1/xhtml-inlpres-1.mod create mode 100644 catalog/xhtml1.1/xhtml-inlstruct-1.mod create mode 100644 catalog/xhtml1.1/xhtml-link-1.mod create mode 100644 catalog/xhtml1.1/xhtml-list-1.mod create mode 100644 catalog/xhtml1.1/xhtml-meta-1.mod create mode 100644 catalog/xhtml1.1/xhtml-notations-1.mod create mode 100644 catalog/xhtml1.1/xhtml-object-1.mod create mode 100644 catalog/xhtml1.1/xhtml-param-1.mod create mode 100644 catalog/xhtml1.1/xhtml-pres-1.mod create mode 100644 catalog/xhtml1.1/xhtml-qname-1.mod create mode 100644 catalog/xhtml1.1/xhtml-ruby-1.mod create mode 100644 catalog/xhtml1.1/xhtml-script-1.mod create mode 100644 catalog/xhtml1.1/xhtml-ssismap-1.mod create mode 100644 catalog/xhtml1.1/xhtml-struct-1.mod create mode 100644 catalog/xhtml1.1/xhtml-style-1.mod create mode 100644 catalog/xhtml1.1/xhtml-table-1.mod create mode 100644 catalog/xhtml1.1/xhtml-text-1.mod create mode 100644 catalog/xliff2.2/catalog.xml create mode 100644 catalog/xliff2.2/fs.xsd create mode 100644 catalog/xliff2.2/glossary.xsd create mode 100644 catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/readme.txt create mode 100644 catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/w3c/xml.xsd create mode 100644 catalog/xliff2.2/its.xsd create mode 100644 catalog/xliff2.2/itsm.xsd create mode 100644 catalog/xliff2.2/matches.xsd create mode 100644 catalog/xliff2.2/metadata.xsd create mode 100644 catalog/xliff2.2/plural_gender_select.xsd create mode 100644 catalog/xliff2.2/resource_data.xsd create mode 100644 catalog/xliff2.2/size_restriction.xsd create mode 100644 catalog/xliff2.2/validation.xsd create mode 100644 catalog/xliff2.2/xliff_core_2.2.xsd delete mode 100644 src/com/maxprograms/swordfish/mt/MT.java delete mode 100644 src/com/maxprograms/swordfish/mt/MTUtils.java create mode 100644 ts/mtContentHandler.ts create mode 100644 ts/mtManager.ts diff --git a/.classpath b/.classpath index 2dc5829..439fabc 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + diff --git a/README.md b/README.md index d6754d2..50674bb 100644 --- a/README.md +++ b/README.md @@ -48,15 +48,15 @@ Technical Support | Peer support at [Groups.io](https://groups.io/g/maxprograms ## Requirements -- JDK 17 or newer is required for compiling and building. Get it from [Adoptium](https://adoptium.net/). +- JDK 21 or newer is required for compiling and building. Get it from [Adoptium](https://adoptium.net/). - Apache Ant 1.10.12 or newer. Get it from [https://ant.apache.org/](https://ant.apache.org/) -- Node.js 18.16.0 LTS or newer. Get it from [https://nodejs.org/](https://nodejs.org/) -- TypeScript 5.1.0 or newer, get it from [https://www.typescriptlang.org/](https://www.typescriptlang.org/) +- Node.js 20.10.0 LTS or newer. Get it from [https://nodejs.org/](https://nodejs.org/) +- TypeScript 5.3.3 or newer, get it from [https://www.typescriptlang.org/](https://www.typescriptlang.org/) ## Building - Checkout this repository. -- Point your `JAVA_HOME` environment variable to JDK 17 +- Point your `JAVA_HOME` environment variable to JDK 21 - Run `ant` to compile the Java code - Run `npm install` to download and install NodeJS dependencies - Run `npm start` to launch Swordfish diff --git a/build.xml b/build.xml index 3b8d250..78d6db4 100644 --- a/build.xml +++ b/build.xml @@ -1,7 +1,7 @@ - - + + diff --git a/catalog/catalog.xml b/catalog/catalog.xml index 75e214b..7c55248 100644 --- a/catalog/catalog.xml +++ b/catalog/catalog.xml @@ -24,6 +24,7 @@ + @@ -89,11 +90,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -124,6 +191,7 @@ + diff --git a/catalog/docbook5.2/assembly.nvdl b/catalog/docbook5.2/assembly.nvdl new file mode 100755 index 0000000..8369063 --- /dev/null +++ b/catalog/docbook5.2/assembly.nvdl @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/catalog/docbook5.2/catalog.xml b/catalog/docbook5.2/catalog.xml new file mode 100755 index 0000000..a8dc56a --- /dev/null +++ b/catalog/docbook5.2/catalog.xml @@ -0,0 +1,605 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/docbook5.2/dbits.nvdl b/catalog/docbook5.2/dbits.nvdl new file mode 100755 index 0000000..64a9517 --- /dev/null +++ b/catalog/docbook5.2/dbits.nvdl @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/catalog/docbook5.2/docbook.nvdl b/catalog/docbook5.2/docbook.nvdl new file mode 100755 index 0000000..e4648e4 --- /dev/null +++ b/catalog/docbook5.2/docbook.nvdl @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + diff --git a/catalog/docbook5.2/rng/assembly.rnc b/catalog/docbook5.2/rng/assembly.rnc new file mode 100755 index 0000000..2296977 --- /dev/null +++ b/catalog/docbook5.2/rng/assembly.rnc @@ -0,0 +1,10825 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ctrl = "http://nwalsh.com/xmlns/schema-control/" +default namespace db = "http://docbook.org/ns/docbook" +namespace html = "http://www.w3.org/1999/xhtml" +namespace local = "" +namespace mml = "http://www.w3.org/1998/Math/MathML" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace s = "http://purl.oclc.org/dsdl/schematron" +namespace svg = "http://www.w3.org/2000/svg" +namespace trans = "http://docbook.org/ns/transclusion" +namespace xlink = "http://www.w3.org/1999/xlink" + +# This file is part of DocBook Assembly V5.2CR5 +# +# Copyright 2008-2015 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-comment@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. +# +# ====================================================================== + +s:ns [ + prefix = "a" + uri = "http://relaxng.org/ns/compatibility/annotations/1.0" +] +s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ] +s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ] +s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ] +s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ] +s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ] +s:ns [ prefix = "s" uri = "http://purl.oclc.org/dsdl/schematron" ] +s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ] +s:ns [ prefix = "trans" uri = "http://docbook.org/ns/transclusion" ] +s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ] +div { + db._any.attribute = + + ## Any attribute, including any attribute in any namespace + attribute * { text } + db._any_other.attribute = + + ## Any attribute in any other explicit namespace + attribute * - (db:* | xml:* | xlink:* | trans:* | local:*) { text } + db._any = + + ## Any element from almost any namespace + element * - db:* { (db._any.attribute | text | db._any)* } +} +db.arch.attribute = + + ## Designates the computer or chip architecture to which the element applies + attribute arch { text } +db.audience.attribute = + + ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + attribute audience { text } +db.condition.attribute = + + ## provides a standard place for application-specific effectivity + attribute condition { text } +db.conformance.attribute = + + ## Indicates standards conformance characteristics of the element + attribute conformance { text } +db.os.attribute = + + ## Indicates the operating system to which the element is applicable + attribute os { text } +db.revision.attribute = + + ## Indicates the editorial revision to which the element belongs + attribute revision { text } +db.security.attribute = + + ## Indicates something about the security level associated with the element to which it applies + attribute security { text } +db.userlevel.attribute = + + ## Indicates the level of user experience for which the element applies + attribute userlevel { text } +db.vendor.attribute = + + ## Indicates the computer vendor to which the element applies + attribute vendor { text } +db.wordsize.attribute = + + ## Indicates the word size (width in bits) of the computer architecture to which the element applies + attribute wordsize { text } +db.outputformat.attribute = + + ## Indicates the output format (for example, print or epub) to which the element applies + attribute outputformat { text } +db.effectivity.attributes = + db.arch.attribute? + & db.audience.attribute? + & db.condition.attribute? + & db.conformance.attribute? + & db.os.attribute? + & db.revision.attribute? + & db.security.attribute? + & db.userlevel.attribute? + & db.vendor.attribute? + & db.wordsize.attribute? + & db.outputformat.attribute? +db.endterm.attribute = + + ## Points to the element whose content is to be used as the text of the link + attribute endterm { xsd:IDREF } +db.linkend.attribute = + + ## Points to an internal link target by identifying the value of its xml:id attribute + attribute linkend { xsd:IDREF } +db.linkends.attribute = + + ## Points to one or more internal link targets by identifying the value of their xml:id attributes + attribute linkends { xsd:IDREFS } +db.xlink.href.attribute = + + ## Identifies a link target with a URI + attribute xlink:href { xsd:anyURI } +db.xlink.simple.type.attribute = + + ## Identifies the XLink link type + attribute xlink:type { + + ## An XLink simple link type + "simple" + } +db.xlink.role.attribute = + + ## Identifies the XLink role of the link + attribute xlink:role { xsd:anyURI } +db.xlink.arcrole.attribute = + + ## Identifies the XLink arcrole of the link + attribute xlink:arcrole { xsd:anyURI } +db.xlink.title.attribute = + + ## Identifies the XLink title of the link + attribute xlink:title { text } +db.xlink.show.enumeration = + + ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + "new" + | + ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + "replace" + | + ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + "embed" + | + ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.show.attribute = + + ## Identifies the XLink show behavior of the link + attribute xlink:show { db.xlink.show.enumeration } +db.xlink.actuate.enumeration = + + ## An application should traverse to the ending resource immediately on loading the starting resource. + "onLoad" + | + ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + "onRequest" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.actuate.attribute = + + ## Identifies the XLink actuate behavior of the link + attribute xlink:actuate { db.xlink.actuate.enumeration } +db.xlink.simple.link.attributes = + db.xlink.simple.type.attribute? + & db.xlink.href.attribute? + & db.xlink.role.attribute? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? +db.xlink.attributes = + db.xlink.simple.link.attributes + | (db.xlink.extended.link.attributes + | db.xlink.locator.link.attributes + | db.xlink.arc.link.attributes + | db.xlink.resource.link.attributes + | db.xlink.title.link.attributes) +db.xml.id.attribute = + + ## Identifies the unique ID value of the element + attribute xml:id { xsd:ID } +db.version.attribute = + + ## Specifies the DocBook version of the element and its descendants + attribute version { text } +db.xml.lang.attribute = + + ## Specifies the natural language of the element and its descendants + attribute xml:lang { text } +db.xml.base.attribute = + + ## Specifies the base URI of the element and its descendants + attribute xml:base { xsd:anyURI } +db.remap.attribute = + + ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + attribute remap { text } +db.xreflabel.attribute = + + ## Provides the text that is to be generated for a cross reference to the element + attribute xreflabel { text } +db.xrefstyle.attribute = + + ## Specifies a keyword or keywords identifying additional style information + attribute xrefstyle { text } +db.revisionflag.enumeration = + + ## The element has been changed. + "changed" + | + ## The element is new (has been added to the document). + "added" + | + ## The element has been deleted. + "deleted" + | + ## Explicitly turns off revision markup for this element. + "off" +db.revisionflag.attribute = + + ## Identifies the revision status of the element + attribute revisionflag { db.revisionflag.enumeration } +db.dir.enumeration = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" +db.dir.attribute = + + ## Identifies the direction of text in an element + attribute dir { db.dir.enumeration } +db.rdfalite.vocab = + + ## The RDFa Lite vocab + attribute vocab { xsd:anyURI } +db.rdfalite.typeof = + + ## The RDFa Lite typeof + attribute typeof { text } +db.rdfalite.property = + + ## The RDFa Lite property + attribute property { text } +db.rdfalite.resource = + + ## The RDFa Lite resource + attribute resource { text } +db.rdfalite.prefix = + + ## The RDFa Lite prefix + attribute prefix { text } +db.rdfalite.attributes = + db.rdfalite.vocab? + & db.rdfalite.typeof? + & db.rdfalite.property? + & db.rdfalite.resource? + & db.rdfalite.prefix? +db.trans.idfixup.enumeration = + + ## No ID fixup strategy + "none" + | + ## ID fixup by concatenating suffixes + "suffix" + | + ## ID fixup by creating unique values + "auto" +db.trans.idfixup.attribute = + + ## The transclusion ID fixup strategy + attribute trans:idfixup { db.trans.idfixup.enumeration } +db.trans.suffix.attribute = + + ## The transclusion suffix to use when the suffix ID fixup strategy is employed + [ + s:pattern [ + s:title [ "Suffix fixup must be specified" ] + s:rule [ + context = "db:*[@trans:suffix]" + s:assert [ + test = "@trans:idfixup = 'suffix'" + "If a suffix is specified, suffix ID fixup must also be specified." + ] + ] + ] + ] + attribute trans:suffix { text } +db.trans.linkscope.enumeration = + + ## No link scope adjustments are made + "user" + | + ## The link scopes are adjusted with the suffix property + "local" + | + ## The link scopes are adjusted based on proximity + "near" + | + ## The link scopes are adjusted based on document order + "global" +db.trans.linkscope.attribute = + + ## The transclusion link scope adjustment + attribute trans:linkscope { db.trans.linkscope.enumeration } +db.common.transclusion.attributes = + db.trans.idfixup.attribute? + & db.trans.suffix.attribute? + & db.trans.linkscope.attribute? +db.common.base.attributes = + db.version.attribute? + & db.xml.lang.attribute? + & db.xml.base.attribute? + & db.remap.attribute? + & db.xreflabel.attribute? + & db.revisionflag.attribute? + & db.dir.attribute? + & db.effectivity.attributes + & db.rdfalite.attributes + & db.common.transclusion.attributes + & db._any_other.attribute* +db.common.attributes = + db.xml.id.attribute? + & db.common.base.attributes + & db.annotations.attribute? +db.common.idreq.attributes = + db.xml.id.attribute + & db.common.base.attributes + & db.annotations.attribute? +db.common.linking.attributes = + (db.linkend.attribute | db.xlink.attributes)? +db.common.req.linking.attributes = + db.linkend.attribute | db.xlink.attributes +db.common.data.attributes = + + ## Specifies the format of the data + attribute format { text }?, + ( + ## Indentifies the location of the data by URI + attribute fileref { xsd:anyURI } + | + ## Identifies the location of the data by external identifier (entity name) + attribute entityref { xsd:ENTITY }) +db.verbatim.continuation.enumeration = + + ## Line numbering continues from the immediately preceding element with the same name. + "continues" + | + ## Line numbering restarts (begins at 1, usually). + "restarts" +db.verbatim.continuation.attribute = + + ## Determines whether line numbering continues from the previous element or restarts + attribute continuation { db.verbatim.continuation.enumeration } +db.verbatim.linenumbering.enumeration = + + ## Lines are numbered. + "numbered" + | + ## Lines are not numbered. + "unnumbered" +db.verbatim.linenumbering.attribute = + + ## Determines whether lines are numbered + attribute linenumbering { db.verbatim.linenumbering.enumeration } +db.verbatim.startinglinenumber.attribute = + + ## Specifies the initial line number + attribute startinglinenumber { xsd:integer } +db.verbatim.language.attribute = + + ## Identifies the language (i.e. programming language) of the verbatim content + attribute language { text } +db.verbatim.xml.space.attribute = + + ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + attribute xml:space { + + ## Whitespace must be preserved. + "preserve" + } +db.verbatim.common.attributes = + db.verbatim.continuation.attribute? + & db.verbatim.linenumbering.attribute? + & db.verbatim.startinglinenumber.attribute? + & db.verbatim.xml.space.attribute? +db.verbatim.attributes = + db.verbatim.common.attributes & db.verbatim.language.attribute? +db.label.attribute = + + ## Specifies an identifying string for presentation purposes + attribute label { text } +db.width.characters.attribute = + + ## Specifies the width (in characters) of the element + attribute width { xsd:nonNegativeInteger } +db.spacing.enumeration = + + ## The spacing should be "compact". + "compact" + | + ## The spacing should be "normal". + "normal" +db.spacing.attribute = + + ## Specifies (a hint about) the spacing of the content + attribute spacing { db.spacing.enumeration } +db.pgwide.enumeration = + + ## The element should be rendered in the current text flow (with the flow column width). + "0" + | + ## The element should be rendered across the full text page. + "1" +db.pgwide.attribute = + + ## Indicates if the element is rendered across the column or the page + attribute pgwide { db.pgwide.enumeration } +db.language.attribute = + + ## Identifies the language (i.e. programming language) of the content + attribute language { text } +db.performance.enumeration = + + ## The content describes an optional step or steps. + "optional" + | + ## The content describes a required step or steps. + "required" +db.performance.attribute = + + ## Specifies if the content is required or optional + attribute performance { db.performance.enumeration } +db.floatstyle.attribute = + + ## Specifies style information to be used when rendering the float + attribute floatstyle { text } +db.width.attribute = + + ## Specifies the width of the element + attribute width { text } +db.depth.attribute = + + ## Specifies the depth of the element + attribute depth { text } +db.contentwidth.attribute = + + ## Specifies the width of the content rectangle + attribute contentwidth { text } +db.contentdepth.attribute = + + ## Specifies the depth of the content rectangle + attribute contentdepth { text } +db.scalefit.enumeration = + + ## False (do not scale-to-fit; anamorphic scaling may occur) + "0" + | + ## True (scale-to-fit; anamorphic scaling is forbidden) + "1" +db.scale.attribute = + + ## Specifies the scaling factor + attribute scale { xsd:positiveInteger } +db.classid.attribute = + + ## Specifies a classid for a media object player + attribute classid { text } +db.autoplay.attribute = + + ## Specifies the autoplay setting for a media object player + attribute autoplay { text } +db.halign.enumeration = + + ## Centered horizontally + "center" + | + ## Aligned horizontally on the specified character + "char" + | + ## Fully justified (left and right margins or edges) + "justify" + | + ## Left aligned + "left" + | + ## Right aligned + "right" +db.valign.enumeration = + + ## Aligned on the bottom of the region + "bottom" + | + ## Centered vertically + "middle" + | + ## Aligned on the top of the region + "top" +db.biblio.class.enumeration = + + ## A digital object identifier. + "doi" + | + ## An international standard book number. + "isbn" + | + ## An international standard technical report number (ISO 10444). + "isrn" + | + ## An international standard serial number. + "issn" + | + ## An international standard text code. + "istc" + | + ## A Library of Congress reference number. + "libraryofcongress" + | + ## A publication number (an internal number or possibly organizational standard). + "pubsnumber" + | + ## A Uniform Resource Identifier + "uri" +db.biblio.class-enum.attribute = + + ## Identifies the kind of bibliographic identifier + attribute class { db.biblio.class.enumeration }? +db.biblio.class-other.attribute = + + ## Identifies the nature of the non-standard bibliographic identifier + attribute otherclass { xsd:NMTOKEN } +db.biblio.class-other.attributes = + + ## Identifies the kind of bibliographic identifier + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.biblio.class-other.attribute +db.biblio.class.attribute = + db.biblio.class-enum.attribute | db.biblio.class-other.attributes +db.pubwork.enumeration = + + ## An article + "article" + | + ## A bulletin board system + "bbs" + | + ## A book + "book" + | + ## A CD-ROM + "cdrom" + | + ## A chapter (as of a book) + "chapter" + | + ## A DVD + "dvd" + | + ## An email message + "emailmessage" + | + ## A gopher page + "gopher" + | + ## A journal + "journal" + | + ## A manuscript + "manuscript" + | + ## A posting to a newsgroup + "newsposting" + | + ## A part (as of a book) + "part" + | + ## A reference entry + "refentry" + | + ## A section (as of a book or article) + "section" + | + ## A series + "series" + | + ## A set (as of books) + "set" + | + ## A web page + "webpage" + | + ## A wiki page + "wiki" + | + ## Some other kind of work + "other" +db.biblio.pubwork.enumeration = db.pubwork.enumeration +db.biblio.pubwork-enum.attribute = + + ## Identifies the nature of the published work + attribute pubwork { db.biblio.pubwork.enumeration }? +db.biblio.pubwork-other.attribute = + + ## Identifies the nature of some other kind of published work + attribute otherpubwork { xsd:NMTOKEN } +db.biblio.pubwork-other.attributes = + + ## Identifies that this is some other kind of published work + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.biblio.pubwork-other.attribute +db.biblio.pubwork.attribute = + db.biblio.pubwork-enum.attribute | db.biblio.pubwork-other.attributes +db.ubiq.inlines = + (db.inlinemediaobject + | db.remark + | db.link.inlines + | db.alt + | db.trademark + | # below, effectively the publishing inlines (as of 5.0) + db.abbrev + | db.acronym + | db.date + | db._emphasis + | db.footnote + | db.footnoteref + | db._foreignphrase + | db._phrase + | db._quote + | db.subscript + | db.superscript + | db.wordasword) + | db.annotation + | (db._firstterm | db._glossterm) + | db.indexterm + | db.coref +db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)* +db._title = db.title? & db.titleabbrev? & db.subtitle? +db._title.req = db.title & db.titleabbrev? & db.subtitle? +db._title.only = db.title? & db.titleabbrev? +db._title.onlyreq = db.title & db.titleabbrev? +db._info = (db._title, db.titleforbidden.info?) | db.info? +db._info.title.req = + (db._title.req, db.titleforbidden.info?) | db.titlereq.info +db._info.title.only = + (db._title.only, db.titleforbidden.info?) | db.titleonly.info +db._info.title.onlyreq = + (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info +db._info.title.forbidden = db.titleforbidden.info? +db.all.inlines = + text + | db.ubiq.inlines + | db.general.inlines + | db.domain.inlines + | db.extension.inlines +db.general.inlines = + db.publishing.inlines + | db.product.inlines + | db.bibliography.inlines + | db.graphic.inlines + | db.indexing.inlines + | db.link.inlines +db.domain.inlines = + db.technical.inlines + | db.math.inlines + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines + | db.os.inlines + | db.programming.inlines + | db.error.inlines +db.technical.inlines = + (db.replaceable | db.package | db.parameter) + | db.termdef + | db.nonterminal + | (db.systemitem | db.option | db.optional | db.property) +db.product.inlines = + db.trademark + | (db.productnumber + | db.productname + | db.database + | db.application + | db.hardware) +db.bibliography.inlines = + db.citation + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.author + | db.person + | db.personname + | db.org + | db.orgname + | db.editor + | db.jobtitle +db.publishing.inlines = + (db.abbrev + | db.acronym + | db.date + | db.emphasis + | db.footnote + | db.footnoteref + | db.foreignphrase + | db.phrase + | db.quote + | db.revnumber + | db.subscript + | db.superscript + | db.wordasword) + | db.glossary.inlines + | db.coref +db.graphic.inlines = db.inlinemediaobject +db.indexing.inlines = notAllowed | db.indexterm +db.link.inlines = + (db.xref | db.link | db.olink | db.anchor) | db.biblioref +db.extension.inlines = notAllowed +db.nopara.blocks = + (db.list.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.indexterm + | db.synopsis.blocks + | db.admonition.blocks +db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara +db.all.blocks = + (db.nopara.blocks | db.para.blocks | db.extension.blocks) + | db.annotation +db.wrapper.blocks = db.formalgroup +db.formal.blocks = (db.example | db.figure | db.table) | db.equation +db.informal.blocks = + (db.informalexample | db.informalfigure | db.informaltable) + | db.informalequation +db.publishing.blocks = + db.sidebar | db.blockquote | db.address | db.epigraph +db.graphic.blocks = db.mediaobject | db.screenshot +db.technical.blocks = + db.procedure + | db.task + | (db.productionset | db.constraintdef) + | db.msgset +db.list.blocks = + (db.itemizedlist + | db.orderedlist + | db.procedure + | db.simplelist + | db.variablelist + | db.segmentedlist) + | db.glosslist + | db.bibliolist + | db.calloutlist + | db.qandaset +db.verbatim.blocks = + (db.screen | db.literallayout) + | (db.programlistingco | db.screenco) + | (db.programlisting | db.synopsis) +db.extension.blocks = notAllowed +db.info.extension = db._any +db.info.elements = + (db.abstract + | db.address + | db.artpagenums + | db.author + | db.authorgroup + | db.authorinitials + | db.bibliocoverage + | db.biblioid + | db.bibliosource + | db.collab + | db.confgroup + | db.contractsponsor + | db.contractnum + | db.copyright + | db.cover + | db.date + | db.edition + | db.editor + | db.issuenum + | 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.meta + | db.info.extension) + | db.annotation + | db.extendedlink + | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset) + | db.itermset + | (db.productname | db.productnumber) +db.bibliographic.elements = + db.info.elements + | db.publishing.inlines + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.person + | db.personblurb + | db.personname + | db.subtitle + | db.title + | db.titleabbrev +div { + db.title.role.attribute = attribute role { text } + db.title.attlist = + db.title.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.title = + + ## The text of the title of a section of a document or of a formal block-level element + element title { db.title.attlist, db.all.inlines* } +} +div { + db.titleabbrev.role.attribute = attribute role { text } + db.titleabbrev.attlist = + db.titleabbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.titleabbrev = + + ## The abbreviation of a title + element titleabbrev { db.titleabbrev.attlist, db.all.inlines* } +} +div { + db.subtitle.role.attribute = attribute role { text } + db.subtitle.attlist = + db.subtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subtitle = + + ## The subtitle of a document + element subtitle { db.subtitle.attlist, db.all.inlines* } +} +div { + db.info.role.attribute = attribute role { text } + db.info.attlist = db.info.role.attribute? & db.common.attributes + db.info = + + ## A wrapper for information about a component or other block + element info { db.info.attlist, (db._title & db.info.elements*) } +} +div { + db.titlereq.info.role.attribute = attribute role { text } + db.titlereq.info.attlist = + db.titlereq.info.role.attribute? & db.common.attributes + db.titlereq.info = + + ## A wrapper for information about a component or other block with a required title + element info { + db.titlereq.info.attlist, (db._title.req & db.info.elements*) + } +} +div { + db.titleonly.info.role.attribute = attribute role { text } + db.titleonly.info.attlist = + db.titleonly.info.role.attribute? & db.common.attributes + db.titleonly.info = + + ## A wrapper for information about a component or other block with only a title + element info { + db.titleonly.info.attlist, (db._title.only & db.info.elements*) + } +} +div { + db.titleonlyreq.info.role.attribute = attribute role { text } + db.titleonlyreq.info.attlist = + db.titleonlyreq.info.role.attribute? & db.common.attributes + db.titleonlyreq.info = + + ## A wrapper for information about a component or other block with only a required title + element info { + db.titleonlyreq.info.attlist, + (db._title.onlyreq & db.info.elements*) + } +} +div { + db.titleforbidden.info.role.attribute = attribute role { text } + db.titleforbidden.info.attlist = + db.titleforbidden.info.role.attribute? & db.common.attributes + db.titleforbidden.info = + + ## A wrapper for information about a component or other block without a title + element info { db.titleforbidden.info.attlist, db.info.elements* } +} +div { + db.subjectset.role.attribute = attribute role { text } + db.subjectset.scheme.attribute = + + ## Identifies the controlled vocabulary used by this set's terms + attribute scheme { xsd:NMTOKEN } + db.subjectset.attlist = + db.subjectset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subjectset.scheme.attribute? + db.subjectset = + + ## A set of terms describing the subject matter of a document + element subjectset { db.subjectset.attlist, db.subject+ } +} +div { + db.subject.role.attribute = attribute role { text } + db.subject.weight.attribute = + + ## Specifies a ranking for this subject relative to other subjects in the same set + attribute weight { text } + db.subject.attlist = + db.subject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subject.weight.attribute? + db.subject = + + ## One of a group of terms describing the subject matter of a document + element subject { db.subject.attlist, db.subjectterm+ } +} +div { + db.subjectterm.role.attribute = attribute role { text } + db.subjectterm.attlist = + db.subjectterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subjectterm = + + ## A term in a group of terms describing the subject matter of a document + element subjectterm { db.subjectterm.attlist, text } +} +div { + db.keywordset.role.attribute = attribute role { text } + db.keywordset.attlist = + db.keywordset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keywordset = + + ## A set of keywords describing the content of a document + element keywordset { db.keywordset.attlist, db.keyword+ } +} +div { + db.keyword.role.attribute = attribute role { text } + db.keyword.attlist = + db.keyword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keyword = + + ## One of a set of keywords describing the content of a document + element keyword { db.keyword.attlist, text } +} +db.table.choice = notAllowed | db.cals.table | db.html.table +db.informaltable.choice = + notAllowed | db.cals.informaltable | db.html.informaltable +db.table = db.table.choice +db.informaltable = db.informaltable.choice +div { + db.procedure.role.attribute = attribute role { text } + db.procedure.type.attribute = + + ## Identifies the type of procedure + attribute type { text }? + db.procedure.attlist = + db.procedure.role.attribute? + & db.procedure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + db.procedure.info = db._info.title.only + db.procedure = + + ## A list of operations to be performed in a well-defined sequence + element procedure { + db.procedure.attlist, + db.procedure.info, + db.all.blocks*, + db.step+, + db.result? + } +} +div { + db.step.role.attribute = attribute role { text } + db.step.attlist = + db.step.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.step.info = db._info.title.only + # This content model is blocks*, step|stepalternatives, blocks* but + # expressed this way it avoids UPA issues in XSD and DTD versions + db.step = + + ## A unit of action in a procedure + element step { + db.step.attlist, + db.step.info, + ((db.all.blocks+, + ((db.substeps | db.stepalternatives), db.all.blocks*)?, + db.result?) + | ((db.substeps | db.stepalternatives), + db.all.blocks*, + db.result?)) + } +} +div { + db.stepalternatives.role.attribute = attribute role { text } + db.stepalternatives.attlist = + db.stepalternatives.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.stepalternatives.info = db._info.title.forbidden + db.stepalternatives = + + ## Alternative steps in a procedure + element stepalternatives { + db.stepalternatives.attlist, db.stepalternatives.info, db.step+ + } +} +div { + db.substeps.role.attribute = attribute role { text } + db.substeps.attlist = + db.substeps.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.substeps = + + ## A wrapper for steps that occur within steps in a procedure + element substeps { db.substeps.attlist, db.step+ } +} +div { + db.result.role.attribute = attribute role { text } + db.result.attlist = + db.result.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.result = + + ## A wrapper for identifying the results of a procedure or step + element result { db.result.attlist, db.all.blocks+ } +} +div { + db.sidebar.floatstyle.attribute = db.floatstyle.attribute + db.sidebar.role.attribute = attribute role { text } + db.sidebar.attlist = + db.sidebar.role.attribute? + & db.sidebar.floatstyle.attribute? + & db.common.attributes + & db.common.linking.attributes + db.sidebar.info = db._info + db.sidebar = + + ## A portion of a document that is isolated from the main narrative flow + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:sidebar" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of sidebar" + ] + ] + ] + ] + element sidebar { + db.sidebar.attlist, db.sidebar.info, db.all.blocks+ + } +} +div { + db.abstract.role.attribute = attribute role { text } + db.abstract.attlist = + db.abstract.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abstract.info = db._info.title.only + db.abstract = + + ## A summary + element abstract { + db.abstract.attlist, db.abstract.info, db.all.blocks+ + } +} +div { + db.personblurb.role.attribute = attribute role { text } + db.personblurb.attlist = + db.personblurb.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personblurb.info = db._info.title.only + db.personblurb = + + ## A short description or note about a person + element personblurb { + db.personblurb.attlist, db.personblurb.info, db.para.blocks+ + } +} +div { + db.blockquote.role.attribute = attribute role { text } + db.blockquote.attlist = + db.blockquote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.blockquote.info = db._info.title.only + db.blockquote = + + ## A quotation set off from the main text + element blockquote { + db.blockquote.attlist, + db.blockquote.info, + db.attribution?, + db.all.blocks+ + } +} +div { + db.attribution.role.attribute = attribute role { text } + db.attribution.attlist = + db.attribution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.attribution = + + ## The source of a block quote or epigraph + element attribution { + db.attribution.attlist, + (db._text + | db.person + | db.personname + | db.citetitle + | db.citation)* + } +} +div { + db.bridgehead.renderas.enumeration = + + ## Render as a first-level section + "sect1" + | + ## Render as a second-level section + "sect2" + | + ## Render as a third-level section + "sect3" + | + ## Render as a fourth-level section + "sect4" + | + ## Render as a fifth-level section + "sect5" + db.bridgehead.renderas-enum.attribute = + + ## Indicates how the bridge head should be rendered + attribute renderas { db.bridgehead.renderas.enumeration }? + db.bridgehead.renderas-other.attribute = + + ## Identifies the nature of the non-standard rendering + attribute otherrenderas { xsd:NMTOKEN } + db.bridgehead.renderas-other.attributes = + + ## Indicates how the bridge head should be rendered + attribute renderas { + + ## Identifies a non-standard rendering + "other" + } + & db.bridgehead.renderas-other.attribute + db.bridgehead.renderas.attribute = + db.bridgehead.renderas-enum.attribute + | db.bridgehead.renderas-other.attributes + db.bridgehead.role.attribute = attribute role { text } + db.bridgehead.attlist = + db.bridgehead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bridgehead.renderas.attribute? + db.bridgehead = + + ## A free-floating heading + element bridgehead { db.bridgehead.attlist, db.all.inlines* } +} +div { + db.remark.role.attribute = attribute role { text } + db.remark.attlist = + db.remark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.remark = + + ## A remark (or comment) intended for presentation in a draft manuscript + element remark { db.remark.attlist, db.all.inlines* } +} +div { + db.epigraph.role.attribute = attribute role { text } + db.epigraph.attlist = + db.epigraph.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.epigraph.info = db._info.title.forbidden + db.epigraph = + + ## A short inscription at the beginning of a document or component + element epigraph { + db.epigraph.attlist, + db.epigraph.info, + db.attribution?, + (db.para.blocks | db.literallayout)+ + } +} +div { + db.footnote.role.attribute = attribute role { text } + db.footnote.label.attribute = + + ## Identifies the desired footnote mark + attribute label { xsd:NMTOKEN } + db.footnote.attlist = + db.footnote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.footnote.label.attribute? + db.footnote = + + ## A footnote + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:footnote)" + "footnote must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:epigraph)" + "epigraph must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of footnote" + ] + ] + ] + ] + element footnote { db.footnote.attlist, db.all.blocks+ } +} +div { + db.formalpara.role.attribute = attribute role { text } + db.formalpara.attlist = + db.formalpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.formalpara.info = db._info.title.onlyreq + db.formalpara = + + ## A paragraph with a title + element formalpara { + db.formalpara.attlist, + db.formalpara.info, + db.indexing.inlines*, + db.para + } +} +div { + db.para.role.attribute = attribute role { text } + db.para.attlist = + db.para.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.para.info = db._info.title.forbidden + db.para = + + ## A paragraph + element para { + db.para.attlist, + db.para.info, + (db.all.inlines | db.nopara.blocks)* + } +} +div { + db.simpara.role.attribute = attribute role { text } + db.simpara.attlist = + db.simpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.simpara.info = db._info.title.forbidden + db.simpara = + + ## A paragraph that contains only text and inline markup, no block elements + element simpara { + db.simpara.attlist, db.simpara.info, db.all.inlines* + } +} +div { + db.itemizedlist.role.attribute = attribute role { text } + db.itemizedlist.mark.attribute = + + ## Identifies the type of mark to be used on items in this list + attribute mark { xsd:NMTOKEN } + db.itemizedlist.attlist = + db.itemizedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.itemizedlist.mark.attribute? + db.itemizedlist.info = db._info.title.only + db.itemizedlist = + + ## A list in which each entry is marked with a bullet or other dingbat + element itemizedlist { + db.itemizedlist.attlist, + db.itemizedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.orderedlist.role.attribute = attribute role { text } + db.orderedlist.continuation.enumeration = + + ## Specifies that numbering should begin where the preceding list left off + "continues" + | + ## Specifies that numbering should begin again at 1 + "restarts" + db.orderedlist.continuation.attribute = + + ## Indicates how list numbering should begin relative to the immediately preceding list + attribute continuation { db.orderedlist.continuation.enumeration } + db.orderedlist.startingnumber.attribute = + + ## Specifies the initial line number + attribute startingnumber { xsd:integer } + db.orderedlist.inheritnum.enumeration = + + ## Specifies that numbering should ignore list nesting + "ignore" + | + ## Specifies that numbering should inherit from outer-level lists + "inherit" + db.orderedlist.inheritnum.attribute = + + ## Indicates whether or not item numbering should be influenced by list nesting + attribute inheritnum { db.orderedlist.inheritnum.enumeration } + db.orderedlist.numeration.enumeration = + + ## Specifies Arabic numeration (1, 2, 3, …) + "arabic" + | + ## Specifies upper-case alphabetic numeration (A, B, C, …) + "upperalpha" + | + ## Specifies lower-case alphabetic numeration (a, b, c, …) + "loweralpha" + | + ## Specifies upper-case Roman numeration (I, II, III, …) + "upperroman" + | + ## Specifies lower-case Roman numeration (i, ii, iii …) + "lowerroman" + db.orderedlist.numeration.attribute = + + ## Indicates the desired numeration + attribute numeration { db.orderedlist.numeration.enumeration } + db.orderedlist.attlist = + db.orderedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & (db.orderedlist.continuation.attribute + | db.orderedlist.startingnumber.attribute)? + & db.orderedlist.inheritnum.attribute? + & db.orderedlist.numeration.attribute? + db.orderedlist.info = db._info.title.only + db.orderedlist = + + ## A list in which each entry is marked with a sequentially incremented label + element orderedlist { + db.orderedlist.attlist, + db.orderedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.listitem.role.attribute = attribute role { text } + db.listitem.override.attribute = + + ## Specifies the keyword for the type of mark that should be used on this + ## item, instead of the mark that would be used by default + attribute override { xsd:NMTOKEN } + db.listitem.attlist = + db.listitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.listitem.override.attribute? + db.listitem.info = db._info.title.forbidden + db.listitem = + + ## A wrapper for the elements of a list item + element listitem { + db.listitem.attlist, db.listitem.info, db.all.blocks+ + } +} +div { + db.segmentedlist.role.attribute = attribute role { text } + db.segmentedlist.attlist = + db.segmentedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segmentedlist.info = db._info.title.only + db.segmentedlist = + + ## A segmented list, a list of sets of elements + element segmentedlist { + db.segmentedlist.attlist, + db.segmentedlist.info, + db.segtitle+, + db.seglistitem+ + } +} +div { + db.segtitle.role.attribute = attribute role { text } + db.segtitle.attlist = + db.segtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segtitle = + + ## The title of an element of a list item in a segmented list + element segtitle { db.segtitle.attlist, db.all.inlines* } +} +div { + db.seglistitem.role.attribute = attribute role { text } + db.seglistitem.attlist = + db.seglistitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seglistitem = + + ## A list item in a segmented list + [ + s:pattern [ + s:title [ "Cardinality of segments and titles" ] + s:rule [ + context = "db:seglistitem" + s:assert [ + test = "count(db:seg) = count(../db:segtitle)" + "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist" + ] + ] + ] + ] + element seglistitem { db.seglistitem.attlist, db.seg+ } +} +div { + db.seg.role.attribute = attribute role { text } + db.seg.attlist = + db.seg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seg = + + ## An element of a list item in a segmented list + element seg { db.seg.attlist, db.all.inlines* } +} +div { + db.simplelist.role.attribute = attribute role { text } + db.simplelist.type.enumeration = + + ## A tabular presentation in row-major order. + "horiz" + | + ## A tabular presentation in column-major order. + "vert" + | + ## An inline presentation, usually a comma-delimited list. + "inline" + db.simplelist.type.attribute = + + ## Specifies the type of list presentation + [ a:defaultValue = "vert" ] + attribute type { db.simplelist.type.enumeration } + db.simplelist.columns.attribute = + + ## Specifies the number of columns for horizontal or vertical presentation + attribute columns { xsd:integer } + db.simplelist.attlist = + db.simplelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplelist.type.attribute? + & db.simplelist.columns.attribute? + db.simplelist = + + ## An undecorated list of single words or short phrases + element simplelist { db.simplelist.attlist, db.member+ } +} +div { + db.member.role.attribute = attribute role { text } + db.member.attlist = + db.member.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.member = + + ## An element of a simple list + element member { db.member.attlist, db.all.inlines* } +} +div { + db.variablelist.role.attribute = attribute role { text } + db.variablelist.termlength.attribute = + + ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + attribute termlength { text } + db.variablelist.attlist = + db.variablelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.variablelist.termlength.attribute? + db.variablelist.info = db._info.title.only + db.variablelist = + + ## A list in which each entry is composed of a set of one or more terms and an associated description + element variablelist { + db.variablelist.attlist, + db.variablelist.info, + db.all.blocks*, + db.varlistentry+ + } +} +div { + db.varlistentry.role.attribute = attribute role { text } + db.varlistentry.attlist = + db.varlistentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varlistentry = + + ## A wrapper for a set of terms and the associated description in a variable list + element varlistentry { + db.varlistentry.attlist, db.term+, db.listitem + } +} +div { + db.term.role.attribute = attribute role { text } + db.term.attlist = + db.term.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.term = + + ## The word or phrase being defined or described in a variable list + element term { db.term.attlist, db.all.inlines* } +} +div { + db.example.role.attribute = attribute role { text } + db.example.label.attribute = db.label.attribute + db.example.width.attribute = db.width.characters.attribute + db.example.pgwide.attribute = db.pgwide.attribute + db.example.floatstyle.attribute = db.floatstyle.attribute + db.example.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.example.attlist = + db.example.role.attribute? + & db.example.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.example.label.attribute? + & db.example.floatstyle.attribute? + & (db.example.width.attribute | db.example.pgwide.attribute)? + db.example.info = db._info.title.onlyreq + db.example = + + ## A formal example, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of example" + ] + ] + ] + ] + element example { + db.example.attlist, db.example.info, db.all.blocks+, db.caption? + } +} +div { + db.informalexample.role.attribute = attribute role { text } + db.informalexample.width.attribute = db.width.characters.attribute + db.informalexample.pgwide.attribute = db.pgwide.attribute + db.informalexample.floatstyle.attribute = db.floatstyle.attribute + db.informalexample.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.informalexample.attlist = + db.informalexample.role.attribute? + & db.informalexample.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalexample.floatstyle.attribute? + & (db.informalexample.width.attribute + | db.informalexample.pgwide.attribute)? + db.informalexample.info = db._info.title.forbidden + db.informalexample = + + ## A displayed example without a title + element informalexample { + db.informalexample.attlist, + db.informalexample.info, + db.all.blocks+, + db.caption? + } +} +db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co +db.verbatim.contentmodel = + db._info.title.forbidden, (db.textobject | db.verbatim.inlines*) +div { + db.literallayout.role.attribute = attribute role { text } + db.literallayout.class.enumeration = + + ## The literal layout should be formatted with a monospaced font + "monospaced" + | + ## The literal layout should be formatted with the current font + "normal" + db.literallayout.class.attribute = + + ## Specifies the class of literal layout + attribute class { db.literallayout.class.enumeration } + db.literallayout.attlist = + db.literallayout.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.literallayout.class.attribute? + db.literallayout = + + ## A block of text in which line breaks and white space are to be reproduced faithfully + element literallayout { + db.literallayout.attlist, db.verbatim.contentmodel + } +} +div { + db.screen.role.attribute = attribute role { text } + db.screen.width.attribute = db.width.characters.attribute + db.screen.attlist = + db.screen.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.screen.width.attribute? + db.screen = + + ## Text that a user sees or might see on a computer screen + element screen { db.screen.attlist, db.verbatim.contentmodel } +} +div { + db.screenshot.role.attribute = attribute role { text } + db.screenshot.attlist = + db.screenshot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenshot.info = db._info + db.screenshot = + + ## A representation of what the user sees or might see on a computer screen + element screenshot { + db.screenshot.attlist, db.screenshot.info, db.mediaobject + } +} +div { + db.figure.role.attribute = attribute role { text } + db.figure.label.attribute = db.label.attribute + db.figure.pgwide.attribute = db.pgwide.attribute + db.figure.floatstyle.attribute = db.floatstyle.attribute + db.figure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.figure.attlist = + db.figure.role.attribute? + & db.figure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.figure.label.attribute? + & db.figure.pgwide.attribute? + & db.figure.floatstyle.attribute? + db.figure.info = db._info.title.onlyreq + db.figure = + + ## A formal figure, generally an illustration, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of figure" + ] + ] + ] + ] + element figure { + db.figure.attlist, db.figure.info, db.all.blocks+, db.caption? + } +} +div { + db.informalfigure.role.attribute = attribute role { text } + db.informalfigure.label.attribute = db.label.attribute + db.informalfigure.pgwide.attribute = db.pgwide.attribute + db.informalfigure.floatstyle.attribute = db.floatstyle.attribute + db.informalfigure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.informalfigure.attlist = + db.informalfigure.role.attribute? + & db.informalfigure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalfigure.label.attribute? + & db.informalfigure.pgwide.attribute? + & db.informalfigure.floatstyle.attribute? + db.informalfigure.info = db._info.title.forbidden + db.informalfigure = + + ## A untitled figure + element informalfigure { + db.informalfigure.attlist, + db.informalfigure.info, + db.all.blocks+, + db.caption? + } +} +db.mediaobject.content = + (db.videoobject | db.audioobject | db.imageobject | db.textobject) + | db.imageobjectco +div { + db.mediaobject.role.attribute = attribute role { text } + db.mediaobject.attlist = + db.mediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mediaobject.info = db._info.title.forbidden + db.mediaobject = + + ## A displayed media object (video, audio, image, etc.) + element mediaobject { + db.mediaobject.attlist, + db.mediaobject.info, + db.alt?, + db.mediaobject.content+, + db.caption? + } +} +div { + db.inlinemediaobject.role.attribute = attribute role { text } + db.inlinemediaobject.attlist = + db.inlinemediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlinemediaobject.info = db._info.title.forbidden + db.inlinemediaobject = + + ## An inline media object (video, audio, image, and so on) + element inlinemediaobject { + db.inlinemediaobject.attlist, + db.inlinemediaobject.info, + db.alt?, + db.mediaobject.content+ + } +} +div { + db.videoobject.role.attribute = attribute role { text } + db.videoobject.attlist = + db.videoobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.videoobject.info = db._info.title.forbidden + db.videoobject = + + ## A wrapper for video data and its associated meta-information + element videoobject { + db.videoobject.attlist, db.videoobject.info, db.videodata+ + } +} +div { + db.audioobject.role.attribute = attribute role { text } + db.audioobject.attlist = + db.audioobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.audioobject.info = db._info.title.forbidden + db.audioobject = + + ## A wrapper for audio data and its associated meta-information + element audioobject { + db.audioobject.attlist, db.audioobject.info, db.audiodata+ + } +} +db.imageobject.content = + db.imagedata+ | db.imagedata.mathml | db.imagedata.svg+ +div { + db.imageobject.role.attribute = attribute role { text } + db.imageobject.attlist = + db.imageobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobject.info = db._info.title.forbidden + db.imageobject = + + ## A wrapper for image data and its associated meta-information + element imageobject { + db.imageobject.attlist, + db.imageobject.info, + db.imageobject.content + } +} +div { + db.textobject.role.attribute = attribute role { text } + db.textobject.attlist = + db.textobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.textobject.info = db._info.title.forbidden + db.textobject = + + ## A wrapper for a text description of an object and its associated meta-information + element textobject { + db.textobject.attlist, + db.textobject.info, + (db.phrase | db.textdata | db.all.blocks+) + } +} +div { + db.videodata.role.attribute = attribute role { text } + db.videodata.align.enumeration = db.halign.enumeration + db.videodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.videodata.align.enumeration } + db.videodata.autoplay.attribute = db.autoplay.attribute + db.videodata.classid.attribute = db.classid.attribute + db.videodata.valign.enumeration = db.valign.enumeration + db.videodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.videodata.valign.enumeration } + db.videodata.width.attribute = db.width.attribute + db.videodata.depth.attribute = db.depth.attribute + db.videodata.contentwidth.attribute = db.contentwidth.attribute + db.videodata.contentdepth.attribute = db.contentdepth.attribute + db.videodata.scalefit.enumeration = db.scalefit.enumeration + db.videodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.videodata.scalefit.enumeration } + db.videodata.scale.attribute = db.scale.attribute + db.videodata.attlist = + db.videodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.videodata.align.attribute? + & db.videodata.valign.attribute? + & db.videodata.width.attribute? + & db.videodata.contentwidth.attribute? + & db.videodata.scalefit.attribute? + & db.videodata.scale.attribute? + & db.videodata.depth.attribute? + & db.videodata.contentdepth.attribute? + & db.videodata.autoplay.attribute? + & db.videodata.classid.attribute? + db.videodata.info = db._info.title.forbidden + db.videodata = + + ## Pointer to external video data + element videodata { + db.videodata.attlist, db.videodata.info, db.multimediaparam* + } +} +div { + db.audiodata.role.attribute = attribute role { text } + db.audiodata.align.enumeration = db.halign.enumeration + db.audiodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.audiodata.align.enumeration } + db.audiodata.autoplay.attribute = db.autoplay.attribute + db.audiodata.classid.attribute = db.classid.attribute + db.audiodata.contentwidth.attribute = db.contentwidth.attribute + db.audiodata.contentdepth.attribute = db.contentdepth.attribute + db.audiodata.depth.attribute = db.depth.attribute + db.audiodata.scale.attribute = db.scale.attribute + db.audiodata.scalefit.enumeration = db.scalefit.enumeration + db.audiodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.audiodata.scalefit.enumeration } + db.audiodata.valign.enumeration = db.valign.enumeration + db.audiodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.audiodata.valign.enumeration } + db.audiodata.width.attribute = db.width.attribute + db.audiodata.attlist = + db.audiodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.audiodata.align.attribute? + & db.audiodata.autoplay.attribute? + & db.audiodata.classid.attribute? + & db.audiodata.contentdepth.attribute? + & db.audiodata.contentwidth.attribute? + & db.audiodata.depth.attribute? + & db.audiodata.scale.attribute? + & db.audiodata.scalefit.attribute? + & db.audiodata.valign.attribute? + & db.audiodata.width.attribute? + db.audiodata.info = db._info.title.forbidden + db.audiodata = + + ## Pointer to external audio data + element audiodata { + db.audiodata.attlist, db.audiodata.info, db.multimediaparam* + } +} +div { + db.imagedata.role.attribute = attribute role { text } + db.imagedata.align.enumeration = db.halign.enumeration + db.imagedata.align.attribute = + + ## Specifies the (horizontal) alignment of the image data + attribute align { db.imagedata.align.enumeration } + db.imagedata.valign.enumeration = db.valign.enumeration + db.imagedata.valign.attribute = + + ## Specifies the vertical alignment of the image data + attribute valign { db.imagedata.valign.enumeration } + db.imagedata.width.attribute = db.width.attribute + db.imagedata.depth.attribute = db.depth.attribute + db.imagedata.contentwidth.attribute = db.contentwidth.attribute + db.imagedata.contentdepth.attribute = db.contentdepth.attribute + db.imagedata.scalefit.enumeration = db.scalefit.enumeration + db.imagedata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.imagedata.scalefit.enumeration } + db.imagedata.scale.attribute = db.scale.attribute + db.imagedata.attlist = + db.imagedata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.info = db._info.title.forbidden + db.imagedata = + + ## Pointer to external image data + element imagedata { + db.imagedata.attlist, db.imagedata.info, db.multimediaparam* + } +} +div { + db.textdata.role.attribute = attribute role { text } + db.textdata.encoding.attribute = + + ## Identifies the encoding of the text in the external file + attribute encoding { text } + db.textdata.attlist = + db.textdata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.textdata.encoding.attribute? + db.textdata.info = db._info.title.forbidden + db.textdata = + + ## Pointer to external text data + element textdata { db.textdata.attlist, db.textdata.info } +} +div { + db.multimediaparam.role.attribute = attribute role { text } + db.multimediaparam.name.attribute = + + ## Specifies the name of the parameter + attribute name { text } + db.multimediaparam.value.attribute = + + ## Specifies the value of the parameter + attribute value { text } + db.multimediaparam.valuetype.attribute = + + ## Specifies the type of the value of the parameter + attribute valuetype { text } + db.multimediaparam.attlist = + db.multimediaparam.role.attribute? + & db.common.attributes + & db.multimediaparam.name.attribute + & db.multimediaparam.value.attribute + & db.multimediaparam.valuetype.attribute? + db.multimediaparam = + + ## Application specific parameters for a media player + element multimediaparam { db.multimediaparam.attlist, empty } +} +div { + db.caption.role.attribute = attribute role { text } + db.caption.attlist = + db.caption.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caption.info = db._info.title.forbidden + db.caption = + + ## A caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + ] + element caption { + db.caption.attlist, db.caption.info, db.all.blocks+ + } +} +div { + db.address.role.attribute = attribute role { text } + db.address.attlist = + db.address.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.address = + + ## A real-world address, generally a postal address + element address { + db.address.attlist, + (db._text + | db.personname + | db.orgname + | db.pob + | db.street + | db.city + | db.state + | db.postcode + | db.country + | db.phone + | db.fax + | db.email + | db.uri + | db.otheraddr)* + } +} +div { + db.street.role.attribute = attribute role { text } + db.street.attlist = + db.street.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.street = + + ## A street address in an address + element street { db.street.attlist, db._text } +} +div { + db.pob.role.attribute = attribute role { text } + db.pob.attlist = + db.pob.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pob = + + ## A post office box in an address + element pob { db.pob.attlist, db._text } +} +div { + db.postcode.role.attribute = attribute role { text } + db.postcode.attlist = + db.postcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.postcode = + + ## A postal code in an address + element postcode { db.postcode.attlist, db._text } +} +div { + db.city.role.attribute = attribute role { text } + db.city.attlist = + db.city.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.city = + + ## The name of a city in an address + element city { db.city.attlist, db._text } +} +div { + db.state.role.attribute = attribute role { text } + db.state.attlist = + db.state.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.state = + + ## A state or province in an address + element state { db.state.attlist, db._text } +} +div { + db.country.role.attribute = attribute role { text } + db.country.attlist = + db.country.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.country = + + ## The name of a country + element country { db.country.attlist, db._text } +} +div { + db.phone.role.attribute = attribute role { text } + db.phone.attlist = + db.phone.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.phone = + + ## A telephone number + element phone { db.phone.attlist, db._text } +} +div { + db.fax.role.attribute = attribute role { text } + db.fax.attlist = + db.fax.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.fax = + + ## A fax number + element fax { db.fax.attlist, db._text } +} +div { + db.otheraddr.role.attribute = attribute role { text } + db.otheraddr.attlist = + db.otheraddr.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.otheraddr = + + ## Uncategorized information in address + element otheraddr { db.otheraddr.attlist, db._text } +} +div { + db.affiliation.role.attribute = attribute role { text } + db.affiliation.attlist = + db.affiliation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.affiliation = + + ## The institutional affiliation of an individual + element affiliation { + db.affiliation.attlist, + db.shortaffil?, + db.jobtitle*, + (db.org? | (db.orgname?, db.orgdiv*, db.address*)) + } +} +div { + db.shortaffil.role.attribute = attribute role { text } + db.shortaffil.attlist = + db.shortaffil.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.shortaffil = + + ## A brief description of an affiliation + element shortaffil { db.shortaffil.attlist, db._text } +} +div { + db.jobtitle.role.attribute = attribute role { text } + db.jobtitle.attlist = + db.jobtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.jobtitle = + + ## The title of an individual in an organization + element jobtitle { db.jobtitle.attlist, db._text } +} +div { + db.orgname.class.enumeration = + + ## A consortium + "consortium" + | + ## A corporation + "corporation" + | + ## An informal organization + "informal" + | + ## A non-profit organization + "nonprofit" + db.orgname.class-enum.attribute = + + ## Specifies the nature of the organization + attribute class { db.orgname.class.enumeration } + db.orgname.class-other.attributes = + + ## Specifies the nature of the organization + attribute class { + + ## Indicates a non-standard organization class + "other" + }, + + ## Identifies the non-standard nature of the organization + attribute otherclass { text } + db.orgname.class.attribute = + db.orgname.class-enum.attribute | db.orgname.class-other.attributes + db.orgname.role.attribute = attribute role { text } + db.orgname.attlist = + db.orgname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.orgname.class.attribute? + db.orgname = + + ## The name of an organization + element orgname { db.orgname.attlist, db._text } +} +div { + db.orgdiv.role.attribute = attribute role { text } + db.orgdiv.attlist = + db.orgdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.orgdiv = + + ## A division of an organization + element orgdiv { db.orgdiv.attlist, db.all.inlines* } +} +div { + db.artpagenums.role.attribute = attribute role { text } + db.artpagenums.attlist = + db.artpagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.artpagenums = + + ## The page numbers of an article as published + element artpagenums { db.artpagenums.attlist, db._text } +} +div { + db.personname.role.attribute = attribute role { text } + db.personname.attlist = + db.personname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personname = + + ## The personal name of an individual + element personname { + db.personname.attlist, + (db._text + | (db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername)+ + | (db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername)+) + } +} +db.person.author.contentmodel = + db.personname, + (db.personblurb + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.org.author.contentmodel = + db.orgname, + (db.orgdiv + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.credit.contentmodel = + db.person.author.contentmodel | db.org.author.contentmodel +div { + db.author.role.attribute = attribute role { text } + db.author.attlist = + db.author.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.author = + + ## The name of an individual author + element author { db.author.attlist, db.credit.contentmodel } +} +div { + db.authorgroup.role.attribute = attribute role { text } + db.authorgroup.attlist = + db.authorgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorgroup = + + ## Wrapper for author information when a document has multiple authors or collaborators + element authorgroup { + db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+ + } +} +div { + db.collab.role.attribute = attribute role { text } + db.collab.attlist = + db.collab.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.collab = + + ## Identifies a collaborator + element collab { + db.collab.attlist, + (db.person | db.personname | db.org | db.orgname)+, + db.affiliation* + } +} +div { + db.authorinitials.role.attribute = attribute role { text } + db.authorinitials.attlist = + db.authorinitials.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorinitials = + + ## The initials or other short identifier for an author + element authorinitials { db.authorinitials.attlist, db._text } +} +div { + db.person.role.attribute = attribute role { text } + db.person.attlist = + db.person.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.person = + + ## A person and associated metadata + element person { + db.person.attlist, + db.personname, + (db.address + | db.affiliation + | db.email + | db.uri + | db.personblurb)* + } +} +div { + db.org.role.attribute = attribute role { text } + db.org.attlist = + db.org.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.org = + + ## An organization and associated metadata + element org { + db.org.attlist, + db.orgname, + (db.address | db.affiliation | db.email | db.uri | db.orgdiv)* + } +} +div { + db.confgroup.role.attribute = attribute role { text } + db.confgroup.attlist = + db.confgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confgroup = + + ## A wrapper for document meta-information about a conference + element confgroup { + db.confgroup.attlist, + (db.confdates + | db.conftitle + | db.confnum + | db.confsponsor + | db.address)* + } +} +div { + db.confdates.role.attribute = attribute role { text } + db.confdates.attlist = + db.confdates.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confdates = + + ## The dates of a conference for which a document was written + element confdates { db.confdates.attlist, db._text } +} +div { + db.conftitle.role.attribute = attribute role { text } + db.conftitle.attlist = + db.conftitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.conftitle = + + ## The title of a conference for which a document was written + element conftitle { db.conftitle.attlist, db._text } +} +div { + db.confnum.role.attribute = attribute role { text } + db.confnum.attlist = + db.confnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confnum = + + ## An identifier, frequently numerical, associated with a conference for which a document was written + element confnum { db.confnum.attlist, db._text } +} +div { + db.confsponsor.role.attribute = attribute role { text } + db.confsponsor.attlist = + db.confsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confsponsor = + + ## The sponsor of a conference for which a document was written + element confsponsor { db.confsponsor.attlist, db._text } +} +div { + db.contractnum.role.attribute = attribute role { text } + db.contractnum.attlist = + db.contractnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractnum = + + ## The contract number of a document + element contractnum { db.contractnum.attlist, db._text } +} +div { + db.contractsponsor.role.attribute = attribute role { text } + db.contractsponsor.attlist = + db.contractsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractsponsor = + + ## The sponsor of a contract + element contractsponsor { db.contractsponsor.attlist, db._text } +} +div { + db.copyright.role.attribute = attribute role { text } + db.copyright.attlist = + db.copyright.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.copyright = + + ## Copyright information about a document + element copyright { db.copyright.attlist, db.year+, db.holder* } +} +div { + db.year.role.attribute = attribute role { text } + db.year.attlist = + db.year.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.year = + + ## The year of publication of a document + element year { db.year.attlist, db._text } +} +div { + db.holder.role.attribute = attribute role { text } + db.holder.attlist = + db.holder.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.holder = + + ## The name of the individual or organization that holds a copyright + element holder { db.holder.attlist, db._text } +} +db.cover.contentmodel = + (db.para.blocks + | db.extension.blocks + | db.list.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.synopsis.blocks +div { + db.cover.role.attribute = attribute role { text } + db.cover.attlist = + db.cover.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.cover = + + ## Additional content for the cover of a publication + element cover { db.cover.attlist, db.cover.contentmodel+ } +} +db.date.contentmodel = + xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text +div { + db.date.role.attribute = attribute role { text } + db.date.attlist = + db.date.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.date = + + ## The date of publication or revision of a document + element date { db.date.attlist, db.date.contentmodel } +} +div { + db.edition.role.attribute = attribute role { text } + db.edition.attlist = + db.edition.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.edition = + + ## The name or number of an edition of a document + element edition { db.edition.attlist, db._text } +} +div { + db.editor.role.attribute = attribute role { text } + db.editor.attlist = + db.editor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.editor = + + ## The name of the editor of a document + element editor { db.editor.attlist, db.credit.contentmodel } +} +div { + db.biblioid.role.attribute = attribute role { text } + db.biblioid.attlist = + db.biblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.biblioid = + + ## An identifier for a document + element biblioid { db.biblioid.attlist, db._text } +} +div { + db.citebiblioid.role.attribute = attribute role { text } + db.citebiblioid.attlist = + db.citebiblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.citebiblioid = + + ## A citation of a bibliographic identifier + element citebiblioid { db.citebiblioid.attlist, db._text } +} +div { + db.bibliosource.role.attribute = attribute role { text } + db.bibliosource.attlist = + db.bibliosource.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.bibliosource = + + ## The source of a document + element bibliosource { db.bibliosource.attlist, db._text } +} +div { + db.bibliorelation.type.enumeration = + + ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + "hasformat" + | + ## The described resource includes the referenced resource either physically or logically + "haspart" + | + ## The described resource has a version, edition, or adaptation, namely, the referenced resource + "hasversion" + | + ## The described resource is the same intellectual content of the referenced resource, but presented in another format + "isformatof" + | + ## The described resource is a physical or logical part of the referenced resource + "ispartof" + | + ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource + "isreferencedby" + | + ## The described resource is supplanted, displaced, or superceded by the referenced resource + "isreplacedby" + | + ## The described resource is required by the referenced resource, either physically or logically + "isrequiredby" + | + ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + "isversionof" + | + ## The described resource references, cites, or otherwise points to the referenced resource + "references" + | + ## The described resource supplants, displaces, or supersedes the referenced resource + "replaces" + | + ## The described resource requires the referenced resource to support its function, delivery, or coherence of content + "requires" + db.bibliorelation.type-enum.attribute = + + ## Identifies the type of relationship + attribute type { db.bibliorelation.type.enumeration }? + db.bibliorelation.type-other.attributes = + + ## Identifies the type of relationship + attribute type { + + ## The described resource has a non-standard relationship with the referenced resource + "othertype" + }?, + + ## A keyword that identififes the type of the non-standard relationship + attribute othertype { xsd:NMTOKEN } + db.bibliorelation.type.attribute = + db.bibliorelation.type-enum.attribute + | db.bibliorelation.type-other.attributes + db.bibliorelation.role.attribute = attribute role { text } + db.bibliorelation.attlist = + db.bibliorelation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + & db.bibliorelation.type.attribute + db.bibliorelation = + + ## The relationship of a document to another + element bibliorelation { db.bibliorelation.attlist, db._text } +} +div { + db.bibliocoverage.spacial.enumeration = + + ## The DCMI Point identifies a point in space using its geographic coordinates + "dcmipoint" + | + ## ISO 3166 Codes for the representation of names of countries + "iso3166" + | + ## The DCMI Box identifies a region of space using its geographic limits + "dcmibox" + | + ## The Getty Thesaurus of Geographic Names + "tgn" + db.bibliocoverage.spatial-enum.attribute = + + ## Specifies the type of spatial coverage + attribute spatial { db.bibliocoverage.spacial.enumeration }? + db.bibliocoverage.spatial-other.attributes = + + ## Specifies the type of spatial coverage + attribute spatial { + + ## Identifies a non-standard type of coverage + "otherspatial" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute otherspatial { xsd:NMTOKEN } + db.bibliocoverage.spatial.attribute = + db.bibliocoverage.spatial-enum.attribute + | db.bibliocoverage.spatial-other.attributes + db.bibliocoverage.temporal.enumeration = + + ## A specification of the limits of a time interval + "dcmiperiod" + | + ## W3C Encoding rules for dates and times—a profile based on ISO 8601 + "w3c-dtf" + db.bibliocoverage.temporal-enum.attribute = + + ## Specifies the type of temporal coverage + attribute temporal { db.bibliocoverage.temporal.enumeration }? + db.bibliocoverage.temporal-other.attributes = + + ## Specifies the type of temporal coverage + attribute temporal { + + ## Specifies a non-standard type of coverage + "othertemporal" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute othertemporal { xsd:NMTOKEN } + db.bibliocoverage.temporal.attribute = + db.bibliocoverage.temporal-enum.attribute + | db.bibliocoverage.temporal-other.attributes + db.bibliocoverage.coverage.attrib = + db.bibliocoverage.spatial.attribute + & db.bibliocoverage.temporal.attribute + db.bibliocoverage.role.attribute = attribute role { text } + db.bibliocoverage.attlist = + db.bibliocoverage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bibliocoverage.coverage.attrib + db.bibliocoverage = + + ## The spatial or temporal coverage of a document + element bibliocoverage { db.bibliocoverage.attlist, db._text } +} +div { + db.legalnotice.role.attribute = attribute role { text } + db.legalnotice.attlist = + db.legalnotice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.legalnotice.info = db._info.title.only + db.legalnotice = + + ## A statement of legal obligations or requirements + element legalnotice { + db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+ + } +} +div { + db.othercredit.class.enumeration = + + ## A copy editor + "copyeditor" + | + ## A graphic designer + "graphicdesigner" + | + ## A production editor + "productioneditor" + | + ## A technical editor + "technicaleditor" + | + ## A translator + "translator" + | + ## An indexer + "indexer" + | + ## A proof-reader + "proofreader" + | + ## A cover designer + "coverdesigner" + | + ## An interior designer + "interiordesigner" + | + ## An illustrator + "illustrator" + | + ## A reviewer + "reviewer" + | + ## A typesetter + "typesetter" + | + ## A converter (a persons responsible for conversion, not an application) + "conversion" + db.othercredit.class-enum.attribute = + + ## Identifies the nature of the contributor + attribute class { db.othercredit.class.enumeration }? + db.othercredit.class-other.attribute = + + ## Identifies the nature of the non-standard contribution + attribute otherclass { xsd:NMTOKEN } + db.othercredit.class-other.attributes = + + ## Identifies the nature of the contributor + attribute class { + + ## Identifies a non-standard contribution + "other" + } + & db.othercredit.class-other.attribute + db.othercredit.class.attribute = + db.othercredit.class-enum.attribute + | db.othercredit.class-other.attributes + db.othercredit.role.attribute = attribute role { text } + db.othercredit.attlist = + db.othercredit.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.othercredit.class.attribute + db.othercredit = + + ## A person or entity, other than an author or editor, credited in a document + element othercredit { + db.othercredit.attlist, db.credit.contentmodel + } +} +div { + db.pagenums.role.attribute = attribute role { text } + db.pagenums.attlist = + db.pagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pagenums = + + ## The numbers of the pages in a book, for use in a bibliographic entry + element pagenums { db.pagenums.attlist, db._text } +} +div { + db.contrib.role.attribute = attribute role { text } + db.contrib.attlist = + db.contrib.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contrib = + + ## A summary of the contributions made to a document by a credited source + element contrib { db.contrib.attlist, db.all.inlines* } +} +div { + db.honorific.role.attribute = attribute role { text } + db.honorific.attlist = + db.honorific.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.honorific = + + ## The title of a person + element honorific { db.honorific.attlist, db._text } +} +div { + db.firstname.role.attribute = attribute role { text } + db.firstname.attlist = + db.firstname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.firstname = + + ## A given name of a person + element firstname { db.firstname.attlist, db._text } +} +div { + db.givenname.role.attribute = attribute role { text } + db.givenname.attlist = + db.givenname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.givenname = + + ## The given name of a person + element givenname { db.givenname.attlist, db._text } +} +div { + db.surname.role.attribute = attribute role { text } + db.surname.attlist = + db.surname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.surname = + + ## An inherited or family name; in western cultures the last name + element surname { db.surname.attlist, db._text } +} +div { + db.lineage.role.attribute = attribute role { text } + db.lineage.attlist = + db.lineage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineage = + + ## The portion of a person's name indicating a relationship to ancestors + element lineage { db.lineage.attlist, db._text } +} +div { + db.othername.role.attribute = attribute role { text } + db.othername.attlist = + db.othername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.othername = + + ## A component of a person's name that is not a first name, surname, or lineage + element othername { db.othername.attlist, db._text } +} +div { + db.printhistory.role.attribute = attribute role { text } + db.printhistory.attlist = + db.printhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.printhistory = + + ## The printing history of a document + element printhistory { db.printhistory.attlist, db.para.blocks+ } +} +div { + db.pubdate.role.attribute = attribute role { text } + db.pubdate.attlist = + db.pubdate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pubdate = + + ## The date of publication of a document + element pubdate { db.pubdate.attlist, db.date.contentmodel } +} +div { + db.publisher.role.attribute = attribute role { text } + db.publisher.attlist = + db.publisher.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publisher = + + ## The publisher of a document + element publisher { + db.publisher.attlist, db.publishername, db.address* + } +} +div { + db.publishername.role.attribute = attribute role { text } + db.publishername.attlist = + db.publishername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publishername = + + ## The name of the publisher of a document + element publishername { db.publishername.attlist, db._text } +} +div { + db.releaseinfo.role.attribute = attribute role { text } + db.releaseinfo.attlist = + db.releaseinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.releaseinfo = + + ## Information about a particular release of a document + element releaseinfo { db.releaseinfo.attlist, db._text } +} +div { + db.revhistory.role.attribute = attribute role { text } + db.revhistory.attlist = + db.revhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revhistory.info = db._info.title.only + db.revhistory = + + ## A history of the revisions to a document + element revhistory { + db.revhistory.attlist, db.revhistory.info, db.revision+ + } +} +div { + db.revision.role.attribute = attribute role { text } + db.revision.attlist = + db.revision.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revision = + + ## An entry describing a single revision in the history of the revisions to a document + element revision { + db.revision.attlist, + db.revnumber?, + db.date, + (db.authorinitials | db.author)*, + (db.revremark | db.revdescription)? + } +} +div { + db.revnumber.role.attribute = attribute role { text } + db.revnumber.attlist = + db.revnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revnumber = + + ## A document revision number + element revnumber { db.revnumber.attlist, db._text } +} +div { + db.revremark.role.attribute = attribute role { text } + db.revremark.attlist = + db.revremark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revremark = + + ## A description of a revision to a document + element revremark { db.revremark.attlist, db._text } +} +div { + db.revdescription.role.attribute = attribute role { text } + db.revdescription.attlist = + db.revdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revdescription = + + ## A extended description of a revision to a document + element revdescription { db.revdescription.attlist, db.all.blocks* } +} +div { + db.seriesvolnums.role.attribute = attribute role { text } + db.seriesvolnums.attlist = + db.seriesvolnums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seriesvolnums = + + ## Numbers of the volumes in a series of books + element seriesvolnums { db.seriesvolnums.attlist, db._text } +} +div { + db.volumenum.role.attribute = attribute role { text } + db.volumenum.attlist = + db.volumenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.volumenum = + + ## The volume number of a document in a set (as of books in a set or articles in a journal) + element volumenum { db.volumenum.attlist, db._text } +} +div { + db.issuenum.role.attribute = attribute role { text } + db.issuenum.attlist = + db.issuenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.issuenum = + + ## The number of an issue of a journal + element issuenum { db.issuenum.attlist, db._text } +} +div { + db.meta.role.attribute = attribute role { text } + db.meta.name.attribute = + + ## A name for the metadata element + attribute name { text } + db.meta.content.attribute = + + ## The metadata content + attribute content { text } + db.meta.attlist = + db.meta.name.attribute? + & db.meta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.meta.empty = + + ## A generic metadata element + element meta { db.meta.attlist, db.meta.content.attribute, empty } + db.meta.content = + + ## A generic metadata element + element meta { + db.meta.attlist, + (text | db._any | db.all.inlines | db.all.blocks)* + } + db.meta = db.meta.empty | db.meta.content +} +div { + db.package.role.attribute = attribute role { text } + db.package.attlist = + db.package.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.package = + + ## A software or application package + element package { db.package.attlist, db._text } +} +div { + db.email.role.attribute = attribute role { text } + db.email.attlist = + db.email.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.email = + + ## An email address + element email { db.email.attlist, db._text } +} +div { + db.lineannotation.role.attribute = attribute role { text } + db.lineannotation.attlist = + db.lineannotation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineannotation = + + ## A comment on a line in a verbatim listing + element lineannotation { db.lineannotation.attlist, db._text } +} +div { + db.parameter.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + db.parameter.class.attribute = + + ## Identifies the class of parameter + attribute class { db.parameter.class.enumeration } + db.parameter.role.attribute = attribute role { text } + db.parameter.attlist = + db.parameter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.parameter.class.attribute? + db.parameter = + + ## A value or a symbolic reference to a value + element parameter { db.parameter.attlist, db._text } +} +db.replaceable.inlines = db._text | db.co +div { + db.replaceable.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + | + ## A parameter + "parameter" + db.replaceable.class.attribute = + + ## Identifies the nature of the replaceable text + attribute class { db.replaceable.class.enumeration } + db.replaceable.role.attribute = attribute role { text } + db.replaceable.attlist = + db.replaceable.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.replaceable.class.attribute? + db.replaceable = + + ## Content that may or must be replaced by the user + element replaceable { + db.replaceable.attlist, db.replaceable.inlines* + } +} +div { + db.uri.type.attribute = + + ## Identifies the type of URI specified + attribute type { text }? + db.uri.role.attribute = attribute role { text } + db.uri.attlist = + db.uri.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.uri.type.attribute + db.uri = + + ## A Uniform Resource Identifier + element uri { db.uri.attlist, db._text } +} +div { + db.abbrev.role.attribute = attribute role { text } + db.abbrev.attlist = + db.abbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abbrev = + + ## An abbreviation, especially one followed by a period + element abbrev { + db.abbrev.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.acronym.role.attribute = attribute role { text } + db.acronym.attlist = + db.acronym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.acronym = + + ## An often pronounceable word made from the initial (or selected) letters of a name or phrase + element acronym { + db.acronym.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.citation.role.attribute = attribute role { text } + db.citation.attlist = + db.citation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citation = + + ## An inline bibliographic reference to another published work + element citation { db.citation.attlist, db.all.inlines* } +} +div { + db.citerefentry.role.attribute = attribute role { text } + db.citerefentry.attlist = + db.citerefentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citerefentry = + + ## A citation to a reference page + element citerefentry { + db.citerefentry.attlist, db.refentrytitle, db.manvolnum? + } +} +div { + db.refentrytitle.role.attribute = attribute role { text } + db.refentrytitle.attlist = + db.refentrytitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refentrytitle = + + ## The title of a reference page + element refentrytitle { db.refentrytitle.attlist, db.all.inlines* } +} +div { + db.manvolnum.role.attribute = attribute role { text } + db.manvolnum.attlist = + db.manvolnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.manvolnum = + + ## A reference volume number + element manvolnum { db.manvolnum.attlist, db._text } +} +div { + db.citetitle.pubwork.enumeration = db.pubwork.enumeration + db.citetitle.pubwork-enum.attribute = + + ## Identifies the nature of the publication being cited + attribute pubwork { db.citetitle.pubwork.enumeration } + db.citetitle.pubwork-other.attribute = + + ## Identifies the nature of some other kind of publication being cited + attribute otherpubwork { xsd:NMTOKEN } + db.citetitle.pubwork-other.attributes = + + ## Identifies that this is some other kind of publication being cited + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.citetitle.pubwork-other.attribute + db.citetitle.pubwork.attribute = + db.citetitle.pubwork-enum.attribute + | db.citetitle.pubwork-other.attributes + db.citetitle.role.attribute = attribute role { text } + db.citetitle.attlist = + db.citetitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.citetitle.pubwork.attribute? + db.citetitle = + + ## The title of a cited work + element citetitle { db.citetitle.attlist, db.all.inlines* } +} +div { + db.emphasis.role.attribute = attribute role { text } + db.emphasis.attlist = + db.emphasis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.emphasis = + + ## Emphasized text + element emphasis { db.emphasis.attlist, db.all.inlines* } +} +div { + db._emphasis = + + ## A limited span of emphasized text + element emphasis { db.emphasis.attlist, db._text } +} +div { + db.foreignphrase.role.attribute = attribute role { text } + db.foreignphrase.attlist = + db.foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.foreignphrase = + + ## A word or phrase in a language other than the primary language of the document + element foreignphrase { + db.foreignphrase.attlist, (text | db.general.inlines)* + } +} +div { + db._foreignphrase.role.attribute = attribute role { text } + db._foreignphrase.attlist = + db._foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._foreignphrase = + + ## A limited word or phrase in a language other than the primary language of the document + element foreignphrase { db._foreignphrase.attlist, db._text } +} +div { + db.phrase.role.attribute = attribute role { text } + 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* } +} +div { + db._phrase = + + ## A limited span of text + element phrase { db.phrase.attlist, db._text } +} +div { + db.quote.role.attribute = attribute role { text } + db.quote.attlist = + db.quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.quote = + + ## An inline quotation + element quote { db.quote.attlist, db.all.inlines* } +} +div { + db._quote.role.attribute = attribute role { text } + db._quote.attlist = + db._quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._quote = + + ## A limited inline quotation + element quote { db._quote.attlist, db._text } +} +div { + db.subscript.role.attribute = attribute role { text } + db.subscript.attlist = + db.subscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subscript = + + ## A subscript (as in H₂O, the molecular formula for water) + element subscript { db.subscript.attlist, db._text } +} +div { + db.superscript.role.attribute = attribute role { text } + db.superscript.attlist = + db.superscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.superscript = + + ## A superscript (as in x², the mathematical notation for x multiplied by itself) + element superscript { db.superscript.attlist, db._text } +} +div { + db.trademark.class.enumeration = + + ## A copyright + "copyright" + | + ## A registered copyright + "registered" + | + ## A service + "service" + | + ## A trademark + "trade" + db.trademark.class.attribute = + + ## Identifies the class of trade mark + attribute class { db.trademark.class.enumeration } + db.trademark.role.attribute = attribute role { text } + db.trademark.attlist = + db.trademark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.trademark.class.attribute? + db.trademark = + + ## A trademark + element trademark { db.trademark.attlist, db._text } +} +div { + db.wordasword.role.attribute = attribute role { text } + db.wordasword.attlist = + db.wordasword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.wordasword = + + ## A word meant specifically as a word and not representing anything else + element wordasword { db.wordasword.attlist, db._text } +} +div { + db.footnoteref.role.attribute = attribute role { text } + db.footnoteref.label.attribute = db.label.attribute + db.footnoteref.attlist = + db.footnoteref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.footnoteref.label.attribute? + db.footnoteref = + + ## A cross reference to a footnote (a footnote mark) + [ + s:pattern [ + s:title [ "Footnote reference type constraint" ] + s:rule [ + context = "db:footnoteref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on footnoteref must point to a footnote." + ] + ] + ] + ] + element footnoteref { db.footnoteref.attlist, empty } +} +div { + db.xref.role.attribute = attribute role { text } + db.xref.xrefstyle.attribute = db.xrefstyle.attribute + db.xref.endterm.attribute = db.endterm.attribute + db.xref.attlist = + db.xref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.xref.xrefstyle.attribute? + & db.xref.endterm.attribute? + db.xref = + + ## A cross reference to another part of the document + element xref { db.xref.attlist, empty } +} +div { + db.link.role.attribute = attribute role { text } + db.link.xrefstyle.attribute = db.xrefstyle.attribute + db.link.endterm.attribute = db.endterm.attribute + db.link.attlist = + db.link.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.link.xrefstyle.attribute? + & db.link.endterm.attribute? + db.link = + + ## A hypertext link + element link { db.link.attlist, db.all.inlines* } +} +div { + db.olink.role.attribute = attribute role { text } + db.olink.xrefstyle.attribute = db.xrefstyle.attribute + db.olink.localinfo.attribute = + + ## Holds additional information that may be used by the application when resolving the link + attribute localinfo { text } + db.olink.targetdoc.attribute = + + ## Specifies the URI of the document in which the link target appears + attribute targetdoc { xsd:anyURI } + db.olink.targetptr.attribute = + + ## Specifies the location of the link target in the document + attribute targetptr { text } + db.olink.type.attribute = + + ## Identifies application-specific customization of the link behavior + attribute type { text } + db.olink.attlist = + db.common.attributes + & db.olink.targetdoc.attribute? + & db.olink.role.attribute? + & db.olink.xrefstyle.attribute? + & db.olink.localinfo.attribute? + & db.olink.targetptr.attribute? + & db.olink.type.attribute? + db.olink = + + ## A link that addresses its target indirectly + element olink { db.olink.attlist, db.all.inlines* } +} +div { + db.anchor.role.attribute = attribute role { text } + db.anchor.attlist = + db.anchor.role.attribute? & db.common.idreq.attributes + db.anchor = + + ## A spot in the document + element anchor { db.anchor.attlist, empty } +} +div { + db.alt.role.attribute = attribute role { text } + db.alt.attlist = db.alt.role.attribute? & db.common.attributes + db.alt = + + ## A text-only annotation, often used for accessibility + element alt { db.alt.attlist, (text | db.inlinemediaobject)* } +} +div { + db.formalgroup.fgstyle.attribute = + + ## Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + attribute fgstyle { text } + db.formalgroup.role.attribute = attribute role { text } + db.formalgroup.pgwide.attribute = db.pgwide.attribute + db.formalgroup.floatstyle.attribute = db.floatstyle.attribute + db.formalgroup.attlist = + db.formalgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.formalgroup.floatstyle.attribute? + & db.formalgroup.pgwide.attribute? + & db.formalgroup.fgstyle.attribute? + db.formalgroup.info = db._info.title.onlyreq + db.formalgroup = + + ## A group of formal objects, for example subfigures + element formalgroup { + db.formalgroup.attlist, + db.formalgroup.info, + (db.figure+ | db.table+ | db.example+ | db.equation+) + } +} +db.status.attribute = + + ## Identifies the editorial or publication status of the element on which it occurs + attribute status { text } +db.toplevel.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | (db.sect1+, db.simplesect*) + | db.refentry+ +db.toplevel.blocks.or.sections = + (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections +db.recursive.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | db.refentry+ +db.recursive.blocks.or.sections = + (db.all.blocks+, db.recursive.sections?) | db.recursive.sections +db.divisions = db.part | db.reference +db.components = + db.dedication + | db.acknowledgements + | db.preface + | db.chapter + | db.appendix + | db.article + | db.colophon +db.navigation.components = + notAllowed | db.glossary | db.bibliography | db.index | db.toc +db.component.contentmodel = + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* +db.setindex.components = notAllowed | db.setindex +db.toc.components = notAllowed | db.toc +db.set.components = db.set | db.book | db.article +div { + db.set.status.attribute = db.status.attribute + db.set.role.attribute = attribute role { text } + db.set.attlist = + db.set.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.set.status.attribute? + db.set.info = db._info.title.req + db.set = + + ## A collection of books + element set { + db.set.attlist, + db.set.info, + db.toc.components?, + db.set.components+, + db.setindex.components? + } +} +db.book.components = + (db.navigation.components | db.components | db.divisions)* | db.topic* +div { + db.book.status.attribute = db.status.attribute + db.book.role.attribute = attribute role { text } + db.book.attlist = + db.book.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.book.status.attribute? + db.book.info = db._info + db.book = + + ## A book + element book { db.book.attlist, db.book.info, db.book.components } +} +div { + db.dedication.status.attribute = db.status.attribute + db.dedication.role.attribute = attribute role { text } + db.dedication.attlist = + db.dedication.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.dedication.status.attribute? + db.dedication.info = db._info + db.dedication = + + ## The dedication of a book or other component + element dedication { + db.dedication.attlist, db.dedication.info, db.all.blocks+ + } +} +div { + db.acknowledgements.status.attribute = db.status.attribute + db.acknowledgements.role.attribute = attribute role { text } + db.acknowledgements.attlist = + db.acknowledgements.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.acknowledgements.status.attribute? + db.acknowledgements.info = db._info + db.acknowledgements = + + ## Acknowledgements of a book or other component + element acknowledgements { + db.acknowledgements.attlist, + db.acknowledgements.info, + db.all.blocks+ + } +} +div { + db.colophon.status.attribute = db.status.attribute + db.colophon.role.attribute = attribute role { text } + db.colophon.attlist = + db.colophon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.colophon.status.attribute? + db.colophon.info = db._info + db.colophon = + + ## Text at the back of a book describing facts about its production + element colophon { + db.colophon.attlist, + db.colophon.info, + ((db.all.blocks+, db.simplesect*) + | (db.all.blocks*, db.simplesect+)) + } +} +db.appendix.contentmodel = db.component.contentmodel | db.topic+ +div { + db.appendix.status.attribute = db.status.attribute + db.appendix.role.attribute = attribute role { text } + db.appendix.attlist = + db.appendix.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.appendix.status.attribute? + db.appendix.info = db._info.title.req + db.appendix = + + ## An appendix in a book or article + element appendix { + db.appendix.attlist, db.appendix.info, db.appendix.contentmodel? + } +} +db.chapter.contentmodel = db.component.contentmodel | db.topic+ +div { + db.chapter.status.attribute = db.status.attribute + db.chapter.role.attribute = attribute role { text } + db.chapter.attlist = + db.chapter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.chapter.status.attribute? + db.chapter.info = db._info.title.req + db.chapter = + + ## A chapter, as of a book + element chapter { + db.chapter.attlist, db.chapter.info, db.chapter.contentmodel? + } +} +db.part.components = + (db.navigation.components | db.components) + | (db.refentry | db.reference) +db.part.contentmodel = db.part.components+ | db.topic+ +div { + db.part.status.attribute = db.status.attribute + db.part.role.attribute = attribute role { text } + db.part.attlist = + db.part.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.part.status.attribute? + db.part.info = db._info.title.req + db.part = + + ## A division in a book + element part { + db.part.attlist, + db.part.info, + db.partintro?, + db.part.contentmodel? + } +} +div { + db.preface.status.attribute = db.status.attribute + db.preface.role.attribute = attribute role { text } + db.preface.attlist = + db.preface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.preface.status.attribute? + db.preface.info = db._info.title.req + db.preface = + + ## Introductory matter preceding the first chapter of a book + element preface { + db.preface.attlist, db.preface.info, db.component.contentmodel? + } +} +div { + db.partintro.status.attribute = db.status.attribute + db.partintro.role.attribute = attribute role { text } + db.partintro.attlist = + db.partintro.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.partintro.status.attribute? + db.partintro.info = db._info + db.partintro = + + ## An introduction to the contents of a part + element partintro { + db.partintro.attlist, + db.partintro.info, + db.toplevel.blocks.or.sections? + } +} +div { + db.section.status.attribute = db.status.attribute + db.section.class.enumeration = + + ## A section of legal obligations or requirements + "legal" + db.section.class-enum.attribute = + + ## Identifies the nature of the section + attribute class { db.section.class.enumeration } + db.section.class-other.attribute = + + ## Identifies a non-standard section class + attribute otherclass { xsd:NMTOKEN } + db.section.class-other.attributes = + + ## Indicates that a non-standard section class is applied + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.section.class-other.attribute + db.section.class.attribute = + db.section.class-enum.attribute | db.section.class-other.attributes + db.section.role.attribute = attribute role { text } + db.section.attlist = + db.section.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.section.status.attribute? + & db.section.class.attribute? + db.section.info = db._info.title.req + db.section = + + ## A recursive section + element section { + db.section.attlist, + db.section.info, + db.navigation.components*, + db.recursive.blocks.or.sections?, + db.navigation.components* + } +} +div { + db.simplesect.status.attribute = db.status.attribute + db.simplesect.role.attribute = attribute role { text } + db.simplesect.attlist = + db.simplesect.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.simplesect.status.attribute? + db.simplesect.info = db._info.title.req + db.simplesect = + + ## A section of a document with no subdivisions + element simplesect { + db.simplesect.attlist, db.simplesect.info, db.all.blocks* + } +} +db.article.components = db.toplevel.sections +db.article.navcomponents = + db.navigation.components + | db.acknowledgements + | db.dedication + | db.appendix + | db.colophon +div { + db.article.status.attribute = db.status.attribute + db.article.class.enumeration = + + ## A collection of frequently asked questions. + "faq" + | + ## An article in a journal or other periodical. + "journalarticle" + | + ## A description of a product. + "productsheet" + | + ## A specification. + "specification" + | + ## A technical report. + "techreport" + | + ## A white paper. + "whitepaper" + db.article.class-enum.attribute = + + ## Identifies the nature of the article + attribute class { db.article.class.enumeration } + db.article.class-other.attribute = + + ## Identifies the nature of the non-standard article + attribute otherclass { xsd:NMTOKEN } + db.article.class-other.attributes = + + ## Identifies the nature of the article + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.article.class-other.attribute + db.article.class.attribute = + db.article.class-enum.attribute | db.article.class-other.attributes + db.article.role.attribute = attribute role { text } + db.article.attlist = + db.article.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.article.status.attribute? + & db.article.class.attribute? + db.article.info = db._info.title.req + db.article = + + ## An article + element article { + db.article.attlist, + db.article.info, + db.article.navcomponents*, + ((db.all.blocks+, db.article.components?) + | db.article.components), + db.article.navcomponents* + } +} +db.annotations.attribute = + + ## Identifies one or more annotations that apply to this element + attribute annotations { text } +div { + db.annotation.role.attribute = attribute role { text } + db.annotation.annotates.attribute = + + ## Identifies one or more elements to which this annotation applies + attribute annotates { text } + db.annotation.attlist = + db.annotation.role.attribute? + & db.annotation.annotates.attribute? + & db.common.attributes + db.annotation.info = db._info.title.only + db.annotation = + + ## An annotation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:annotation" + s:assert [ + test = "not(.//db:annotation)" + "annotation must not occur among the children or descendants of annotation" + ] + ] + ] + ] + element annotation { + db.annotation.attlist, db.annotation.info, db.all.blocks+ + } +} +db.xlink.extended.type.attribute = + + ## Identifies the XLink extended link type + [ + s:pattern [ + s:title [ "XLink extended placement" ] + s:rule [ + context = "*[@xlink:type='extended']" + s:assert [ + test = "not(parent::*[@xlink:type='extended'])" + "An XLink extended type element may not occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink extended link type + "extended" + } +db.xlink.locator.type.attribute = + + ## Identifies the XLink locator link type + [ + s:pattern [ + s:title [ "XLink locator placement" ] + s:rule [ + context = "*[@xlink:type='locator']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink locator type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink locator link type + "locator" + } +db.xlink.arc.type.attribute = + + ## Identifies the XLink arc link type + [ + s:pattern [ + s:title [ "XLink arc placement" ] + s:rule [ + context = "*[@xlink:type='arc']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink arc type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink arc link type + "arc" + } +db.xlink.resource.type.attribute = + + ## Identifies the XLink resource link type + [ + s:pattern [ + s:title [ "XLink resource placement" ] + s:rule [ + context = "*[@xlink:type='resource']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink resource type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink resource link type + "resource" + } +db.xlink.title.type.attribute = + + ## Identifies the XLink title link type + [ + s:pattern [ + s:title [ "XLink title placement" ] + s:rule [ + context = "*[@xlink:type='title']" + s:assert [ + test = + "parent::*[@xlink:type='extended'] or parent::*[@xlink:type='locator'] or parent::*[@xlink:type='arc']" + "An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink title link type + "title" + } +db.xlink.extended.link.attributes = + db.xlink.extended.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? +db.xlink.locator.link.attributes = + db.xlink.locator.type.attribute + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.arc.link.attributes = + db.xlink.arc.type.attribute + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? +db.xlink.resource.link.attributes = + db.xlink.resource.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.title.link.attributes = db.xlink.title.type.attribute +db.xlink.from.attribute = + + ## Specifies the XLink traversal-from + attribute xlink:from { xsd:NMTOKEN } +db.xlink.label.attribute = + + ## Specifies the XLink label + attribute xlink:label { xsd:NMTOKEN } +db.xlink.to.attribute = + + ## Specifies the XLink traversal-to + attribute xlink:to { xsd:NMTOKEN } +div { + db.extendedlink.role.attribute = attribute role { text } + db.extendedlink.attlist = + db.extendedlink.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "extended" ] + attribute xlink:type { + + ## An XLink extended link + "extended" + }? + & db.xlink.role.attribute? + & db.xlink.title.attribute? + db.extendedlink = + + ## An XLink extended link + element extendedlink { + db.extendedlink.attlist, (db.locator | db.arc | db.link)+ + } +} +div { + db.locator.role.attribute = attribute role { text } + db.locator.attlist = + db.locator.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "locator" ] + attribute xlink:type { + + ## An XLink locator link + "locator" + }? + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? + db.locator = + + ## An XLink locator in an extendedlink + element locator { db.locator.attlist, empty } +} +div { + db.arc.role.attribute = attribute role { text } + db.arc.attlist = + db.arc.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "arc" ] + attribute xlink:type { + + ## An XLink arc link + "arc" + }? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? + db.arc = + + ## An XLink arc in an extendedlink + element arc { db.arc.attlist, empty } +} +db.sect1.sections = + ((db.sect2+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect1.status.attribute = db.status.attribute + db.sect1.class.attribute = db.section.class.attribute + db.sect1.role.attribute = attribute role { text } + db.sect1.attlist = + db.sect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect1.status.attribute? + & db.sect1.class.attribute? + db.sect1.info = db._info.title.req + db.sect1 = + + ## A top-level section of document + element sect1 { + db.sect1.attlist, + db.sect1.info, + db.navigation.components*, + ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections)?, + db.navigation.components* + } +} +db.sect2.sections = + ((db.sect3+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect2.status.attribute = db.status.attribute + db.sect2.class.attribute = db.section.class.attribute + db.sect2.role.attribute = attribute role { text } + db.sect2.attlist = + db.sect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect2.status.attribute? + & db.sect2.class.attribute? + db.sect2.info = db._info.title.req + db.sect2 = + + ## A subsection within a sect1 + element sect2 { + db.sect2.attlist, + db.sect2.info, + db.navigation.components*, + ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections)?, + db.navigation.components* + } +} +db.sect3.sections = + ((db.sect4+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect3.status.attribute = db.status.attribute + db.sect3.class.attribute = db.section.class.attribute + db.sect3.role.attribute = attribute role { text } + db.sect3.attlist = + db.sect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect3.status.attribute? + & db.sect3.class.attribute? + db.sect3.info = db._info.title.req + db.sect3 = + + ## A subsection within a sect2 + element sect3 { + db.sect3.attlist, + db.sect3.info, + db.navigation.components*, + ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections)?, + db.navigation.components* + } +} +db.sect4.sections = + ((db.sect5+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect4.status.attribute = db.status.attribute + db.sect4.class.attribute = db.section.class.attribute + db.sect4.role.attribute = attribute role { text } + db.sect4.attlist = + db.sect4.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect4.status.attribute? + & db.sect4.class.attribute? + db.sect4.info = db._info.title.req + db.sect4 = + + ## A subsection within a sect3 + element sect4 { + db.sect4.attlist, + db.sect4.info, + db.navigation.components*, + ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections)?, + db.navigation.components* + } +} +db.sect5.sections = db.simplesect+ | db.refentry+ +div { + db.sect5.status.attribute = db.status.attribute + db.sect5.class.attribute = db.section.class.attribute + db.sect5.role.attribute = attribute role { text } + db.sect5.attlist = + db.sect5.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect5.status.attribute? + & db.sect5.class.attribute? + db.sect5.info = db._info.title.req + db.sect5 = + + ## A subsection within a sect4 + element sect5 { + db.sect5.attlist, + db.sect5.info, + db.navigation.components*, + ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections)?, + db.navigation.components* + } +} +db.toplevel.refsection = db.refsection+ | db.refsect1+ +db.secondlevel.refsection = db.refsection+ | db.refsect2+ +db.reference.components = db.refentry +div { + db.reference.status.attribute = db.status.attribute + db.reference.role.attribute = attribute role { text } + db.reference.attlist = + db.reference.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.reference.status.attribute? + & db.label.attribute? + db.reference.info = db._info.title.req + db.reference = + + ## A collection of reference entries + element reference { + db.reference.attlist, + db.reference.info, + db.partintro?, + db.reference.components* + } +} +div { + db.refentry.status.attribute = db.status.attribute + db.refentry.role.attribute = attribute role { text } + db.refentry.attlist = + db.refentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refentry.status.attribute? + & db.label.attribute? + db.refentry.info = db._info.title.forbidden + db.refentry = + + ## A reference page (originally a UNIX man-style reference page) + element refentry { + db.refentry.attlist, + db.indexterm*, + db.refentry.info, + db.refmeta?, + db.refnamediv+, + db.refsynopsisdiv?, + db.toplevel.refsection + } +} +div { + db.refmeta.role.attribute = attribute role { text } + db.refmeta.attlist = + db.refmeta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refmeta = + + ## Meta-information for a reference entry + element refmeta { + db.refmeta.attlist, + db.indexterm*, + db.refentrytitle, + db.manvolnum?, + db.refmiscinfo*, + db.indexterm* + } +} +db.refmiscinfo.class.enumeration = + + ## The name of the software product or component to which this topic applies + "source" + | + ## The version of the software product or component to which this topic applies + "version" + | + ## The section title of the reference page (e.g., User Commands) + "manual" + | + ## The section title of the reference page (believed synonymous with "manual" but in wide use) + "sectdesc" + | + ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + "software" +db.refmiscinfo.class-enum.attribute = + + ## Identifies the kind of miscellaneous information + attribute class { db.refmiscinfo.class.enumeration }? +db.refmiscinfo.class-other.attribute = + + ## Identifies the nature of non-standard miscellaneous information + attribute otherclass { text } +db.refmiscinfo.class-other.attributes = + + ## Identifies the kind of miscellaneious information + attribute class { + + ## Indicates that the information is some 'other' kind. + "other" + } + & db.refmiscinfo.class-other.attribute +db.refmiscinfo.class.attribute = + db.refmiscinfo.class-enum.attribute + | db.refmiscinfo.class-other.attributes +div { + db.refmiscinfo.role.attribute = attribute role { text } + db.refmiscinfo.attlist = + db.refmiscinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refmiscinfo.class.attribute? + db.refmiscinfo = + + ## Meta-information for a reference entry other than the title and volume number + element refmiscinfo { db.refmiscinfo.attlist, db._text } +} +div { + db.refnamediv.role.attribute = attribute role { text } + db.refnamediv.attlist = + db.refnamediv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refnamediv = + + ## The name, purpose, and classification of a reference page + element refnamediv { + db.refnamediv.attlist, + db.refdescriptor?, + db.refname+, + db.refpurpose, + db.refclass* + } +} +div { + db.refdescriptor.role.attribute = attribute role { text } + db.refdescriptor.attlist = + db.refdescriptor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refdescriptor = + + ## A description of the topic of a reference page + element refdescriptor { db.refdescriptor.attlist, db.all.inlines* } +} +div { + db.refname.role.attribute = attribute role { text } + db.refname.attlist = + db.refname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refname = + + ## The name of (one of) the subject(s) of a reference page + element refname { db.refname.attlist, db.all.inlines* } +} +div { + db.refpurpose.role.attribute = attribute role { text } + db.refpurpose.attlist = + db.refpurpose.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refpurpose = + + ## A short (one sentence) synopsis of the topic of a reference page + element refpurpose { db.refpurpose.attlist, db.all.inlines* } +} +div { + db.refclass.role.attribute = attribute role { text } + db.refclass.attlist = + db.refclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refclass = + + ## The scope or other indication of applicability of a reference entry + element refclass { db.refclass.attlist, (text | db.application)* } +} +div { + db.refsynopsisdiv.role.attribute = attribute role { text } + db.refsynopsisdiv.attlist = + db.refsynopsisdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refsynopsisdiv.info = db._info + db.refsynopsisdiv = + + ## A syntactic synopsis of the subject of the reference page + element refsynopsisdiv { + db.refsynopsisdiv.attlist, + db.refsynopsisdiv.info, + ((db.all.blocks+, db.secondlevel.refsection?) + | db.secondlevel.refsection) + } +} +div { + db.refsection.status.attribute = db.status.attribute + db.refsection.role.attribute = attribute role { text } + db.refsection.attlist = + db.refsection.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refsection.status.attribute? + & db.label.attribute? + db.refsection.info = db._info.title.req + db.refsection = + + ## A recursive section in a refentry + element refsection { + db.refsection.attlist, + db.refsection.info, + ((db.all.blocks+, db.refsection*) | db.refsection+) + } +} +db.refsect1.sections = db.refsect2+ +div { + db.refsect1.status.attribute = db.status.attribute + db.refsect1.role.attribute = attribute role { text } + db.refsect1.attlist = + db.refsect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect1.status.attribute? + db.refsect1.info = db._info.title.req + db.refsect1 = + + ## A major subsection of a reference entry + element refsect1 { + db.refsect1.attlist, + db.refsect1.info, + ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections) + } +} +db.refsect2.sections = db.refsect3+ +div { + db.refsect2.status.attribute = db.status.attribute + db.refsect2.role.attribute = attribute role { text } + db.refsect2.attlist = + db.refsect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect2.status.attribute? + db.refsect2.info = db._info.title.req + db.refsect2 = + + ## A subsection of a refsect1 + element refsect2 { + db.refsect2.attlist, + db.refsect2.info, + ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections) + } +} +div { + db.refsect3.status.attribute = db.status.attribute + db.refsect3.role.attribute = attribute role { text } + db.refsect3.attlist = + db.refsect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect3.status.attribute? + db.refsect3.info = db._info.title.req + db.refsect3 = + + ## A subsection of a refsect2 + element refsect3 { + db.refsect3.attlist, db.refsect3.info, db.all.blocks+ + } +} +db.glossary.inlines = + db.firstterm | db.glossterm | db._firstterm | db._glossterm +db.baseform.attribute = + + ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + attribute baseform { text }? +div { + db.glosslist.role.attribute = attribute role { text } + db.glosslist.attlist = + db.glosslist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.glosslist.info = db._info.title.only + db.glosslist = + + ## A wrapper for a list of glossary entries + element glosslist { + db.glosslist.attlist, + db.glosslist.info?, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.glossentry.role.attribute = attribute role { text } + db.glossentry.sortas.attribute = + + ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + attribute sortas { text } + db.glossentry.attlist = + db.glossentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossentry.sortas.attribute? + db.glossentry = + + ## An entry in a glossary or glosslist + element glossentry { + db.glossentry.attlist, + db.glossterm, + db.acronym?, + db.abbrev?, + db.indexterm*, + (db.glosssee | db.glossdef+) + } +} +div { + db.glossdef.role.attribute = attribute role { text } + db.glossdef.subject.attribute = + + ## Specifies a list of keywords for the definition + attribute subject { text } + db.glossdef.attlist = + db.glossdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossdef.subject.attribute? + db.glossdef = + + ## A definition in a glossentry + element glossdef { + db.glossdef.attlist, db.all.blocks+, db.glossseealso* + } +} +div { + db.glosssee.role.attribute = attribute role { text } + db.glosssee.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glosssee.attlist = + db.glosssee.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glosssee.otherterm.attribute? + db.glosssee = + + ## A cross-reference from one glossentry + ## to another + [ + s:pattern [ + s:title [ "Glosssary 'see' type constraint" ] + s:rule [ + context = "db:glosssee[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glosssee must point to a glossentry." + ] + ] + ] + ] + element glosssee { db.glosssee.attlist, db.all.inlines* } +} +div { + db.glossseealso.role.attribute = attribute role { text } + db.glossseealso.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glossseealso.attlist = + db.glossseealso.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossseealso.otherterm.attribute? + db.glossseealso = + + ## A cross-reference from one glossentry to another + [ + s:pattern [ + s:title [ "Glossary 'seealso' type constraint" ] + s:rule [ + context = "db:glossseealso[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glossseealso must point to a glossentry." + ] + ] + ] + ] + element glossseealso { db.glossseealso.attlist, db.all.inlines* } +} +div { + db.firstterm.role.attribute = attribute role { text } + db.firstterm.attlist = + db.firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.firstterm = + + ## The first occurrence of a term + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db.firstterm.attlist, db.all.inlines* } +} +div { + db._firstterm.role.attribute = attribute role { text } + db._firstterm.attlist = + db._firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._firstterm = + + ## The first occurrence of a term, with limited content + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db._firstterm.attlist, db._text } +} +div { + db.glossterm.role.attribute = attribute role { text } + db.glossterm.attlist = + db.glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db.glossterm.attlist, db.all.inlines* } +} +div { + db._glossterm.role.attribute = attribute role { text } + db._glossterm.attlist = + db._glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db._glossterm.attlist, db._text } +} +div { + db.glossary.status.attribute = db.status.attribute + db.glossary.role.attribute = attribute role { text } + db.glossary.attlist = + db.glossary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossary.status.attribute? + db.glossary.info = db._info + db.glossary = + + ## A glossary + element glossary { + db.glossary.attlist, + db.glossary.info, + db.all.blocks*, + (db.glossdiv* | db.glossentry*), + db.bibliography? + } +} +div { + db.glossdiv.status.attribute = db.status.attribute + db.glossdiv.role.attribute = attribute role { text } + db.glossdiv.attlist = + db.glossdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossdiv.status.attribute? + db.glossdiv.info = db._info.title.req + db.glossdiv = + + ## A division in a glossary + element glossdiv { + db.glossdiv.attlist, + db.glossdiv.info, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.termdef.role.attribute = attribute role { text } + db.termdef.attlist = + db.termdef.role.attribute? + & db.glossentry.sortas.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.termdef = + + ## An inline definition of a term + [ + s:pattern [ + s:title [ "Glossary term definition constraint" ] + s:rule [ + context = "db:termdef" + s:assert [ + test = "count(db:firstterm) = 1" + "A termdef must contain exactly one firstterm" + ] + ] + ] + ] + element termdef { db.termdef.attlist, db.all.inlines* } +} +db.relation.attribute = + + ## Identifies the relationship between the bibliographic elemnts + attribute relation { text } +div { + db.biblioentry.role.attribute = attribute role { text } + db.biblioentry.pubwork.attribute = db.biblio.pubwork.attribute + db.biblioentry.attlist = + db.biblioentry.role.attribute? + & db.biblioentry.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.biblioentry = + + ## A raw entry in a bibliography + element biblioentry { + db.biblioentry.attlist, db.bibliographic.elements+ + } +} +div { + db.bibliomixed.role.attribute = attribute role { text } + db.bibliomixed.pubwork.attribute = db.biblio.pubwork.attribute + db.bibliomixed.attlist = + db.bibliomixed.role.attribute? + & db.bibliomixed.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomixed = + + ## A cooked entry in a bibliography + element bibliomixed { + db.bibliomixed.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.biblioset.relation.attribute = db.relation.attribute + db.biblioset.role.attribute = attribute role { text } + db.biblioset.attlist = + db.biblioset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblioset.relation.attribute? + db.biblioset = + + ## A raw container for related bibliographic information + element biblioset { + db.biblioset.attlist, db.bibliographic.elements+ + } +} +div { + 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.bibliomset = + + ## A cooked container for related bibliographic information + element bibliomset { + db.bibliomset.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.bibliomisc.role.attribute = attribute role { text } + db.bibliomisc.attlist = + db.bibliomisc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomisc = + + ## Untyped bibliographic information + element bibliomisc { db.bibliomisc.attlist, db._text } +} +div { + db.bibliography.status.attrib = db.status.attribute + db.bibliography.role.attribute = attribute role { text } + db.bibliography.attlist = + db.bibliography.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliography.status.attrib? + db.bibliography.info = db._info + db.bibliography = + + ## A bibliography + element bibliography { + db.bibliography.attlist, + db.bibliography.info, + db.all.blocks*, + (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+) + } +} +div { + db.bibliodiv.status.attrib = db.status.attribute + db.bibliodiv.role.attribute = attribute role { text } + db.bibliodiv.attlist = + db.bibliodiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliodiv.status.attrib? + db.bibliodiv.info = db._info.title.req + db.bibliodiv = + + ## A section of a bibliography + element bibliodiv { + db.bibliodiv.attlist, + db.bibliodiv.info, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.bibliolist.role.attribute = attribute role { text } + db.bibliolist.attlist = + db.bibliolist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliolist.info = db._info.title.only + db.bibliolist = + + ## A wrapper for a list of bibliography entries + element bibliolist { + db.bibliolist.attlist, + db.bibliolist.info?, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.biblioref.role.attribute = attribute role { text } + db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute + db.biblioref.endterm.attribute = db.endterm.attribute + db.biblioref.units.attribute = + + ## The units (for example, pages) used to identify the beginning and ending of a reference. + attribute units { xsd:token } + db.biblioref.begin.attribute = + + ## Identifies the beginning of a reference; the location within the work that is being referenced. + attribute begin { xsd:token } + db.biblioref.end.attribute = + + ## Identifies the end of a reference. + attribute end { xsd:token } + db.biblioref.attlist = + db.biblioref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.biblioref.xrefstyle.attribute? + & db.biblioref.endterm.attribute? + & db.biblioref.units.attribute? + & db.biblioref.begin.attribute? + & db.biblioref.end.attribute? + db.biblioref = + + ## A cross-reference to a bibliographic entry + element biblioref { db.biblioref.attlist, empty } +} +db.significance.enumeration = + + ## Normal + "normal" + | + ## Preferred + "preferred" +db.significance.attribute = + + ## Specifies the significance of the term + attribute significance { db.significance.enumeration } +db.zone.attribute = + + ## Specifies the IDs of the elements to which this term applies + attribute zone { xsd:IDREFS } +db.indexterm.pagenum.attribute = + + ## Indicates the page on which this index term occurs in some version of the printed document + attribute pagenum { text } +db.scope.enumeration = + + ## All indexes + "all" + | + ## The global index (as for a combined index of a set of books) + "global" + | + ## The local index (the index for this document only) + "local" +db.scope.attribute = + + ## Specifies the scope of the index term + attribute scope { db.scope.enumeration } +db.sortas.attribute = + + ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used + attribute sortas { text } +db.index.type.attribute = + + ## Specifies the target index for this term + attribute type { text } +div { + db.itermset.role.attribute = attribute role { text } + db.itermset.attlist = + db.itermset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.itermset = + + ## A set of index terms in the meta-information of a document + element itermset { db.itermset.attlist, db.indexterm.singular+ } +} +db.indexterm.contentmodel = + (db.primary, + (db.secondary, + ((db.tertiary, (db.see | db.seealso+)?)? + | (db.see | db.seealso+)?)?)?)?, + (db.see | db.seealso+)? +div { + db.indexterm.singular.role.attribute = attribute role { text } + db.indexterm.singular.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## A singular index term + "singular" + } + db.indexterm.singular.attlist = + db.indexterm.singular.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.singular.class.attribute? + db.indexterm.singular = + + ## A wrapper for an indexed term + element indexterm { + db.indexterm.singular.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.startofrange.role.attribute = attribute role { text } + db.indexterm.startofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The start of a range + "startofrange" + } + db.indexterm.startofrange.attlist = + db.indexterm.startofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.startofrange.class.attribute + db.indexterm.startofrange = + + ## A wrapper for an indexed term that covers a range + element indexterm { + db.indexterm.startofrange.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.endofrange.role.attribute = attribute role { text } + db.indexterm.endofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The end of a range + "endofrange" + } + db.indexterm.endofrange.startref.attribute = + + ## Points to the start of the range + attribute startref { xsd:IDREF } + db.indexterm.endofrange.attlist = + db.indexterm.endofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.indexterm.endofrange.class.attribute + & db.indexterm.endofrange.startref.attribute + db.indexterm.endofrange = + + ## Identifies the end of a range associated with an indexed term + [ + s:pattern [ + s:title [ "Indexterm 'startref' type constraint" ] + s:rule [ + context = "db:indexterm[@startref]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@startref]) = 'indexterm' and namespace-uri(//*[@xml:id=current()/@startref]) = 'http://docbook.org/ns/docbook'" + "@startref on indexterm must point to an indexterm." + ] + s:assert [ + test = + "//*[@xml:id=current()/@startref]/@class='startofrange'" + "@startref on indexterm must point to a startofrange indexterm." + ] + ] + ] + ] + element indexterm { db.indexterm.endofrange.attlist, empty } +} +div { + db.indexterm = + db.indexterm.singular + | db.indexterm.startofrange + | db.indexterm.endofrange +} +div { + db.primary.role.attribute = attribute role { text } + db.primary.attlist = + db.primary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.primary = + + ## The primary word or phrase under which an index term should be sorted + element primary { db.primary.attlist, db.all.inlines* } +} +div { + db.secondary.role.attribute = attribute role { text } + db.secondary.attlist = + db.secondary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.secondary = + + ## A secondary word or phrase in an index term + element secondary { db.secondary.attlist, db.all.inlines* } +} +div { + db.tertiary.role.attribute = attribute role { text } + db.tertiary.attlist = + db.tertiary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.tertiary = + + ## A tertiary word or phrase in an index term + element tertiary { db.tertiary.attlist, db.all.inlines* } +} +div { + db.see.role.attribute = attribute role { text } + db.see.class.attribute = + + ## Identifies the class of 'see' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.see.attlist = + db.see.role.attribute? + & db.see.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.see = + + ## Part of an index term directing the reader instead to another entry in the index + element see { db.see.attlist, db.all.inlines* } +} +div { + db.seealso.role.attribute = attribute role { text } + db.seealso.class.attribute = + + ## Identifies the class of 'seealso' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.seealso.attlist = + db.seealso.role.attribute? + & db.seealso.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seealso = + + ## Part of an index term directing the reader also to another entry in the index + element seealso { db.seealso.attlist, db.all.inlines* } +} +div { + db.index.status.attribute = db.status.attribute + db.index.role.attribute = attribute role { text } + db.index.attlist = + db.index.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.index.status.attribute? + & db.index.type.attribute? + db.index.info = db._info + # Yes, db.indexdiv* and db.indexentry*; that way an is valid. + # Authors can use an empty index to indicate where a generated index should + # appear. + db.index = + + ## An index to a book or part of a book + element index { + db.index.attlist, + db.index.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry* | db.segmentedlist) + } +} +div { + db.setindex.status.attribute = db.status.attribute + db.setindex.role.attribute = attribute role { text } + db.setindex.attlist = + db.setindex.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.setindex.status.attribute? + & db.index.type.attribute? + db.setindex.info = db._info + db.setindex = + + ## An index to a set of books + element setindex { + db.setindex.attlist, + db.setindex.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry*) + } +} +div { + db.indexdiv.status.attribute = db.status.attribute + db.indexdiv.role.attribute = attribute role { text } + db.indexdiv.attlist = + db.indexdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.indexdiv.status.attribute? + db.indexdiv.info = db._info.title.req + db.indexdiv = + + ## A division in an index + element indexdiv { + db.indexdiv.attlist, + db.indexdiv.info, + db.all.blocks*, + (db.indexentry+ | db.segmentedlist) + } +} +div { + db.indexentry.role.attribute = attribute role { text } + db.indexentry.attlist = + db.indexentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.indexentry = + + ## An entry in an index + element indexentry { + db.indexentry.attlist, + db.primaryie, + (db.seeie | db.seealsoie)*, + (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)* + } +} +div { + db.primaryie.role.attribute = attribute role { text } + db.primaryie.attlist = + db.primaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.primaryie = + + ## A primary term in an index entry, not in the text + element primaryie { db.primaryie.attlist, db.all.inlines* } +} +div { + db.secondaryie.role.attribute = attribute role { text } + db.secondaryie.attlist = + db.secondaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.secondaryie = + + ## A secondary term in an index entry, rather than in the text + element secondaryie { db.secondaryie.attlist, db.all.inlines* } +} +div { + db.tertiaryie.role.attribute = attribute role { text } + db.tertiaryie.attlist = + db.tertiaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.tertiaryie = + + ## A tertiary term in an index entry, rather than in the text + element tertiaryie { db.tertiaryie.attlist, db.all.inlines* } +} +div { + db.seeie.role.attribute = attribute role { text } + db.seeie.attlist = + db.seeie.role.attribute? + & db.common.attributes + & db.linkend.attribute? + db.seeie = + + ## A See + ## entry in an index, rather than in the text + element seeie { db.seeie.attlist, db.all.inlines* } +} +div { + db.seealsoie.role.attribute = attribute role { text } + db.seealsoie.attlist = + db.seealsoie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.seealsoie = + + ## A See also + ## entry in an index, rather than in the text + element seealsoie { db.seealsoie.attlist, db.all.inlines* } +} +db.toc.pagenum.attribute = + + ## Indicates the page on which this element occurs in some version of the printed document + attribute pagenum { text } +div { + db.toc.role.attribute = attribute role { text } + db.toc.attlist = + db.toc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.toc.info = db._info.title.only + db.toc = + + ## A table of contents + element toc { + db.toc.attlist, + db.toc.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)* + } +} +div { + db.tocdiv.role.attribute = attribute role { text } + 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 + db.tocdiv = + + ## A division in a table of contents + element tocdiv { + db.tocdiv.attlist, + db.tocdiv.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)+ + } +} +div { + db.tocentry.role.attribute = attribute role { text } + db.tocentry.pagenum.attribute = db.toc.pagenum.attribute + db.tocentry.attlist = + db.tocentry.role.attribute? + & db.common.attributes + & db.tocentry.pagenum.attribute? + & db.linkend.attribute? + db.tocentry = + + ## A component title in a table of contents + element tocentry { db.tocentry.attlist, db.all.inlines* } +} +db.task.info = db._info.title.req +div { + db.task.role.attribute = attribute role { text } + db.task.attlist = + db.task.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.task = + + ## A task to be completed + element task { + db.task.attlist, + db.task.info, + db.tasksummary?, + db.taskprerequisites?, + db.procedure+, + db.example*, + db.taskrelated? + } +} +div { + db.tasksummary.role.attribute = attribute role { text } + db.tasksummary.attlist = + db.tasksummary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tasksummary.info = db._info.title.only + db.tasksummary = + + ## A summary of a task + element tasksummary { + db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+ + } +} +div { + db.taskprerequisites.role.attribute = attribute role { text } + db.taskprerequisites.attlist = + db.taskprerequisites.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskprerequisites.info = db._info.title.only + db.taskprerequisites = + + ## The prerequisites for a task + element taskprerequisites { + db.taskprerequisites.attlist, + db.taskprerequisites.info, + db.all.blocks+ + } +} +div { + db.taskrelated.role.attribute = attribute role { text } + db.taskrelated.attlist = + db.taskrelated.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskrelated.info = db._info.title.only + db.taskrelated = + + ## Information related to a task + element taskrelated { + db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+ + } +} +db.area.units.enumeration = + + ## Coordinates expressed as a pair of CALS graphic coordinates. + "calspair" + | + ## Coordinates expressed as a line and column. + "linecolumn" + | + ## Coordinates expressed as a pair of lines and columns. + "linecolumnpair" + | + ## Coordinates expressed as a line range. + "linerange" +db.area.units-enum.attribute = + + ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + ## for graphics and linecolumn + ## for line-oriented elements. + attribute units { db.area.units.enumeration }? +db.area.units-other.attributes = + + ## Indicates that non-standard units are used for this area + ## . In this case otherunits + ## must be specified. + attribute units { + + ## Coordinates expressed in some non-standard units. + "other" + }?, + + ## Identifies the units used in the coords + ## attribute when the units + ## attribute is other + ## . This attribute is forbidden otherwise. + attribute otherunits { xsd:NMTOKEN } +db.area.units.attribute = + db.area.units-enum.attribute | db.area.units-other.attributes +div { + db.calloutlist.role.attribute = attribute role { text } + db.calloutlist.attlist = + db.calloutlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.calloutlist.info = db._info.title.only + db.calloutlist = + + ## A list of callout + ## s + element calloutlist { + db.calloutlist.attlist, + db.calloutlist.info, + db.all.blocks*, + db.callout+ + } +} +div { + db.callout.role.attribute = attribute role { text } + db.callout.arearefs.attribute = + + ## Identifies the areas described by this callout. + attribute arearefs { xsd:IDREFS } + db.callout.attlist = + db.callout.role.attribute? + & db.common.attributes + & db.callout.arearefs.attribute + # This requires an XPath 2.0 compatible Schematron processor + db.callout = + + ## A called out + ## description of a marked area + [ + s:pattern [ + s:title [ "Callout cross reference constraint" ] + s:rule [ + context = "db:callout[@arearefs]" + s:assert [ + test = + "every $id in tokenize(current()/@arearefs) satisfies (every $ar in //*[@xml:id = $id] satisfies (local-name($ar) = ('areaset', 'area', 'co') and namespace-uri($ar) = 'http://docbook.org/ns/docbook'))" + "@arearefs on callout must point to a areaset, area, or co." + ] + ] + ] + ] + element callout { db.callout.attlist, db.all.blocks+ } +} +div { + db.programlistingco.role.attribute = attribute role { text } + db.programlistingco.attlist = + db.programlistingco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.programlistingco.info = db._info.title.forbidden + db.programlistingco = + + ## A program listing with associated areas used in callouts + element programlistingco { + db.programlistingco.attlist, + db.programlistingco.info, + db.areaspec, + db.programlisting, + db.calloutlist* + } +} +div { + db.areaspec.role.attribute = attribute role { text } + db.areaspec.attlist = + db.areaspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.area.units.attribute + db.areaspec = + + ## A collection of regions in a graphic or code example + element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ } +} +div { + db.area.role.attribute = attribute role { text } + db.area.linkends.attribute = + + ## Point to the callout + ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + attribute linkends { xsd:IDREFS } + db.area.label.attribute = + + ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + attribute label { text } + db.area.coords.attribute = + + ## Provides the coordinates of the area. The coordinates must be interpreted using the units + ## specified. + attribute coords { text } + db.area.attlist = + db.area.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area = + + ## A region defined for a callout in a graphic or code example + element area { db.area.attlist, db.alt? } +} +div { + # The only difference is that xml:id is optional + db.area.inareaset.attlist = + db.area.role.attribute? + & db.common.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area.inareaset = + + ## A region defined for a callout in a graphic or code example + element area { db.area.inareaset.attlist, db.alt? } +} +div { + db.areaset.role.attribute = attribute role { text } + db.areaset.linkends.attribute = db.linkends.attribute + db.areaset.label.attribute = db.label.attribute + db.areaset.attlist = + db.areaset.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.areaset.linkends.attribute | db.xlink.simple.link.attributes)? + & db.areaset.label.attribute? + db.areaset = + + ## A set of related areas in a graphic or code example + element areaset { db.areaset.attlist, db.area.inareaset+ } +} +div { + db.screenco.role.attribute = attribute role { text } + db.screenco.attlist = + db.screenco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenco.info = db._info.title.forbidden + db.screenco = + + ## A screen with associated areas used in callouts + element screenco { + db.screenco.attlist, + db.screenco.info, + db.areaspec, + db.screen, + db.calloutlist* + } +} +div { + db.imageobjectco.role.attribute = attribute role { text } + db.imageobjectco.attlist = + db.imageobjectco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobjectco.info = db._info.title.forbidden + db.imageobjectco = + + ## A wrapper for an image object with callouts + element imageobjectco { + db.imageobjectco.attlist, + db.imageobjectco.info, + db.areaspec, + db.imageobject+, + db.calloutlist* + } +} +div { + db.co.role.attribute = attribute role { text } + db.co.linkends.attribute = db.linkends.attribute + db.co.label.attribute = db.label.attribute + db.co.attlist = + db.co.role.attribute? + & db.common.idreq.attributes + & db.co.linkends.attribute? + & db.co.label.attribute? + db.co = + + ## The location of a callout embedded in text + element co { db.co.attlist, empty } +} +div { + db.coref.role.attribute = attribute role { text } + db.coref.label.attribute = db.label.attribute + db.coref.attlist = + db.coref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.coref.label.attribute? + db.coref = + + ## A cross reference to a co + element coref { db.coref.attlist, empty } +} +div { + db.productionset.role.attribute = attribute role { text } + db.productionset.attlist = + db.productionset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productionset.info = db._info.title.only + db.productionset = + + ## A set of EBNF productions + element productionset { + db.productionset.attlist, + db.productionset.info, + (db.production | db.productionrecap)+ + } +} +div { + db.production.role.attribute = attribute role { text } + db.production.attlist = + db.production.role.attribute? + & db.common.idreq.attributes + & db.common.linking.attributes + db.production = + + ## A production in a set of EBNF productions + element production { + db.production.attlist, db.lhs, db.rhs+, db.constraint* + } +} +div { + db.lhs.role.attribute = attribute role { text } + db.lhs.attlist = + db.lhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lhs = + + ## The left-hand side of an EBNF production + element lhs { db.lhs.attlist, text } +} +div { + db.rhs.role.attribute = attribute role { text } + db.rhs.attlist = + db.rhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.rhs = + + ## The right-hand side of an EBNF production + element rhs { + db.rhs.attlist, + (text | db.nonterminal | db.lineannotation | db.sbr)* + } +} +div { + db.nonterminal.role.attribute = attribute role { text } + db.nonterminal.def.attribute = + + ## Specifies a URI that points to a production + ## where the nonterminal + ## is defined + attribute def { xsd:anyURI } + db.nonterminal.attlist = + db.nonterminal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.nonterminal.def.attribute + db.nonterminal = + + ## A non-terminal in an EBNF production + element nonterminal { db.nonterminal.attlist, text } +} +div { + db.constraint.role.attribute = attribute role { text } + db.constraint.attlist = + db.constraint.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.constraint = + + ## A constraint in an EBNF production + [ + s:pattern [ + s:title [ "Constraint cross reference constraint" ] + s:rule [ + context = "db:constraint[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'constraintdef' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on constraint must point to a constraintdef." + ] + ] + ] + ] + element constraint { db.constraint.attlist, empty } +} +div { + db.productionrecap.role.attribute = attribute role { text } + db.productionrecap.attlist = + db.productionrecap.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.productionrecap = + + ## A cross-reference to an EBNF production + [ + s:pattern [ + s:title [ "Production recap cross reference constraint" ] + s:rule [ + context = "db:productionrecap[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'production' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on productionrecap must point to a production." + ] + ] + ] + ] + element productionrecap { db.productionrecap.attlist, empty } +} +div { + db.constraintdef.role.attribute = attribute role { text } + db.constraintdef.attlist = + db.constraintdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.constraintdef.info = db._info.title.only + db.constraintdef = + + ## The definition of a constraint in an EBNF production + element constraintdef { + db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+ + } +} +db.char.attribute = + + ## Specifies the alignment character when align + ## is set to char + ## . + attribute char { text } +db.charoff.attribute = + + ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + ## when align + ## is set to char + ## . + attribute charoff { + xsd:decimal { minExclusive = "0" maxExclusive = "100" } + } +db.frame.attribute = + + ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + attribute frame { + + ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + "all" + | + ## Frame only the bottom of the table. + "bottom" + | + ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + "none" + | + ## Frame the left and right sides of the table. + "sides" + | + ## Frame the top of the table. + "top" + | + ## Frame the top and bottom of the table. + "topbot" + } +db.colsep.attribute = + + ## Specifies the presence or absence of the column separator + attribute colsep { + + ## No column separator rule. + "0" + | + ## Provide a column separator rule on the right + "1" + } +db.rowsep.attribute = + + ## Specifies the presence or absence of the row separator + attribute rowsep { + + ## No row separator rule. + "0" + | + ## Provide a row separator rule below + "1" + } +db.orient.attribute = + + ## Specifies the orientation of the table + attribute orient { + + ## 90 degrees counter-clockwise from the rest of the text flow. + "land" + | + ## The same orientation as the rest of the text flow. + "port" + } +db.tabstyle.attribute = + + ## Specifies the table style + attribute tabstyle { text } +db.rowheader.attribute = + + ## Indicates whether or not the entries in the first column should be considered row headers + attribute rowheader { + + ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + "firstcol" + | + ## Indicates that row headers are identified by use of the headers attribute on entries in the table. + "headers" + | + ## Indicates that entries in the first column have no special significance with respect to column headers. + "norowheader" + } +db.align.attribute = + + ## Specifies the horizontal alignment of text in an entry. + attribute align { + + ## Centered. + "center" + | + ## Aligned on a particular character. + "char" + | + ## Left and right justified. + "justify" + | + ## Left justified. + "left" + | + ## Right justified. + "right" + } +db.valign.attribute = + + ## Specifies the vertical alignment of text in an entry. + attribute valign { + + ## Aligned on the bottom of the entry. + "bottom" + | + ## Aligned in the middle. + "middle" + | + ## Aligned at the top of the entry. + "top" + } +db.specify-col-by-colname.attributes = + + ## Specifies a column specification by name. + attribute colname { text } +db.specify-col-by-namest.attributes = + + ## Specifies a starting column by name. + attribute namest { text } +db.specify-span-by-spanspec.attributes = + + ## Specifies a span by name. + attribute spanname { text } +db.specify-span-directly.attributes = + + ## Specifies a starting column by name. + attribute namest { text } + & + ## Specifies an ending column by name. + attribute nameend { text } +db.column-spec.attributes = + db.specify-col-by-colname.attributes + | db.specify-col-by-namest.attributes + | db.specify-span-by-spanspec.attributes + | db.specify-span-directly.attributes +db.colname.attribute = + + ## Provides a name for a column specification. + attribute colname { text } +db.spanname.attribute = + + ## Provides a name for a span specification. + attribute spanname { text } +div { + db.tgroup.role.attribute = attribute role { text } + db.tgroup.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.tgroup.cols.attribute = + + ## The number of columns in the table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.tgroup.attlist = + db.tgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.tgroup.tgroupstyle.attribute? + & db.tgroup.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.tgroup = + + ## A wrapper for the main content of a table, or part of a table + element tgroup { + db.tgroup.attlist, + db.colspec*, + db.spanspec*, + db.cals.thead?, + db.cals.tfoot?, + db.cals.tbody + } +} +div { + db.colspec.role.attribute = attribute role { text } + db.colspec.colnum.attribute = + + ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + attribute colnum { xsd:positiveInteger } + db.colspec.colwidth.attribute = + + ## Specifies the width of the column. + attribute colwidth { text } + db.colspec.attlist = + db.colspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.colspec.colnum.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.colspec.colwidth.attribute? + & db.charoff.attribute? + & db.colname.attribute? + & db.rowsep.attribute? + & db.align.attribute? + & db.rowheader.attribute? + db.colspec = + + ## Specifications for a column in a table + element colspec { db.colspec.attlist, empty } +} +div { + db.spanspec.role.attribute = attribute role { text } + db.spanspec.namest.attribute = + + ## Specifies a starting column by name. + attribute namest { text } + db.spanspec.nameend.attribute = + + ## Specifies an ending column by name. + attribute nameend { text } + db.spanspec.attlist = + db.spanspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spanname.attribute + & db.spanspec.namest.attribute + & db.spanspec.nameend.attribute + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.spanspec = + + ## Formatting information for a spanned column in a table + element spanspec { db.spanspec.attlist, empty } +} +div { + db.cals.thead.role.attribute = attribute role { text } + db.cals.thead.attlist = + db.cals.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.thead = + + ## A table header consisting of one or more rows + element thead { db.cals.thead.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tfoot.role.attribute = attribute role { text } + db.cals.tfoot.attlist = + db.cals.tfoot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tfoot = + + ## A table footer consisting of one or more rows + element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tbody.role.attribute = attribute role { text } + db.cals.tbody.attlist = + db.cals.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.tbody.attlist, db.row+ } +} +div { + db.row.role.attribute = attribute role { text } + db.row.attlist = + db.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.row = + + ## A row in a table + element row { db.row.attlist, (db.entry | db.entrytbl)+ } +} +div { + db.entry.role.attribute = attribute role { text } + db.entry.morerows.attribute = + + ## Specifies the number of additional rows which this entry occupies. Defaults to zero. + attribute morerows { xsd:integer } + db.entry.rotate.attribute = + + ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + attribute rotate { + + ## Do not rotate the cell. + "0" + | + ## Rotate the cell 90 degrees counter-clockwise. + "1" + } + db.entry.scope.attribute = + + ## Specifies the scope of a header. + attribute scope { + + ## Applies to the row + "row" + | + ## Applies to the column + "col" + | + ## Applies to the row group + "rowgroup" + | + ## Applies to the column group + "colgroup" + } + db.entry.headers.attribute = + + ## Specifies the entry or entries which serve as headers for this element. + attribute headers { xsd:IDREFS } + db.entry.attlist = + db.entry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.entry.morerows.attribute? + & db.column-spec.attributes? + & db.rowsep.attribute? + & db.entry.rotate.attribute? + & db.align.attribute? + & db.entry.scope.attribute? + & db.entry.headers.attribute? + db.entry = + + ## A cell in a table + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of entry" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:informaltable)" + "informaltable must not occur among the children or descendants of entry" + ] + ] + ] + ] + element entry { + db.entry.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.entrytbl.role.attribute = attribute role { text } + db.entrytbl.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.entrytbl.cols.attribute = + + ## The number of columns in the entry table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.entrytbl.attlist = + db.entrytbl.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.column-spec.attributes? + & db.entrytbl.tgroupstyle.attribute? + & db.entrytbl.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.entrytbl = + + ## A subtable appearing in place of an entry in a table + element entrytbl { + db.entrytbl.attlist, + db.colspec*, + db.spanspec*, + db.cals.entrytbl.thead?, + db.cals.entrytbl.tbody + } +} +div { + db.cals.entrytbl.thead.role.attribute = attribute role { text } + db.cals.entrytbl.thead.attlist = + db.cals.entrytbl.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.thead = + + ## A table header consisting of one or more rows + element thead { + db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+ + } +} +div { + db.cals.entrytbl.tbody.role.attribute = attribute role { text } + db.cals.entrytbl.tbody.attlist = + db.cals.entrytbl.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ } +} +div { + db.entrytbl.row.role.attribute = attribute role { text } + db.entrytbl.row.attlist = + db.entrytbl.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.entrytbl.row = + + ## A row in a table + element row { db.entrytbl.row.attlist, db.entry+ } +} +div { + db.cals.table.role.attribute = attribute role { text } + db.cals.table.label.attribute = db.label.attribute + db.cals.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.table.attlist = + db.cals.table.role.attribute? + & db.cals.table.type.attribute? + & db.cals.table.label.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & + ## Indicates if the short or long title should be used in a List of Tables + attribute shortentry { + + ## Indicates that the full title should be used. + "0" + | + ## Indicates that the short short title (titleabbrev) should be used. + "1" + }? + & + ## Indicates if the table should appear in a List of Tables + attribute tocentry { + + ## Indicates that the table should not occur in the List of Tables. + "0" + | + ## Indicates that the table should appear in the List of Tables. + "1" + }? + & db.rowheader.attribute? + db.cals.table.info = db._info.title.onlyreq + db.cals.table = + + ## A formal table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + ] + element table { + db.cals.table.attlist, + db.cals.table.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +div { + db.cals.informaltable.role.attribute = attribute role { text } + db.cals.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.informaltable.attlist = + db.cals.informaltable.role.attribute? + & db.cals.informaltable.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & db.rowheader.attribute? + db.cals.informaltable.info = db._info.title.forbidden + db.cals.informaltable = + + ## A table without a title + element informaltable { + db.cals.informaltable.attlist, + db.cals.informaltable.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +db.html.coreattrs = + + ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + attribute class { text }? + & + ## This attribute specifies style information for the current element. + attribute style { text }? + & + ## This attribute offers advisory information about the element for which it is set. + attribute title { text }? +db.html.i18n = + + ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + attribute lang { text }? +db.html.events = + + ## Occurs when the pointing device button is clicked over an element. + attribute onclick { text }? + & + ## Occurs when the pointing device button is double clicked over an element. + attribute ondblclick { text }? + & + ## Occurs when the pointing device button is pressed over an element. + attribute onmousedown { text }? + & + ## Occurs when the pointing device button is released over an element. + attribute onmouseup { text }? + & + ## Occurs when the pointing device is moved onto an element. + attribute onmouseover { text }? + & + ## Occurs when the pointing device is moved while it is over an element. + attribute onmousemove { text }? + & + ## Occurs when the pointing device is moved away from an element. + attribute onmouseout { text }? + & + ## Occurs when a key is pressed and released over an element. + attribute onkeypress { text }? + & + ## Occurs when a key is pressed down over an element. + attribute onkeydown { text }? + & + ## Occurs when a key is released over an element. + attribute onkeyup { text }? +db.html.attrs = + db.common.attributes + & db.html.coreattrs + & db.html.i18n + & db.html.events +db.html.cellhalign = + + ## Specifies the alignment of data and the justification of text in a cell. + attribute align { + + ## Left-flush data/Left-justify text. This is the default value for table data. + "left" + | + ## Center data/Center-justify text. This is the default value for table headers. + "center" + | + ## Right-flush data/Right-justify text. + "right" + | + ## Double-justify text. + "justify" + | + ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + "char" + }? + & + ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + attribute char { text }? + & + ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + attribute charoff { + xsd:integer >> a:documentation [ "An explicit offset." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage offset." ] + }? +db.html.cellvalign = + + ## Specifies the vertical position of data within a cell. + attribute valign { + + ## Cell data is flush with the top of the cell. + "top" + | + ## Cell data is centered vertically within the cell. This is the default value. + "middle" + | + ## Cell data is flush with the bottom of the cell. + "bottom" + | + ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + "baseline" + }? +db.html.table.attributes = + + ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + attribute summary { text }? + & + ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + attribute width { + xsd:integer >> a:documentation [ "An explicit width." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage width." ] + }? + & + ## Specifies the width (in pixels only) of the frame around a table. + attribute border { xsd:nonNegativeInteger }? + & + ## Specifies which sides of the frame surrounding a table will be visible. + attribute frame { + + ## No sides. This is the default value. + "void" + | + ## The top side only. + "above" + | + ## The bottom side only. + "below" + | + ## The top and bottom sides only. + "hsides" + | + ## The left-hand side only. + "lhs" + | + ## The right-hand side only. + "rhs" + | + ## The right and left sides only. + "vsides" + | + ## All four sides. + "box" + | + ## All four sides. + "border" + }? + & + ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + attribute rules { + + ## No rules. This is the default value. + "none" + | + ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + "groups" + | + ## Rules will appear between rows only. + "rows" + | + ## Rules will appear between columns only. + "cols" + | + ## Rules will appear between all rows and columns. + "all" + }? + & + ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + attribute cellspacing { + xsd:integer >> a:documentation [ "An explicit spacing." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage spacing." ] + }? + & + ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + attribute cellpadding { + xsd:integer >> a:documentation [ "An explicit padding." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage padding." ] + }? +db.html.tablecell.attributes = + + ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + attribute abbr { text }? + & + ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + attribute axis { text }? + & + ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + attribute headers { text }? + & + ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + attribute scope { + + ## The current cell provides header information for the rest of the row that contains it + "row" + | + ## The current cell provides header information for the rest of the column that contains it. + "col" + | + ## The header cell provides header information for the rest of the row group that contains it. + "rowgroup" + | + ## The header cell provides header information for the rest of the column group that contains it. + "colgroup" + }? + & + ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all rows from the current row to the last row of the table section (thead + ## , tbody + ## , or tfoot + ## ) in which the cell is defined. + attribute rowspan { xsd:nonNegativeInteger }? + & + ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup + ## ) in which the cell is defined. + attribute colspan { xsd:nonNegativeInteger }? +db.html.table.info = db._info.title.forbidden +db.html.table.model = + db.html.table.info?, + db.html.caption, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +db.html.informaltable.info = db._info.title.forbidden +db.html.informaltable.model = + db.html.informaltable.info?, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +div { + db.html.table.role.attribute = attribute role { text } + db.html.table.label.attribute = db.label.attribute + db.html.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.table.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.table.role.attribute? + & db.html.table.type.attribute? + & db.html.table.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.table = + + ## A formal (captioned) HTML table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + ] + element table { db.html.table.attlist, db.html.table.model } +} +div { + db.html.informaltable.role.attribute = attribute role { text } + db.html.informaltable.label.attribute = db.label.attribute + db.html.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.informaltable.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.informaltable.role.attribute? + & db.html.informaltable.type.attribute? + & db.html.informaltable.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.informaltable = + + ## An HTML table without a title + element informaltable { + db.html.informaltable.attlist, db.html.informaltable.model + } +} +div { + db.html.caption.attlist = db.html.attrs + db.html.caption = + + ## An HTML table caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + ] + element caption { db.html.caption.attlist, db.all.inlines* } +} +div { + db.html.col.attlist = + db.html.attrs + & + ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned + ## by the col + ## element; the col + ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + ## element shares its attributes with the next N-1 columns. + attribute span { xsd:nonNegativeInteger }? + & + ## Specifies a default width for each column spanned by the current col + ## element. It has the same meaning as the width + ## attribute for the colgroup + ## element and overrides it. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.col = + + ## Specifications for a column in an HTML table + element col { db.html.col.attlist, empty } +} +div { + db.html.colgroup.attlist = + db.html.attrs + & + ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + ## element contains one or more col + ## elements. + attribute span { xsd:nonNegativeInteger }? + & + ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + ## element. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.colgroup = + + ## A group of columns in an HTML table + element colgroup { db.html.colgroup.attlist, db.html.col* } +} +div { + db.html.thead.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.thead = + + ## A table header consisting of one or more rows in an HTML table + element thead { db.html.thead.attlist, db.html.tr+ } +} +div { + db.html.tfoot.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tfoot = + + ## A table footer consisting of one or more rows in an HTML table + element tfoot { db.html.tfoot.attlist, db.html.tr+ } +} +div { + db.html.tbody.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tbody = + + ## A wrapper for the rows of an HTML table or informal HTML table + element tbody { db.html.tbody.attlist, db.html.tr+ } +} +div { + db.html.tr.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tr = + + ## A row in an HTML table + element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ } +} +div { + db.html.th.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.th = + + ## A table header entry in an HTML table + element th { + db.html.th.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.html.td.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.td = + + ## A table entry in an HTML table + element td { + db.html.td.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.msgset.role.attribute = attribute role { text } + db.msgset.attlist = + db.msgset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgset.info = db._info.title.only + db.msgset = + + ## A detailed set of messages, usually error messages + element msgset { + db.msgset.attlist, + db.msgset.info, + (db.msgentry+ | db.simplemsgentry+) + } +} +div { + db.msgentry.role.attribute = attribute role { text } + db.msgentry.attlist = + db.msgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgentry = + + ## A wrapper for an entry in a message set + element msgentry { + db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan* + } +} +div { + db.simplemsgentry.role.attribute = attribute role { text } + db.simplemsgentry.msgaud.attribute = + + ## The audience to which the message relevant + attribute msgaud { text } + db.simplemsgentry.msgorig.attribute = + + ## The origin of the message + attribute msgorig { text } + db.simplemsgentry.msglevel.attribute = + + ## The level of importance or severity of a message + attribute msglevel { text } + db.simplemsgentry.attlist = + db.simplemsgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplemsgentry.msgaud.attribute? + & db.simplemsgentry.msgorig.attribute? + & db.simplemsgentry.msglevel.attribute? + db.simplemsgentry = + + ## A wrapper for a simpler entry in a message set + element simplemsgentry { + db.simplemsgentry.attlist, db.msgtext, db.msgexplan+ + } +} +div { + db.msg.role.attribute = attribute role { text } + db.msg.attlist = + db.msg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msg.info = db._info.title.only + db.msg = + + ## A message in a message set + element msg { + db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)* + } +} +div { + db.msgmain.role.attribute = attribute role { text } + db.msgmain.attlist = + db.msgmain.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgmain.info = db._info.title.only + db.msgmain = + + ## The primary component of a message in a message set + element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext } +} +div { + db.msgsub.role.attribute = attribute role { text } + db.msgsub.attlist = + db.msgsub.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgsub.info = db._info.title.only + db.msgsub = + + ## A subcomponent of a message in a message set + element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext } +} +div { + db.msgrel.role.attribute = attribute role { text } + db.msgrel.attlist = + db.msgrel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgrel.info = db._info.title.only + db.msgrel = + + ## A related component of a message in a message set + element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext } +} +div { + db.msgtext.role.attribute = attribute role { text } + db.msgtext.attlist = + db.msgtext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgtext = + + ## The actual text of a message component in a message set + element msgtext { db.msgtext.attlist, db.all.blocks+ } +} +div { + db.msginfo.role.attribute = attribute role { text } + db.msginfo.attlist = + db.msginfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msginfo = + + ## Information about a message in a message set + element msginfo { + db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)* + } +} +div { + db.msglevel.role.attribute = attribute role { text } + db.msglevel.attlist = + db.msglevel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msglevel = + + ## The level of importance or severity of a message in a message set + element msglevel { db.msglevel.attlist, db._text } +} +div { + db.msgorig.role.attribute = attribute role { text } + db.msgorig.attlist = + db.msgorig.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgorig = + + ## The origin of a message in a message set + element msgorig { db.msgorig.attlist, db._text } +} +div { + db.msgaud.role.attribute = attribute role { text } + db.msgaud.attlist = + db.msgaud.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgaud = + + ## The audience to which a message in a message set is relevant + element msgaud { db.msgaud.attlist, db._text } +} +div { + db.msgexplan.role.attribute = attribute role { text } + db.msgexplan.attlist = + db.msgexplan.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgexplan.info = db._info.title.only + db.msgexplan = + + ## Explanatory material relating to a message in a message set + element msgexplan { + db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+ + } +} +div { + db.qandaset.role.attribute = attribute role { text } + db.qandaset.defaultlabel.enumeration = + + ## No labels + "none" + | + ## Numeric labels + "number" + | + ## "Q:" and "A:" labels + "qanda" + db.qandaset.defaultlabel.attribute = + + ## Specifies the default labelling + attribute defaultlabel { db.qandaset.defaultlabel.enumeration } + db.qandaset.attlist = + db.qandaset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.qandaset.defaultlabel.attribute? + db.qandaset.info = db._info.title.only + db.qandaset = + + ## A question-and-answer set + element qandaset { + db.qandaset.attlist, + db.qandaset.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandadiv.role.attribute = attribute role { text } + db.qandadiv.attlist = + db.qandadiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandadiv.info = db._info.title.only + db.qandadiv = + + ## A titled division in a qandaset + element qandadiv { + db.qandadiv.attlist, + db.qandadiv.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandaentry.role.attribute = attribute role { text } + db.qandaentry.attlist = + db.qandaentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandaentry.info = db._info.title.only + db.qandaentry = + + ## A question/answer set within a qandaset + element qandaentry { + db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer* + } +} +div { + db.question.role.attribute = attribute role { text } + db.question.attlist = + db.question.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.question = + + ## A question in a qandaset + element question { db.question.attlist, db.label?, db.all.blocks+ } +} +div { + db.answer.role.attribute = attribute role { text } + db.answer.attlist = + db.answer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.answer = + + ## An answer to a question posed in a qandaset + element answer { db.answer.attlist, db.label?, db.all.blocks+ } +} +div { + db.label.role.attribute = attribute role { text } + db.label.attlist = + db.label.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.label = + + ## A label on a question or answer + element label { db.label.attlist, db._text } +} +db.math.inlines = db.inlineequation +db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+ +db.inlineequation.content = + (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+ +div { + db.equation.role.attribute = attribute role { text } + db.equation.label.attribute = db.label.attribute + db.equation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.equation.attlist = + db.equation.role.attribute? + & db.equation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.equation.label.attribute? + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.equation.info = db._info.title.only + db.equation = + + ## A displayed mathematical equation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of equation" + ] + ] + ] + ] + element equation { + db.equation.attlist, + db.equation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.informalequation.role.attribute = attribute role { text } + db.informalequation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.informalequation.attlist = + db.informalequation.role.attribute? + & db.informalequation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.informalequation.info = db._info.title.forbidden + db.informalequation = + + ## A displayed mathematical equation without a title + element informalequation { + db.informalequation.attlist, + db.informalequation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.inlineequation.role.attribute = attribute role { text } + db.inlineequation.attlist = + db.inlineequation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlineequation = + + ## A mathematical equation or expression occurring inline + element inlineequation { + db.inlineequation.attlist, db.alt?, db.inlineequation.content + } +} +div { + db.mathphrase.role.attribute = attribute role { text } + db.mathphrase.attlist = + db.mathphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mathphrase = + + ## A mathematical phrase that can be represented with ordinary text and a small amount of markup + element mathphrase { + db.mathphrase.attlist, + (db._text | db.ubiq.inlines | db._emphasis)* + } +} +db.imagedata.mathml.content = db._any.mml +div { + db.imagedata.mathml.role.attribute = attribute role { text } + db.imagedata.mathml.attlist = + db.imagedata.mathml.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is MathML + attribute format { + + ## Specifies MathML. + "mathml" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.mathml.info = db._info.title.forbidden + db.imagedata.mathml = + + ## A MathML expression in a media object + element imagedata { + db.imagedata.mathml.attlist, + db.imagedata.mathml.info, + db.imagedata.mathml.content+ + } +} +div { + db._any.mml = + + ## Any element from the MathML namespace + element mml:* { (db._any.attribute | text | db._any)* } +} +db.imagedata.svg.content = db._any.svg +div { + db.imagedata.svg.role.attribute = attribute role { text } + db.imagedata.svg.attlist = + db.imagedata.svg.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is SVG + attribute format { + + ## Specifies SVG. + "svg" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.svg.info = db._info.title.forbidden + db.imagedata.svg = + + ## An SVG drawing in a media object + element imagedata { + db.imagedata.svg.attlist, + db.imagedata.svg.info, + db.imagedata.svg.content+ + } +} +div { + db._any.svg = + + ## Any element from the SVG namespace + element svg:* { (db._any.attribute | text | db._any)* } +} +db.markup.inlines = + db.tag + | db.markup + | db.token + | db.symbol + | db.literal + | db.code + | db.constant + | db.email + | db.uri +div { + db.markup.role.attribute = attribute role { text } + db.markup.attlist = + db.markup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.markup = + + ## A string of formatting markup in text that is to be represented literally + element markup { db.markup.attlist, db._text } +} +div { + db.tag.role.attribute = attribute role { text } + db.tag.class.enumeration = + + ## An attribute + "attribute" + | + ## An attribute value + "attvalue" + | + ## An element + "element" + | + ## An empty element tag + "emptytag" + | + ## An end tag + "endtag" + | + ## A general entity + "genentity" + | + ## The local name part of a qualified name + "localname" + | + ## A namespace + "namespace" + | + ## A numeric character reference + "numcharref" + | + ## A parameter entity + "paramentity" + | + ## A processing instruction + "pi" + | + ## The prefix part of a qualified name + "prefix" + | + ## An SGML comment + "comment" + | + ## A start tag + "starttag" + | + ## An XML processing instruction + "xmlpi" + db.tag.class.attribute = + + ## Identifies the nature of the tag content + attribute class { db.tag.class.enumeration } + db.tag.namespace.attribute = + + ## Identifies the namespace of the tag content + attribute namespace { xsd:anyURI } + db.tag.attlist = + db.tag.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tag.class.attribute? + & db.tag.namespace.attribute? + db.tag = + + ## A component of XML (or SGML) markup + element tag { db.tag.attlist, (db._text | db.tag)* } +} +div { + db.symbol.class.attribute = + + ## Identifies the class of symbol + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.symbol.role.attribute = attribute role { text } + db.symbol.attlist = + db.symbol.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.symbol.class.attribute? + db.symbol = + + ## A name that is replaced by a value before processing + element symbol { db.symbol.attlist, db._text } +} +div { + db.token.role.attribute = attribute role { text } + db.token.attlist = + db.token.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.token = + + ## A unit of information + element token { db.token.attlist, db._text } +} +div { + db.literal.role.attribute = attribute role { text } + db.literal.attlist = + db.literal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.literal = + + ## Inline text that is some literal value + element literal { db.literal.attlist, db._text } +} +div { + code.language.attribute = + + ## Identifies the (computer) language of the code fragment + attribute language { text } + db.code.role.attribute = attribute role { text } + db.code.attlist = + db.code.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & code.language.attribute? + db.code = + + ## An inline code fragment + element code { + db.code.attlist, (db.programming.inlines | db._text)* + } +} +div { + db.constant.class.attribute = + + ## Identifies the class of constant + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.constant.role.attribute = attribute role { text } + db.constant.attlist = + db.constant.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.constant.class.attribute? + db.constant = + + ## A programming or system constant + element constant { db.constant.attlist, db._text } +} +div { + db.productname.role.attribute = attribute role { text } + db.productname.class.enumeration = + + ## A name with a copyright + "copyright" + | + ## A name with a registered copyright + "registered" + | + ## A name of a service + "service" + | + ## A name which is trademarked + "trade" + db.productname.class.attribute = + + ## Specifies the class of product name + attribute class { db.productname.class.enumeration } + db.productname.attlist = + db.productname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.productname.class.attribute? + db.productname = + + ## The formal name of a product + element productname { db.productname.attlist, db._text } +} +div { + db.productnumber.role.attribute = attribute role { text } + db.productnumber.attlist = + db.productnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productnumber = + + ## A number assigned to a product + element productnumber { db.productnumber.attlist, db._text } +} +div { + db.database.class.enumeration = + + ## An alternate or secondary key + "altkey" + | + ## A constraint + "constraint" + | + ## A data type + "datatype" + | + ## A field + "field" + | + ## A foreign key + "foreignkey" + | + ## A group + "group" + | + ## An index + "index" + | + ## The first or primary key + "key1" + | + ## An alternate or secondary key + "key2" + | + ## A name + "name" + | + ## The primary key + "primarykey" + | + ## A (stored) procedure + "procedure" + | + ## A record + "record" + | + ## A rule + "rule" + | + ## The secondary key + "secondarykey" + | + ## A table + "table" + | + ## A user + "user" + | + ## A view + "view" + db.database.class.attribute = + + ## Identifies the class of database artifact + attribute class { db.database.class.enumeration } + db.database.role.attribute = attribute role { text } + db.database.attlist = + db.database.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.database.class.attribute? + db.database = + + ## The name of a database, or part of a database + element database { db.database.attlist, db._text } +} +div { + db.application.class.enumeration = + + ## A hardware application + "hardware" + | + ## A software application + "software" + db.application.class.attribute = + + ## Identifies the class of application + attribute class { db.application.class.enumeration } + db.application.role.attribute = attribute role { text } + db.application.attlist = + db.application.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.application.class.attribute? + db.application = + + ## The name of a software program + element application { db.application.attlist, db._text } +} +div { + db.hardware.role.attribute = attribute role { text } + db.hardware.attlist = + db.hardware.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.hardware = + + ## A physical part of a computer system + element hardware { db.hardware.attlist, db._text } +} +db.gui.inlines = + db.guiicon + | db.guibutton + | db.guimenuitem + | db.guimenu + | db.guisubmenu + | db.guilabel + | db.menuchoice + | db.mousebutton +div { + db.guibutton.role.attribute = attribute role { text } + db.guibutton.attlist = + db.guibutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guibutton = + + ## The text on a button in a GUI + element guibutton { + db.guibutton.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guiicon.role.attribute = attribute role { text } + db.guiicon.attlist = + db.guiicon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guiicon = + + ## Graphic and/or text appearing as a icon in a GUI + element guiicon { + db.guiicon.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guilabel.role.attribute = attribute role { text } + db.guilabel.attlist = + db.guilabel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guilabel = + + ## The text of a label in a GUI + element guilabel { + db.guilabel.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenu.role.attribute = attribute role { text } + db.guimenu.attlist = + db.guimenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenu = + + ## The name of a menu in a GUI + element guimenu { + db.guimenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenuitem.role.attribute = attribute role { text } + db.guimenuitem.attlist = + db.guimenuitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenuitem = + + ## The name of a terminal menu item in a GUI + element guimenuitem { + db.guimenuitem.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guisubmenu.role.attribute = attribute role { text } + db.guisubmenu.attlist = + db.guisubmenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guisubmenu = + + ## The name of a submenu in a GUI + element guisubmenu { + db.guisubmenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.menuchoice.role.attribute = attribute role { text } + db.menuchoice.attlist = + db.menuchoice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.menuchoice = + + ## A selection or series of selections from a menu + element menuchoice { + db.menuchoice.attlist, + db.shortcut?, + (db.guibutton + | db.guiicon + | db.guilabel + | db.guimenu + | db.guimenuitem + | db.guisubmenu)+ + } +} +div { + db.mousebutton.role.attribute = attribute role { text } + db.mousebutton.attlist = + db.mousebutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mousebutton = + + ## The conventional name of a mouse button + element mousebutton { db.mousebutton.attlist, db._text } +} +db.keyboard.inlines = + db.keycombo + | db.keycap + | db.keycode + | db.keysym + | db.shortcut + | db.accel +div { + db.keycap.function.enumeration = + + ## The "Alt" key + "alt" + | + ## The "Alt Graph" key + "altgr" + | + ## The "Backspace" key + "backspace" + | + ## The "Command" key + "command" + | + ## The "Control" key + "control" + | + ## The "Delete" key + "delete" + | + ## The down arrow + "down" + | + ## The "End" key + "end" + | + ## The "Enter" key + "enter" + | + ## The "Escape" key + "escape" + | + ## The "Home" key + "home" + | + ## The "Insert" key + "insert" + | + ## The left arrow + "left" + | + ## The "Meta" key + "meta" + | + ## The "Option" key + "option" + | + ## The page down key + "pagedown" + | + ## The page up key + "pageup" + | + ## The right arrow + "right" + | + ## The "Return" key + "return" + | + ## The "Shift" key + "shift" + | + ## The spacebar + "space" + | + ## The "Tab" key + "tab" + | + ## The up arrow + "up" + db.keycap.function-enum.attribute = + + ## Identifies the function key + attribute function { db.keycap.function.enumeration }? + db.keycap.function-other.attributes = + + ## Identifies the function key + attribute function { + + ## Indicates a non-standard function key + "other" + }?, + + ## Specifies a keyword that identifies the non-standard key + attribute otherfunction { text } + db.keycap.function.attrib = + db.keycap.function-enum.attribute + | db.keycap.function-other.attributes + db.keycap.role.attribute = attribute role { text } + db.keycap.attlist = + db.keycap.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycap.function.attrib + db.keycap = + + ## The text printed on a key on a keyboard + element keycap { db.keycap.attlist, db._text } +} +div { + db.keycode.role.attribute = attribute role { text } + db.keycode.attlist = + db.keycode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keycode = + + ## The internal, frequently numeric, identifier for a key on a keyboard + element keycode { db.keycode.attlist, db._text } +} +db.keycombination.contentmodel = + (db.keycap | db.keycombo | db.keysym) | db.mousebutton +div { + db.keycombo.action.enumeration = + + ## A (single) mouse click. + "click" + | + ## A double mouse click. + "double-click" + | + ## A mouse or key press. + "press" + | + ## Sequential clicks or presses. + "seq" + | + ## Simultaneous clicks or presses. + "simul" + db.keycombo.action-enum.attribute = + + ## Identifies the nature of the action taken. If keycombo + ## contains more than one element, simul + ## is the default, otherwise there is no default. + attribute action { db.keycombo.action.enumeration }? + db.keycombo.action-other.attributes = + + ## Identifies the nature of the action taken + attribute action { + + ## Indicates a non-standard action + "other" + }?, + + ## Identifies the non-standard action in some unspecified way. + attribute otheraction { text } + db.keycombo.action.attrib = + db.keycombo.action-enum.attribute + | db.keycombo.action-other.attributes + db.keycombo.role.attribute = attribute role { text } + db.keycombo.attlist = + db.keycombo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycombo.action.attrib + db.keycombo = + + ## A combination of input actions + element keycombo { + db.keycombo.attlist, db.keycombination.contentmodel+ + } +} +div { + db.keysym.role.attribute = attribute role { text } + db.keysym.attlist = + db.keysym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keysym = + + ## The symbolic name of a key on a keyboard + element keysym { db.keysym.attlist, db._text } +} +div { + db.accel.role.attribute = attribute role { text } + db.accel.attlist = + db.accel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.accel = + + ## A graphical user interface (GUI) keyboard shortcut + element accel { db.accel.attlist, db._text } +} +div { + db.shortcut.action.attrib = db.keycombo.action.attrib + db.shortcut.role.attribute = attribute role { text } + db.shortcut.attlist = + db.shortcut.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.shortcut.action.attrib + db.shortcut = + + ## A key combination for an action that is also accessible through a menu + element shortcut { + db.shortcut.attlist, db.keycombination.contentmodel+ + } +} +db.os.inlines = + db.prompt + | db.envar + | db.filename + | db.command + | db.computeroutput + | db.userinput +db.computeroutput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines +db.userinput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines +db.prompt.inlines = db._text | db.co +div { + db.prompt.role.attribute = attribute role { text } + db.prompt.attlist = + db.prompt.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.prompt = + + ## A character or string indicating the start of an input field in a computer display + element prompt { db.prompt.attlist, db.prompt.inlines* } +} +div { + db.envar.role.attribute = attribute role { text } + db.envar.attlist = + db.envar.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.envar = + + ## A software environment variable + element envar { db.envar.attlist, db._text } +} +div { + db.filename.class.enumeration = + + ## A device + "devicefile" + | + ## A directory + "directory" + | + ## A filename extension + "extension" + | + ## A header file (as for a programming language) + "headerfile" + | + ## A library file + "libraryfile" + | + ## A partition (as of a hard disk) + "partition" + | + ## A symbolic link + "symlink" + db.filename.class.attribute = + + ## Identifies the class of filename + attribute class { db.filename.class.enumeration } + db.filename.path.attribute = + + ## Specifies the path of the filename + attribute path { text } + db.filename.role.attribute = attribute role { text } + db.filename.attlist = + db.filename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.filename.path.attribute? + & db.filename.class.attribute? + db.filename = + + ## The name of a file + element filename { db.filename.attlist, db._text } +} +div { + db.command.role.attribute = attribute role { text } + db.command.attlist = + db.command.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.command = + + ## The name of an executable program or other software command + element command { db.command.attlist, db._text } +} +div { + db.computeroutput.role.attribute = attribute role { text } + db.computeroutput.attlist = + db.computeroutput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.computeroutput = + + ## Data, generally text, displayed or presented by a computer + element computeroutput { + db.computeroutput.attlist, db.computeroutput.inlines* + } +} +div { + db.userinput.role.attribute = attribute role { text } + db.userinput.attlist = + db.userinput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.userinput = + + ## Data entered by the user + element userinput { db.userinput.attlist, db.userinput.inlines* } +} +div { + db.cmdsynopsis.role.attribute = attribute role { text } + db.cmdsynopsis.sepchar.attribute = + + ## Specifies the character that should separate the command and its top-level arguments + attribute sepchar { text } + db.cmdsynopsis.cmdlength.attribute = + + ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + attribute cmdlength { text } + db.cmdsynopsis.label.attribute = db.label.attribute + db.cmdsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.cmdsynopsis.attlist = + db.cmdsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.cmdsynopsis.sepchar.attribute? + & db.cmdsynopsis.cmdlength.attribute? + & db.cmdsynopsis.label.attribute? + & db.cmdsynopsis.packageref.attribute? + db.cmdsynopsis.info = db._info.title.forbidden + db.cmdsynopsis = + + ## A syntax summary for a software command + element cmdsynopsis { + db.cmdsynopsis.attlist, + db.cmdsynopsis.info, + (db.command | db.arg | db.group | db.sbr)+, + db.synopfragment* + } +} +db.rep.enumeration = + + ## Can not be repeated. + "norepeat" + | + ## Can be repeated. + "repeat" +db.rep.attribute = + + ## Indicates whether or not repetition is possible. + [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration } +db.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted without indication. + "plain" + | + ## Formatted to indicate that it is required. + "req" +db.choice.opt.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration } +db.choice.req.attribute = + + ## Indicates optionality. + [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration } +div { + db.arg.role.attribute = attribute role { text } + db.arg.rep.attribute = db.rep.attribute + db.arg.choice.attribute = db.choice.opt.attribute + db.arg.attlist = + db.arg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.arg.rep.attribute? + & db.arg.choice.attribute? + db.arg = + + ## An argument in a cmdsynopsis + element arg { + db.arg.attlist, + (db._text + | db.arg + | db.group + | db.option + | db.synopfragmentref + | db.sbr)* + } +} +div { + db.group.role.attribute = attribute role { text } + db.group.rep.attribute = db.rep.attribute + db.group.choice.attribute = db.choice.opt.attribute + db.group.attlist = + db.group.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.rep.attribute? + & db.group.choice.attribute? + db.group = + + ## A group of elements in a cmdsynopsis + element group { + db.group.attlist, + (db.arg + | db.group + | db.option + | db.synopfragmentref + | db.replaceable + | db.sbr)+ + } +} +div { + db.sbr.role.attribute = attribute role { text } + db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes + db.sbr = + + ## An explicit line break in a command synopsis + element sbr { db.sbr.attlist, empty } +} +div { + db.synopfragment.role.attribute = attribute role { text } + db.synopfragment.attlist = + db.synopfragment.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.synopfragment = + + ## A portion of a cmdsynopsis broken out from the main body of the synopsis + element synopfragment { + db.synopfragment.attlist, (db.arg | db.group)+ + } +} +div { + db.synopfragmentref.role.attribute = attribute role { text } + db.synopfragmentref.attlist = + db.synopfragmentref.role.attribute? + & db.common.attributes + & db.linkend.attribute + db.synopfragmentref = + + ## A reference to a fragment of a command synopsis + [ + s:pattern [ + s:title [ "Synopsis fragment type constraint" ] + s:rule [ + context = "db:synopfragmentref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on synopfragmentref must point to a synopfragment." + ] + ] + ] + ] + element synopfragmentref { db.synopfragmentref.attlist, text } +} +db.programming.inlines = + db.function + | db.parameter + | db.varname + | db.returnvalue + | db.type + | db.classname + | db.exceptionname + | db.interfacename + | db.methodname + | db.modifier + | db.initializer + | db.buildtarget + | db.oo.inlines + | db.templatename + | db.macroname + | db.unionname + | db.enumname + | db.enumvalue + | db.enumidentifier + | db.typedefname +db.oo.inlines = db.ooclass | db.ooexception | db.oointerface +db.synopsis.blocks = + (db.funcsynopsis + | db.classsynopsis + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.enumsynopsis + | db.typedefsynopsis + | db.packagesynopsis + | db.macrosynopsis + | db.unionsynopsis) + | db.cmdsynopsis +div { + db.synopsis.role.attribute = attribute role { text } + db.synopsis.label.attribute = db.label.attribute + db.synopsis.attlist = + db.synopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.synopsis.label.attribute? + db.synopsis = + + ## A general-purpose element for representing the syntax of commands or functions + element synopsis { db.synopsis.attlist, db.verbatim.contentmodel } +} +div { + db.synopsisinfo.role.attribute = attribute role { text } + db.synopsisinfo.attlist = + db.synopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.synopsisinfo = + + ## Information supplementing synopsis + element synopsisinfo { + db.synopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcsynopsis.info = db._info.title.forbidden + db.funcsynopsis.role.attribute = attribute role { text } + db.funcsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.funcsynopsis.attlist = + db.funcsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.funcsynopsis.packageref.attribute? + db.funcsynopsis = + + ## The syntax summary for a function definition + element funcsynopsis { + db.funcsynopsis.attlist, + db.funcsynopsis.info, + (db.funcsynopsisinfo | db.funcprototype)+ + } +} +div { + db.funcsynopsisinfo.role.attribute = attribute role { text } + db.funcsynopsisinfo.attlist = + db.funcsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.funcsynopsisinfo = + + ## Information supplementing the funcdefs of a funcsynopsis + element funcsynopsisinfo { + db.funcsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcprototype.role.attribute = attribute role { text } + db.funcprototype.attlist = + db.funcprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcprototype = + + ## The prototype of a function + element funcprototype { + db.funcprototype.attlist, + db.modifier*, + db.funcdef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.funcdef.role.attribute = attribute role { text } + db.funcdef.attlist = + db.funcdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcdef = + + ## A function (subroutine) name and its return type + element funcdef { + db.funcdef.attlist, + (db._text | db.type | db.templatename | db.void | db.function)* + } +} +div { + db.function.role.attribute = attribute role { text } + db.function.attlist = + db.function.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.function = + + ## The name of a function or subroutine, as in a programming language + element function { db.function.attlist, db._text } +} +div { + db.void.role.attribute = attribute role { text } + db.void.attlist = + db.void.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.void = + + ## An empty element in a function synopsis indicating that the function in question takes no arguments + element void { db.void.attlist, empty } +} +div { + db.varargs.role.attribute = attribute role { text } + db.varargs.attlist = + db.varargs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varargs = + + ## An empty element in a function synopsis indicating a variable number of arguments + element varargs { db.varargs.attlist, empty } +} +div { + db.group.paramdef.role.attribute = attribute role { text } + db.group.paramdef.choice.attribute = db.choice.opt.attribute + db.group.paramdef.attlist = + db.group.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.paramdef.choice.attribute? + db.group.paramdef = + + ## A group of parameters + element group { + db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+ + } +} +div { + db.paramdef.role.attribute = attribute role { text } + db.paramdef.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted to indicate that it is required. + "req" + db.paramdef.choice.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] + attribute choice { db.paramdef.choice.enumeration } + db.paramdef.attlist = + db.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.paramdef.choice.attribute? + db.paramdef = + + ## Information about a function parameter in a programming language + element paramdef { + db.paramdef.attlist, + (db._text + | db.initializer + | db.modifier + | db.type + | db.templatename + | db.parameter + | db.funcparams)* + } +} +div { + db.funcparams.role.attribute = attribute role { text } + db.funcparams.attlist = + db.funcparams.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcparams = + + ## Parameters for a function referenced through a function pointer in a synopsis + element funcparams { db.funcparams.attlist, db._text } +} +div { + db.classsynopsis.info = db._info.title.forbidden + db.classsynopsis.role.attribute = attribute role { text } + db.classsynopsis.class.enumeration = + + ## This is the synopsis of a class + "class" + | + ## This is the synopsis of an interface + "interface" + db.classsynopsis.class.attribute = + + ## Specifies the nature of the synopsis + attribute class { db.classsynopsis.class.enumeration } + db.classsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.classsynopsis.attlist = + db.classsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.classsynopsis.class.attribute? + & db.classsynopsis.packageref.attribute? + db.classsynopsis = + + ## The syntax summary for a class definition + element classsynopsis { + db.classsynopsis.attlist, + db.classsynopsis.info, + db.classsynopsisinfo*, + db.templatename*, + db.oo.inlines, + (db.template + | db.ooexception + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.classsynopsisinfo)* + } +} +div { + db.classsynopsisinfo.role.attribute = attribute role { text } + db.classsynopsisinfo.attlist = + db.classsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.classsynopsisinfo = + + ## Information supplementing the contents of a classsynopsis + element classsynopsisinfo { + db.classsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.ooclass.role.attribute = attribute role { text } + db.ooclass.attlist = + db.ooclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooclass = + + ## A class in an object-oriented programming language + element ooclass { + db.ooclass.attlist, + (db.package | db.modifier)*, + db.classname, + db.modifier* + } +} +div { + db.oointerface.role.attribute = attribute role { text } + db.oointerface.attlist = + db.oointerface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.oointerface = + + ## An interface in an object-oriented programming language + element oointerface { + db.oointerface.attlist, + (db.package | db.modifier)*, + db.interfacename, + db.modifier* + } +} +div { + db.ooexception.role.attribute = attribute role { text } + db.ooexception.attlist = + db.ooexception.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooexception = + + ## An exception in an object-oriented programming language + element ooexception { + db.ooexception.attlist, + (db.package | db.modifier)*, + db.exceptionname, + db.modifier* + } +} +db.modifier.xml.space.attribute = + + ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + attribute xml:space { + + ## Extra whitespace and line breaks must be preserved. + [ + # Ideally the definition of xml:space used on modifier would be + # different from the definition used on the verbatim elements. The + # verbatim elements forbid the use of xml:space="default" which + # wouldn't be a problem on modifier. But doing that causes the + # generated XSD schemas to be broken so I'm just reusing the existing + # definition for now. It won't be backwards incompatible to fix this + # problem in the future. + # | ## Extra whitespace and line breaks are not preserved. + # "default" + + ] + "preserve" + } +div { + db.modifier.role.attribute = attribute role { text } + db.modifier.attlist = + db.modifier.xml.space.attribute? + & db.modifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.modifier = + + ## Modifiers in a synopsis + element modifier { db.modifier.attlist, db._text } +} +div { + db.interfacename.role.attribute = attribute role { text } + db.interfacename.attlist = + db.interfacename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.interfacename = + + ## The name of an interface + element interfacename { db.interfacename.attlist, db._text } +} +div { + db.exceptionname.role.attribute = attribute role { text } + db.exceptionname.attlist = + db.exceptionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.exceptionname = + + ## The name of an exception + element exceptionname { db.exceptionname.attlist, db._text } +} +div { + db.fieldsynopsis.info = db._info.title.forbidden + db.fieldsynopsis.role.attribute = attribute role { text } + db.fieldsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.fieldsynopsis.attlist = + db.fieldsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.fieldsynopsis.packageref.attribute? + db.fieldsynopsis = + + ## The name of a field in a class definition + element fieldsynopsis { + db.fieldsynopsis.attlist, + db.fieldsynopsis.info, + db.synopsisinfo*, + db.modifier*, + (db.type | db.templatename)*, + db.varname, + db.modifier*, + db.initializer?, + db.synopsisinfo* + } +} +div { + db.initializer.role.attribute = attribute role { text } + db.initializer.attlist = + db.initializer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines + db.initializer = + + ## The initializer for a fieldsynopsis + element initializer { + db.initializer.attlist, db.initializer.inlines* + } +} +div { + db.constructorsynopsis.info = db._info.title.forbidden + db.constructorsynopsis.role.attribute = attribute role { text } + db.constructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.constructorsynopsis.attlist = + db.constructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.constructorsynopsis.packageref.attribute? + db.constructorsynopsis = + + ## A syntax summary for a constructor + element constructorsynopsis { + db.constructorsynopsis.attlist, + db.constructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.destructorsynopsis.info = db._info.title.forbidden + db.destructorsynopsis.role.attribute = attribute role { text } + db.destructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.destructorsynopsis.attlist = + db.destructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.destructorsynopsis.packageref.attribute? + db.destructorsynopsis = + + ## A syntax summary for a destructor + element destructorsynopsis { + db.destructorsynopsis.attlist, + db.destructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.methodsynopsis.info = db._info.title.forbidden + db.methodsynopsis.role.attribute = attribute role { text } + db.methodsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.methodsynopsis.attlist = + db.methodsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.methodsynopsis.packageref.attribute? + db.methodsynopsis = + + ## A syntax summary for a method + element methodsynopsis { + db.methodsynopsis.attlist, + db.methodsynopsis.info, + db.synopsisinfo*, + (db.templatename | db.modifier)*, + (db.type | db.void)?, + db.methodname, + db.templatename*, + ((db.methodparam | db.group.methodparam)+ | db.void), + (db.exceptionname | db.modifier | db.templatename)*, + db.synopsisinfo* + } +} +div { + db.methodname.role.attribute = attribute role { text } + db.methodname.attlist = + db.methodname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.methodname = + + ## The name of a method + element methodname { db.methodname.attlist, db._text } +} +div { + db.methodparam.role.attribute = attribute role { text } + db.methodparam.rep.attribute = db.rep.attribute + db.methodparam.choice.attribute = db.choice.req.attribute + db.methodparam.attlist = + db.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.methodparam.rep.attribute? + & db.methodparam.choice.attribute? + db.methodparam = + + ## Parameters to a method + element methodparam { + db.methodparam.attlist, + (db.modifier | db.type | db.templatename)*, + ((db.parameter, db.initializer?) | db.funcparams), + db.modifier* + } +} +div { + db.group.methodparam.role.attribute = attribute role { text } + db.group.methodparam.choice.attribute = db.choice.opt.attribute + db.group.methodparam.attlist = + db.group.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.methodparam.choice.attribute? + db.group.methodparam = + + ## A group of method parameters + element group { + db.group.methodparam.attlist, + (db.methodparam | db.group.methodparam)+ + } +} +div { + db.varname.role.attribute = attribute role { text } + db.varname.attlist = + db.varname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varname = + + ## The name of a variable + element varname { db.varname.attlist, db._text } +} +div { + db.buildtarget.role.attribute = attribute role { text } + db.buildtarget.attlist = + db.buildtarget.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.buildtarget = + + ## Target of a build + element buildtarget { db.buildtarget.attlist, db._text } +} +div { + db.returnvalue.role.attribute = attribute role { text } + db.returnvalue.attlist = + db.returnvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.returnvalue = + + ## The value returned by a function + element returnvalue { db.returnvalue.attlist, db._text } +} +div { + db.type.role.attribute = attribute role { text } + db.type.class.enumeration = + + ## Combined type is union of nested types + "union" + | + ## Combined type is intersection of nested types + "intersection" + db.type.class.attribute = + + ## Specifies the way how are nested types combined together + attribute class { db.type.class.enumeration } + db.type.attlist = + db.type.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.type.class.attribute? + db.type = + + ## The classification of a value + element type { + db.type.attlist, (db._text | db.programming.inlines)* + } +} +div { + db.classname.role.attribute = attribute role { text } + db.classname.attlist = + db.classname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.classname = + + ## The name of a class, in the object-oriented programming sense + element classname { db.classname.attlist, db._text } +} +div { + db.templatename.role.attribute = attribute role { text } + db.templatename.attlist = + db.templatename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.templatename = + + ## The identifier for a template, in the generic programming sense + element templatename { db.templatename.attlist, db._text } +} +div { + db.template.role.attribute = attribute role { text } + db.template.attlist = + db.template.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.template = + + ## The definition of a template, in the generic programming sense + element template { + db.template.attlist, + (((db.modifier | db.type | db._text)*, + db.templatename, + (db.modifier | db.type | db._text)*) + | db.specializedtemplate) + } +} +div { + db.specializedtemplate.role.attribute = attribute role { text } + db.specializedtemplate.attlist = + db.specializedtemplate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.specializedtemplate = + + ## The specialization of a template identifier, in the generic programming sense + element specializedtemplate { + db.specializedtemplate.attlist, + (db.modifier | db.type | db._text)* + } +} +div { + db.packagesynopsis.info = db._info.title.forbidden + db.packagesynopsis.role.attribute = attribute role { text } + db.packagesynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.packagesynopsis.attlist = + db.packagesynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.packagesynopsis.packageref.attribute? + db.packagesynopsis = + + ## The syntax summary for a package definition + element packagesynopsis { + db.packagesynopsis.attlist, + db.packagesynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.package, + db.modifier*, + (db.synopsis.blocks | db.synopsisinfo)* + } +} +div { + db.macroname.role.attribute = attribute role { text } + db.macroname.attlist = + db.macroname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroname = + + ## The name of a macro (a code-generating function) + element macroname { db.macroname.attlist, db._text } +} +div { + db.macrosynopsis.info = db._info.title.forbidden + db.macrosynopsis.role.attribute = attribute role { text } + db.macrosynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.macrosynopsis.attlist = + db.macrosynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.macrosynopsis.packageref.attribute? + db.macrosynopsis = + + ## The syntax summary for a macro definition (code-generating function) + element macrosynopsis { + db.macrosynopsis.attlist, + db.macrosynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.macroname, + (db.package | db.modifier)*, + db.macroprototype+, + db.synopsisinfo* + } +} +div { + db.macroprototype.role.attribute = attribute role { text } + db.macroprototype.attlist = + db.macroprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroprototype = + + ## The prototype of a macro (code-generating function) + element macroprototype { + db.macroprototype.attlist, + db.modifier*, + db.macrodef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.macrodef.role.attribute = attribute role { text } + db.macrodef.attlist = + db.macrodef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macrodef = + + ## A macro name and its return type + element macrodef { + db.macrodef.attlist, (db.type | db.templatename)*, db.macroname + } +} +div { + db.unionname.role.attribute = attribute role { text } + db.unionname.attlist = + db.unionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.unionname = + + ## The name of a union of types + element unionname { db.unionname.attlist, db._text } +} +div { + db.union.role.attribute = attribute role { text } + db.union.attlist = + db.union.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.union = + + ## The definition of a union of types, which may be more than a name + element union { db.union.attlist, db.type+ } +} +div { + db.unionsynopsis.info = db._info.title.forbidden + db.unionsynopsis.role.attribute = attribute role { text } + # N.B. the enumeration is explicitly identical to the enumeration + # on enumsynopsis by default. + db.unionsynopsis.ordered.attribute = + + ## Indicates how the value of a union is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.unionsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.unionsynopsis.attlist = + db.unionsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.unionsynopsis.ordered.attribute? + & db.unionsynopsis.packageref.attribute? + db.unionsynopsis = + + ## The syntax summary for a union-of-types definition + element unionsynopsis { + db.unionsynopsis.attlist, + db.unionsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.unionname?, + db.union, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.enumname.role.attribute = attribute role { text } + db.enumname.attlist = + db.enumname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumname = + + ## The name of an enumeration + element enumname { db.enumname.attlist, db._text } +} +div { + db.enumvalue.role.attribute = attribute role { text } + db.enumvalue.attlist = + db.enumvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumvalue = + + ## The value an enumerated type can take + element enumvalue { db.enumvalue.attlist, db._text } +} +div { + db.enumitemdescription.role.attribute = attribute role { text } + db.enumitemdescription.attlist = + db.enumitemdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitemdescription = + + ## The description of a value an enumerated type can take + element enumitemdescription { + db.enumitemdescription.attlist, db.all.inlines* + } +} +div { + db.enumidentifier.role.attribute = attribute role { text } + db.enumidentifier.attlist = + db.enumidentifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumidentifier = + + ## The identifier of a value an enumerated type can take + element enumidentifier { db.enumidentifier.attlist, db._text } +} +div { + db.enumitem.role.attribute = attribute role { text } + db.enumitem.attlist = + db.enumitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitem = + + ## A value an enumerated type can take and its description + element enumitem { + db.enumitem.attlist, + db.enumidentifier, + db.enumvalue*, + db.enumitemdescription? + } +} +div { + db.enumsynopsis.info = db._info.title.forbidden + db.enumsynopsis.role.attribute = attribute role { text } + db.enumsynopsis.ordered.enumeration = + + ## Value of enum is specified explicitly using enumvalue + "0" + | + ## Value of enum is inferred from its position + "1" + db.enumsynopsis.ordered.attribute = + + ## Indicates how the value of an enumeration is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.enumsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.enumsynopsis.attlist = + db.enumsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.enumsynopsis.ordered.attribute? + & db.enumsynopsis.packageref.attribute? + db.enumsynopsis = + + ## The syntax summary for an enumerated-type definition + element enumsynopsis { + db.enumsynopsis.attlist, + db.enumsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + (db.enumname, db.modifier*)?, + db.enumitem+, + db.synopsisinfo* + } +} +div { + db.typedefname.role.attribute = attribute role { text } + db.typedefname.attlist = + db.typedefname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.typedefname = + + ## The name of a type alias + element typedefname { db.typedefname.attlist, db._text } +} +div { + db.typedefsynopsis.info = db._info.title.forbidden + db.typedefsynopsis.role.attribute = attribute role { text } + db.typedefsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.typedefsynopsis.attlist = + db.typedefsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.typedefsynopsis.packageref.attribute? + db.typedefsynopsis = + + ## The syntax summary for a type-alias definition + element typedefsynopsis { + db.typedefsynopsis.attlist, + db.typedefsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.typedefname, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.programlisting.role.attribute = attribute role { text } + db.programlisting.width.attribute = db.width.characters.attribute + db.programlisting.attlist = + db.programlisting.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.programlisting.width.attribute? + db.programlisting = + + ## A literal listing of all or part of a program + element programlisting { + db.programlisting.attlist, db.verbatim.contentmodel + } +} +db.admonition.blocks = + db.caution | db.danger | db.important | db.note | db.tip | db.warning +db.admonition.contentmodel = db._info.title.only, db.all.blocks+ +div { + db.caution.role.attribute = attribute role { text } + db.caution.attlist = + db.caution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caution = + + ## A note of caution + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caution" + ] + ] + ] + ] + element caution { db.caution.attlist, db.admonition.contentmodel } +} +div { + db.danger.role.attribute = attribute role { text } + db.danger.attlist = + db.danger.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.danger = + + ## An admonition set off from the text indicating hazardous situation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of danger" + ] + ] + ] + ] + element danger { db.danger.attlist, db.admonition.contentmodel } +} +div { + db.important.role.attribute = attribute role { text } + db.important.attlist = + db.important.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.important = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of important" + ] + ] + ] + ] + element important { + db.important.attlist, db.admonition.contentmodel + } +} +div { + db.note.role.attribute = attribute role { text } + db.note.attlist = + db.note.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.note = + + ## A message set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of note" + ] + ] + ] + ] + element note { db.note.attlist, db.admonition.contentmodel } +} +div { + db.tip.role.attribute = attribute role { text } + db.tip.attlist = + db.tip.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tip = + + ## A suggestion to the user, set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of tip" + ] + ] + ] + ] + element tip { db.tip.attlist, db.admonition.contentmodel } +} +div { + db.warning.role.attribute = attribute role { text } + db.warning.attlist = + db.warning.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.warning = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of warning" + ] + ] + ] + ] + element warning { db.warning.attlist, db.admonition.contentmodel } +} +db.error.inlines = + db.errorcode | db.errortext | db.errorname | db.errortype +div { + db.errorcode.role.attribute = attribute role { text } + db.errorcode.attlist = + db.errorcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorcode = + + ## An error code + element errorcode { db.errorcode.attlist, db._text } +} +div { + db.errorname.role.attribute = attribute role { text } + db.errorname.attlist = + db.errorname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorname = + + ## An error name + element errorname { db.errorname.attlist, db._text } +} +div { + db.errortext.role.attribute = attribute role { text } + db.errortext.attlist = + db.errortext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortext = + + ## An error message. + element errortext { db.errortext.attlist, db._text } +} +div { + db.errortype.role.attribute = attribute role { text } + db.errortype.attlist = + db.errortype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortype = + + ## The classification of an error message + element errortype { db.errortype.attlist, db._text } +} +db.systemitem.inlines = db._text | db.co +div { + db.systemitem.class.enumeration = + + ## A daemon or other system process (syslogd) + "daemon" + | + ## A domain name (example.com) + "domainname" + | + ## An ethernet address (00:05:4E:49:FD:8E) + "etheraddress" + | + ## An event of some sort (SIGHUP) + "event" + | + ## An event handler of some sort (hangup) + "eventhandler" + | + ## A filesystem (ext3) + "filesystem" + | + ## A fully qualified domain name (my.example.com) + "fqdomainname" + | + ## A group name (wheel) + "groupname" + | + ## A network interface (eth0) + "interface" + | + ## An IP address (127.0.0.1) + "ipaddress" + | + ## A library (libncurses) + "library" + | + ## A macro + "macro" + | + ## A netmask (255.255.255.192) + "netmask" + | + ## A newsgroup (comp.text.xml) + "newsgroup" + | + ## An operating system name (Hurd) + "osname" + | + ## A process (gnome-cups-icon) + "process" + | + ## A protocol (ftp) + "protocol" + | + ## A resource + "resource" + | + ## A security context (a role, permission, or security token, for example) + "securitycontext" + | + ## A server (mail.example.com) + "server" + | + ## A service (ppp) + "service" + | + ## A system name (hephaistos) + "systemname" + | + ## A user name (ndw) + "username" + db.systemitem.class-enum.attribute = + + ## Identifies the nature of the system item + attribute class { db.systemitem.class.enumeration }? + db.systemitem.class-other.attribute = + + ## Identifies the nature of the non-standard system item + attribute otherclass { xsd:NMTOKEN } + db.systemitem.class-other.attributes = + + ## Identifies the kind of systemitemgraphic identifier + attribute class { + + ## Indicates that the system item is some 'other' kind. + "other" + } + & db.systemitem.class-other.attribute + db.systemitem.class.attribute = + db.systemitem.class-enum.attribute + | db.systemitem.class-other.attributes + db.systemitem.role.attribute = attribute role { text } + db.systemitem.attlist = + db.systemitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.systemitem.class.attribute? + db.systemitem = + + ## A system-related item or term + element systemitem { db.systemitem.attlist, db.systemitem.inlines* } +} +div { + db.option.role.attribute = attribute role { text } + db.option.attlist = + db.option.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.option = + + ## An option for a software command + element option { db.option.attlist, db._text } +} +div { + db.optional.role.attribute = attribute role { text } + db.optional.attlist = + db.optional.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.optional = + + ## Optional information + element optional { db.optional.attlist, (db._text | db.optional)* } +} +div { + db.property.role.attribute = attribute role { text } + db.property.attlist = + db.property.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.property = + + ## A unit of data associated with some part of a computer system + element property { db.property.attlist, db._text } +} +div { + db.topic.status.attribute = db.status.attribute + db.topic.role.attribute = attribute role { text } + db.topic.type.attribute = + + ## Identifies the topic type + attribute type { text } + db.topic.attlist = + db.topic.role.attribute? + & db.topic.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.topic.status.attribute? + db.topic.info = db._info.title.req + db.topic = + + ## A modular unit of documentation not part of any particular narrative flow + element topic { + db.topic.attlist, + db.topic.info, + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* + } +} +start = + db.assembly + | db.structure + | db.resources + | db.relationships + | db.transforms + | db.module +db.grammar.attribute = + + ## Identifies the markup grammar of a resource + attribute grammar { text } +div { + db.assembly.role.attribute = attribute role { text } + db.assembly.attlist = + db.assembly.role.attribute? & db.common.attributes + db.assembly.info = db._info + db.assembly = + + ## Defines the hierarchy and relationships for a collection of resources + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:assembly" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element assembly { + db.assembly.attlist, + db.assembly.info, + db.resources+, + db.structure*, + db.relationships*, + db.transforms? + } +} +div { + db.resources.role.attribute = attribute role { text } + db.resources.grammar.attribute = db.grammar.attribute + db.resources.attlist = + db.resources.role.attribute? + & db.resources.grammar.attribute? + & db.common.attributes + db.resources.info = db._info.title.forbidden + db.resources = + + ## Contains one or more resource objects that are managed by the assembly + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:resources" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element resources { + db.resources.attlist, + db.resources.info?, + (db.description*, db.resource+) + } +} +div { + db.resource.role.attribute = attribute role { text } + db.resource.href.attribute = + + ## Indentifies the location of the data by URI + attribute href { xsd:anyURI } + db.resource.grammar.attribute = db.grammar.attribute + db.resource.transform.attribute = + + ## Identifies the markup grammar of a resource + attribute transform { xsd:NMTOKEN } + db.resource.attlist = + db.resource.role.attribute? + & (db.resource.transform.attribute | db.resource.grammar.attribute)? + & db.common.attributes + db.resource = + + ## Identifies an object managed within the assembly + element resource { + db.resource.attlist, db.resource.href.attribute, db.description* + } +} +div { + db.structure.role.attribute = attribute role { text } + db.structure.type.attribute = + + ## Identifies the structure type of the structure + attribute type { xsd:NMTOKEN } + db.structure.resourceref.attribute = + + ## Indicates a single resource from which to construct this structure + attribute resourceref { xsd:IDREF } + db.structure.defaultformat.attribute = + + ## Identifies the default format of the structure + attribute defaultformat { xsd:NMTOKEN } + db.structure.renderas.attribute = + + ## Specifies the DocBook element to which this unit should be renamed + attribute renderas { xsd:QName } + db.structure.attlist = + db.structure.role.attribute? + & db.structure.type.attribute? + & db.structure.resourceref.attribute? + & db.structure.renderas.attribute? + & db.structure.defaultformat.attribute? + & db.common.attributes + db.structure.info = db.info? + db.structure = + + ## Describes the structure of a document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:structure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + s:pattern [ + s:title [ "Specification of renderas" ] + s:rule [ + context = "db:structure" + s:assert [ + test = "not(@renderas and db:output/@renderas)" + "The renderas attribute can be specified on either the structure or output, but not both." + ] + ] + ] + ] + element structure { + db.structure.attlist, + (db.output* & db.filterin? & db.filterout? & db.structure.info), + db.merge?, + db.revhistory?, + db.module+ + } +} +div { + db.output.role.attribute = attribute role { text } + db.output.chunk.attribute = + + ## Specifies chunking for this module + [ a:defaultValue = "auto" ] + attribute chunk { db.module.chunk.enumeration } + db.output.file.attribute = + + ## Specifies the output file for this module or structure + attribute file { xsd:anyURI } + db.output.renderas.attribute = + + ## Specifies the DocBook element to which this unit should be renamed + attribute renderas { xsd:QName } + db.output.transform.attribute = + + ## Specifies the transformation that should be applied to this unit + attribute transform { xsd:NMTOKEN } + db.output.suppress.attribute = + + ## Indicates whether or not this unit should be suppressed + attribute suppress { xsd:boolean } + db.output.attlist = + db.output.role.attribute? + & db.common.attributes + & db.output.chunk.attribute? + & db.output.file.attribute? + & db.output.renderas.attribute? + & db.output.transform.attribute? + & db.output.suppress.attribute? + db.output = + + ## Specify an output format and/or file name and/or renderas + element output { db.output.attlist, empty } +} +div { + db.merge.role.attribute = attribute role { text } + db.merge.resourceref.attribute = + + ## Indicates a single resource from which to read merged info + attribute resourceref { xsd:IDREF } + db.merge.attlist = + db.merge.role.attribute? + & db.merge.resourceref.attribute? + & db.common.attributes + db.merge = + + ## A wrapper for information that a module overrides in the resource it includes + element merge { db.merge.attlist, (db._title & db.info.elements*) } +} +div { + db.module.role.attribute = attribute role { text } + db.module.chunk.enumeration = + + ## This module will be in a chunk + "true" + | + ## This module will not be in a chunk + "false" + | + ## Chunking of this module depends on the overall chunking algorithm + "auto" + db.module.chunk.attribute = + + ## Specifies chunking for this module + [ a:defaultValue = "auto" ] + attribute chunk { db.module.chunk.enumeration } + db.module.resourceref.attribute = + + ## Identifies a single resource or structure within the assembly from which to construct this module + attribute resourceref { xsd:IDREF } + db.module.omittitles.attribute = + + ## Indicates if titles should be omitted when including a resource + attribute omittitles { xsd:boolean }? + db.module.contentonly.attribute = + + ## Indicates if the root element should be omitted when including the resource (copying only the children) + attribute contentonly { xsd:boolean }? + db.module.renderas.attribute = + + ## Changes the name of the root element of the included resource to the specified name + attribute renderas { xsd:QName } + db.module.attlist = + db.module.role.attribute? + & db.module.chunk.attribute? + & db.module.resourceref.attribute? + & db.module.omittitles.attribute? + & db.module.contentonly.attribute? + & db.module.renderas.attribute? + & db.common.attributes + db.module.info = db.info? + db.module = + + ## A modular component within a structure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:module" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + s:pattern [ + s:title [ "Specification of renderas" ] + s:rule [ + context = "db:module" + s:assert [ + test = "not(@renderas and db:output/@renderas)" + "The renderas attribute can be specified on either the structure or output, but not both." + ] + ] + ] + ] + element module { + db.module.attlist, + ((db.output | db.filterin | db.filterout)*, + db.module.info, + db.merge?, + db.module*) + } +} +div { + db.filterout.role.attribute = attribute role { text } + db.filterout.attlist = + db.filterout.role.attribute? & db.common.attributes + db.filterout = + + ## Elements with effectivity attributes matching this element are suppressed + element filterout { db.filterout.attlist, empty } +} +div { + db.filterin.role.attribute = attribute role { text } + db.filterin.attlist = + db.filterin.role.attribute? & db.common.attributes + db.filterin = + + ## Elements with effectivity attributes matching this element are allowed + element filterin { db.filterin.attlist, empty } +} +div { + db.relationships.role.attribute = attribute role { text } + db.relationships.type.attribute = + + ## Identifies the type of the contained relationships + attribute type { xsd:NMTOKENS } + db.relationships.attlist = + db.relationships.role.attribute? + & db.relationships.type.attribute? + & db.common.attributes + db.relationships.info = db._info + db.relationships = + + ## Groups relationship elements to define associations between resources + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:relationships" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element relationships { + db.relationships.attlist, + db.relationships.info, + (db.relationship | db.instance)+ + } +} +div { + db.relationship.role.attribute = attribute role { text } + db.relationship.type.attribute = + + ## Identifies the type of the relationship + attribute type { xsd:NMTOKEN } + db.relationship.attlist = + db.relationship.role.attribute? + & db.relationship.type.attribute? + & db.linkend.attribute? + & db.common.attributes + db.relationship = + + ## A relationship associates one or more resources + element relationship { + db.relationship.attlist, db.association, db.instance+ + } +} +div { + db.association.role.attribute = attribute role { text } + db.association.attlist = + db.association.role.attribute? + & db.linkend.attribute? + & db.common.attributes + db.association = + + ## Identifies the type of relationship between one or more resources + element association { db.association.attlist, text? } +} +div { + db.instance.role.attribute = attribute role { text } + db.instance.linking.attribute = + + ## Specifies the type of link for this instance + attribute linking { xsd:NMTOKENS } + db.instance.attlist = + db.instance.role.attribute? + & db.instance.linking.attribute? + & db.common.attributes + db.instance = + + ## Identifies a resource that is part of a relationship + element instance { + db.instance.attlist, db.linkend.attribute, empty + } +} +div { + db.transforms.role.attribute = attribute role { text } + db.transforms.attlist = + db.transforms.role.attribute? & db.common.attributes + db.transforms.info = db._info + db.transforms = + + ## List of transforms for converting from non-DocBook schemas + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:transforms" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element transforms { + db.transforms.attlist, db.transforms.info, db.transform+ + } +} +div { + db.transform.role.attribute = attribute role { text } + db.transform.grammar.attribute = db.grammar.attribute + db.transform.href.attribute = + + ## Indentifies the location of the data by URI + attribute href { xsd:anyURI } + db.transform.name.attribute = + + ## The name of the transform + attribute name { xsd:NMTOKEN } + db.transform.attlist = + db.transform.role.attribute? + & (db.transform.grammar.attribute | db.transform.name.attribute) + & db.transform.href.attribute + & db.common.attributes + db.transform = + + ## Identifies a transform for converting from a non-DocBook schema + element transform { db.transform.attlist, empty } +} +div { + db.description.role.attribute = attribute role { text } + db.description.attlist = + db.description.role.attribute? & db.common.attributes + db.description = + + ## A description of a resource or resources + element description { db.description.attlist, db._text } +} diff --git a/catalog/docbook5.2/rng/assembly.rng b/catalog/docbook5.2/rng/assembly.rng new file mode 100755 index 0000000..bcb2adc --- /dev/null +++ b/catalog/docbook5.2/rng/assembly.rng @@ -0,0 +1,18266 @@ + + + + + + + + + + + + + +
+ + + Any attribute, including any attribute in any namespace + + + + + + Any attribute in any other explicit namespace + + + + + + + + + + + + + + Any element from almost any namespace + + + + + + + + + + + + + + +
+ + + Designates the computer or chip architecture to which the element applies + + + + + Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + + + + + provides a standard place for application-specific effectivity + + + + + Indicates standards conformance characteristics of the element + + + + + Indicates the operating system to which the element is applicable + + + + + Indicates the editorial revision to which the element belongs + + + + + Indicates something about the security level associated with the element to which it applies + + + + + Indicates the level of user experience for which the element applies + + + + + Indicates the computer vendor to which the element applies + + + + + Indicates the word size (width in bits) of the computer architecture to which the element applies + + + + + Indicates the output format (for example, print or epub) to which the element applies + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Points to the element whose content is to be used as the text of the link + + + + + + Points to an internal link target by identifying the value of its xml:id attribute + + + + + + Points to one or more internal link targets by identifying the value of their xml:id attributes + + + + + + Identifies a link target with a URI + + + + + + Identifies the XLink link type + simple + An XLink simple link type + + + + + Identifies the XLink role of the link + + + + + + Identifies the XLink arcrole of the link + + + + + + Identifies the XLink title of the link + + + + + new + An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + replace + An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + embed + An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + other + The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink show behavior of the link + + + + + + onLoad + An application should traverse to the ending resource immediately on loading the starting resource. + onRequest + An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + other + The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink actuate behavior of the link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identifies the unique ID value of the element + + + + + + Specifies the DocBook version of the element and its descendants + + + + + Specifies the natural language of the element and its descendants + + + + + Specifies the base URI of the element and its descendants + + + + + + Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + + + + + Provides the text that is to be generated for a cross reference to the element + + + + + Specifies a keyword or keywords identifying additional style information + + + + + changed + The element has been changed. + added + The element is new (has been added to the document). + deleted + The element has been deleted. + off + Explicitly turns off revision markup for this element. + + + + + Identifies the revision status of the element + + + + + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + + Identifies the direction of text in an element + + + + + + The RDFa Lite vocab + + + + + + The RDFa Lite typeof + + + + + The RDFa Lite property + + + + + The RDFa Lite resource + + + + + The RDFa Lite prefix + + + + + + + + + + + + + + + + + + + + + + + + none + No ID fixup strategy + suffix + ID fixup by concatenating suffixes + auto + ID fixup by creating unique values + + + + + The transclusion ID fixup strategy + + + + + + The transclusion suffix to use when the suffix ID fixup strategy is employed + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + + + + user + No link scope adjustments are made + local + The link scopes are adjusted with the suffix property + near + The link scopes are adjusted based on proximity + global + The link scopes are adjusted based on document order + + + + + The transclusion link scope adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the format of the data + + + + + Indentifies the location of the data by URI + + + + Identifies the location of the data by external identifier (entity name) + + + + + + + continues + Line numbering continues from the immediately preceding element with the same name. + restarts + Line numbering restarts (begins at 1, usually). + + + + + Determines whether line numbering continues from the previous element or restarts + + + + + + numbered + Lines are numbered. + unnumbered + Lines are not numbered. + + + + + Determines whether lines are numbered + + + + + + Specifies the initial line number + + + + + + Identifies the language (i.e. programming language) of the verbatim content + + + + + Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + preserve + Whitespace must be preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies an identifying string for presentation purposes + + + + + Specifies the width (in characters) of the element + + + + + + compact + The spacing should be "compact". + normal + The spacing should be "normal". + + + + + Specifies (a hint about) the spacing of the content + + + + + + 0 + The element should be rendered in the current text flow (with the flow column width). + 1 + The element should be rendered across the full text page. + + + + + Indicates if the element is rendered across the column or the page + + + + + + Identifies the language (i.e. programming language) of the content + + + + + optional + The content describes an optional step or steps. + required + The content describes a required step or steps. + + + + + Specifies if the content is required or optional + + + + + + Specifies style information to be used when rendering the float + + + + + Specifies the width of the element + + + + + Specifies the depth of the element + + + + + Specifies the width of the content rectangle + + + + + Specifies the depth of the content rectangle + + + + + 0 + False (do not scale-to-fit; anamorphic scaling may occur) + 1 + True (scale-to-fit; anamorphic scaling is forbidden) + + + + + Specifies the scaling factor + + + + + + Specifies a classid for a media object player + + + + + Specifies the autoplay setting for a media object player + + + + + center + Centered horizontally + char + Aligned horizontally on the specified character + justify + Fully justified (left and right margins or edges) + left + Left aligned + right + Right aligned + + + + + bottom + Aligned on the bottom of the region + middle + Centered vertically + top + Aligned on the top of the region + + + + + doi + A digital object identifier. + isbn + An international standard book number. + isrn + An international standard technical report number (ISO 10444). + issn + An international standard serial number. + istc + An international standard text code. + libraryofcongress + A Library of Congress reference number. + pubsnumber + A publication number (an internal number or possibly organizational standard). + uri + A Uniform Resource Identifier + + + + + + Identifies the kind of bibliographic identifier + + + + + + + Identifies the nature of the non-standard bibliographic identifier + + + + + + + Identifies the kind of bibliographic identifier + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + article + An article + bbs + A bulletin board system + book + A book + cdrom + A CD-ROM + chapter + A chapter (as of a book) + dvd + A DVD + emailmessage + An email message + gopher + A gopher page + journal + A journal + manuscript + A manuscript + newsposting + A posting to a newsgroup + part + A part (as of a book) + refentry + A reference entry + section + A section (as of a book or article) + series + A series + set + A set (as of books) + webpage + A web page + wiki + A wiki page + other + Some other kind of work + + + + + + + + + Identifies the nature of the published work + + + + + + + Identifies the nature of some other kind of published work + + + + + + + Identifies that this is some other kind of published work + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text of the title of a section of a document or of a formal block-level element + + + + + + +
+
+ + + + + + + + + + + + + + + The abbreviation of a title + + + + + + +
+
+ + + + + + + + + + + + + + + The subtitle of a document + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with a required title + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a title + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a required title + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block without a title + + + + + + +
+
+ + + + + + Identifies the controlled vocabulary used by this set's terms + + + + + + + + + + + + + + + + + + A set of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + Specifies a ranking for this subject relative to other subjects in the same set + + + + + + + + + + + + + + + + + One of a group of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + + + + + + + + + + A term in a group of terms describing the subject matter of a document + + + + +
+
+ + + + + + + + + + + + + + + A set of keywords describing the content of a document + + + + + + +
+
+ + + + + + + + + + + + + + + One of a set of keywords describing the content of a document + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + Identifies the type of procedure + + + + + + + + + + + + + + + + + + + + + A list of operations to be performed in a well-defined sequence + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A unit of action in a procedure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + Alternative steps in a procedure + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for steps that occur within steps in a procedure + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for identifying the results of a procedure or step + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + A portion of a document that is isolated from the main narrative flow + + Element exclusion + + sidebar must not occur among the children or descendants of sidebar + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short description or note about a person + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A quotation set off from the main text + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The source of a block quote or epigraph + + + + + + + + + + + + +
+
+ + + sect1 + Render as a first-level section + sect2 + Render as a second-level section + sect3 + Render as a third-level section + sect4 + Render as a fourth-level section + sect5 + Render as a fifth-level section + + + + + + Indicates how the bridge head should be rendered + + + + + + + Identifies the nature of the non-standard rendering + + + + + + + Indicates how the bridge head should be rendered + other + Identifies a non-standard rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + A free-floating heading + + + + + + +
+
+ + + + + + + + + + + + + + + A remark (or comment) intended for presentation in a draft manuscript + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short inscription at the beginning of a document or component + + + + + + + + + + + + + +
+
+ + + + + + Identifies the desired footnote mark + + + + + + + + + + + + + + + + + + A footnote + + Element exclusion + + footnote must not occur among the children or descendants of footnote + + + + Element exclusion + + example must not occur among the children or descendants of footnote + + + + Element exclusion + + figure must not occur among the children or descendants of footnote + + + + Element exclusion + + table must not occur among the children or descendants of footnote + + + + Element exclusion + + equation must not occur among the children or descendants of footnote + + + + Element exclusion + + sidebar must not occur among the children or descendants of footnote + + + + Element exclusion + + task must not occur among the children or descendants of footnote + + + + Element exclusion + + epigraph must not occur among the children or descendants of footnote + + + + Element exclusion + + caution must not occur among the children or descendants of footnote + + + + Element exclusion + + danger must not occur among the children or descendants of footnote + + + + Element exclusion + + important must not occur among the children or descendants of footnote + + + + Element exclusion + + note must not occur among the children or descendants of footnote + + + + Element exclusion + + tip must not occur among the children or descendants of footnote + + + + Element exclusion + + warning must not occur among the children or descendants of footnote + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph with a title + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph that contains only text and inline markup, no block elements + + + + + + + +
+
+ + + + + + Identifies the type of mark to be used on items in this list + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a bullet or other dingbat + + + + + + + + + + +
+
+ + + + + + continues + Specifies that numbering should begin where the preceding list left off + restarts + Specifies that numbering should begin again at 1 + + + + + Indicates how list numbering should begin relative to the immediately preceding list + + + + + + Specifies the initial line number + + + + + + ignore + Specifies that numbering should ignore list nesting + inherit + Specifies that numbering should inherit from outer-level lists + + + + + Indicates whether or not item numbering should be influenced by list nesting + + + + + + arabic + Specifies Arabic numeration (1, 2, 3, …) + upperalpha + Specifies upper-case alphabetic numeration (A, B, C, …) + loweralpha + Specifies lower-case alphabetic numeration (a, b, c, …) + upperroman + Specifies upper-case Roman numeration (I, II, III, …) + lowerroman + Specifies lower-case Roman numeration (i, ii, iii …) + + + + + Indicates the desired numeration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a sequentially incremented label + + + + + + + + + + +
+
+ + + + + + Specifies the keyword for the type of mark that should be used on this + item, instead of the mark that would be used by default + + + + + + + + + + + + + + + + + + + + + A wrapper for the elements of a list item + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A segmented list, a list of sets of elements + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of an element of a list item in a segmented list + + + + + + +
+
+ + + + + + + + + + + + + + + A list item in a segmented list + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a list item in a segmented list + + + + + + +
+
+ + + + + + horiz + A tabular presentation in row-major order. + vert + A tabular presentation in column-major order. + inline + An inline presentation, usually a comma-delimited list. + + + + + Specifies the type of list presentation + + + + + + Specifies the number of columns for horizontal or vertical presentation + + + + + + + + + + + + + + + + + + + + + An undecorated list of single words or short phrases + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a simple list + + + + + + +
+
+ + + + + + Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is composed of a set of one or more terms and an associated description + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for a set of terms and the associated description in a variable list + + + + + + + +
+
+ + + + + + + + + + + + + + + The word or phrase being defined or described in a variable list + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal example, with a title + + Element exclusion + + example must not occur among the children or descendants of example + + + + Element exclusion + + figure must not occur among the children or descendants of example + + + + Element exclusion + + table must not occur among the children or descendants of example + + + + Element exclusion + + equation must not occur among the children or descendants of example + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed example without a title + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + monospaced + The literal layout should be formatted with a monospaced font + normal + The literal layout should be formatted with the current font + + + + + Specifies the class of literal layout + + + + + + + + + + + + + + + + + + + A block of text in which line breaks and white space are to be reproduced faithfully + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + Text that a user sees or might see on a computer screen + + + + +
+
+ + + + + + + + + + + + + + + + + + A representation of what the user sees or might see on a computer screen + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal figure, generally an illustration, with a title + + Element exclusion + + example must not occur among the children or descendants of figure + + + + Element exclusion + + figure must not occur among the children or descendants of figure + + + + Element exclusion + + table must not occur among the children or descendants of figure + + + + Element exclusion + + equation must not occur among the children or descendants of figure + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A untitled figure + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A displayed media object (video, audio, image, etc.) + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + An inline media object (video, audio, image, and so on) + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for video data and its associated meta-information + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for audio data and its associated meta-information + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for image data and its associated meta-information + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a text description of an object and its associated meta-information + + + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external video data + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external audio data + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the image data + + + + + + + + + Specifies the vertical alignment of the image data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external image data + + + + + + + +
+
+ + + + + + Identifies the encoding of the text in the external file + + + + + + + + + + + + + + + + + + + + Pointer to external text data + + + + +
+
+ + + + + + Specifies the name of the parameter + + + + + Specifies the value of the parameter + + + + + Specifies the type of the value of the parameter + + + + + + + + + + + + + + + + + + Application specific parameters for a media player + + + + +
+
+ + + + + + + + + + + + + + + + + + A caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A real-world address, generally a postal address + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A street address in an address + + + + +
+
+ + + + + + + + + + + + + + + A post office box in an address + + + + +
+
+ + + + + + + + + + + + + + + A postal code in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a city in an address + + + + +
+
+ + + + + + + + + + + + + + + A state or province in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a country + + + + +
+
+ + + + + + + + + + + + + + + A telephone number + + + + +
+
+ + + + + + + + + + + + + + + A fax number + + + + +
+
+ + + + + + + + + + + + + + + Uncategorized information in address + + + + +
+
+ + + + + + + + + + + + + + + The institutional affiliation of an individual + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A brief description of an affiliation + + + + +
+
+ + + + + + + + + + + + + + + The title of an individual in an organization + + + + +
+
+ + + consortium + A consortium + corporation + A corporation + informal + An informal organization + nonprofit + A non-profit organization + + + + + Specifies the nature of the organization + + + + + + Specifies the nature of the organization + other + Indicates a non-standard organization class + + + Identifies the non-standard nature of the organization + + + + + + + + + + + + + + + + + + + + + + + + + + The name of an organization + + + + +
+
+ + + + + + + + + + + + + + + A division of an organization + + + + + + +
+
+ + + + + + + + + + + + + + + The page numbers of an article as published + + + + +
+
+ + + + + + + + + + + + + + + The personal name of an individual + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The name of an individual author + + + + +
+
+ + + + + + + + + + + + + + + Wrapper for author information when a document has multiple authors or collaborators + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Identifies a collaborator + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The initials or other short identifier for an author + + + + +
+
+ + + + + + + + + + + + + + + A person and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An organization and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for document meta-information about a conference + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The dates of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The title of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + An identifier, frequently numerical, associated with a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The contract number of a document + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a contract + + + + +
+
+ + + + + + + + + + + + + + + Copyright information about a document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The year of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the individual or organization that holds a copyright + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + Additional content for the cover of a publication + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + The date of publication or revision of a document + + + + +
+
+ + + + + + + + + + + + + + + The name or number of an edition of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the editor of a document + + + + +
+
+ + + + + + + + + + + + + + + + An identifier for a document + + + + +
+
+ + + + + + + + + + + + + + + + A citation of a bibliographic identifier + + + + +
+
+ + + + + + + + + + + + + + + + The source of a document + + + + +
+
+ + + hasformat + The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + haspart + The described resource includes the referenced resource either physically or logically + hasversion + The described resource has a version, edition, or adaptation, namely, the referenced resource + isformatof + The described resource is the same intellectual content of the referenced resource, but presented in another format + ispartof + The described resource is a physical or logical part of the referenced resource + isreferencedby + The described resource is referenced, cited, or otherwise pointed to by the referenced resource + isreplacedby + The described resource is supplanted, displaced, or superceded by the referenced resource + isrequiredby + The described resource is required by the referenced resource, either physically or logically + isversionof + The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + references + The described resource references, cites, or otherwise points to the referenced resource + replaces + The described resource supplants, displaces, or supersedes the referenced resource + requires + The described resource requires the referenced resource to support its function, delivery, or coherence of content + + + + + + Identifies the type of relationship + + + + + + + + Identifies the type of relationship + othertype + The described resource has a non-standard relationship with the referenced resource + + + + A keyword that identififes the type of the non-standard relationship + + + + + + + + + + + + + + + + + + + + + + + + + + The relationship of a document to another + + + + +
+
+ + + dcmipoint + The DCMI Point identifies a point in space using its geographic coordinates + iso3166 + ISO 3166 Codes for the representation of names of countries + dcmibox + The DCMI Box identifies a region of space using its geographic limits + tgn + The Getty Thesaurus of Geographic Names + + + + + + Specifies the type of spatial coverage + + + + + + + + Specifies the type of spatial coverage + otherspatial + Identifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + dcmiperiod + A specification of the limits of a time interval + w3c-dtf + W3C Encoding rules for dates and times—a profile based on ISO 8601 + + + + + + Specifies the type of temporal coverage + + + + + + + + Specifies the type of temporal coverage + othertemporal + Specifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The spatial or temporal coverage of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A statement of legal obligations or requirements + + + + + + + +
+
+ + + copyeditor + A copy editor + graphicdesigner + A graphic designer + productioneditor + A production editor + technicaleditor + A technical editor + translator + A translator + indexer + An indexer + proofreader + A proof-reader + coverdesigner + A cover designer + interiordesigner + An interior designer + illustrator + An illustrator + reviewer + A reviewer + typesetter + A typesetter + conversion + A converter (a persons responsible for conversion, not an application) + + + + + + Identifies the nature of the contributor + + + + + + + Identifies the nature of the non-standard contribution + + + + + + + Identifies the nature of the contributor + other + Identifies a non-standard contribution + + + + + + + + + + + + + + + + + + + + + + + + + + A person or entity, other than an author or editor, credited in a document + + + + +
+
+ + + + + + + + + + + + + + + The numbers of the pages in a book, for use in a bibliographic entry + + + + +
+
+ + + + + + + + + + + + + + + A summary of the contributions made to a document by a credited source + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a person + + + + +
+
+ + + + + + + + + + + + + + + A given name of a person + + + + +
+
+ + + + + + + + + + + + + + + The given name of a person + + + + +
+
+ + + + + + + + + + + + + + + An inherited or family name; in western cultures the last name + + + + +
+
+ + + + + + + + + + + + + + + The portion of a person's name indicating a relationship to ancestors + + + + +
+
+ + + + + + + + + + + + + + + A component of a person's name that is not a first name, surname, or lineage + + + + +
+
+ + + + + + + + + + + + + + + The printing history of a document + + + + + + +
+
+ + + + + + + + + + + + + + + The date of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The publisher of a document + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of the publisher of a document + + + + +
+
+ + + + + + + + + + + + + + + Information about a particular release of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A history of the revisions to a document + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry describing a single revision in the history of the revisions to a document + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A document revision number + + + + +
+
+ + + + + + + + + + + + + + + A description of a revision to a document + + + + +
+
+ + + + + + + + + + + + + + + A extended description of a revision to a document + + + + + + +
+
+ + + + + + + + + + + + + + + Numbers of the volumes in a series of books + + + + +
+
+ + + + + + + + + + + + + + + The volume number of a document in a set (as of books in a set or articles in a journal) + + + + +
+
+ + + + + + + + + + + + + + + The number of an issue of a journal + + + + +
+
+ + + + + + A name for the metadata element + + + + + The metadata content + + + + + + + + + + + + + + + + + A generic metadata element + + + + + + + + A generic metadata element + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A software or application package + + + + +
+
+ + + + + + + + + + + + + + + An email address + + + + +
+
+ + + + + + + + + + + + + + + A comment on a line in a verbatim listing + + + + +
+
+ + + command + A command + function + A function + option + An option + + + + + Identifies the class of parameter + + + + + + + + + + + + + + + + + + + + + A value or a symbolic reference to a value + + + + +
+ + + + + + +
+ + + command + A command + function + A function + option + An option + parameter + A parameter + + + + + Identifies the nature of the replaceable text + + + + + + + + + + + + + + + + + + + + + Content that may or must be replaced by the user + + + + + + +
+
+ + + + Identifies the type of URI specified + + + + + + + + + + + + + + + + + + + A Uniform Resource Identifier + + + + +
+
+ + + + + + + + + + + + + + + An abbreviation, especially one followed by a period + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An often pronounceable word made from the initial (or selected) letters of a name or phrase + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An inline bibliographic reference to another published work + + + + + + +
+
+ + + + + + + + + + + + + + + A citation to a reference page + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A reference volume number + + + + +
+
+ + + + + + Identifies the nature of the publication being cited + + + + + + Identifies the nature of some other kind of publication being cited + + + + + + + Identifies that this is some other kind of publication being cited + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The title of a cited work + + + + + + +
+
+ + + + + + + + + + + + + + + Emphasized text + + + + + + +
+
+ + + A limited span of emphasized text + + + + +
+
+ + + + + + + + + + + + + + + A word or phrase in a language other than the primary language of the document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A limited word or phrase in a language other than the primary language of the document + + + + +
+
+ + + + + + + + + + + + + + + A span of text + + + + + + +
+
+ + + A limited span of text + + + + +
+
+ + + + + + + + + + + + + + + An inline quotation + + + + + + +
+
+ + + + + + + + + + + + + + + A limited inline quotation + + + + +
+
+ + + + + + + + + + + + + + + A subscript (as in Hâ‚‚O, the molecular formula for water) + + + + +
+
+ + + + + + + + + + + + + + + A superscript (as in x², the mathematical notation for x multiplied by itself) + + + + +
+
+ + + copyright + A copyright + registered + A registered copyright + service + A service + trade + A trademark + + + + + Identifies the class of trade mark + + + + + + + + + + + + + + + + + + + + + A trademark + + + + +
+
+ + + + + + + + + + + + + + + A word meant specifically as a word and not representing anything else + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a footnote (a footnote mark) + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A cross reference to another part of the document + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A hypertext link + + + + + + +
+
+ + + + + + + + + Holds additional information that may be used by the application when resolving the link + + + + + Specifies the URI of the document in which the link target appears + + + + + + Specifies the location of the link target in the document + + + + + Identifies application-specific customization of the link behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + A link that addresses its target indirectly + + + + + + +
+
+ + + + + + + + + + + + + + A spot in the document + + + + +
+
+ + + + + + + + + + + + + + A text-only annotation, often used for accessibility + + + + + + + + + +
+
+ + + Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A group of formal objects, for example subfigures + + + + + + + + + + + + + + + + + + +
+ + + Identifies the editorial or publication status of the element on which it occurs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of books + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A book + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + The dedication of a book or other component + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Acknowledgements of a book or other component + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Text at the back of a book describing facts about its production + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An appendix in a book or article + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A chapter, as of a book + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a book + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Introductory matter preceding the first chapter of a book + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An introduction to the contents of a part + + + + + + + +
+
+ + + + + legal + A section of legal obligations or requirements + + + + Identifies the nature of the section + + + + + + Identifies a non-standard section class + + + + + + + Indicates that a non-standard section class is applied + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a document with no subdivisions + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + faq + A collection of frequently asked questions. + journalarticle + An article in a journal or other periodical. + productsheet + A description of a product. + specification + A specification. + techreport + A technical report. + whitepaper + A white paper. + + + + + Identifies the nature of the article + + + + + + Identifies the nature of the non-standard article + + + + + + + Identifies the nature of the article + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An article + + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies one or more annotations that apply to this element + + +
+ + + + + + Identifies one or more elements to which this annotation applies + + + + + + + + + + + + + + + + + + + An annotation + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + + + + + + + +
+ + + Identifies the XLink extended link type + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + extended + An XLink extended link type + + + + + Identifies the XLink locator link type + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + locator + An XLink locator link type + + + + + Identifies the XLink arc link type + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + arc + An XLink arc link type + + + + + Identifies the XLink resource link type + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + resource + An XLink resource link type + + + + + Identifies the XLink title link type + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + title + An XLink title link type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the XLink traversal-from + + + + + + Specifies the XLink label + + + + + + Specifies the XLink traversal-to + + + +
+ + + + + + + + + + + + Identifies the XLink link type + extended + An XLink extended link + + + + + + + + + + + + + An XLink extended link + + + + + + + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + locator + An XLink locator link + + + + + + + + + + + + + + + + + An XLink locator in an extendedlink + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + arc + An XLink arc link + + + + + + + + + + + + + + + + + + + + + + + + + An XLink arc in an extendedlink + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A top-level section of document + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect1 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect2 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect3 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect4 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of reference entries + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A reference page (originally a UNIX man-style reference page) + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Meta-information for a reference entry + + + + + + + + + + + + + + + + +
+ + + source + The name of the software product or component to which this topic applies + version + The version of the software product or component to which this topic applies + manual + The section title of the reference page (e.g., User Commands) + sectdesc + The section title of the reference page (believed synonymous with "manual" but in wide use) + software + The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + + + + + + Identifies the kind of miscellaneous information + + + + + + + Identifies the nature of non-standard miscellaneous information + + + + + + Identifies the kind of miscellaneious information + other + Indicates that the information is some 'other' kind. + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + Meta-information for a reference entry other than the title and volume number + + + + +
+
+ + + + + + + + + + + + + + + The name, purpose, and classification of a reference page + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A description of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The name of (one of) the subject(s) of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A short (one sentence) synopsis of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The scope or other indication of applicability of a reference entry + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A syntactic synopsis of the subject of the reference page + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section in a refentry + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A major subsection of a reference entry + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect1 + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect2 + + + + + + + +
+ + + + + + + + + + + + Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for a list of glossary entries + + + + + + + + + + + + +
+
+ + + + + + Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + + + + + + + + + + + + + + + + + An entry in a glossary or glosslist + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies a list of keywords for the definition + + + + + + + + + + + + + + + + + A definition in a glossentry + + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry + to another + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry to another + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term, with limited content + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A glossary + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a glossary + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + An inline definition of a term + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + + + + + +
+ + + Identifies the relationship between the bibliographic elemnts + + +
+ + + + + + + + + + + + + + + + + + + + + A raw entry in a bibliography + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked entry in a bibliography + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A raw container for related bibliographic information + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked container for related bibliographic information + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Untyped bibliographic information + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A bibliography + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a bibliography + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a list of bibliography entries + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + The units (for example, pages) used to identify the beginning and ending of a reference. + + + + + + Identifies the beginning of a reference; the location within the work that is being referenced. + + + + + + Identifies the end of a reference. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cross-reference to a bibliographic entry + + + + +
+ + + normal + Normal + preferred + Preferred + + + + + Specifies the significance of the term + + + + + + Specifies the IDs of the elements to which this term applies + + + + + + Indicates the page on which this index term occurs in some version of the printed document + + + + + all + All indexes + global + The global index (as for a combined index of a set of books) + local + The local index (the index for this document only) + + + + + Specifies the scope of the index term + + + + + + Specifies the string by which the term is to be sorted; if unspecified, the term content is used + + + + + Specifies the target index for this term + + +
+ + + + + + + + + + + + + + + A set of index terms in the meta-information of a document + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Identifies the class of index term + singular + A singular index term + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term + + + + +
+
+ + + + + + Identifies the class of index term + startofrange + The start of a range + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term that covers a range + + + + +
+
+ + + + + + Identifies the class of index term + endofrange + The end of a range + + + + + Points to the start of the range + + + + + + + + + + + + + + + + + Identifies the end of a range associated with an indexed term + + Indexterm 'startref' type constraint + + @startref on indexterm must point to an indexterm. + @startref on indexterm must point to a startofrange indexterm. + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary word or phrase under which an index term should be sorted + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A secondary word or phrase in an index term + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A tertiary word or phrase in an index term + + + + + + +
+
+ + + + + + Identifies the class of 'see' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader instead to another entry in the index + + + + + + +
+
+ + + + + + Identifies the class of 'seealso' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader also to another entry in the index + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a book or part of a book + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a set of books + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in an index + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry in an index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + A primary term in an index entry, not in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A secondary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A tertiary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See +entry in an index, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See also + entry in an index, rather than in the text + + + + + + +
+ + + Indicates the page on which this element occurs in some version of the printed document + + +
+ + + + + + + + + + + + + + + + + + A table of contents + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + A division in a table of contents + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A component title in a table of contents + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + A task to be completed + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary of a task + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The prerequisites for a task + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + Information related to a task + + + + + + + +
+ + + calspair + Coordinates expressed as a pair of CALS graphic coordinates. + linecolumn + Coordinates expressed as a line and column. + linecolumnpair + Coordinates expressed as a pair of lines and columns. + linerange + Coordinates expressed as a line range. + + + + + + Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + for graphics and linecolumn + for line-oriented elements. + + + + + + + + Indicates that non-standard units are used for this area +. In this case otherunits + must be specified. + other + Coordinates expressed in some non-standard units. + + + + Identifies the units used in the coords + attribute when the units + attribute is other +. This attribute is forbidden otherwise. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A list of callout +s + + + + + + + + + + +
+
+ + + + + + Identifies the areas described by this callout. + + + + + + + + + + + + + + + + A called out + description of a marked area + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A program listing with associated areas used in callouts + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A collection of regions in a graphic or code example + + + + + + + + + +
+
+ + + + + + Point to the callout +s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + + + + + + Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + + + + + Provides the coordinates of the area. The coordinates must be interpreted using the units + specified. + + + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A set of related areas in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A screen with associated areas used in callouts + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for an image object with callouts + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + The location of a callout embedded in text + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a co + + + + +
+
+ + + + + + + + + + + + + + + + + + A set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A production in a set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The left-hand side of an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + The right-hand side of an EBNF production + + + + + + + + + + + +
+
+ + + + + + Specifies a URI that points to a production +where the nonterminal + is defined + + + + + + + + + + + + + + + + A non-terminal in an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + A constraint in an EBNF production + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + + + +
+
+ + + + + + + + + + + + + + + A cross-reference to an EBNF production + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The definition of a constraint in an EBNF production + + + + + + + +
+ + + Specifies the alignment character when align + is set to char +. + + + + + Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + when align + is set to char +. + + 0 + 100 + + + + + + Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + + all + Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + bottom + Frame only the bottom of the table. + none + Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + sides + Frame the left and right sides of the table. + top + Frame the top of the table. + topbot + Frame the top and bottom of the table. + + + + + + Specifies the presence or absence of the column separator + + 0 + No column separator rule. + 1 + Provide a column separator rule on the right + + + + + + Specifies the presence or absence of the row separator + + 0 + No row separator rule. + 1 + Provide a row separator rule below + + + + + + Specifies the orientation of the table + + land + 90 degrees counter-clockwise from the rest of the text flow. + port + The same orientation as the rest of the text flow. + + + + + + Specifies the table style + + + + + Indicates whether or not the entries in the first column should be considered row headers + + firstcol + Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + headers + Indicates that row headers are identified by use of the headers attribute on entries in the table. + norowheader + Indicates that entries in the first column have no special significance with respect to column headers. + + + + + + Specifies the horizontal alignment of text in an entry. + + center + Centered. + char + Aligned on a particular character. + justify + Left and right justified. + left + Left justified. + right + Right justified. + + + + + + Specifies the vertical alignment of text in an entry. + + bottom + Aligned on the bottom of the entry. + middle + Aligned in the middle. + top + Aligned at the top of the entry. + + + + + + Specifies a column specification by name. + + + + + Specifies a starting column by name. + + + + + Specifies a span by name. + + + + + + Specifies a starting column by name. + + + Specifies an ending column by name. + + + + + + + + + + + + + + Provides a name for a column specification. + + + + + Provides a name for a span specification. + + +
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for the main content of a table, or part of a table + + + + + + + + + + + + + + + + +
+
+ + + + + + The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + + + + + + Specifies the width of the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications for a column in a table + + + + +
+
+ + + + + + Specifies a starting column by name. + + + + + Specifies an ending column by name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formatting information for a spanned column in a table + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table footer consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + + + + +
+
+ + + + + + Specifies the number of additional rows which this entry occupies. Defaults to zero. + + + + + + Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + + 0 + Do not rotate the cell. + 1 + Rotate the cell 90 degrees counter-clockwise. + + + + + + Specifies the scope of a header. + + row + Applies to the row + col + Applies to the column + rowgroup + Applies to the row group + colgroup + Applies to the column group + + + + + + Specifies the entry or entries which serve as headers for this element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cell in a table + + Element exclusion + + table must not occur among the children or descendants of entry + + + + Element exclusion + + informaltable must not occur among the children or descendants of entry + + + + + + + + + + + + + +
+
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the entry table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subtable appearing in place of an entry in a table + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the short or long title should be used in a List of Tables + + 0 + Indicates that the full title should be used. + 1 + Indicates that the short short title (titleabbrev) should be used. + + + + + + Indicates if the table should appear in a List of Tables + + 0 + Indicates that the table should not occur in the List of Tables. + 1 + Indicates that the table should appear in the List of Tables. + + + + + + + + + + + + + + A formal table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A table without a title + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + + + + + This attribute specifies style information for the current element. + + + + + This attribute offers advisory information about the element for which it is set. + + + + + + + + This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + + + + + + + + Occurs when the pointing device button is clicked over an element. + + + + + Occurs when the pointing device button is double clicked over an element. + + + + + Occurs when the pointing device button is pressed over an element. + + + + + Occurs when the pointing device button is released over an element. + + + + + Occurs when the pointing device is moved onto an element. + + + + + Occurs when the pointing device is moved while it is over an element. + + + + + Occurs when the pointing device is moved away from an element. + + + + + Occurs when a key is pressed and released over an element. + + + + + Occurs when a key is pressed down over an element. + + + + + Occurs when a key is released over an element. + + + + + + + + + + + + + + + + + Specifies the alignment of data and the justification of text in a cell. + + left + Left-flush data/Left-justify text. This is the default value for table data. + center + Center data/Center-justify text. This is the default value for table headers. + right + Right-flush data/Right-justify text. + justify + Double-justify text. + char + Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + + + + + + This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + + + + + When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + + + An explicit offset. + + [0-9]+% + + A percentage offset. + + + + + + + + + Specifies the vertical position of data within a cell. + + top + Cell data is flush with the top of the cell. + middle + Cell data is centered vertically within the cell. This is the default value. + bottom + Cell data is flush with the bottom of the cell. + baseline + All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + + + + + + + + + Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + + + + + Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + + + An explicit width. + + [0-9]+% + + A percentage width. + + + + + + Specifies the width (in pixels only) of the frame around a table. + + + + + + Specifies which sides of the frame surrounding a table will be visible. + + void + No sides. This is the default value. + above + The top side only. + below + The bottom side only. + hsides + The top and bottom sides only. + lhs + The left-hand side only. + rhs + The right-hand side only. + vsides + The right and left sides only. + box + All four sides. + border + All four sides. + + + + + + Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + + none + No rules. This is the default value. + groups + Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + rows + Rules will appear between rows only. + cols + Rules will appear between columns only. + all + Rules will appear between all rows and columns. + + + + + + Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + + + An explicit spacing. + + [0-9]+% + + A percentage spacing. + + + + + + Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + + + An explicit padding. + + [0-9]+% + + A percentage padding. + + + + + + + + + + Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + + + + + This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + + + + + Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + + + + + Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + + row + The current cell provides header information for the rest of the row that contains it + col + The current cell provides header information for the rest of the column that contains it. + rowgroup + The header cell provides header information for the rest of the row group that contains it. + colgroup + The header cell provides header information for the rest of the column group that contains it. + + + + + + Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all rows from the current row to the last row of the table section (thead +, tbody +, or tfoot +) in which the cell is defined. + + + + + + Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all columns from the current column to the last column of the column group (colgroup +) in which the cell is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal (captioned) HTML table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An HTML table without a title + + + + +
+
+ + + + + + An HTML table caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + + + + + +
+
+ + + + + + This attribute, whose value must be an integer > 0, specifies the number of columns spanned + by the col + element; the col + element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + element shares its attributes with the next N-1 columns. + + + + + + Specifies a default width for each column spanned by the current col + element. It has the same meaning as the width + attribute for the colgroup + element and overrides it. + + + + + + + + + Specifications for a column in an HTML table + + + + +
+
+ + + + + + This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + element contains one or more col + elements. + + + + + + This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + element. + + + + + + + + + A group of columns in an HTML table + + + + + + +
+
+ + + + + + + + + + A table header consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A table footer consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A wrapper for the rows of an HTML table or informal HTML table + + + + + + +
+
+ + + + + + + + + + A row in an HTML table + + + + + + + + + +
+
+ + + + + + + + + + + A table header entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + A table entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A detailed set of messages, usually error messages + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for an entry in a message set + + + + + + + + + + + + +
+
+ + + + + + The audience to which the message relevant + + + + + The origin of the message + + + + + The level of importance or severity of a message + + + + + + + + + + + + + + + + + + + + + + + A wrapper for a simpler entry in a message set + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A message in a message set + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary component of a message in a message set + + + + + +
+
+ + + + + + + + + + + + + + + + + + A subcomponent of a message in a message set + + + + + +
+
+ + + + + + + + + + + + + + + + + + A related component of a message in a message set + + + + + +
+
+ + + + + + + + + + + + + + + The actual text of a message component in a message set + + + + + + +
+
+ + + + + + + + + + + + + + + Information about a message in a message set + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The level of importance or severity of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The origin of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The audience to which a message in a message set is relevant + + + + +
+
+ + + + + + + + + + + + + + + + + + Explanatory material relating to a message in a message set + + + + + + + +
+
+ + + + + + none + No labels + number + Numeric labels + qanda + "Q:" and "A:" labels + + + + + Specifies the default labelling + + + + + + + + + + + + + + + + + + + + + A question-and-answer set + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A titled division in a qandaset + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A question/answer set within a qandaset + + + + + + + + +
+
+ + + + + + + + + + + + + + + A question in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An answer to a question posed in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A label on a question or answer + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation + + Element exclusion + + example must not occur among the children or descendants of equation + + + + Element exclusion + + figure must not occur among the children or descendants of equation + + + + Element exclusion + + table must not occur among the children or descendants of equation + + + + Element exclusion + + equation must not occur among the children or descendants of equation + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation without a title + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical equation or expression occurring inline + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical phrase that can be represented with ordinary text and a small amount of markup + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is MathML + mathml + Specifies MathML. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A MathML expression in a media object + + + + + + + +
+
+ + + Any element from the MathML namespace + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is SVG + svg + Specifies SVG. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SVG drawing in a media object + + + + + + + +
+
+ + + Any element from the SVG namespace + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A string of formatting markup in text that is to be represented literally + + + + +
+
+ + + + + + attribute + An attribute + attvalue + An attribute value + element + An element + emptytag + An empty element tag + endtag + An end tag + genentity + A general entity + localname + The local name part of a qualified name + namespace + A namespace + numcharref + A numeric character reference + paramentity + A parameter entity + pi + A processing instruction + prefix + The prefix part of a qualified name + comment + An SGML comment + starttag + A start tag + xmlpi + An XML processing instruction + + + + + Identifies the nature of the tag content + + + + + + Identifies the namespace of the tag content + + + + + + + + + + + + + + + + + + + + + A component of XML (or SGML) markup + + + + + + + + + +
+
+ + + Identifies the class of symbol + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A name that is replaced by a value before processing + + + + +
+
+ + + + + + + + + + + + + + + A unit of information + + + + +
+
+ + + + + + + + + + + + + + + Inline text that is some literal value + + + + +
+
+ + + Identifies the (computer) language of the code fragment + + + + + + + + + + + + + + + + + + + + An inline code fragment + + + + + + + + + +
+
+ + + Identifies the class of constant + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A programming or system constant + + + + +
+
+ + + + + + copyright + A name with a copyright + registered + A name with a registered copyright + service + A name of a service + trade + A name which is trademarked + + + + + Specifies the class of product name + + + + + + + + + + + + + + + + + + The formal name of a product + + + + +
+
+ + + + + + + + + + + + + + + A number assigned to a product + + + + +
+
+ + + altkey + An alternate or secondary key + constraint + A constraint + datatype + A data type + field + A field + foreignkey + A foreign key + group + A group + index + An index + key1 + The first or primary key + key2 + An alternate or secondary key + name + A name + primarykey + The primary key + procedure + A (stored) procedure + record + A record + rule + A rule + secondarykey + The secondary key + table + A table + user + A user + view + A view + + + + + Identifies the class of database artifact + + + + + + + + + + + + + + + + + + + + + The name of a database, or part of a database + + + + +
+
+ + + hardware + A hardware application + software + A software application + + + + + Identifies the class of application + + + + + + + + + + + + + + + + + + + + + The name of a software program + + + + +
+
+ + + + + + + + + + + + + + + A physical part of a computer system + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text on a button in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Graphic and/or text appearing as a icon in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The text of a label in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a menu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a terminal menu item in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a submenu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A selection or series of selections from a menu + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The conventional name of a mouse button + + + + +
+ + + + + + + + + + +
+ + + alt + The "Alt" key + altgr + The "Alt Graph" key + backspace + The "Backspace" key + command + The "Command" key + control + The "Control" key + delete + The "Delete" key + down + The down arrow + end + The "End" key + enter + The "Enter" key + escape + The "Escape" key + home + The "Home" key + insert + The "Insert" key + left + The left arrow + meta + The "Meta" key + option + The "Option" key + pagedown + The page down key + pageup + The page up key + right + The right arrow + return + The "Return" key + shift + The "Shift" key + space + The spacebar + tab + The "Tab" key + up + The up arrow + + + + + + Identifies the function key + + + + + + + + Identifies the function key + other + Indicates a non-standard function key + + + + Specifies a keyword that identifies the non-standard key + + + + + + + + + + + + + + + + + + + + + + + + The text printed on a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + The internal, frequently numeric, identifier for a key on a keyboard + + + + +
+ + + + + + + + + + +
+ + + click + A (single) mouse click. + double-click + A double mouse click. + press + A mouse or key press. + seq + Sequential clicks or presses. + simul + Simultaneous clicks or presses. + + + + + + Identifies the nature of the action taken. If keycombo + contains more than one element, simul + is the default, otherwise there is no default. + + + + + + + + Identifies the nature of the action taken + other + Indicates a non-standard action + + + + Identifies the non-standard action in some unspecified way. + + + + + + + + + + + + + + + + + + + + + + + + A combination of input actions + + + + + + +
+
+ + + + + + + + + + + + + + + The symbolic name of a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + A graphical user interface (GUI) keyboard shortcut + + + + +
+
+ + + + + + + + + + + + + + + + + + + A key combination for an action that is also accessible through a menu + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A character or string indicating the start of an input field in a computer display + + + + + + +
+
+ + + + + + + + + + + + + + + A software environment variable + + + + +
+
+ + + devicefile + A device + directory + A directory + extension + A filename extension + headerfile + A header file (as for a programming language) + libraryfile + A library file + partition + A partition (as of a hard disk) + symlink + A symbolic link + + + + + Identifies the class of filename + + + + + + Specifies the path of the filename + + + + + + + + + + + + + + + + + + + + + + + The name of a file + + + + +
+
+ + + + + + + + + + + + + + + The name of an executable program or other software command + + + + +
+
+ + + + + + + + + + + + + + + Data, generally text, displayed or presented by a computer + + + + + + +
+
+ + + + + + + + + + + + + + + Data entered by the user + + + + + + +
+
+ + + + + + Specifies the character that should separate the command and its top-level arguments + + + + + Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A syntax summary for a software command + + + + + + + + + + + + + + + +
+ + + norepeat + Can not be repeated. + repeat + Can be repeated. + + + + + Indicates whether or not repetition is possible. + + + + + + opt + Formatted to indicate that it is optional. + plain + Formatted without indication. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + Indicates optionality. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An argument in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A group of elements in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + An explicit line break in a command synopsis + + + + +
+
+ + + + + + + + + + + + + + + A portion of a cmdsynopsis broken out from the main body of the synopsis + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A reference to a fragment of a command synopsis + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + A general-purpose element for representing the syntax of commands or functions + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing synopsis + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a function definition + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the funcdefs of a funcsynopsis + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a function + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A function (subroutine) name and its return type + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a function or subroutine, as in a programming language + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating that the function in question takes no arguments + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating a variable number of arguments + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of parameters + + + + + + + + + +
+
+ + + + + + opt + Formatted to indicate that it is optional. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + + + + + + + + + + + + + Information about a function parameter in a programming language + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Parameters for a function referenced through a function pointer in a synopsis + + + + +
+
+ + + + + + + + + class + This is the synopsis of a class + interface + This is the synopsis of an interface + + + + + Specifies the nature of the synopsis + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a class definition + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the contents of a classsynopsis + + + + +
+
+ + + + + + + + + + + + + + + A class in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An interface in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An exception in an object-oriented programming language + + + + + + + + + + + + + +
+ + + Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + preserve + Extra whitespace and line breaks must be preserved. + + + +
+ + + + + + + + + + + + + + + + + + Modifiers in a synopsis + + + + +
+
+ + + + + + + + + + + + + + + The name of an interface + + + + +
+
+ + + + + + + + + + + + + + + The name of an exception + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The name of a field in a class definition + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + The initializer for a fieldsynopsis + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a constructor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a destructor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a method + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters to a method + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of method parameters + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a variable + + + + +
+
+ + + + + + + + + + + + + + + Target of a build + + + + +
+
+ + + + + + + + + + + + + + + The value returned by a function + + + + +
+
+ + + + + + union + Combined type is union of nested types + intersection + Combined type is intersection of nested types + + + + + Specifies the way how are nested types combined together + + + + + + + + + + + + + + + + + + The classification of a value + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a class, in the object-oriented programming sense + + + + +
+
+ + + + + + + + + + + + + + + The identifier for a template, in the generic programming sense + + + + +
+
+ + + + + + + + + + + + + + + The definition of a template, in the generic programming sense + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The specialization of a template identifier, in the generic programming sense + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a package definition + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a macro (a code-generating function) + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a macro definition (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a macro (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A macro name and its return type + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a union of types + + + + +
+
+ + + + + + + + + + + + + + + The definition of a union of types, which may be more than a name + + + + + + +
+
+ + + + + + + + + + Indicates how the value of a union is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a union-of-types definition + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of an enumeration + + + + +
+
+ + + + + + + + + + + + + + + The value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + The description of a value an enumerated type can take + + + + + + +
+
+ + + + + + + + + + + + + + + The identifier of a value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + A value an enumerated type can take and its description + + + + + + + + + + +
+
+ + + + + + + + + 0 + Value of enum is specified explicitly using enumvalue + 1 + Value of enum is inferred from its position + + + + + Indicates how the value of an enumeration is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for an enumerated-type definition + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a type alias + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a type-alias definition + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A literal listing of all or part of a program + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A note of caution + + Element exclusion + + caution must not occur among the children or descendants of caution + + + + Element exclusion + + danger must not occur among the children or descendants of caution + + + + Element exclusion + + important must not occur among the children or descendants of caution + + + + Element exclusion + + note must not occur among the children or descendants of caution + + + + Element exclusion + + tip must not occur among the children or descendants of caution + + + + Element exclusion + + warning must not occur among the children or descendants of caution + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text indicating hazardous situation + + Element exclusion + + caution must not occur among the children or descendants of danger + + + + Element exclusion + + danger must not occur among the children or descendants of danger + + + + Element exclusion + + important must not occur among the children or descendants of danger + + + + Element exclusion + + note must not occur among the children or descendants of danger + + + + Element exclusion + + tip must not occur among the children or descendants of danger + + + + Element exclusion + + warning must not occur among the children or descendants of danger + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of important + + + + Element exclusion + + danger must not occur among the children or descendants of important + + + + Element exclusion + + important must not occur among the children or descendants of important + + + + Element exclusion + + note must not occur among the children or descendants of important + + + + Element exclusion + + tip must not occur among the children or descendants of important + + + + Element exclusion + + warning must not occur among the children or descendants of important + + + + + + +
+
+ + + + + + + + + + + + + + + A message set off from the text + + Element exclusion + + caution must not occur among the children or descendants of note + + + + Element exclusion + + danger must not occur among the children or descendants of note + + + + Element exclusion + + important must not occur among the children or descendants of note + + + + Element exclusion + + note must not occur among the children or descendants of note + + + + Element exclusion + + tip must not occur among the children or descendants of note + + + + Element exclusion + + warning must not occur among the children or descendants of note + + + + + + +
+
+ + + + + + + + + + + + + + + A suggestion to the user, set off from the text + + Element exclusion + + caution must not occur among the children or descendants of tip + + + + Element exclusion + + danger must not occur among the children or descendants of tip + + + + Element exclusion + + important must not occur among the children or descendants of tip + + + + Element exclusion + + note must not occur among the children or descendants of tip + + + + Element exclusion + + tip must not occur among the children or descendants of tip + + + + Element exclusion + + warning must not occur among the children or descendants of tip + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of warning + + + + Element exclusion + + danger must not occur among the children or descendants of warning + + + + Element exclusion + + important must not occur among the children or descendants of warning + + + + Element exclusion + + note must not occur among the children or descendants of warning + + + + Element exclusion + + tip must not occur among the children or descendants of warning + + + + Element exclusion + + warning must not occur among the children or descendants of warning + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + An error code + + + + +
+
+ + + + + + + + + + + + + + + An error name + + + + +
+
+ + + + + + + + + + + + + + + An error message. + + + + +
+
+ + + + + + + + + + + + + + + The classification of an error message + + + + +
+ + + + + + +
+ + + daemon + A daemon or other system process (syslogd) + domainname + A domain name (example.com) + etheraddress + An ethernet address (00:05:4E:49:FD:8E) + event + An event of some sort (SIGHUP) + eventhandler + An event handler of some sort (hangup) + filesystem + A filesystem (ext3) + fqdomainname + A fully qualified domain name (my.example.com) + groupname + A group name (wheel) + interface + A network interface (eth0) + ipaddress + An IP address (127.0.0.1) + library + A library (libncurses) + macro + A macro + netmask + A netmask (255.255.255.192) + newsgroup + A newsgroup (comp.text.xml) + osname + An operating system name (Hurd) + process + A process (gnome-cups-icon) + protocol + A protocol (ftp) + resource + A resource + securitycontext + A security context (a role, permission, or security token, for example) + server + A server (mail.example.com) + service + A service (ppp) + systemname + A system name (hephaistos) + username + A user name (ndw) + + + + + + Identifies the nature of the system item + + + + + + + Identifies the nature of the non-standard system item + + + + + + + Identifies the kind of systemitemgraphic identifier + other + Indicates that the system item is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + A system-related item or term + + + + + + +
+
+ + + + + + + + + + + + + + + An option for a software command + + + + +
+
+ + + + + + + + + + + + + + + Optional information + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A unit of data associated with some part of a computer system + + + + +
+
+ + + + + + + + + Identifies the topic type + + + + + + + + + + + + + + + + + + + + + + + + + + A modular unit of documentation not part of any particular narrative flow + + + + + + + + + + + +
+ + + + + + + + + + + + + Identifies the markup grammar of a resource + + +
+ + + + + + + + + + + + + + + + + Defines the hierarchy and relationships for a collection of resources + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + Contains one or more resource objects that are managed by the assembly + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + +
+
+ + + + + + Indentifies the location of the data by URI + + + + + + + + + Identifies the markup grammar of a resource + + + + + + + + + + + + + + + + + + + + Identifies an object managed within the assembly + + + + + + + +
+
+ + + + + + Identifies the structure type of the structure + + + + + + Indicates a single resource from which to construct this structure + + + + + + Identifies the default format of the structure + + + + + + Specifies the DocBook element to which this unit should be renamed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes the structure of a document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + Specification of renderas + + The renderas attribute can be specified on either the structure or output, but not both. + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies chunking for this module + + + + + + Specifies the output file for this module or structure + + + + + + Specifies the DocBook element to which this unit should be renamed + + + + + + Specifies the transformation that should be applied to this unit + + + + + + Indicates whether or not this unit should be suppressed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specify an output format and/or file name and/or renderas + + + + +
+
+ + + + + + Indicates a single resource from which to read merged info + + + + + + + + + + + + + + + + + A wrapper for information that a module overrides in the resource it includes + + + + + + + + + +
+
+ + + + + + true + This module will be in a chunk + false + This module will not be in a chunk + auto + Chunking of this module depends on the overall chunking algorithm + + + + + Specifies chunking for this module + + + + + + Identifies a single resource or structure within the assembly from which to construct this module + + + + + + + Indicates if titles should be omitted when including a resource + + + + + + + + Indicates if the root element should be omitted when including the resource (copying only the children) + + + + + + + Changes the name of the root element of the included resource to the specified name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A modular component within a structure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + Specification of renderas + + The renderas attribute can be specified on either the structure or output, but not both. + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + Elements with effectivity attributes matching this element are suppressed + + + + +
+
+ + + + + + + + + + + + + + Elements with effectivity attributes matching this element are allowed + + + + +
+
+ + + + + + Identifies the type of the contained relationships + + + + + + + + + + + + + + + + + + + + Groups relationship elements to define associations between resources + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Identifies the type of the relationship + + + + + + + + + + + + + + + + + + + + A relationship associates one or more resources + + + + + + + +
+
+ + + + + + + + + + + + + + + + + Identifies the type of relationship between one or more resources + + + + + + +
+
+ + + + + + Specifies the type of link for this instance + + + + + + + + + + + + + + + + + Identifies a resource that is part of a relationship + + + + + +
+
+ + + + + + + + + + + + + + + + + List of transforms for converting from non-DocBook schemas + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Indentifies the location of the data by URI + + + + + + The name of the transform + + + + + + + + + + + + + + + + + + + Identifies a transform for converting from a non-DocBook schema + + + + +
+
+ + + + + + + + + + + + + + A description of a resource or resources + + + + +
+
diff --git a/catalog/docbook5.2/rng/assemblyxi.rnc b/catalog/docbook5.2/rng/assemblyxi.rnc new file mode 100755 index 0000000..52259fc --- /dev/null +++ b/catalog/docbook5.2/rng/assemblyxi.rnc @@ -0,0 +1,10858 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ctrl = "http://nwalsh.com/xmlns/schema-control/" +default namespace db = "http://docbook.org/ns/docbook" +namespace html = "http://www.w3.org/1999/xhtml" +namespace local = "" +namespace mml = "http://www.w3.org/1998/Math/MathML" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace s = "http://purl.oclc.org/dsdl/schematron" +namespace svg = "http://www.w3.org/2000/svg" +namespace trans = "http://docbook.org/ns/transclusion" +namespace xi = "http://www.w3.org/2001/XInclude" +namespace xlink = "http://www.w3.org/1999/xlink" + +# This file is part of DocBook Assembly XIncludeV5.2CR5 +# +# Copyright 2020 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-comment@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. +# +# ====================================================================== + +s:ns [ + prefix = "a" + uri = "http://relaxng.org/ns/compatibility/annotations/1.0" +] +s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ] +s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ] +s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ] +s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ] +s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ] +s:ns [ prefix = "s" uri = "http://purl.oclc.org/dsdl/schematron" ] +s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ] +s:ns [ prefix = "trans" uri = "http://docbook.org/ns/transclusion" ] +s:ns [ prefix = "xi" uri = "http://www.w3.org/2001/XInclude" ] +s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ] +div { + db._any.attribute = + + ## Any attribute, including any attribute in any namespace + attribute * { text } + db._any_other.attribute = + + ## Any attribute in any other explicit namespace + attribute * - (db:* | xml:* | xlink:* | trans:* | local:*) { text } + db._any = + + ## Any element from almost any namespace + element * - db:* { (db._any.attribute | text | db._any)* } +} +db.arch.attribute = + + ## Designates the computer or chip architecture to which the element applies + attribute arch { text } +db.audience.attribute = + + ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + attribute audience { text } +db.condition.attribute = + + ## provides a standard place for application-specific effectivity + attribute condition { text } +db.conformance.attribute = + + ## Indicates standards conformance characteristics of the element + attribute conformance { text } +db.os.attribute = + + ## Indicates the operating system to which the element is applicable + attribute os { text } +db.revision.attribute = + + ## Indicates the editorial revision to which the element belongs + attribute revision { text } +db.security.attribute = + + ## Indicates something about the security level associated with the element to which it applies + attribute security { text } +db.userlevel.attribute = + + ## Indicates the level of user experience for which the element applies + attribute userlevel { text } +db.vendor.attribute = + + ## Indicates the computer vendor to which the element applies + attribute vendor { text } +db.wordsize.attribute = + + ## Indicates the word size (width in bits) of the computer architecture to which the element applies + attribute wordsize { text } +db.outputformat.attribute = + + ## Indicates the output format (for example, print or epub) to which the element applies + attribute outputformat { text } +db.effectivity.attributes = + db.arch.attribute? + & db.audience.attribute? + & db.condition.attribute? + & db.conformance.attribute? + & db.os.attribute? + & db.revision.attribute? + & db.security.attribute? + & db.userlevel.attribute? + & db.vendor.attribute? + & db.wordsize.attribute? + & db.outputformat.attribute? +db.endterm.attribute = + + ## Points to the element whose content is to be used as the text of the link + attribute endterm { xsd:IDREF } +db.linkend.attribute = + + ## Points to an internal link target by identifying the value of its xml:id attribute + attribute linkend { xsd:IDREF } +db.linkends.attribute = + + ## Points to one or more internal link targets by identifying the value of their xml:id attributes + attribute linkends { xsd:IDREFS } +db.xlink.href.attribute = + + ## Identifies a link target with a URI + attribute xlink:href { xsd:anyURI } +db.xlink.simple.type.attribute = + + ## Identifies the XLink link type + attribute xlink:type { + + ## An XLink simple link type + "simple" + } +db.xlink.role.attribute = + + ## Identifies the XLink role of the link + attribute xlink:role { xsd:anyURI } +db.xlink.arcrole.attribute = + + ## Identifies the XLink arcrole of the link + attribute xlink:arcrole { xsd:anyURI } +db.xlink.title.attribute = + + ## Identifies the XLink title of the link + attribute xlink:title { text } +db.xlink.show.enumeration = + + ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + "new" + | + ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + "replace" + | + ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + "embed" + | + ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.show.attribute = + + ## Identifies the XLink show behavior of the link + attribute xlink:show { db.xlink.show.enumeration } +db.xlink.actuate.enumeration = + + ## An application should traverse to the ending resource immediately on loading the starting resource. + "onLoad" + | + ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + "onRequest" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.actuate.attribute = + + ## Identifies the XLink actuate behavior of the link + attribute xlink:actuate { db.xlink.actuate.enumeration } +db.xlink.simple.link.attributes = + db.xlink.simple.type.attribute? + & db.xlink.href.attribute? + & db.xlink.role.attribute? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? +db.xlink.attributes = + db.xlink.simple.link.attributes + | (db.xlink.extended.link.attributes + | db.xlink.locator.link.attributes + | db.xlink.arc.link.attributes + | db.xlink.resource.link.attributes + | db.xlink.title.link.attributes) +db.xml.id.attribute = + + ## Identifies the unique ID value of the element + attribute xml:id { xsd:ID } +db.version.attribute = + + ## Specifies the DocBook version of the element and its descendants + attribute version { text } +db.xml.lang.attribute = + + ## Specifies the natural language of the element and its descendants + attribute xml:lang { text } +db.xml.base.attribute = + + ## Specifies the base URI of the element and its descendants + attribute xml:base { xsd:anyURI } +db.remap.attribute = + + ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + attribute remap { text } +db.xreflabel.attribute = + + ## Provides the text that is to be generated for a cross reference to the element + attribute xreflabel { text } +db.xrefstyle.attribute = + + ## Specifies a keyword or keywords identifying additional style information + attribute xrefstyle { text } +db.revisionflag.enumeration = + + ## The element has been changed. + "changed" + | + ## The element is new (has been added to the document). + "added" + | + ## The element has been deleted. + "deleted" + | + ## Explicitly turns off revision markup for this element. + "off" +db.revisionflag.attribute = + + ## Identifies the revision status of the element + attribute revisionflag { db.revisionflag.enumeration } +db.dir.enumeration = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" +db.dir.attribute = + + ## Identifies the direction of text in an element + attribute dir { db.dir.enumeration } +db.rdfalite.vocab = + + ## The RDFa Lite vocab + attribute vocab { xsd:anyURI } +db.rdfalite.typeof = + + ## The RDFa Lite typeof + attribute typeof { text } +db.rdfalite.property = + + ## The RDFa Lite property + attribute property { text } +db.rdfalite.resource = + + ## The RDFa Lite resource + attribute resource { text } +db.rdfalite.prefix = + + ## The RDFa Lite prefix + attribute prefix { text } +db.rdfalite.attributes = + db.rdfalite.vocab? + & db.rdfalite.typeof? + & db.rdfalite.property? + & db.rdfalite.resource? + & db.rdfalite.prefix? +db.trans.idfixup.enumeration = + + ## No ID fixup strategy + "none" + | + ## ID fixup by concatenating suffixes + "suffix" + | + ## ID fixup by creating unique values + "auto" +db.trans.idfixup.attribute = + + ## The transclusion ID fixup strategy + attribute trans:idfixup { db.trans.idfixup.enumeration } +db.trans.suffix.attribute = + + ## The transclusion suffix to use when the suffix ID fixup strategy is employed + [ + s:pattern [ + s:title [ "Suffix fixup must be specified" ] + s:rule [ + context = "db:*[@trans:suffix]" + s:assert [ + test = "@trans:idfixup = 'suffix'" + "If a suffix is specified, suffix ID fixup must also be specified." + ] + ] + ] + ] + attribute trans:suffix { text } +db.trans.linkscope.enumeration = + + ## No link scope adjustments are made + "user" + | + ## The link scopes are adjusted with the suffix property + "local" + | + ## The link scopes are adjusted based on proximity + "near" + | + ## The link scopes are adjusted based on document order + "global" +db.trans.linkscope.attribute = + + ## The transclusion link scope adjustment + attribute trans:linkscope { db.trans.linkscope.enumeration } +db.common.transclusion.attributes = + db.trans.idfixup.attribute? + & db.trans.suffix.attribute? + & db.trans.linkscope.attribute? +db.common.base.attributes = + db.version.attribute? + & db.xml.lang.attribute? + & db.xml.base.attribute? + & db.remap.attribute? + & db.xreflabel.attribute? + & db.revisionflag.attribute? + & db.dir.attribute? + & db.effectivity.attributes + & db.rdfalite.attributes + & db.common.transclusion.attributes + & db._any_other.attribute* +db.common.attributes = + db.xml.id.attribute? + & db.common.base.attributes + & db.annotations.attribute? +db.common.idreq.attributes = + db.xml.id.attribute + & db.common.base.attributes + & db.annotations.attribute? +db.common.linking.attributes = + (db.linkend.attribute | db.xlink.attributes)? +db.common.req.linking.attributes = + db.linkend.attribute | db.xlink.attributes +db.common.data.attributes = + + ## Specifies the format of the data + attribute format { text }?, + ( + ## Indentifies the location of the data by URI + attribute fileref { xsd:anyURI } + | + ## Identifies the location of the data by external identifier (entity name) + attribute entityref { xsd:ENTITY }) +db.verbatim.continuation.enumeration = + + ## Line numbering continues from the immediately preceding element with the same name. + "continues" + | + ## Line numbering restarts (begins at 1, usually). + "restarts" +db.verbatim.continuation.attribute = + + ## Determines whether line numbering continues from the previous element or restarts + attribute continuation { db.verbatim.continuation.enumeration } +db.verbatim.linenumbering.enumeration = + + ## Lines are numbered. + "numbered" + | + ## Lines are not numbered. + "unnumbered" +db.verbatim.linenumbering.attribute = + + ## Determines whether lines are numbered + attribute linenumbering { db.verbatim.linenumbering.enumeration } +db.verbatim.startinglinenumber.attribute = + + ## Specifies the initial line number + attribute startinglinenumber { xsd:integer } +db.verbatim.language.attribute = + + ## Identifies the language (i.e. programming language) of the verbatim content + attribute language { text } +db.verbatim.xml.space.attribute = + + ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + attribute xml:space { + + ## Whitespace must be preserved. + "preserve" + } +db.verbatim.common.attributes = + db.verbatim.continuation.attribute? + & db.verbatim.linenumbering.attribute? + & db.verbatim.startinglinenumber.attribute? + & db.verbatim.xml.space.attribute? +db.verbatim.attributes = + db.verbatim.common.attributes & db.verbatim.language.attribute? +db.label.attribute = + + ## Specifies an identifying string for presentation purposes + attribute label { text } +db.width.characters.attribute = + + ## Specifies the width (in characters) of the element + attribute width { xsd:nonNegativeInteger } +db.spacing.enumeration = + + ## The spacing should be "compact". + "compact" + | + ## The spacing should be "normal". + "normal" +db.spacing.attribute = + + ## Specifies (a hint about) the spacing of the content + attribute spacing { db.spacing.enumeration } +db.pgwide.enumeration = + + ## The element should be rendered in the current text flow (with the flow column width). + "0" + | + ## The element should be rendered across the full text page. + "1" +db.pgwide.attribute = + + ## Indicates if the element is rendered across the column or the page + attribute pgwide { db.pgwide.enumeration } +db.language.attribute = + + ## Identifies the language (i.e. programming language) of the content + attribute language { text } +db.performance.enumeration = + + ## The content describes an optional step or steps. + "optional" + | + ## The content describes a required step or steps. + "required" +db.performance.attribute = + + ## Specifies if the content is required or optional + attribute performance { db.performance.enumeration } +db.floatstyle.attribute = + + ## Specifies style information to be used when rendering the float + attribute floatstyle { text } +db.width.attribute = + + ## Specifies the width of the element + attribute width { text } +db.depth.attribute = + + ## Specifies the depth of the element + attribute depth { text } +db.contentwidth.attribute = + + ## Specifies the width of the content rectangle + attribute contentwidth { text } +db.contentdepth.attribute = + + ## Specifies the depth of the content rectangle + attribute contentdepth { text } +db.scalefit.enumeration = + + ## False (do not scale-to-fit; anamorphic scaling may occur) + "0" + | + ## True (scale-to-fit; anamorphic scaling is forbidden) + "1" +db.scale.attribute = + + ## Specifies the scaling factor + attribute scale { xsd:positiveInteger } +db.classid.attribute = + + ## Specifies a classid for a media object player + attribute classid { text } +db.autoplay.attribute = + + ## Specifies the autoplay setting for a media object player + attribute autoplay { text } +db.halign.enumeration = + + ## Centered horizontally + "center" + | + ## Aligned horizontally on the specified character + "char" + | + ## Fully justified (left and right margins or edges) + "justify" + | + ## Left aligned + "left" + | + ## Right aligned + "right" +db.valign.enumeration = + + ## Aligned on the bottom of the region + "bottom" + | + ## Centered vertically + "middle" + | + ## Aligned on the top of the region + "top" +db.biblio.class.enumeration = + + ## A digital object identifier. + "doi" + | + ## An international standard book number. + "isbn" + | + ## An international standard technical report number (ISO 10444). + "isrn" + | + ## An international standard serial number. + "issn" + | + ## An international standard text code. + "istc" + | + ## A Library of Congress reference number. + "libraryofcongress" + | + ## A publication number (an internal number or possibly organizational standard). + "pubsnumber" + | + ## A Uniform Resource Identifier + "uri" +db.biblio.class-enum.attribute = + + ## Identifies the kind of bibliographic identifier + attribute class { db.biblio.class.enumeration }? +db.biblio.class-other.attribute = + + ## Identifies the nature of the non-standard bibliographic identifier + attribute otherclass { xsd:NMTOKEN } +db.biblio.class-other.attributes = + + ## Identifies the kind of bibliographic identifier + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.biblio.class-other.attribute +db.biblio.class.attribute = + db.biblio.class-enum.attribute | db.biblio.class-other.attributes +db.pubwork.enumeration = + + ## An article + "article" + | + ## A bulletin board system + "bbs" + | + ## A book + "book" + | + ## A CD-ROM + "cdrom" + | + ## A chapter (as of a book) + "chapter" + | + ## A DVD + "dvd" + | + ## An email message + "emailmessage" + | + ## A gopher page + "gopher" + | + ## A journal + "journal" + | + ## A manuscript + "manuscript" + | + ## A posting to a newsgroup + "newsposting" + | + ## A part (as of a book) + "part" + | + ## A reference entry + "refentry" + | + ## A section (as of a book or article) + "section" + | + ## A series + "series" + | + ## A set (as of books) + "set" + | + ## A web page + "webpage" + | + ## A wiki page + "wiki" + | + ## Some other kind of work + "other" +db.biblio.pubwork.enumeration = db.pubwork.enumeration +db.biblio.pubwork-enum.attribute = + + ## Identifies the nature of the published work + attribute pubwork { db.biblio.pubwork.enumeration }? +db.biblio.pubwork-other.attribute = + + ## Identifies the nature of some other kind of published work + attribute otherpubwork { xsd:NMTOKEN } +db.biblio.pubwork-other.attributes = + + ## Identifies that this is some other kind of published work + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.biblio.pubwork-other.attribute +db.biblio.pubwork.attribute = + db.biblio.pubwork-enum.attribute | db.biblio.pubwork-other.attributes +db.ubiq.inlines = + (db.inlinemediaobject + | db.remark + | db.link.inlines + | db.alt + | db.trademark + | # below, effectively the publishing inlines (as of 5.0) + db.abbrev + | db.acronym + | db.date + | db._emphasis + | db.footnote + | db.footnoteref + | db._foreignphrase + | db._phrase + | db._quote + | db.subscript + | db.superscript + | db.wordasword) + | db.annotation + | (db._firstterm | db._glossterm) + | db.indexterm + | db.coref +db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)* +db._title = db.title? & db.titleabbrev? & db.subtitle? +db._title.req = db.title & db.titleabbrev? & db.subtitle? +db._title.only = db.title? & db.titleabbrev? +db._title.onlyreq = db.title & db.titleabbrev? +db._info = (db._title, db.titleforbidden.info?) | db.info? +db._info.title.req = + (db._title.req, db.titleforbidden.info?) | db.titlereq.info +db._info.title.only = + (db._title.only, db.titleforbidden.info?) | db.titleonly.info +db._info.title.onlyreq = + (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info +db._info.title.forbidden = db.titleforbidden.info? +db.all.inlines = + text + | db.ubiq.inlines + | db.general.inlines + | db.domain.inlines + | db.extension.inlines +db.general.inlines = + db.publishing.inlines + | db.product.inlines + | db.bibliography.inlines + | db.graphic.inlines + | db.indexing.inlines + | db.link.inlines +db.domain.inlines = + db.technical.inlines + | db.math.inlines + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines + | db.os.inlines + | db.programming.inlines + | db.error.inlines +db.technical.inlines = + (db.replaceable | db.package | db.parameter) + | db.termdef + | db.nonterminal + | (db.systemitem | db.option | db.optional | db.property) +db.product.inlines = + db.trademark + | (db.productnumber + | db.productname + | db.database + | db.application + | db.hardware) +db.bibliography.inlines = + db.citation + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.author + | db.person + | db.personname + | db.org + | db.orgname + | db.editor + | db.jobtitle +db.publishing.inlines = + (db.abbrev + | db.acronym + | db.date + | db.emphasis + | db.footnote + | db.footnoteref + | db.foreignphrase + | db.phrase + | db.quote + | db.revnumber + | db.subscript + | db.superscript + | db.wordasword) + | db.glossary.inlines + | db.coref +db.graphic.inlines = db.inlinemediaobject +db.indexing.inlines = notAllowed | db.indexterm +db.link.inlines = + (db.xref | db.link | db.olink | db.anchor) | db.biblioref +db.extension.inlines = notAllowed +db.nopara.blocks = + (db.list.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.indexterm + | db.synopsis.blocks + | db.admonition.blocks +db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara +db.all.blocks = + (db.nopara.blocks | db.para.blocks | db.extension.blocks) + | db.annotation +db.wrapper.blocks = db.formalgroup +db.formal.blocks = (db.example | db.figure | db.table) | db.equation +db.informal.blocks = + (db.informalexample | db.informalfigure | db.informaltable) + | db.informalequation +db.publishing.blocks = + db.sidebar | db.blockquote | db.address | db.epigraph +db.graphic.blocks = db.mediaobject | db.screenshot +db.technical.blocks = + db.procedure + | db.task + | (db.productionset | db.constraintdef) + | db.msgset +db.list.blocks = + (db.itemizedlist + | db.orderedlist + | db.procedure + | db.simplelist + | db.variablelist + | db.segmentedlist) + | db.glosslist + | db.bibliolist + | db.calloutlist + | db.qandaset +db.verbatim.blocks = + (db.screen | db.literallayout) + | (db.programlistingco | db.screenco) + | (db.programlisting | db.synopsis) +db.extension.blocks = notAllowed +db.info.extension = db._any +db.info.elements = + (db.abstract + | db.address + | db.artpagenums + | db.author + | db.authorgroup + | db.authorinitials + | db.bibliocoverage + | db.biblioid + | db.bibliosource + | db.collab + | db.confgroup + | db.contractsponsor + | db.contractnum + | db.copyright + | db.cover + | db.date + | db.edition + | db.editor + | db.issuenum + | 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.meta + | db.info.extension) + | db.annotation + | db.extendedlink + | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset) + | db.itermset + | (db.productname | db.productnumber) +db.bibliographic.elements = + db.info.elements + | db.publishing.inlines + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.person + | db.personblurb + | db.personname + | db.subtitle + | db.title + | db.titleabbrev +div { + db.title.role.attribute = attribute role { text } + db.title.attlist = + db.title.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.title = + + ## The text of the title of a section of a document or of a formal block-level element + element title { db.title.attlist, db.all.inlines* } +} +div { + db.titleabbrev.role.attribute = attribute role { text } + db.titleabbrev.attlist = + db.titleabbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.titleabbrev = + + ## The abbreviation of a title + element titleabbrev { db.titleabbrev.attlist, db.all.inlines* } +} +div { + db.subtitle.role.attribute = attribute role { text } + db.subtitle.attlist = + db.subtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subtitle = + + ## The subtitle of a document + element subtitle { db.subtitle.attlist, db.all.inlines* } +} +div { + db.info.role.attribute = attribute role { text } + db.info.attlist = db.info.role.attribute? & db.common.attributes + db.info = + + ## A wrapper for information about a component or other block + element info { db.info.attlist, (db._title & db.info.elements*) } +} +div { + db.titlereq.info.role.attribute = attribute role { text } + db.titlereq.info.attlist = + db.titlereq.info.role.attribute? & db.common.attributes + db.titlereq.info = + + ## A wrapper for information about a component or other block with a required title + element info { + db.titlereq.info.attlist, (db._title.req & db.info.elements*) + } +} +div { + db.titleonly.info.role.attribute = attribute role { text } + db.titleonly.info.attlist = + db.titleonly.info.role.attribute? & db.common.attributes + db.titleonly.info = + + ## A wrapper for information about a component or other block with only a title + element info { + db.titleonly.info.attlist, (db._title.only & db.info.elements*) + } +} +div { + db.titleonlyreq.info.role.attribute = attribute role { text } + db.titleonlyreq.info.attlist = + db.titleonlyreq.info.role.attribute? & db.common.attributes + db.titleonlyreq.info = + + ## A wrapper for information about a component or other block with only a required title + element info { + db.titleonlyreq.info.attlist, + (db._title.onlyreq & db.info.elements*) + } +} +div { + db.titleforbidden.info.role.attribute = attribute role { text } + db.titleforbidden.info.attlist = + db.titleforbidden.info.role.attribute? & db.common.attributes + db.titleforbidden.info = + + ## A wrapper for information about a component or other block without a title + element info { db.titleforbidden.info.attlist, db.info.elements* } +} +div { + db.subjectset.role.attribute = attribute role { text } + db.subjectset.scheme.attribute = + + ## Identifies the controlled vocabulary used by this set's terms + attribute scheme { xsd:NMTOKEN } + db.subjectset.attlist = + db.subjectset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subjectset.scheme.attribute? + db.subjectset = + + ## A set of terms describing the subject matter of a document + element subjectset { db.subjectset.attlist, db.subject+ } +} +div { + db.subject.role.attribute = attribute role { text } + db.subject.weight.attribute = + + ## Specifies a ranking for this subject relative to other subjects in the same set + attribute weight { text } + db.subject.attlist = + db.subject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subject.weight.attribute? + db.subject = + + ## One of a group of terms describing the subject matter of a document + element subject { db.subject.attlist, db.subjectterm+ } +} +div { + db.subjectterm.role.attribute = attribute role { text } + db.subjectterm.attlist = + db.subjectterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subjectterm = + + ## A term in a group of terms describing the subject matter of a document + element subjectterm { db.subjectterm.attlist, text } +} +div { + db.keywordset.role.attribute = attribute role { text } + db.keywordset.attlist = + db.keywordset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keywordset = + + ## A set of keywords describing the content of a document + element keywordset { db.keywordset.attlist, db.keyword+ } +} +div { + db.keyword.role.attribute = attribute role { text } + db.keyword.attlist = + db.keyword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keyword = + + ## One of a set of keywords describing the content of a document + element keyword { db.keyword.attlist, text } +} +db.table.choice = notAllowed | db.cals.table | db.html.table +db.informaltable.choice = + notAllowed | db.cals.informaltable | db.html.informaltable +db.table = db.table.choice +db.informaltable = db.informaltable.choice +div { + db.procedure.role.attribute = attribute role { text } + db.procedure.type.attribute = + + ## Identifies the type of procedure + attribute type { text }? + db.procedure.attlist = + db.procedure.role.attribute? + & db.procedure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + db.procedure.info = db._info.title.only + db.procedure = + + ## A list of operations to be performed in a well-defined sequence + element procedure { + db.procedure.attlist, + db.procedure.info, + db.all.blocks*, + db.step+, + db.result? + } +} +div { + db.step.role.attribute = attribute role { text } + db.step.attlist = + db.step.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.step.info = db._info.title.only + # This content model is blocks*, step|stepalternatives, blocks* but + # expressed this way it avoids UPA issues in XSD and DTD versions + db.step = + + ## A unit of action in a procedure + element step { + db.step.attlist, + db.step.info, + ((db.all.blocks+, + ((db.substeps | db.stepalternatives), db.all.blocks*)?, + db.result?) + | ((db.substeps | db.stepalternatives), + db.all.blocks*, + db.result?)) + } +} +div { + db.stepalternatives.role.attribute = attribute role { text } + db.stepalternatives.attlist = + db.stepalternatives.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.stepalternatives.info = db._info.title.forbidden + db.stepalternatives = + + ## Alternative steps in a procedure + element stepalternatives { + db.stepalternatives.attlist, db.stepalternatives.info, db.step+ + } +} +div { + db.substeps.role.attribute = attribute role { text } + db.substeps.attlist = + db.substeps.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.substeps = + + ## A wrapper for steps that occur within steps in a procedure + element substeps { db.substeps.attlist, db.step+ } +} +div { + db.result.role.attribute = attribute role { text } + db.result.attlist = + db.result.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.result = + + ## A wrapper for identifying the results of a procedure or step + element result { db.result.attlist, db.all.blocks+ } +} +div { + db.sidebar.floatstyle.attribute = db.floatstyle.attribute + db.sidebar.role.attribute = attribute role { text } + db.sidebar.attlist = + db.sidebar.role.attribute? + & db.sidebar.floatstyle.attribute? + & db.common.attributes + & db.common.linking.attributes + db.sidebar.info = db._info + db.sidebar = + + ## A portion of a document that is isolated from the main narrative flow + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:sidebar" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of sidebar" + ] + ] + ] + ] + element sidebar { + db.sidebar.attlist, db.sidebar.info, db.all.blocks+ + } +} +div { + db.abstract.role.attribute = attribute role { text } + db.abstract.attlist = + db.abstract.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abstract.info = db._info.title.only + db.abstract = + + ## A summary + element abstract { + db.abstract.attlist, db.abstract.info, db.all.blocks+ + } +} +div { + db.personblurb.role.attribute = attribute role { text } + db.personblurb.attlist = + db.personblurb.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personblurb.info = db._info.title.only + db.personblurb = + + ## A short description or note about a person + element personblurb { + db.personblurb.attlist, db.personblurb.info, db.para.blocks+ + } +} +div { + db.blockquote.role.attribute = attribute role { text } + db.blockquote.attlist = + db.blockquote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.blockquote.info = db._info.title.only + db.blockquote = + + ## A quotation set off from the main text + element blockquote { + db.blockquote.attlist, + db.blockquote.info, + db.attribution?, + db.all.blocks+ + } +} +div { + db.attribution.role.attribute = attribute role { text } + db.attribution.attlist = + db.attribution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.attribution = + + ## The source of a block quote or epigraph + element attribution { + db.attribution.attlist, + (db._text + | db.person + | db.personname + | db.citetitle + | db.citation)* + } +} +div { + db.bridgehead.renderas.enumeration = + + ## Render as a first-level section + "sect1" + | + ## Render as a second-level section + "sect2" + | + ## Render as a third-level section + "sect3" + | + ## Render as a fourth-level section + "sect4" + | + ## Render as a fifth-level section + "sect5" + db.bridgehead.renderas-enum.attribute = + + ## Indicates how the bridge head should be rendered + attribute renderas { db.bridgehead.renderas.enumeration }? + db.bridgehead.renderas-other.attribute = + + ## Identifies the nature of the non-standard rendering + attribute otherrenderas { xsd:NMTOKEN } + db.bridgehead.renderas-other.attributes = + + ## Indicates how the bridge head should be rendered + attribute renderas { + + ## Identifies a non-standard rendering + "other" + } + & db.bridgehead.renderas-other.attribute + db.bridgehead.renderas.attribute = + db.bridgehead.renderas-enum.attribute + | db.bridgehead.renderas-other.attributes + db.bridgehead.role.attribute = attribute role { text } + db.bridgehead.attlist = + db.bridgehead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bridgehead.renderas.attribute? + db.bridgehead = + + ## A free-floating heading + element bridgehead { db.bridgehead.attlist, db.all.inlines* } +} +div { + db.remark.role.attribute = attribute role { text } + db.remark.attlist = + db.remark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.remark = + + ## A remark (or comment) intended for presentation in a draft manuscript + element remark { db.remark.attlist, db.all.inlines* } +} +div { + db.epigraph.role.attribute = attribute role { text } + db.epigraph.attlist = + db.epigraph.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.epigraph.info = db._info.title.forbidden + db.epigraph = + + ## A short inscription at the beginning of a document or component + element epigraph { + db.epigraph.attlist, + db.epigraph.info, + db.attribution?, + (db.para.blocks | db.literallayout)+ + } +} +div { + db.footnote.role.attribute = attribute role { text } + db.footnote.label.attribute = + + ## Identifies the desired footnote mark + attribute label { xsd:NMTOKEN } + db.footnote.attlist = + db.footnote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.footnote.label.attribute? + db.footnote = + + ## A footnote + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:footnote)" + "footnote must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:epigraph)" + "epigraph must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of footnote" + ] + ] + ] + ] + element footnote { db.footnote.attlist, db.all.blocks+ } +} +div { + db.formalpara.role.attribute = attribute role { text } + db.formalpara.attlist = + db.formalpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.formalpara.info = db._info.title.onlyreq + db.formalpara = + + ## A paragraph with a title + element formalpara { + db.formalpara.attlist, + db.formalpara.info, + db.indexing.inlines*, + db.para + } +} +div { + db.para.role.attribute = attribute role { text } + db.para.attlist = + db.para.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.para.info = db._info.title.forbidden + db.para = + + ## A paragraph + element para { + db.para.attlist, + db.para.info, + (db.all.inlines | db.nopara.blocks)* + } +} +div { + db.simpara.role.attribute = attribute role { text } + db.simpara.attlist = + db.simpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.simpara.info = db._info.title.forbidden + db.simpara = + + ## A paragraph that contains only text and inline markup, no block elements + element simpara { + db.simpara.attlist, db.simpara.info, db.all.inlines* + } +} +div { + db.itemizedlist.role.attribute = attribute role { text } + db.itemizedlist.mark.attribute = + + ## Identifies the type of mark to be used on items in this list + attribute mark { xsd:NMTOKEN } + db.itemizedlist.attlist = + db.itemizedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.itemizedlist.mark.attribute? + db.itemizedlist.info = db._info.title.only + db.itemizedlist = + + ## A list in which each entry is marked with a bullet or other dingbat + element itemizedlist { + db.itemizedlist.attlist, + db.itemizedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.orderedlist.role.attribute = attribute role { text } + db.orderedlist.continuation.enumeration = + + ## Specifies that numbering should begin where the preceding list left off + "continues" + | + ## Specifies that numbering should begin again at 1 + "restarts" + db.orderedlist.continuation.attribute = + + ## Indicates how list numbering should begin relative to the immediately preceding list + attribute continuation { db.orderedlist.continuation.enumeration } + db.orderedlist.startingnumber.attribute = + + ## Specifies the initial line number + attribute startingnumber { xsd:integer } + db.orderedlist.inheritnum.enumeration = + + ## Specifies that numbering should ignore list nesting + "ignore" + | + ## Specifies that numbering should inherit from outer-level lists + "inherit" + db.orderedlist.inheritnum.attribute = + + ## Indicates whether or not item numbering should be influenced by list nesting + attribute inheritnum { db.orderedlist.inheritnum.enumeration } + db.orderedlist.numeration.enumeration = + + ## Specifies Arabic numeration (1, 2, 3, …) + "arabic" + | + ## Specifies upper-case alphabetic numeration (A, B, C, …) + "upperalpha" + | + ## Specifies lower-case alphabetic numeration (a, b, c, …) + "loweralpha" + | + ## Specifies upper-case Roman numeration (I, II, III, …) + "upperroman" + | + ## Specifies lower-case Roman numeration (i, ii, iii …) + "lowerroman" + db.orderedlist.numeration.attribute = + + ## Indicates the desired numeration + attribute numeration { db.orderedlist.numeration.enumeration } + db.orderedlist.attlist = + db.orderedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & (db.orderedlist.continuation.attribute + | db.orderedlist.startingnumber.attribute)? + & db.orderedlist.inheritnum.attribute? + & db.orderedlist.numeration.attribute? + db.orderedlist.info = db._info.title.only + db.orderedlist = + + ## A list in which each entry is marked with a sequentially incremented label + element orderedlist { + db.orderedlist.attlist, + db.orderedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.listitem.role.attribute = attribute role { text } + db.listitem.override.attribute = + + ## Specifies the keyword for the type of mark that should be used on this + ## item, instead of the mark that would be used by default + attribute override { xsd:NMTOKEN } + db.listitem.attlist = + db.listitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.listitem.override.attribute? + db.listitem.info = db._info.title.forbidden + db.listitem = + + ## A wrapper for the elements of a list item + element listitem { + db.listitem.attlist, db.listitem.info, db.all.blocks+ + } +} +div { + db.segmentedlist.role.attribute = attribute role { text } + db.segmentedlist.attlist = + db.segmentedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segmentedlist.info = db._info.title.only + db.segmentedlist = + + ## A segmented list, a list of sets of elements + element segmentedlist { + db.segmentedlist.attlist, + db.segmentedlist.info, + db.segtitle+, + db.seglistitem+ + } +} +div { + db.segtitle.role.attribute = attribute role { text } + db.segtitle.attlist = + db.segtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segtitle = + + ## The title of an element of a list item in a segmented list + element segtitle { db.segtitle.attlist, db.all.inlines* } +} +div { + db.seglistitem.role.attribute = attribute role { text } + db.seglistitem.attlist = + db.seglistitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seglistitem = + + ## A list item in a segmented list + [ + s:pattern [ + s:title [ "Cardinality of segments and titles" ] + s:rule [ + context = "db:seglistitem" + s:assert [ + test = "count(db:seg) = count(../db:segtitle)" + "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist" + ] + ] + ] + ] + element seglistitem { db.seglistitem.attlist, db.seg+ } +} +div { + db.seg.role.attribute = attribute role { text } + db.seg.attlist = + db.seg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seg = + + ## An element of a list item in a segmented list + element seg { db.seg.attlist, db.all.inlines* } +} +div { + db.simplelist.role.attribute = attribute role { text } + db.simplelist.type.enumeration = + + ## A tabular presentation in row-major order. + "horiz" + | + ## A tabular presentation in column-major order. + "vert" + | + ## An inline presentation, usually a comma-delimited list. + "inline" + db.simplelist.type.attribute = + + ## Specifies the type of list presentation + [ a:defaultValue = "vert" ] + attribute type { db.simplelist.type.enumeration } + db.simplelist.columns.attribute = + + ## Specifies the number of columns for horizontal or vertical presentation + attribute columns { xsd:integer } + db.simplelist.attlist = + db.simplelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplelist.type.attribute? + & db.simplelist.columns.attribute? + db.simplelist = + + ## An undecorated list of single words or short phrases + element simplelist { db.simplelist.attlist, db.member+ } +} +div { + db.member.role.attribute = attribute role { text } + db.member.attlist = + db.member.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.member = + + ## An element of a simple list + element member { db.member.attlist, db.all.inlines* } +} +div { + db.variablelist.role.attribute = attribute role { text } + db.variablelist.termlength.attribute = + + ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + attribute termlength { text } + db.variablelist.attlist = + db.variablelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.variablelist.termlength.attribute? + db.variablelist.info = db._info.title.only + db.variablelist = + + ## A list in which each entry is composed of a set of one or more terms and an associated description + element variablelist { + db.variablelist.attlist, + db.variablelist.info, + db.all.blocks*, + db.varlistentry+ + } +} +div { + db.varlistentry.role.attribute = attribute role { text } + db.varlistentry.attlist = + db.varlistentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varlistentry = + + ## A wrapper for a set of terms and the associated description in a variable list + element varlistentry { + db.varlistentry.attlist, db.term+, db.listitem + } +} +div { + db.term.role.attribute = attribute role { text } + db.term.attlist = + db.term.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.term = + + ## The word or phrase being defined or described in a variable list + element term { db.term.attlist, db.all.inlines* } +} +div { + db.example.role.attribute = attribute role { text } + db.example.label.attribute = db.label.attribute + db.example.width.attribute = db.width.characters.attribute + db.example.pgwide.attribute = db.pgwide.attribute + db.example.floatstyle.attribute = db.floatstyle.attribute + db.example.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.example.attlist = + db.example.role.attribute? + & db.example.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.example.label.attribute? + & db.example.floatstyle.attribute? + & (db.example.width.attribute | db.example.pgwide.attribute)? + db.example.info = db._info.title.onlyreq + db.example = + + ## A formal example, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of example" + ] + ] + ] + ] + element example { + db.example.attlist, db.example.info, db.all.blocks+, db.caption? + } +} +div { + db.informalexample.role.attribute = attribute role { text } + db.informalexample.width.attribute = db.width.characters.attribute + db.informalexample.pgwide.attribute = db.pgwide.attribute + db.informalexample.floatstyle.attribute = db.floatstyle.attribute + db.informalexample.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.informalexample.attlist = + db.informalexample.role.attribute? + & db.informalexample.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalexample.floatstyle.attribute? + & (db.informalexample.width.attribute + | db.informalexample.pgwide.attribute)? + db.informalexample.info = db._info.title.forbidden + db.informalexample = + + ## A displayed example without a title + element informalexample { + db.informalexample.attlist, + db.informalexample.info, + db.all.blocks+, + db.caption? + } +} +db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co +db.verbatim.contentmodel = + db._info.title.forbidden, (db.textobject | db.verbatim.inlines*) +div { + db.literallayout.role.attribute = attribute role { text } + db.literallayout.class.enumeration = + + ## The literal layout should be formatted with a monospaced font + "monospaced" + | + ## The literal layout should be formatted with the current font + "normal" + db.literallayout.class.attribute = + + ## Specifies the class of literal layout + attribute class { db.literallayout.class.enumeration } + db.literallayout.attlist = + db.literallayout.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.literallayout.class.attribute? + db.literallayout = + + ## A block of text in which line breaks and white space are to be reproduced faithfully + element literallayout { + db.literallayout.attlist, db.verbatim.contentmodel + } +} +div { + db.screen.role.attribute = attribute role { text } + db.screen.width.attribute = db.width.characters.attribute + db.screen.attlist = + db.screen.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.screen.width.attribute? + db.screen = + + ## Text that a user sees or might see on a computer screen + element screen { db.screen.attlist, db.verbatim.contentmodel } +} +div { + db.screenshot.role.attribute = attribute role { text } + db.screenshot.attlist = + db.screenshot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenshot.info = db._info + db.screenshot = + + ## A representation of what the user sees or might see on a computer screen + element screenshot { + db.screenshot.attlist, db.screenshot.info, db.mediaobject + } +} +div { + db.figure.role.attribute = attribute role { text } + db.figure.label.attribute = db.label.attribute + db.figure.pgwide.attribute = db.pgwide.attribute + db.figure.floatstyle.attribute = db.floatstyle.attribute + db.figure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.figure.attlist = + db.figure.role.attribute? + & db.figure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.figure.label.attribute? + & db.figure.pgwide.attribute? + & db.figure.floatstyle.attribute? + db.figure.info = db._info.title.onlyreq + db.figure = + + ## A formal figure, generally an illustration, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of figure" + ] + ] + ] + ] + element figure { + db.figure.attlist, db.figure.info, db.all.blocks+, db.caption? + } +} +div { + db.informalfigure.role.attribute = attribute role { text } + db.informalfigure.label.attribute = db.label.attribute + db.informalfigure.pgwide.attribute = db.pgwide.attribute + db.informalfigure.floatstyle.attribute = db.floatstyle.attribute + db.informalfigure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.informalfigure.attlist = + db.informalfigure.role.attribute? + & db.informalfigure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalfigure.label.attribute? + & db.informalfigure.pgwide.attribute? + & db.informalfigure.floatstyle.attribute? + db.informalfigure.info = db._info.title.forbidden + db.informalfigure = + + ## A untitled figure + element informalfigure { + db.informalfigure.attlist, + db.informalfigure.info, + db.all.blocks+, + db.caption? + } +} +db.mediaobject.content = + (db.videoobject | db.audioobject | db.imageobject | db.textobject) + | db.imageobjectco +div { + db.mediaobject.role.attribute = attribute role { text } + db.mediaobject.attlist = + db.mediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mediaobject.info = db._info.title.forbidden + db.mediaobject = + + ## A displayed media object (video, audio, image, etc.) + element mediaobject { + db.mediaobject.attlist, + db.mediaobject.info, + db.alt?, + db.mediaobject.content+, + db.caption? + } +} +div { + db.inlinemediaobject.role.attribute = attribute role { text } + db.inlinemediaobject.attlist = + db.inlinemediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlinemediaobject.info = db._info.title.forbidden + db.inlinemediaobject = + + ## An inline media object (video, audio, image, and so on) + element inlinemediaobject { + db.inlinemediaobject.attlist, + db.inlinemediaobject.info, + db.alt?, + db.mediaobject.content+ + } +} +div { + db.videoobject.role.attribute = attribute role { text } + db.videoobject.attlist = + db.videoobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.videoobject.info = db._info.title.forbidden + db.videoobject = + + ## A wrapper for video data and its associated meta-information + element videoobject { + db.videoobject.attlist, db.videoobject.info, db.videodata+ + } +} +div { + db.audioobject.role.attribute = attribute role { text } + db.audioobject.attlist = + db.audioobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.audioobject.info = db._info.title.forbidden + db.audioobject = + + ## A wrapper for audio data and its associated meta-information + element audioobject { + db.audioobject.attlist, db.audioobject.info, db.audiodata+ + } +} +db.imageobject.content = + db.imagedata+ | db.imagedata.mathml | db.imagedata.svg+ +div { + db.imageobject.role.attribute = attribute role { text } + db.imageobject.attlist = + db.imageobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobject.info = db._info.title.forbidden + db.imageobject = + + ## A wrapper for image data and its associated meta-information + element imageobject { + db.imageobject.attlist, + db.imageobject.info, + db.imageobject.content + } +} +div { + db.textobject.role.attribute = attribute role { text } + db.textobject.attlist = + db.textobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.textobject.info = db._info.title.forbidden + db.textobject = + + ## A wrapper for a text description of an object and its associated meta-information + element textobject { + db.textobject.attlist, + db.textobject.info, + (db.phrase | db.textdata | db.all.blocks+) + } +} +div { + db.videodata.role.attribute = attribute role { text } + db.videodata.align.enumeration = db.halign.enumeration + db.videodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.videodata.align.enumeration } + db.videodata.autoplay.attribute = db.autoplay.attribute + db.videodata.classid.attribute = db.classid.attribute + db.videodata.valign.enumeration = db.valign.enumeration + db.videodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.videodata.valign.enumeration } + db.videodata.width.attribute = db.width.attribute + db.videodata.depth.attribute = db.depth.attribute + db.videodata.contentwidth.attribute = db.contentwidth.attribute + db.videodata.contentdepth.attribute = db.contentdepth.attribute + db.videodata.scalefit.enumeration = db.scalefit.enumeration + db.videodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.videodata.scalefit.enumeration } + db.videodata.scale.attribute = db.scale.attribute + db.videodata.attlist = + db.videodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.videodata.align.attribute? + & db.videodata.valign.attribute? + & db.videodata.width.attribute? + & db.videodata.contentwidth.attribute? + & db.videodata.scalefit.attribute? + & db.videodata.scale.attribute? + & db.videodata.depth.attribute? + & db.videodata.contentdepth.attribute? + & db.videodata.autoplay.attribute? + & db.videodata.classid.attribute? + db.videodata.info = db._info.title.forbidden + db.videodata = + + ## Pointer to external video data + element videodata { + db.videodata.attlist, db.videodata.info, db.multimediaparam* + } +} +div { + db.audiodata.role.attribute = attribute role { text } + db.audiodata.align.enumeration = db.halign.enumeration + db.audiodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.audiodata.align.enumeration } + db.audiodata.autoplay.attribute = db.autoplay.attribute + db.audiodata.classid.attribute = db.classid.attribute + db.audiodata.contentwidth.attribute = db.contentwidth.attribute + db.audiodata.contentdepth.attribute = db.contentdepth.attribute + db.audiodata.depth.attribute = db.depth.attribute + db.audiodata.scale.attribute = db.scale.attribute + db.audiodata.scalefit.enumeration = db.scalefit.enumeration + db.audiodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.audiodata.scalefit.enumeration } + db.audiodata.valign.enumeration = db.valign.enumeration + db.audiodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.audiodata.valign.enumeration } + db.audiodata.width.attribute = db.width.attribute + db.audiodata.attlist = + db.audiodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.audiodata.align.attribute? + & db.audiodata.autoplay.attribute? + & db.audiodata.classid.attribute? + & db.audiodata.contentdepth.attribute? + & db.audiodata.contentwidth.attribute? + & db.audiodata.depth.attribute? + & db.audiodata.scale.attribute? + & db.audiodata.scalefit.attribute? + & db.audiodata.valign.attribute? + & db.audiodata.width.attribute? + db.audiodata.info = db._info.title.forbidden + db.audiodata = + + ## Pointer to external audio data + element audiodata { + db.audiodata.attlist, db.audiodata.info, db.multimediaparam* + } +} +div { + db.imagedata.role.attribute = attribute role { text } + db.imagedata.align.enumeration = db.halign.enumeration + db.imagedata.align.attribute = + + ## Specifies the (horizontal) alignment of the image data + attribute align { db.imagedata.align.enumeration } + db.imagedata.valign.enumeration = db.valign.enumeration + db.imagedata.valign.attribute = + + ## Specifies the vertical alignment of the image data + attribute valign { db.imagedata.valign.enumeration } + db.imagedata.width.attribute = db.width.attribute + db.imagedata.depth.attribute = db.depth.attribute + db.imagedata.contentwidth.attribute = db.contentwidth.attribute + db.imagedata.contentdepth.attribute = db.contentdepth.attribute + db.imagedata.scalefit.enumeration = db.scalefit.enumeration + db.imagedata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.imagedata.scalefit.enumeration } + db.imagedata.scale.attribute = db.scale.attribute + db.imagedata.attlist = + db.imagedata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.info = db._info.title.forbidden + db.imagedata = + + ## Pointer to external image data + element imagedata { + db.imagedata.attlist, db.imagedata.info, db.multimediaparam* + } +} +div { + db.textdata.role.attribute = attribute role { text } + db.textdata.encoding.attribute = + + ## Identifies the encoding of the text in the external file + attribute encoding { text } + db.textdata.attlist = + db.textdata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.textdata.encoding.attribute? + db.textdata.info = db._info.title.forbidden + db.textdata = + + ## Pointer to external text data + element textdata { db.textdata.attlist, db.textdata.info } +} +div { + db.multimediaparam.role.attribute = attribute role { text } + db.multimediaparam.name.attribute = + + ## Specifies the name of the parameter + attribute name { text } + db.multimediaparam.value.attribute = + + ## Specifies the value of the parameter + attribute value { text } + db.multimediaparam.valuetype.attribute = + + ## Specifies the type of the value of the parameter + attribute valuetype { text } + db.multimediaparam.attlist = + db.multimediaparam.role.attribute? + & db.common.attributes + & db.multimediaparam.name.attribute + & db.multimediaparam.value.attribute + & db.multimediaparam.valuetype.attribute? + db.multimediaparam = + + ## Application specific parameters for a media player + element multimediaparam { db.multimediaparam.attlist, empty } +} +div { + db.caption.role.attribute = attribute role { text } + db.caption.attlist = + db.caption.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caption.info = db._info.title.forbidden + db.caption = + + ## A caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + ] + element caption { + db.caption.attlist, db.caption.info, db.all.blocks+ + } +} +div { + db.address.role.attribute = attribute role { text } + db.address.attlist = + db.address.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.address = + + ## A real-world address, generally a postal address + element address { + db.address.attlist, + (db._text + | db.personname + | db.orgname + | db.pob + | db.street + | db.city + | db.state + | db.postcode + | db.country + | db.phone + | db.fax + | db.email + | db.uri + | db.otheraddr)* + } +} +div { + db.street.role.attribute = attribute role { text } + db.street.attlist = + db.street.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.street = + + ## A street address in an address + element street { db.street.attlist, db._text } +} +div { + db.pob.role.attribute = attribute role { text } + db.pob.attlist = + db.pob.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pob = + + ## A post office box in an address + element pob { db.pob.attlist, db._text } +} +div { + db.postcode.role.attribute = attribute role { text } + db.postcode.attlist = + db.postcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.postcode = + + ## A postal code in an address + element postcode { db.postcode.attlist, db._text } +} +div { + db.city.role.attribute = attribute role { text } + db.city.attlist = + db.city.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.city = + + ## The name of a city in an address + element city { db.city.attlist, db._text } +} +div { + db.state.role.attribute = attribute role { text } + db.state.attlist = + db.state.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.state = + + ## A state or province in an address + element state { db.state.attlist, db._text } +} +div { + db.country.role.attribute = attribute role { text } + db.country.attlist = + db.country.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.country = + + ## The name of a country + element country { db.country.attlist, db._text } +} +div { + db.phone.role.attribute = attribute role { text } + db.phone.attlist = + db.phone.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.phone = + + ## A telephone number + element phone { db.phone.attlist, db._text } +} +div { + db.fax.role.attribute = attribute role { text } + db.fax.attlist = + db.fax.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.fax = + + ## A fax number + element fax { db.fax.attlist, db._text } +} +div { + db.otheraddr.role.attribute = attribute role { text } + db.otheraddr.attlist = + db.otheraddr.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.otheraddr = + + ## Uncategorized information in address + element otheraddr { db.otheraddr.attlist, db._text } +} +div { + db.affiliation.role.attribute = attribute role { text } + db.affiliation.attlist = + db.affiliation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.affiliation = + + ## The institutional affiliation of an individual + element affiliation { + db.affiliation.attlist, + db.shortaffil?, + db.jobtitle*, + (db.org? | (db.orgname?, db.orgdiv*, db.address*)) + } +} +div { + db.shortaffil.role.attribute = attribute role { text } + db.shortaffil.attlist = + db.shortaffil.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.shortaffil = + + ## A brief description of an affiliation + element shortaffil { db.shortaffil.attlist, db._text } +} +div { + db.jobtitle.role.attribute = attribute role { text } + db.jobtitle.attlist = + db.jobtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.jobtitle = + + ## The title of an individual in an organization + element jobtitle { db.jobtitle.attlist, db._text } +} +div { + db.orgname.class.enumeration = + + ## A consortium + "consortium" + | + ## A corporation + "corporation" + | + ## An informal organization + "informal" + | + ## A non-profit organization + "nonprofit" + db.orgname.class-enum.attribute = + + ## Specifies the nature of the organization + attribute class { db.orgname.class.enumeration } + db.orgname.class-other.attributes = + + ## Specifies the nature of the organization + attribute class { + + ## Indicates a non-standard organization class + "other" + }, + + ## Identifies the non-standard nature of the organization + attribute otherclass { text } + db.orgname.class.attribute = + db.orgname.class-enum.attribute | db.orgname.class-other.attributes + db.orgname.role.attribute = attribute role { text } + db.orgname.attlist = + db.orgname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.orgname.class.attribute? + db.orgname = + + ## The name of an organization + element orgname { db.orgname.attlist, db._text } +} +div { + db.orgdiv.role.attribute = attribute role { text } + db.orgdiv.attlist = + db.orgdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.orgdiv = + + ## A division of an organization + element orgdiv { db.orgdiv.attlist, db.all.inlines* } +} +div { + db.artpagenums.role.attribute = attribute role { text } + db.artpagenums.attlist = + db.artpagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.artpagenums = + + ## The page numbers of an article as published + element artpagenums { db.artpagenums.attlist, db._text } +} +div { + db.personname.role.attribute = attribute role { text } + db.personname.attlist = + db.personname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personname = + + ## The personal name of an individual + element personname { + db.personname.attlist, + (db._text + | (db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername)+ + | (db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername)+) + } +} +db.person.author.contentmodel = + db.personname, + (db.personblurb + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.org.author.contentmodel = + db.orgname, + (db.orgdiv + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.credit.contentmodel = + db.person.author.contentmodel | db.org.author.contentmodel +div { + db.author.role.attribute = attribute role { text } + db.author.attlist = + db.author.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.author = + + ## The name of an individual author + element author { db.author.attlist, db.credit.contentmodel } +} +div { + db.authorgroup.role.attribute = attribute role { text } + db.authorgroup.attlist = + db.authorgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorgroup = + + ## Wrapper for author information when a document has multiple authors or collaborators + element authorgroup { + db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+ + } +} +div { + db.collab.role.attribute = attribute role { text } + db.collab.attlist = + db.collab.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.collab = + + ## Identifies a collaborator + element collab { + db.collab.attlist, + (db.person | db.personname | db.org | db.orgname)+, + db.affiliation* + } +} +div { + db.authorinitials.role.attribute = attribute role { text } + db.authorinitials.attlist = + db.authorinitials.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorinitials = + + ## The initials or other short identifier for an author + element authorinitials { db.authorinitials.attlist, db._text } +} +div { + db.person.role.attribute = attribute role { text } + db.person.attlist = + db.person.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.person = + + ## A person and associated metadata + element person { + db.person.attlist, + db.personname, + (db.address + | db.affiliation + | db.email + | db.uri + | db.personblurb)* + } +} +div { + db.org.role.attribute = attribute role { text } + db.org.attlist = + db.org.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.org = + + ## An organization and associated metadata + element org { + db.org.attlist, + db.orgname, + (db.address | db.affiliation | db.email | db.uri | db.orgdiv)* + } +} +div { + db.confgroup.role.attribute = attribute role { text } + db.confgroup.attlist = + db.confgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confgroup = + + ## A wrapper for document meta-information about a conference + element confgroup { + db.confgroup.attlist, + (db.confdates + | db.conftitle + | db.confnum + | db.confsponsor + | db.address)* + } +} +div { + db.confdates.role.attribute = attribute role { text } + db.confdates.attlist = + db.confdates.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confdates = + + ## The dates of a conference for which a document was written + element confdates { db.confdates.attlist, db._text } +} +div { + db.conftitle.role.attribute = attribute role { text } + db.conftitle.attlist = + db.conftitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.conftitle = + + ## The title of a conference for which a document was written + element conftitle { db.conftitle.attlist, db._text } +} +div { + db.confnum.role.attribute = attribute role { text } + db.confnum.attlist = + db.confnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confnum = + + ## An identifier, frequently numerical, associated with a conference for which a document was written + element confnum { db.confnum.attlist, db._text } +} +div { + db.confsponsor.role.attribute = attribute role { text } + db.confsponsor.attlist = + db.confsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confsponsor = + + ## The sponsor of a conference for which a document was written + element confsponsor { db.confsponsor.attlist, db._text } +} +div { + db.contractnum.role.attribute = attribute role { text } + db.contractnum.attlist = + db.contractnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractnum = + + ## The contract number of a document + element contractnum { db.contractnum.attlist, db._text } +} +div { + db.contractsponsor.role.attribute = attribute role { text } + db.contractsponsor.attlist = + db.contractsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractsponsor = + + ## The sponsor of a contract + element contractsponsor { db.contractsponsor.attlist, db._text } +} +div { + db.copyright.role.attribute = attribute role { text } + db.copyright.attlist = + db.copyright.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.copyright = + + ## Copyright information about a document + element copyright { db.copyright.attlist, db.year+, db.holder* } +} +div { + db.year.role.attribute = attribute role { text } + db.year.attlist = + db.year.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.year = + + ## The year of publication of a document + element year { db.year.attlist, db._text } +} +div { + db.holder.role.attribute = attribute role { text } + db.holder.attlist = + db.holder.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.holder = + + ## The name of the individual or organization that holds a copyright + element holder { db.holder.attlist, db._text } +} +db.cover.contentmodel = + (db.para.blocks + | db.extension.blocks + | db.list.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.synopsis.blocks +div { + db.cover.role.attribute = attribute role { text } + db.cover.attlist = + db.cover.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.cover = + + ## Additional content for the cover of a publication + element cover { db.cover.attlist, db.cover.contentmodel+ } +} +db.date.contentmodel = + xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text +div { + db.date.role.attribute = attribute role { text } + db.date.attlist = + db.date.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.date = + + ## The date of publication or revision of a document + element date { db.date.attlist, db.date.contentmodel } +} +div { + db.edition.role.attribute = attribute role { text } + db.edition.attlist = + db.edition.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.edition = + + ## The name or number of an edition of a document + element edition { db.edition.attlist, db._text } +} +div { + db.editor.role.attribute = attribute role { text } + db.editor.attlist = + db.editor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.editor = + + ## The name of the editor of a document + element editor { db.editor.attlist, db.credit.contentmodel } +} +div { + db.biblioid.role.attribute = attribute role { text } + db.biblioid.attlist = + db.biblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.biblioid = + + ## An identifier for a document + element biblioid { db.biblioid.attlist, db._text } +} +div { + db.citebiblioid.role.attribute = attribute role { text } + db.citebiblioid.attlist = + db.citebiblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.citebiblioid = + + ## A citation of a bibliographic identifier + element citebiblioid { db.citebiblioid.attlist, db._text } +} +div { + db.bibliosource.role.attribute = attribute role { text } + db.bibliosource.attlist = + db.bibliosource.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.bibliosource = + + ## The source of a document + element bibliosource { db.bibliosource.attlist, db._text } +} +div { + db.bibliorelation.type.enumeration = + + ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + "hasformat" + | + ## The described resource includes the referenced resource either physically or logically + "haspart" + | + ## The described resource has a version, edition, or adaptation, namely, the referenced resource + "hasversion" + | + ## The described resource is the same intellectual content of the referenced resource, but presented in another format + "isformatof" + | + ## The described resource is a physical or logical part of the referenced resource + "ispartof" + | + ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource + "isreferencedby" + | + ## The described resource is supplanted, displaced, or superceded by the referenced resource + "isreplacedby" + | + ## The described resource is required by the referenced resource, either physically or logically + "isrequiredby" + | + ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + "isversionof" + | + ## The described resource references, cites, or otherwise points to the referenced resource + "references" + | + ## The described resource supplants, displaces, or supersedes the referenced resource + "replaces" + | + ## The described resource requires the referenced resource to support its function, delivery, or coherence of content + "requires" + db.bibliorelation.type-enum.attribute = + + ## Identifies the type of relationship + attribute type { db.bibliorelation.type.enumeration }? + db.bibliorelation.type-other.attributes = + + ## Identifies the type of relationship + attribute type { + + ## The described resource has a non-standard relationship with the referenced resource + "othertype" + }?, + + ## A keyword that identififes the type of the non-standard relationship + attribute othertype { xsd:NMTOKEN } + db.bibliorelation.type.attribute = + db.bibliorelation.type-enum.attribute + | db.bibliorelation.type-other.attributes + db.bibliorelation.role.attribute = attribute role { text } + db.bibliorelation.attlist = + db.bibliorelation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + & db.bibliorelation.type.attribute + db.bibliorelation = + + ## The relationship of a document to another + element bibliorelation { db.bibliorelation.attlist, db._text } +} +div { + db.bibliocoverage.spacial.enumeration = + + ## The DCMI Point identifies a point in space using its geographic coordinates + "dcmipoint" + | + ## ISO 3166 Codes for the representation of names of countries + "iso3166" + | + ## The DCMI Box identifies a region of space using its geographic limits + "dcmibox" + | + ## The Getty Thesaurus of Geographic Names + "tgn" + db.bibliocoverage.spatial-enum.attribute = + + ## Specifies the type of spatial coverage + attribute spatial { db.bibliocoverage.spacial.enumeration }? + db.bibliocoverage.spatial-other.attributes = + + ## Specifies the type of spatial coverage + attribute spatial { + + ## Identifies a non-standard type of coverage + "otherspatial" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute otherspatial { xsd:NMTOKEN } + db.bibliocoverage.spatial.attribute = + db.bibliocoverage.spatial-enum.attribute + | db.bibliocoverage.spatial-other.attributes + db.bibliocoverage.temporal.enumeration = + + ## A specification of the limits of a time interval + "dcmiperiod" + | + ## W3C Encoding rules for dates and times—a profile based on ISO 8601 + "w3c-dtf" + db.bibliocoverage.temporal-enum.attribute = + + ## Specifies the type of temporal coverage + attribute temporal { db.bibliocoverage.temporal.enumeration }? + db.bibliocoverage.temporal-other.attributes = + + ## Specifies the type of temporal coverage + attribute temporal { + + ## Specifies a non-standard type of coverage + "othertemporal" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute othertemporal { xsd:NMTOKEN } + db.bibliocoverage.temporal.attribute = + db.bibliocoverage.temporal-enum.attribute + | db.bibliocoverage.temporal-other.attributes + db.bibliocoverage.coverage.attrib = + db.bibliocoverage.spatial.attribute + & db.bibliocoverage.temporal.attribute + db.bibliocoverage.role.attribute = attribute role { text } + db.bibliocoverage.attlist = + db.bibliocoverage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bibliocoverage.coverage.attrib + db.bibliocoverage = + + ## The spatial or temporal coverage of a document + element bibliocoverage { db.bibliocoverage.attlist, db._text } +} +div { + db.legalnotice.role.attribute = attribute role { text } + db.legalnotice.attlist = + db.legalnotice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.legalnotice.info = db._info.title.only + db.legalnotice = + + ## A statement of legal obligations or requirements + element legalnotice { + db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+ + } +} +div { + db.othercredit.class.enumeration = + + ## A copy editor + "copyeditor" + | + ## A graphic designer + "graphicdesigner" + | + ## A production editor + "productioneditor" + | + ## A technical editor + "technicaleditor" + | + ## A translator + "translator" + | + ## An indexer + "indexer" + | + ## A proof-reader + "proofreader" + | + ## A cover designer + "coverdesigner" + | + ## An interior designer + "interiordesigner" + | + ## An illustrator + "illustrator" + | + ## A reviewer + "reviewer" + | + ## A typesetter + "typesetter" + | + ## A converter (a persons responsible for conversion, not an application) + "conversion" + db.othercredit.class-enum.attribute = + + ## Identifies the nature of the contributor + attribute class { db.othercredit.class.enumeration }? + db.othercredit.class-other.attribute = + + ## Identifies the nature of the non-standard contribution + attribute otherclass { xsd:NMTOKEN } + db.othercredit.class-other.attributes = + + ## Identifies the nature of the contributor + attribute class { + + ## Identifies a non-standard contribution + "other" + } + & db.othercredit.class-other.attribute + db.othercredit.class.attribute = + db.othercredit.class-enum.attribute + | db.othercredit.class-other.attributes + db.othercredit.role.attribute = attribute role { text } + db.othercredit.attlist = + db.othercredit.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.othercredit.class.attribute + db.othercredit = + + ## A person or entity, other than an author or editor, credited in a document + element othercredit { + db.othercredit.attlist, db.credit.contentmodel + } +} +div { + db.pagenums.role.attribute = attribute role { text } + db.pagenums.attlist = + db.pagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pagenums = + + ## The numbers of the pages in a book, for use in a bibliographic entry + element pagenums { db.pagenums.attlist, db._text } +} +div { + db.contrib.role.attribute = attribute role { text } + db.contrib.attlist = + db.contrib.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contrib = + + ## A summary of the contributions made to a document by a credited source + element contrib { db.contrib.attlist, db.all.inlines* } +} +div { + db.honorific.role.attribute = attribute role { text } + db.honorific.attlist = + db.honorific.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.honorific = + + ## The title of a person + element honorific { db.honorific.attlist, db._text } +} +div { + db.firstname.role.attribute = attribute role { text } + db.firstname.attlist = + db.firstname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.firstname = + + ## A given name of a person + element firstname { db.firstname.attlist, db._text } +} +div { + db.givenname.role.attribute = attribute role { text } + db.givenname.attlist = + db.givenname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.givenname = + + ## The given name of a person + element givenname { db.givenname.attlist, db._text } +} +div { + db.surname.role.attribute = attribute role { text } + db.surname.attlist = + db.surname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.surname = + + ## An inherited or family name; in western cultures the last name + element surname { db.surname.attlist, db._text } +} +div { + db.lineage.role.attribute = attribute role { text } + db.lineage.attlist = + db.lineage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineage = + + ## The portion of a person's name indicating a relationship to ancestors + element lineage { db.lineage.attlist, db._text } +} +div { + db.othername.role.attribute = attribute role { text } + db.othername.attlist = + db.othername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.othername = + + ## A component of a person's name that is not a first name, surname, or lineage + element othername { db.othername.attlist, db._text } +} +div { + db.printhistory.role.attribute = attribute role { text } + db.printhistory.attlist = + db.printhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.printhistory = + + ## The printing history of a document + element printhistory { db.printhistory.attlist, db.para.blocks+ } +} +div { + db.pubdate.role.attribute = attribute role { text } + db.pubdate.attlist = + db.pubdate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pubdate = + + ## The date of publication of a document + element pubdate { db.pubdate.attlist, db.date.contentmodel } +} +div { + db.publisher.role.attribute = attribute role { text } + db.publisher.attlist = + db.publisher.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publisher = + + ## The publisher of a document + element publisher { + db.publisher.attlist, db.publishername, db.address* + } +} +div { + db.publishername.role.attribute = attribute role { text } + db.publishername.attlist = + db.publishername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publishername = + + ## The name of the publisher of a document + element publishername { db.publishername.attlist, db._text } +} +div { + db.releaseinfo.role.attribute = attribute role { text } + db.releaseinfo.attlist = + db.releaseinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.releaseinfo = + + ## Information about a particular release of a document + element releaseinfo { db.releaseinfo.attlist, db._text } +} +div { + db.revhistory.role.attribute = attribute role { text } + db.revhistory.attlist = + db.revhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revhistory.info = db._info.title.only + db.revhistory = + + ## A history of the revisions to a document + element revhistory { + db.revhistory.attlist, db.revhistory.info, db.revision+ + } +} +div { + db.revision.role.attribute = attribute role { text } + db.revision.attlist = + db.revision.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revision = + + ## An entry describing a single revision in the history of the revisions to a document + element revision { + db.revision.attlist, + db.revnumber?, + db.date, + (db.authorinitials | db.author)*, + (db.revremark | db.revdescription)? + } +} +div { + db.revnumber.role.attribute = attribute role { text } + db.revnumber.attlist = + db.revnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revnumber = + + ## A document revision number + element revnumber { db.revnumber.attlist, db._text } +} +div { + db.revremark.role.attribute = attribute role { text } + db.revremark.attlist = + db.revremark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revremark = + + ## A description of a revision to a document + element revremark { db.revremark.attlist, db._text } +} +div { + db.revdescription.role.attribute = attribute role { text } + db.revdescription.attlist = + db.revdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revdescription = + + ## A extended description of a revision to a document + element revdescription { db.revdescription.attlist, db.all.blocks* } +} +div { + db.seriesvolnums.role.attribute = attribute role { text } + db.seriesvolnums.attlist = + db.seriesvolnums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seriesvolnums = + + ## Numbers of the volumes in a series of books + element seriesvolnums { db.seriesvolnums.attlist, db._text } +} +div { + db.volumenum.role.attribute = attribute role { text } + db.volumenum.attlist = + db.volumenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.volumenum = + + ## The volume number of a document in a set (as of books in a set or articles in a journal) + element volumenum { db.volumenum.attlist, db._text } +} +div { + db.issuenum.role.attribute = attribute role { text } + db.issuenum.attlist = + db.issuenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.issuenum = + + ## The number of an issue of a journal + element issuenum { db.issuenum.attlist, db._text } +} +div { + db.meta.role.attribute = attribute role { text } + db.meta.name.attribute = + + ## A name for the metadata element + attribute name { text } + db.meta.content.attribute = + + ## The metadata content + attribute content { text } + db.meta.attlist = + db.meta.name.attribute? + & db.meta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.meta.empty = + + ## A generic metadata element + element meta { db.meta.attlist, db.meta.content.attribute, empty } + db.meta.content = + + ## A generic metadata element + element meta { + db.meta.attlist, + (text | db._any | db.all.inlines | db.all.blocks)* + } + db.meta = db.meta.empty | db.meta.content +} +div { + db.package.role.attribute = attribute role { text } + db.package.attlist = + db.package.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.package = + + ## A software or application package + element package { db.package.attlist, db._text } +} +div { + db.email.role.attribute = attribute role { text } + db.email.attlist = + db.email.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.email = + + ## An email address + element email { db.email.attlist, db._text } +} +div { + db.lineannotation.role.attribute = attribute role { text } + db.lineannotation.attlist = + db.lineannotation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineannotation = + + ## A comment on a line in a verbatim listing + element lineannotation { db.lineannotation.attlist, db._text } +} +div { + db.parameter.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + db.parameter.class.attribute = + + ## Identifies the class of parameter + attribute class { db.parameter.class.enumeration } + db.parameter.role.attribute = attribute role { text } + db.parameter.attlist = + db.parameter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.parameter.class.attribute? + db.parameter = + + ## A value or a symbolic reference to a value + element parameter { db.parameter.attlist, db._text } +} +db.replaceable.inlines = db._text | db.co +div { + db.replaceable.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + | + ## A parameter + "parameter" + db.replaceable.class.attribute = + + ## Identifies the nature of the replaceable text + attribute class { db.replaceable.class.enumeration } + db.replaceable.role.attribute = attribute role { text } + db.replaceable.attlist = + db.replaceable.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.replaceable.class.attribute? + db.replaceable = + + ## Content that may or must be replaced by the user + element replaceable { + db.replaceable.attlist, db.replaceable.inlines* + } +} +div { + db.uri.type.attribute = + + ## Identifies the type of URI specified + attribute type { text }? + db.uri.role.attribute = attribute role { text } + db.uri.attlist = + db.uri.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.uri.type.attribute + db.uri = + + ## A Uniform Resource Identifier + element uri { db.uri.attlist, db._text } +} +div { + db.abbrev.role.attribute = attribute role { text } + db.abbrev.attlist = + db.abbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abbrev = + + ## An abbreviation, especially one followed by a period + element abbrev { + db.abbrev.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.acronym.role.attribute = attribute role { text } + db.acronym.attlist = + db.acronym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.acronym = + + ## An often pronounceable word made from the initial (or selected) letters of a name or phrase + element acronym { + db.acronym.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.citation.role.attribute = attribute role { text } + db.citation.attlist = + db.citation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citation = + + ## An inline bibliographic reference to another published work + element citation { db.citation.attlist, db.all.inlines* } +} +div { + db.citerefentry.role.attribute = attribute role { text } + db.citerefentry.attlist = + db.citerefentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citerefentry = + + ## A citation to a reference page + element citerefentry { + db.citerefentry.attlist, db.refentrytitle, db.manvolnum? + } +} +div { + db.refentrytitle.role.attribute = attribute role { text } + db.refentrytitle.attlist = + db.refentrytitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refentrytitle = + + ## The title of a reference page + element refentrytitle { db.refentrytitle.attlist, db.all.inlines* } +} +div { + db.manvolnum.role.attribute = attribute role { text } + db.manvolnum.attlist = + db.manvolnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.manvolnum = + + ## A reference volume number + element manvolnum { db.manvolnum.attlist, db._text } +} +div { + db.citetitle.pubwork.enumeration = db.pubwork.enumeration + db.citetitle.pubwork-enum.attribute = + + ## Identifies the nature of the publication being cited + attribute pubwork { db.citetitle.pubwork.enumeration } + db.citetitle.pubwork-other.attribute = + + ## Identifies the nature of some other kind of publication being cited + attribute otherpubwork { xsd:NMTOKEN } + db.citetitle.pubwork-other.attributes = + + ## Identifies that this is some other kind of publication being cited + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.citetitle.pubwork-other.attribute + db.citetitle.pubwork.attribute = + db.citetitle.pubwork-enum.attribute + | db.citetitle.pubwork-other.attributes + db.citetitle.role.attribute = attribute role { text } + db.citetitle.attlist = + db.citetitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.citetitle.pubwork.attribute? + db.citetitle = + + ## The title of a cited work + element citetitle { db.citetitle.attlist, db.all.inlines* } +} +div { + db.emphasis.role.attribute = attribute role { text } + db.emphasis.attlist = + db.emphasis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.emphasis = + + ## Emphasized text + element emphasis { db.emphasis.attlist, db.all.inlines* } +} +div { + db._emphasis = + + ## A limited span of emphasized text + element emphasis { db.emphasis.attlist, db._text } +} +div { + db.foreignphrase.role.attribute = attribute role { text } + db.foreignphrase.attlist = + db.foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.foreignphrase = + + ## A word or phrase in a language other than the primary language of the document + element foreignphrase { + db.foreignphrase.attlist, (text | db.general.inlines)* + } +} +div { + db._foreignphrase.role.attribute = attribute role { text } + db._foreignphrase.attlist = + db._foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._foreignphrase = + + ## A limited word or phrase in a language other than the primary language of the document + element foreignphrase { db._foreignphrase.attlist, db._text } +} +div { + db.phrase.role.attribute = attribute role { text } + 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* } +} +div { + db._phrase = + + ## A limited span of text + element phrase { db.phrase.attlist, db._text } +} +div { + db.quote.role.attribute = attribute role { text } + db.quote.attlist = + db.quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.quote = + + ## An inline quotation + element quote { db.quote.attlist, db.all.inlines* } +} +div { + db._quote.role.attribute = attribute role { text } + db._quote.attlist = + db._quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._quote = + + ## A limited inline quotation + element quote { db._quote.attlist, db._text } +} +div { + db.subscript.role.attribute = attribute role { text } + db.subscript.attlist = + db.subscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subscript = + + ## A subscript (as in H₂O, the molecular formula for water) + element subscript { db.subscript.attlist, db._text } +} +div { + db.superscript.role.attribute = attribute role { text } + db.superscript.attlist = + db.superscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.superscript = + + ## A superscript (as in x², the mathematical notation for x multiplied by itself) + element superscript { db.superscript.attlist, db._text } +} +div { + db.trademark.class.enumeration = + + ## A copyright + "copyright" + | + ## A registered copyright + "registered" + | + ## A service + "service" + | + ## A trademark + "trade" + db.trademark.class.attribute = + + ## Identifies the class of trade mark + attribute class { db.trademark.class.enumeration } + db.trademark.role.attribute = attribute role { text } + db.trademark.attlist = + db.trademark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.trademark.class.attribute? + db.trademark = + + ## A trademark + element trademark { db.trademark.attlist, db._text } +} +div { + db.wordasword.role.attribute = attribute role { text } + db.wordasword.attlist = + db.wordasword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.wordasword = + + ## A word meant specifically as a word and not representing anything else + element wordasword { db.wordasword.attlist, db._text } +} +div { + db.footnoteref.role.attribute = attribute role { text } + db.footnoteref.label.attribute = db.label.attribute + db.footnoteref.attlist = + db.footnoteref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.footnoteref.label.attribute? + db.footnoteref = + + ## A cross reference to a footnote (a footnote mark) + [ + s:pattern [ + s:title [ "Footnote reference type constraint" ] + s:rule [ + context = "db:footnoteref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on footnoteref must point to a footnote." + ] + ] + ] + ] + element footnoteref { db.footnoteref.attlist, empty } +} +div { + db.xref.role.attribute = attribute role { text } + db.xref.xrefstyle.attribute = db.xrefstyle.attribute + db.xref.endterm.attribute = db.endterm.attribute + db.xref.attlist = + db.xref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.xref.xrefstyle.attribute? + & db.xref.endterm.attribute? + db.xref = + + ## A cross reference to another part of the document + element xref { db.xref.attlist, empty } +} +div { + db.link.role.attribute = attribute role { text } + db.link.xrefstyle.attribute = db.xrefstyle.attribute + db.link.endterm.attribute = db.endterm.attribute + db.link.attlist = + db.link.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.link.xrefstyle.attribute? + & db.link.endterm.attribute? + db.link = + + ## A hypertext link + element link { db.link.attlist, db.all.inlines* } +} +div { + db.olink.role.attribute = attribute role { text } + db.olink.xrefstyle.attribute = db.xrefstyle.attribute + db.olink.localinfo.attribute = + + ## Holds additional information that may be used by the application when resolving the link + attribute localinfo { text } + db.olink.targetdoc.attribute = + + ## Specifies the URI of the document in which the link target appears + attribute targetdoc { xsd:anyURI } + db.olink.targetptr.attribute = + + ## Specifies the location of the link target in the document + attribute targetptr { text } + db.olink.type.attribute = + + ## Identifies application-specific customization of the link behavior + attribute type { text } + db.olink.attlist = + db.common.attributes + & db.olink.targetdoc.attribute? + & db.olink.role.attribute? + & db.olink.xrefstyle.attribute? + & db.olink.localinfo.attribute? + & db.olink.targetptr.attribute? + & db.olink.type.attribute? + db.olink = + + ## A link that addresses its target indirectly + element olink { db.olink.attlist, db.all.inlines* } +} +div { + db.anchor.role.attribute = attribute role { text } + db.anchor.attlist = + db.anchor.role.attribute? & db.common.idreq.attributes + db.anchor = + + ## A spot in the document + element anchor { db.anchor.attlist, empty } +} +div { + db.alt.role.attribute = attribute role { text } + db.alt.attlist = db.alt.role.attribute? & db.common.attributes + db.alt = + + ## A text-only annotation, often used for accessibility + element alt { db.alt.attlist, (text | db.inlinemediaobject)* } +} +div { + db.formalgroup.fgstyle.attribute = + + ## Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + attribute fgstyle { text } + db.formalgroup.role.attribute = attribute role { text } + db.formalgroup.pgwide.attribute = db.pgwide.attribute + db.formalgroup.floatstyle.attribute = db.floatstyle.attribute + db.formalgroup.attlist = + db.formalgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.formalgroup.floatstyle.attribute? + & db.formalgroup.pgwide.attribute? + & db.formalgroup.fgstyle.attribute? + db.formalgroup.info = db._info.title.onlyreq + db.formalgroup = + + ## A group of formal objects, for example subfigures + element formalgroup { + db.formalgroup.attlist, + db.formalgroup.info, + (db.figure+ | db.table+ | db.example+ | db.equation+) + } +} +db.status.attribute = + + ## Identifies the editorial or publication status of the element on which it occurs + attribute status { text } +db.toplevel.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | (db.sect1+, db.simplesect*) + | db.refentry+ +db.toplevel.blocks.or.sections = + (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections +db.recursive.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | db.refentry+ +db.recursive.blocks.or.sections = + (db.all.blocks+, db.recursive.sections?) | db.recursive.sections +db.divisions = db.part | db.reference +db.components = + db.dedication + | db.acknowledgements + | db.preface + | db.chapter + | db.appendix + | db.article + | db.colophon +db.navigation.components = + notAllowed | db.glossary | db.bibliography | db.index | db.toc +db.component.contentmodel = + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* +db.setindex.components = notAllowed | db.setindex +db.toc.components = notAllowed | db.toc +db.set.components = db.set | db.book | db.article +div { + db.set.status.attribute = db.status.attribute + db.set.role.attribute = attribute role { text } + db.set.attlist = + db.set.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.set.status.attribute? + db.set.info = db._info.title.req + db.set = + + ## A collection of books + element set { + db.set.attlist, + db.set.info, + db.toc.components?, + db.set.components+, + db.setindex.components? + } +} +db.book.components = + (db.navigation.components | db.components | db.divisions)* | db.topic* +div { + db.book.status.attribute = db.status.attribute + db.book.role.attribute = attribute role { text } + db.book.attlist = + db.book.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.book.status.attribute? + db.book.info = db._info + db.book = + + ## A book + element book { db.book.attlist, db.book.info, db.book.components } +} +div { + db.dedication.status.attribute = db.status.attribute + db.dedication.role.attribute = attribute role { text } + db.dedication.attlist = + db.dedication.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.dedication.status.attribute? + db.dedication.info = db._info + db.dedication = + + ## The dedication of a book or other component + element dedication { + db.dedication.attlist, db.dedication.info, db.all.blocks+ + } +} +div { + db.acknowledgements.status.attribute = db.status.attribute + db.acknowledgements.role.attribute = attribute role { text } + db.acknowledgements.attlist = + db.acknowledgements.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.acknowledgements.status.attribute? + db.acknowledgements.info = db._info + db.acknowledgements = + + ## Acknowledgements of a book or other component + element acknowledgements { + db.acknowledgements.attlist, + db.acknowledgements.info, + db.all.blocks+ + } +} +div { + db.colophon.status.attribute = db.status.attribute + db.colophon.role.attribute = attribute role { text } + db.colophon.attlist = + db.colophon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.colophon.status.attribute? + db.colophon.info = db._info + db.colophon = + + ## Text at the back of a book describing facts about its production + element colophon { + db.colophon.attlist, + db.colophon.info, + ((db.all.blocks+, db.simplesect*) + | (db.all.blocks*, db.simplesect+)) + } +} +db.appendix.contentmodel = db.component.contentmodel | db.topic+ +div { + db.appendix.status.attribute = db.status.attribute + db.appendix.role.attribute = attribute role { text } + db.appendix.attlist = + db.appendix.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.appendix.status.attribute? + db.appendix.info = db._info.title.req + db.appendix = + + ## An appendix in a book or article + element appendix { + db.appendix.attlist, db.appendix.info, db.appendix.contentmodel? + } +} +db.chapter.contentmodel = db.component.contentmodel | db.topic+ +div { + db.chapter.status.attribute = db.status.attribute + db.chapter.role.attribute = attribute role { text } + db.chapter.attlist = + db.chapter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.chapter.status.attribute? + db.chapter.info = db._info.title.req + db.chapter = + + ## A chapter, as of a book + element chapter { + db.chapter.attlist, db.chapter.info, db.chapter.contentmodel? + } +} +db.part.components = + (db.navigation.components | db.components) + | (db.refentry | db.reference) +db.part.contentmodel = db.part.components+ | db.topic+ +div { + db.part.status.attribute = db.status.attribute + db.part.role.attribute = attribute role { text } + db.part.attlist = + db.part.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.part.status.attribute? + db.part.info = db._info.title.req + db.part = + + ## A division in a book + element part { + db.part.attlist, + db.part.info, + db.partintro?, + db.part.contentmodel? + } +} +div { + db.preface.status.attribute = db.status.attribute + db.preface.role.attribute = attribute role { text } + db.preface.attlist = + db.preface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.preface.status.attribute? + db.preface.info = db._info.title.req + db.preface = + + ## Introductory matter preceding the first chapter of a book + element preface { + db.preface.attlist, db.preface.info, db.component.contentmodel? + } +} +div { + db.partintro.status.attribute = db.status.attribute + db.partintro.role.attribute = attribute role { text } + db.partintro.attlist = + db.partintro.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.partintro.status.attribute? + db.partintro.info = db._info + db.partintro = + + ## An introduction to the contents of a part + element partintro { + db.partintro.attlist, + db.partintro.info, + db.toplevel.blocks.or.sections? + } +} +div { + db.section.status.attribute = db.status.attribute + db.section.class.enumeration = + + ## A section of legal obligations or requirements + "legal" + db.section.class-enum.attribute = + + ## Identifies the nature of the section + attribute class { db.section.class.enumeration } + db.section.class-other.attribute = + + ## Identifies a non-standard section class + attribute otherclass { xsd:NMTOKEN } + db.section.class-other.attributes = + + ## Indicates that a non-standard section class is applied + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.section.class-other.attribute + db.section.class.attribute = + db.section.class-enum.attribute | db.section.class-other.attributes + db.section.role.attribute = attribute role { text } + db.section.attlist = + db.section.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.section.status.attribute? + & db.section.class.attribute? + db.section.info = db._info.title.req + db.section = + + ## A recursive section + element section { + db.section.attlist, + db.section.info, + db.navigation.components*, + db.recursive.blocks.or.sections?, + db.navigation.components* + } +} +div { + db.simplesect.status.attribute = db.status.attribute + db.simplesect.role.attribute = attribute role { text } + db.simplesect.attlist = + db.simplesect.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.simplesect.status.attribute? + db.simplesect.info = db._info.title.req + db.simplesect = + + ## A section of a document with no subdivisions + element simplesect { + db.simplesect.attlist, db.simplesect.info, db.all.blocks* + } +} +db.article.components = db.toplevel.sections +db.article.navcomponents = + db.navigation.components + | db.acknowledgements + | db.dedication + | db.appendix + | db.colophon +div { + db.article.status.attribute = db.status.attribute + db.article.class.enumeration = + + ## A collection of frequently asked questions. + "faq" + | + ## An article in a journal or other periodical. + "journalarticle" + | + ## A description of a product. + "productsheet" + | + ## A specification. + "specification" + | + ## A technical report. + "techreport" + | + ## A white paper. + "whitepaper" + db.article.class-enum.attribute = + + ## Identifies the nature of the article + attribute class { db.article.class.enumeration } + db.article.class-other.attribute = + + ## Identifies the nature of the non-standard article + attribute otherclass { xsd:NMTOKEN } + db.article.class-other.attributes = + + ## Identifies the nature of the article + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.article.class-other.attribute + db.article.class.attribute = + db.article.class-enum.attribute | db.article.class-other.attributes + db.article.role.attribute = attribute role { text } + db.article.attlist = + db.article.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.article.status.attribute? + & db.article.class.attribute? + db.article.info = db._info.title.req + db.article = + + ## An article + element article { + db.article.attlist, + db.article.info, + db.article.navcomponents*, + ((db.all.blocks+, db.article.components?) + | db.article.components), + db.article.navcomponents* + } +} +db.annotations.attribute = + + ## Identifies one or more annotations that apply to this element + attribute annotations { text } +div { + db.annotation.role.attribute = attribute role { text } + db.annotation.annotates.attribute = + + ## Identifies one or more elements to which this annotation applies + attribute annotates { text } + db.annotation.attlist = + db.annotation.role.attribute? + & db.annotation.annotates.attribute? + & db.common.attributes + db.annotation.info = db._info.title.only + db.annotation = + + ## An annotation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:annotation" + s:assert [ + test = "not(.//db:annotation)" + "annotation must not occur among the children or descendants of annotation" + ] + ] + ] + ] + element annotation { + db.annotation.attlist, db.annotation.info, db.all.blocks+ + } +} +db.xlink.extended.type.attribute = + + ## Identifies the XLink extended link type + [ + s:pattern [ + s:title [ "XLink extended placement" ] + s:rule [ + context = "*[@xlink:type='extended']" + s:assert [ + test = "not(parent::*[@xlink:type='extended'])" + "An XLink extended type element may not occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink extended link type + "extended" + } +db.xlink.locator.type.attribute = + + ## Identifies the XLink locator link type + [ + s:pattern [ + s:title [ "XLink locator placement" ] + s:rule [ + context = "*[@xlink:type='locator']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink locator type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink locator link type + "locator" + } +db.xlink.arc.type.attribute = + + ## Identifies the XLink arc link type + [ + s:pattern [ + s:title [ "XLink arc placement" ] + s:rule [ + context = "*[@xlink:type='arc']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink arc type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink arc link type + "arc" + } +db.xlink.resource.type.attribute = + + ## Identifies the XLink resource link type + [ + s:pattern [ + s:title [ "XLink resource placement" ] + s:rule [ + context = "*[@xlink:type='resource']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink resource type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink resource link type + "resource" + } +db.xlink.title.type.attribute = + + ## Identifies the XLink title link type + [ + s:pattern [ + s:title [ "XLink title placement" ] + s:rule [ + context = "*[@xlink:type='title']" + s:assert [ + test = + "parent::*[@xlink:type='extended'] or parent::*[@xlink:type='locator'] or parent::*[@xlink:type='arc']" + "An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink title link type + "title" + } +db.xlink.extended.link.attributes = + db.xlink.extended.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? +db.xlink.locator.link.attributes = + db.xlink.locator.type.attribute + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.arc.link.attributes = + db.xlink.arc.type.attribute + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? +db.xlink.resource.link.attributes = + db.xlink.resource.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.title.link.attributes = db.xlink.title.type.attribute +db.xlink.from.attribute = + + ## Specifies the XLink traversal-from + attribute xlink:from { xsd:NMTOKEN } +db.xlink.label.attribute = + + ## Specifies the XLink label + attribute xlink:label { xsd:NMTOKEN } +db.xlink.to.attribute = + + ## Specifies the XLink traversal-to + attribute xlink:to { xsd:NMTOKEN } +div { + db.extendedlink.role.attribute = attribute role { text } + db.extendedlink.attlist = + db.extendedlink.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "extended" ] + attribute xlink:type { + + ## An XLink extended link + "extended" + }? + & db.xlink.role.attribute? + & db.xlink.title.attribute? + db.extendedlink = + + ## An XLink extended link + element extendedlink { + db.extendedlink.attlist, (db.locator | db.arc | db.link)+ + } +} +div { + db.locator.role.attribute = attribute role { text } + db.locator.attlist = + db.locator.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "locator" ] + attribute xlink:type { + + ## An XLink locator link + "locator" + }? + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? + db.locator = + + ## An XLink locator in an extendedlink + element locator { db.locator.attlist, empty } +} +div { + db.arc.role.attribute = attribute role { text } + db.arc.attlist = + db.arc.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "arc" ] + attribute xlink:type { + + ## An XLink arc link + "arc" + }? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? + db.arc = + + ## An XLink arc in an extendedlink + element arc { db.arc.attlist, empty } +} +db.sect1.sections = + ((db.sect2+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect1.status.attribute = db.status.attribute + db.sect1.class.attribute = db.section.class.attribute + db.sect1.role.attribute = attribute role { text } + db.sect1.attlist = + db.sect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect1.status.attribute? + & db.sect1.class.attribute? + db.sect1.info = db._info.title.req + db.sect1 = + + ## A top-level section of document + element sect1 { + db.sect1.attlist, + db.sect1.info, + db.navigation.components*, + ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections)?, + db.navigation.components* + } +} +db.sect2.sections = + ((db.sect3+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect2.status.attribute = db.status.attribute + db.sect2.class.attribute = db.section.class.attribute + db.sect2.role.attribute = attribute role { text } + db.sect2.attlist = + db.sect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect2.status.attribute? + & db.sect2.class.attribute? + db.sect2.info = db._info.title.req + db.sect2 = + + ## A subsection within a sect1 + element sect2 { + db.sect2.attlist, + db.sect2.info, + db.navigation.components*, + ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections)?, + db.navigation.components* + } +} +db.sect3.sections = + ((db.sect4+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect3.status.attribute = db.status.attribute + db.sect3.class.attribute = db.section.class.attribute + db.sect3.role.attribute = attribute role { text } + db.sect3.attlist = + db.sect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect3.status.attribute? + & db.sect3.class.attribute? + db.sect3.info = db._info.title.req + db.sect3 = + + ## A subsection within a sect2 + element sect3 { + db.sect3.attlist, + db.sect3.info, + db.navigation.components*, + ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections)?, + db.navigation.components* + } +} +db.sect4.sections = + ((db.sect5+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect4.status.attribute = db.status.attribute + db.sect4.class.attribute = db.section.class.attribute + db.sect4.role.attribute = attribute role { text } + db.sect4.attlist = + db.sect4.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect4.status.attribute? + & db.sect4.class.attribute? + db.sect4.info = db._info.title.req + db.sect4 = + + ## A subsection within a sect3 + element sect4 { + db.sect4.attlist, + db.sect4.info, + db.navigation.components*, + ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections)?, + db.navigation.components* + } +} +db.sect5.sections = db.simplesect+ | db.refentry+ +div { + db.sect5.status.attribute = db.status.attribute + db.sect5.class.attribute = db.section.class.attribute + db.sect5.role.attribute = attribute role { text } + db.sect5.attlist = + db.sect5.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect5.status.attribute? + & db.sect5.class.attribute? + db.sect5.info = db._info.title.req + db.sect5 = + + ## A subsection within a sect4 + element sect5 { + db.sect5.attlist, + db.sect5.info, + db.navigation.components*, + ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections)?, + db.navigation.components* + } +} +db.toplevel.refsection = db.refsection+ | db.refsect1+ +db.secondlevel.refsection = db.refsection+ | db.refsect2+ +db.reference.components = db.refentry +div { + db.reference.status.attribute = db.status.attribute + db.reference.role.attribute = attribute role { text } + db.reference.attlist = + db.reference.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.reference.status.attribute? + & db.label.attribute? + db.reference.info = db._info.title.req + db.reference = + + ## A collection of reference entries + element reference { + db.reference.attlist, + db.reference.info, + db.partintro?, + db.reference.components* + } +} +div { + db.refentry.status.attribute = db.status.attribute + db.refentry.role.attribute = attribute role { text } + db.refentry.attlist = + db.refentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refentry.status.attribute? + & db.label.attribute? + db.refentry.info = db._info.title.forbidden + db.refentry = + + ## A reference page (originally a UNIX man-style reference page) + element refentry { + db.refentry.attlist, + db.indexterm*, + db.refentry.info, + db.refmeta?, + db.refnamediv+, + db.refsynopsisdiv?, + db.toplevel.refsection + } +} +div { + db.refmeta.role.attribute = attribute role { text } + db.refmeta.attlist = + db.refmeta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refmeta = + + ## Meta-information for a reference entry + element refmeta { + db.refmeta.attlist, + db.indexterm*, + db.refentrytitle, + db.manvolnum?, + db.refmiscinfo*, + db.indexterm* + } +} +db.refmiscinfo.class.enumeration = + + ## The name of the software product or component to which this topic applies + "source" + | + ## The version of the software product or component to which this topic applies + "version" + | + ## The section title of the reference page (e.g., User Commands) + "manual" + | + ## The section title of the reference page (believed synonymous with "manual" but in wide use) + "sectdesc" + | + ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + "software" +db.refmiscinfo.class-enum.attribute = + + ## Identifies the kind of miscellaneous information + attribute class { db.refmiscinfo.class.enumeration }? +db.refmiscinfo.class-other.attribute = + + ## Identifies the nature of non-standard miscellaneous information + attribute otherclass { text } +db.refmiscinfo.class-other.attributes = + + ## Identifies the kind of miscellaneious information + attribute class { + + ## Indicates that the information is some 'other' kind. + "other" + } + & db.refmiscinfo.class-other.attribute +db.refmiscinfo.class.attribute = + db.refmiscinfo.class-enum.attribute + | db.refmiscinfo.class-other.attributes +div { + db.refmiscinfo.role.attribute = attribute role { text } + db.refmiscinfo.attlist = + db.refmiscinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refmiscinfo.class.attribute? + db.refmiscinfo = + + ## Meta-information for a reference entry other than the title and volume number + element refmiscinfo { db.refmiscinfo.attlist, db._text } +} +div { + db.refnamediv.role.attribute = attribute role { text } + db.refnamediv.attlist = + db.refnamediv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refnamediv = + + ## The name, purpose, and classification of a reference page + element refnamediv { + db.refnamediv.attlist, + db.refdescriptor?, + db.refname+, + db.refpurpose, + db.refclass* + } +} +div { + db.refdescriptor.role.attribute = attribute role { text } + db.refdescriptor.attlist = + db.refdescriptor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refdescriptor = + + ## A description of the topic of a reference page + element refdescriptor { db.refdescriptor.attlist, db.all.inlines* } +} +div { + db.refname.role.attribute = attribute role { text } + db.refname.attlist = + db.refname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refname = + + ## The name of (one of) the subject(s) of a reference page + element refname { db.refname.attlist, db.all.inlines* } +} +div { + db.refpurpose.role.attribute = attribute role { text } + db.refpurpose.attlist = + db.refpurpose.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refpurpose = + + ## A short (one sentence) synopsis of the topic of a reference page + element refpurpose { db.refpurpose.attlist, db.all.inlines* } +} +div { + db.refclass.role.attribute = attribute role { text } + db.refclass.attlist = + db.refclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refclass = + + ## The scope or other indication of applicability of a reference entry + element refclass { db.refclass.attlist, (text | db.application)* } +} +div { + db.refsynopsisdiv.role.attribute = attribute role { text } + db.refsynopsisdiv.attlist = + db.refsynopsisdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refsynopsisdiv.info = db._info + db.refsynopsisdiv = + + ## A syntactic synopsis of the subject of the reference page + element refsynopsisdiv { + db.refsynopsisdiv.attlist, + db.refsynopsisdiv.info, + ((db.all.blocks+, db.secondlevel.refsection?) + | db.secondlevel.refsection) + } +} +div { + db.refsection.status.attribute = db.status.attribute + db.refsection.role.attribute = attribute role { text } + db.refsection.attlist = + db.refsection.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refsection.status.attribute? + & db.label.attribute? + db.refsection.info = db._info.title.req + db.refsection = + + ## A recursive section in a refentry + element refsection { + db.refsection.attlist, + db.refsection.info, + ((db.all.blocks+, db.refsection*) | db.refsection+) + } +} +db.refsect1.sections = db.refsect2+ +div { + db.refsect1.status.attribute = db.status.attribute + db.refsect1.role.attribute = attribute role { text } + db.refsect1.attlist = + db.refsect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect1.status.attribute? + db.refsect1.info = db._info.title.req + db.refsect1 = + + ## A major subsection of a reference entry + element refsect1 { + db.refsect1.attlist, + db.refsect1.info, + ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections) + } +} +db.refsect2.sections = db.refsect3+ +div { + db.refsect2.status.attribute = db.status.attribute + db.refsect2.role.attribute = attribute role { text } + db.refsect2.attlist = + db.refsect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect2.status.attribute? + db.refsect2.info = db._info.title.req + db.refsect2 = + + ## A subsection of a refsect1 + element refsect2 { + db.refsect2.attlist, + db.refsect2.info, + ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections) + } +} +div { + db.refsect3.status.attribute = db.status.attribute + db.refsect3.role.attribute = attribute role { text } + db.refsect3.attlist = + db.refsect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect3.status.attribute? + db.refsect3.info = db._info.title.req + db.refsect3 = + + ## A subsection of a refsect2 + element refsect3 { + db.refsect3.attlist, db.refsect3.info, db.all.blocks+ + } +} +db.glossary.inlines = + db.firstterm | db.glossterm | db._firstterm | db._glossterm +db.baseform.attribute = + + ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + attribute baseform { text }? +div { + db.glosslist.role.attribute = attribute role { text } + db.glosslist.attlist = + db.glosslist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.glosslist.info = db._info.title.only + db.glosslist = + + ## A wrapper for a list of glossary entries + element glosslist { + db.glosslist.attlist, + db.glosslist.info?, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.glossentry.role.attribute = attribute role { text } + db.glossentry.sortas.attribute = + + ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + attribute sortas { text } + db.glossentry.attlist = + db.glossentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossentry.sortas.attribute? + db.glossentry = + + ## An entry in a glossary or glosslist + element glossentry { + db.glossentry.attlist, + db.glossterm, + db.acronym?, + db.abbrev?, + db.indexterm*, + (db.glosssee | db.glossdef+) + } +} +div { + db.glossdef.role.attribute = attribute role { text } + db.glossdef.subject.attribute = + + ## Specifies a list of keywords for the definition + attribute subject { text } + db.glossdef.attlist = + db.glossdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossdef.subject.attribute? + db.glossdef = + + ## A definition in a glossentry + element glossdef { + db.glossdef.attlist, db.all.blocks+, db.glossseealso* + } +} +div { + db.glosssee.role.attribute = attribute role { text } + db.glosssee.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glosssee.attlist = + db.glosssee.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glosssee.otherterm.attribute? + db.glosssee = + + ## A cross-reference from one glossentry + ## to another + [ + s:pattern [ + s:title [ "Glosssary 'see' type constraint" ] + s:rule [ + context = "db:glosssee[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glosssee must point to a glossentry." + ] + ] + ] + ] + element glosssee { db.glosssee.attlist, db.all.inlines* } +} +div { + db.glossseealso.role.attribute = attribute role { text } + db.glossseealso.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glossseealso.attlist = + db.glossseealso.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossseealso.otherterm.attribute? + db.glossseealso = + + ## A cross-reference from one glossentry to another + [ + s:pattern [ + s:title [ "Glossary 'seealso' type constraint" ] + s:rule [ + context = "db:glossseealso[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glossseealso must point to a glossentry." + ] + ] + ] + ] + element glossseealso { db.glossseealso.attlist, db.all.inlines* } +} +div { + db.firstterm.role.attribute = attribute role { text } + db.firstterm.attlist = + db.firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.firstterm = + + ## The first occurrence of a term + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db.firstterm.attlist, db.all.inlines* } +} +div { + db._firstterm.role.attribute = attribute role { text } + db._firstterm.attlist = + db._firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._firstterm = + + ## The first occurrence of a term, with limited content + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db._firstterm.attlist, db._text } +} +div { + db.glossterm.role.attribute = attribute role { text } + db.glossterm.attlist = + db.glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db.glossterm.attlist, db.all.inlines* } +} +div { + db._glossterm.role.attribute = attribute role { text } + db._glossterm.attlist = + db._glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db._glossterm.attlist, db._text } +} +div { + db.glossary.status.attribute = db.status.attribute + db.glossary.role.attribute = attribute role { text } + db.glossary.attlist = + db.glossary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossary.status.attribute? + db.glossary.info = db._info + db.glossary = + + ## A glossary + element glossary { + db.glossary.attlist, + db.glossary.info, + db.all.blocks*, + (db.glossdiv* | db.glossentry*), + db.bibliography? + } +} +div { + db.glossdiv.status.attribute = db.status.attribute + db.glossdiv.role.attribute = attribute role { text } + db.glossdiv.attlist = + db.glossdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossdiv.status.attribute? + db.glossdiv.info = db._info.title.req + db.glossdiv = + + ## A division in a glossary + element glossdiv { + db.glossdiv.attlist, + db.glossdiv.info, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.termdef.role.attribute = attribute role { text } + db.termdef.attlist = + db.termdef.role.attribute? + & db.glossentry.sortas.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.termdef = + + ## An inline definition of a term + [ + s:pattern [ + s:title [ "Glossary term definition constraint" ] + s:rule [ + context = "db:termdef" + s:assert [ + test = "count(db:firstterm) = 1" + "A termdef must contain exactly one firstterm" + ] + ] + ] + ] + element termdef { db.termdef.attlist, db.all.inlines* } +} +db.relation.attribute = + + ## Identifies the relationship between the bibliographic elemnts + attribute relation { text } +div { + db.biblioentry.role.attribute = attribute role { text } + db.biblioentry.pubwork.attribute = db.biblio.pubwork.attribute + db.biblioentry.attlist = + db.biblioentry.role.attribute? + & db.biblioentry.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.biblioentry = + + ## A raw entry in a bibliography + element biblioentry { + db.biblioentry.attlist, db.bibliographic.elements+ + } +} +div { + db.bibliomixed.role.attribute = attribute role { text } + db.bibliomixed.pubwork.attribute = db.biblio.pubwork.attribute + db.bibliomixed.attlist = + db.bibliomixed.role.attribute? + & db.bibliomixed.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomixed = + + ## A cooked entry in a bibliography + element bibliomixed { + db.bibliomixed.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.biblioset.relation.attribute = db.relation.attribute + db.biblioset.role.attribute = attribute role { text } + db.biblioset.attlist = + db.biblioset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblioset.relation.attribute? + db.biblioset = + + ## A raw container for related bibliographic information + element biblioset { + db.biblioset.attlist, db.bibliographic.elements+ + } +} +div { + 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.bibliomset = + + ## A cooked container for related bibliographic information + element bibliomset { + db.bibliomset.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.bibliomisc.role.attribute = attribute role { text } + db.bibliomisc.attlist = + db.bibliomisc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomisc = + + ## Untyped bibliographic information + element bibliomisc { db.bibliomisc.attlist, db._text } +} +div { + db.bibliography.status.attrib = db.status.attribute + db.bibliography.role.attribute = attribute role { text } + db.bibliography.attlist = + db.bibliography.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliography.status.attrib? + db.bibliography.info = db._info + db.bibliography = + + ## A bibliography + element bibliography { + db.bibliography.attlist, + db.bibliography.info, + db.all.blocks*, + (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+) + } +} +div { + db.bibliodiv.status.attrib = db.status.attribute + db.bibliodiv.role.attribute = attribute role { text } + db.bibliodiv.attlist = + db.bibliodiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliodiv.status.attrib? + db.bibliodiv.info = db._info.title.req + db.bibliodiv = + + ## A section of a bibliography + element bibliodiv { + db.bibliodiv.attlist, + db.bibliodiv.info, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.bibliolist.role.attribute = attribute role { text } + db.bibliolist.attlist = + db.bibliolist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliolist.info = db._info.title.only + db.bibliolist = + + ## A wrapper for a list of bibliography entries + element bibliolist { + db.bibliolist.attlist, + db.bibliolist.info?, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.biblioref.role.attribute = attribute role { text } + db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute + db.biblioref.endterm.attribute = db.endterm.attribute + db.biblioref.units.attribute = + + ## The units (for example, pages) used to identify the beginning and ending of a reference. + attribute units { xsd:token } + db.biblioref.begin.attribute = + + ## Identifies the beginning of a reference; the location within the work that is being referenced. + attribute begin { xsd:token } + db.biblioref.end.attribute = + + ## Identifies the end of a reference. + attribute end { xsd:token } + db.biblioref.attlist = + db.biblioref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.biblioref.xrefstyle.attribute? + & db.biblioref.endterm.attribute? + & db.biblioref.units.attribute? + & db.biblioref.begin.attribute? + & db.biblioref.end.attribute? + db.biblioref = + + ## A cross-reference to a bibliographic entry + element biblioref { db.biblioref.attlist, empty } +} +db.significance.enumeration = + + ## Normal + "normal" + | + ## Preferred + "preferred" +db.significance.attribute = + + ## Specifies the significance of the term + attribute significance { db.significance.enumeration } +db.zone.attribute = + + ## Specifies the IDs of the elements to which this term applies + attribute zone { xsd:IDREFS } +db.indexterm.pagenum.attribute = + + ## Indicates the page on which this index term occurs in some version of the printed document + attribute pagenum { text } +db.scope.enumeration = + + ## All indexes + "all" + | + ## The global index (as for a combined index of a set of books) + "global" + | + ## The local index (the index for this document only) + "local" +db.scope.attribute = + + ## Specifies the scope of the index term + attribute scope { db.scope.enumeration } +db.sortas.attribute = + + ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used + attribute sortas { text } +db.index.type.attribute = + + ## Specifies the target index for this term + attribute type { text } +div { + db.itermset.role.attribute = attribute role { text } + db.itermset.attlist = + db.itermset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.itermset = + + ## A set of index terms in the meta-information of a document + element itermset { db.itermset.attlist, db.indexterm.singular+ } +} +db.indexterm.contentmodel = + (db.primary, + (db.secondary, + ((db.tertiary, (db.see | db.seealso+)?)? + | (db.see | db.seealso+)?)?)?)?, + (db.see | db.seealso+)? +div { + db.indexterm.singular.role.attribute = attribute role { text } + db.indexterm.singular.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## A singular index term + "singular" + } + db.indexterm.singular.attlist = + db.indexterm.singular.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.singular.class.attribute? + db.indexterm.singular = + + ## A wrapper for an indexed term + element indexterm { + db.indexterm.singular.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.startofrange.role.attribute = attribute role { text } + db.indexterm.startofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The start of a range + "startofrange" + } + db.indexterm.startofrange.attlist = + db.indexterm.startofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.startofrange.class.attribute + db.indexterm.startofrange = + + ## A wrapper for an indexed term that covers a range + element indexterm { + db.indexterm.startofrange.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.endofrange.role.attribute = attribute role { text } + db.indexterm.endofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The end of a range + "endofrange" + } + db.indexterm.endofrange.startref.attribute = + + ## Points to the start of the range + attribute startref { xsd:IDREF } + db.indexterm.endofrange.attlist = + db.indexterm.endofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.indexterm.endofrange.class.attribute + & db.indexterm.endofrange.startref.attribute + db.indexterm.endofrange = + + ## Identifies the end of a range associated with an indexed term + [ + s:pattern [ + s:title [ "Indexterm 'startref' type constraint" ] + s:rule [ + context = "db:indexterm[@startref]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@startref]) = 'indexterm' and namespace-uri(//*[@xml:id=current()/@startref]) = 'http://docbook.org/ns/docbook'" + "@startref on indexterm must point to an indexterm." + ] + s:assert [ + test = + "//*[@xml:id=current()/@startref]/@class='startofrange'" + "@startref on indexterm must point to a startofrange indexterm." + ] + ] + ] + ] + element indexterm { db.indexterm.endofrange.attlist, empty } +} +div { + db.indexterm = + db.indexterm.singular + | db.indexterm.startofrange + | db.indexterm.endofrange +} +div { + db.primary.role.attribute = attribute role { text } + db.primary.attlist = + db.primary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.primary = + + ## The primary word or phrase under which an index term should be sorted + element primary { db.primary.attlist, db.all.inlines* } +} +div { + db.secondary.role.attribute = attribute role { text } + db.secondary.attlist = + db.secondary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.secondary = + + ## A secondary word or phrase in an index term + element secondary { db.secondary.attlist, db.all.inlines* } +} +div { + db.tertiary.role.attribute = attribute role { text } + db.tertiary.attlist = + db.tertiary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.tertiary = + + ## A tertiary word or phrase in an index term + element tertiary { db.tertiary.attlist, db.all.inlines* } +} +div { + db.see.role.attribute = attribute role { text } + db.see.class.attribute = + + ## Identifies the class of 'see' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.see.attlist = + db.see.role.attribute? + & db.see.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.see = + + ## Part of an index term directing the reader instead to another entry in the index + element see { db.see.attlist, db.all.inlines* } +} +div { + db.seealso.role.attribute = attribute role { text } + db.seealso.class.attribute = + + ## Identifies the class of 'seealso' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.seealso.attlist = + db.seealso.role.attribute? + & db.seealso.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seealso = + + ## Part of an index term directing the reader also to another entry in the index + element seealso { db.seealso.attlist, db.all.inlines* } +} +div { + db.index.status.attribute = db.status.attribute + db.index.role.attribute = attribute role { text } + db.index.attlist = + db.index.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.index.status.attribute? + & db.index.type.attribute? + db.index.info = db._info + # Yes, db.indexdiv* and db.indexentry*; that way an is valid. + # Authors can use an empty index to indicate where a generated index should + # appear. + db.index = + + ## An index to a book or part of a book + element index { + db.index.attlist, + db.index.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry* | db.segmentedlist) + } +} +div { + db.setindex.status.attribute = db.status.attribute + db.setindex.role.attribute = attribute role { text } + db.setindex.attlist = + db.setindex.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.setindex.status.attribute? + & db.index.type.attribute? + db.setindex.info = db._info + db.setindex = + + ## An index to a set of books + element setindex { + db.setindex.attlist, + db.setindex.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry*) + } +} +div { + db.indexdiv.status.attribute = db.status.attribute + db.indexdiv.role.attribute = attribute role { text } + db.indexdiv.attlist = + db.indexdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.indexdiv.status.attribute? + db.indexdiv.info = db._info.title.req + db.indexdiv = + + ## A division in an index + element indexdiv { + db.indexdiv.attlist, + db.indexdiv.info, + db.all.blocks*, + (db.indexentry+ | db.segmentedlist) + } +} +div { + db.indexentry.role.attribute = attribute role { text } + db.indexentry.attlist = + db.indexentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.indexentry = + + ## An entry in an index + element indexentry { + db.indexentry.attlist, + db.primaryie, + (db.seeie | db.seealsoie)*, + (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)* + } +} +div { + db.primaryie.role.attribute = attribute role { text } + db.primaryie.attlist = + db.primaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.primaryie = + + ## A primary term in an index entry, not in the text + element primaryie { db.primaryie.attlist, db.all.inlines* } +} +div { + db.secondaryie.role.attribute = attribute role { text } + db.secondaryie.attlist = + db.secondaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.secondaryie = + + ## A secondary term in an index entry, rather than in the text + element secondaryie { db.secondaryie.attlist, db.all.inlines* } +} +div { + db.tertiaryie.role.attribute = attribute role { text } + db.tertiaryie.attlist = + db.tertiaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.tertiaryie = + + ## A tertiary term in an index entry, rather than in the text + element tertiaryie { db.tertiaryie.attlist, db.all.inlines* } +} +div { + db.seeie.role.attribute = attribute role { text } + db.seeie.attlist = + db.seeie.role.attribute? + & db.common.attributes + & db.linkend.attribute? + db.seeie = + + ## A See + ## entry in an index, rather than in the text + element seeie { db.seeie.attlist, db.all.inlines* } +} +div { + db.seealsoie.role.attribute = attribute role { text } + db.seealsoie.attlist = + db.seealsoie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.seealsoie = + + ## A See also + ## entry in an index, rather than in the text + element seealsoie { db.seealsoie.attlist, db.all.inlines* } +} +db.toc.pagenum.attribute = + + ## Indicates the page on which this element occurs in some version of the printed document + attribute pagenum { text } +div { + db.toc.role.attribute = attribute role { text } + db.toc.attlist = + db.toc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.toc.info = db._info.title.only + db.toc = + + ## A table of contents + element toc { + db.toc.attlist, + db.toc.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)* + } +} +div { + db.tocdiv.role.attribute = attribute role { text } + 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 + db.tocdiv = + + ## A division in a table of contents + element tocdiv { + db.tocdiv.attlist, + db.tocdiv.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)+ + } +} +div { + db.tocentry.role.attribute = attribute role { text } + db.tocentry.pagenum.attribute = db.toc.pagenum.attribute + db.tocentry.attlist = + db.tocentry.role.attribute? + & db.common.attributes + & db.tocentry.pagenum.attribute? + & db.linkend.attribute? + db.tocentry = + + ## A component title in a table of contents + element tocentry { db.tocentry.attlist, db.all.inlines* } +} +db.task.info = db._info.title.req +div { + db.task.role.attribute = attribute role { text } + db.task.attlist = + db.task.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.task = + + ## A task to be completed + element task { + db.task.attlist, + db.task.info, + db.tasksummary?, + db.taskprerequisites?, + db.procedure+, + db.example*, + db.taskrelated? + } +} +div { + db.tasksummary.role.attribute = attribute role { text } + db.tasksummary.attlist = + db.tasksummary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tasksummary.info = db._info.title.only + db.tasksummary = + + ## A summary of a task + element tasksummary { + db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+ + } +} +div { + db.taskprerequisites.role.attribute = attribute role { text } + db.taskprerequisites.attlist = + db.taskprerequisites.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskprerequisites.info = db._info.title.only + db.taskprerequisites = + + ## The prerequisites for a task + element taskprerequisites { + db.taskprerequisites.attlist, + db.taskprerequisites.info, + db.all.blocks+ + } +} +div { + db.taskrelated.role.attribute = attribute role { text } + db.taskrelated.attlist = + db.taskrelated.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskrelated.info = db._info.title.only + db.taskrelated = + + ## Information related to a task + element taskrelated { + db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+ + } +} +db.area.units.enumeration = + + ## Coordinates expressed as a pair of CALS graphic coordinates. + "calspair" + | + ## Coordinates expressed as a line and column. + "linecolumn" + | + ## Coordinates expressed as a pair of lines and columns. + "linecolumnpair" + | + ## Coordinates expressed as a line range. + "linerange" +db.area.units-enum.attribute = + + ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + ## for graphics and linecolumn + ## for line-oriented elements. + attribute units { db.area.units.enumeration }? +db.area.units-other.attributes = + + ## Indicates that non-standard units are used for this area + ## . In this case otherunits + ## must be specified. + attribute units { + + ## Coordinates expressed in some non-standard units. + "other" + }?, + + ## Identifies the units used in the coords + ## attribute when the units + ## attribute is other + ## . This attribute is forbidden otherwise. + attribute otherunits { xsd:NMTOKEN } +db.area.units.attribute = + db.area.units-enum.attribute | db.area.units-other.attributes +div { + db.calloutlist.role.attribute = attribute role { text } + db.calloutlist.attlist = + db.calloutlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.calloutlist.info = db._info.title.only + db.calloutlist = + + ## A list of callout + ## s + element calloutlist { + db.calloutlist.attlist, + db.calloutlist.info, + db.all.blocks*, + db.callout+ + } +} +div { + db.callout.role.attribute = attribute role { text } + db.callout.arearefs.attribute = + + ## Identifies the areas described by this callout. + attribute arearefs { xsd:IDREFS } + db.callout.attlist = + db.callout.role.attribute? + & db.common.attributes + & db.callout.arearefs.attribute + # This requires an XPath 2.0 compatible Schematron processor + db.callout = + + ## A called out + ## description of a marked area + [ + s:pattern [ + s:title [ "Callout cross reference constraint" ] + s:rule [ + context = "db:callout[@arearefs]" + s:assert [ + test = + "every $id in tokenize(current()/@arearefs) satisfies (every $ar in //*[@xml:id = $id] satisfies (local-name($ar) = ('areaset', 'area', 'co') and namespace-uri($ar) = 'http://docbook.org/ns/docbook'))" + "@arearefs on callout must point to a areaset, area, or co." + ] + ] + ] + ] + element callout { db.callout.attlist, db.all.blocks+ } +} +div { + db.programlistingco.role.attribute = attribute role { text } + db.programlistingco.attlist = + db.programlistingco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.programlistingco.info = db._info.title.forbidden + db.programlistingco = + + ## A program listing with associated areas used in callouts + element programlistingco { + db.programlistingco.attlist, + db.programlistingco.info, + db.areaspec, + db.programlisting, + db.calloutlist* + } +} +div { + db.areaspec.role.attribute = attribute role { text } + db.areaspec.attlist = + db.areaspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.area.units.attribute + db.areaspec = + + ## A collection of regions in a graphic or code example + element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ } +} +div { + db.area.role.attribute = attribute role { text } + db.area.linkends.attribute = + + ## Point to the callout + ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + attribute linkends { xsd:IDREFS } + db.area.label.attribute = + + ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + attribute label { text } + db.area.coords.attribute = + + ## Provides the coordinates of the area. The coordinates must be interpreted using the units + ## specified. + attribute coords { text } + db.area.attlist = + db.area.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area = + + ## A region defined for a callout in a graphic or code example + element area { db.area.attlist, db.alt? } +} +div { + # The only difference is that xml:id is optional + db.area.inareaset.attlist = + db.area.role.attribute? + & db.common.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area.inareaset = + + ## A region defined for a callout in a graphic or code example + element area { db.area.inareaset.attlist, db.alt? } +} +div { + db.areaset.role.attribute = attribute role { text } + db.areaset.linkends.attribute = db.linkends.attribute + db.areaset.label.attribute = db.label.attribute + db.areaset.attlist = + db.areaset.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.areaset.linkends.attribute | db.xlink.simple.link.attributes)? + & db.areaset.label.attribute? + db.areaset = + + ## A set of related areas in a graphic or code example + element areaset { db.areaset.attlist, db.area.inareaset+ } +} +div { + db.screenco.role.attribute = attribute role { text } + db.screenco.attlist = + db.screenco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenco.info = db._info.title.forbidden + db.screenco = + + ## A screen with associated areas used in callouts + element screenco { + db.screenco.attlist, + db.screenco.info, + db.areaspec, + db.screen, + db.calloutlist* + } +} +div { + db.imageobjectco.role.attribute = attribute role { text } + db.imageobjectco.attlist = + db.imageobjectco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobjectco.info = db._info.title.forbidden + db.imageobjectco = + + ## A wrapper for an image object with callouts + element imageobjectco { + db.imageobjectco.attlist, + db.imageobjectco.info, + db.areaspec, + db.imageobject+, + db.calloutlist* + } +} +div { + db.co.role.attribute = attribute role { text } + db.co.linkends.attribute = db.linkends.attribute + db.co.label.attribute = db.label.attribute + db.co.attlist = + db.co.role.attribute? + & db.common.idreq.attributes + & db.co.linkends.attribute? + & db.co.label.attribute? + db.co = + + ## The location of a callout embedded in text + element co { db.co.attlist, empty } +} +div { + db.coref.role.attribute = attribute role { text } + db.coref.label.attribute = db.label.attribute + db.coref.attlist = + db.coref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.coref.label.attribute? + db.coref = + + ## A cross reference to a co + element coref { db.coref.attlist, empty } +} +div { + db.productionset.role.attribute = attribute role { text } + db.productionset.attlist = + db.productionset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productionset.info = db._info.title.only + db.productionset = + + ## A set of EBNF productions + element productionset { + db.productionset.attlist, + db.productionset.info, + (db.production | db.productionrecap)+ + } +} +div { + db.production.role.attribute = attribute role { text } + db.production.attlist = + db.production.role.attribute? + & db.common.idreq.attributes + & db.common.linking.attributes + db.production = + + ## A production in a set of EBNF productions + element production { + db.production.attlist, db.lhs, db.rhs+, db.constraint* + } +} +div { + db.lhs.role.attribute = attribute role { text } + db.lhs.attlist = + db.lhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lhs = + + ## The left-hand side of an EBNF production + element lhs { db.lhs.attlist, text } +} +div { + db.rhs.role.attribute = attribute role { text } + db.rhs.attlist = + db.rhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.rhs = + + ## The right-hand side of an EBNF production + element rhs { + db.rhs.attlist, + (text | db.nonterminal | db.lineannotation | db.sbr)* + } +} +div { + db.nonterminal.role.attribute = attribute role { text } + db.nonterminal.def.attribute = + + ## Specifies a URI that points to a production + ## where the nonterminal + ## is defined + attribute def { xsd:anyURI } + db.nonterminal.attlist = + db.nonterminal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.nonterminal.def.attribute + db.nonterminal = + + ## A non-terminal in an EBNF production + element nonterminal { db.nonterminal.attlist, text } +} +div { + db.constraint.role.attribute = attribute role { text } + db.constraint.attlist = + db.constraint.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.constraint = + + ## A constraint in an EBNF production + [ + s:pattern [ + s:title [ "Constraint cross reference constraint" ] + s:rule [ + context = "db:constraint[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'constraintdef' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on constraint must point to a constraintdef." + ] + ] + ] + ] + element constraint { db.constraint.attlist, empty } +} +div { + db.productionrecap.role.attribute = attribute role { text } + db.productionrecap.attlist = + db.productionrecap.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.productionrecap = + + ## A cross-reference to an EBNF production + [ + s:pattern [ + s:title [ "Production recap cross reference constraint" ] + s:rule [ + context = "db:productionrecap[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'production' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on productionrecap must point to a production." + ] + ] + ] + ] + element productionrecap { db.productionrecap.attlist, empty } +} +div { + db.constraintdef.role.attribute = attribute role { text } + db.constraintdef.attlist = + db.constraintdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.constraintdef.info = db._info.title.only + db.constraintdef = + + ## The definition of a constraint in an EBNF production + element constraintdef { + db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+ + } +} +db.char.attribute = + + ## Specifies the alignment character when align + ## is set to char + ## . + attribute char { text } +db.charoff.attribute = + + ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + ## when align + ## is set to char + ## . + attribute charoff { + xsd:decimal { minExclusive = "0" maxExclusive = "100" } + } +db.frame.attribute = + + ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + attribute frame { + + ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + "all" + | + ## Frame only the bottom of the table. + "bottom" + | + ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + "none" + | + ## Frame the left and right sides of the table. + "sides" + | + ## Frame the top of the table. + "top" + | + ## Frame the top and bottom of the table. + "topbot" + } +db.colsep.attribute = + + ## Specifies the presence or absence of the column separator + attribute colsep { + + ## No column separator rule. + "0" + | + ## Provide a column separator rule on the right + "1" + } +db.rowsep.attribute = + + ## Specifies the presence or absence of the row separator + attribute rowsep { + + ## No row separator rule. + "0" + | + ## Provide a row separator rule below + "1" + } +db.orient.attribute = + + ## Specifies the orientation of the table + attribute orient { + + ## 90 degrees counter-clockwise from the rest of the text flow. + "land" + | + ## The same orientation as the rest of the text flow. + "port" + } +db.tabstyle.attribute = + + ## Specifies the table style + attribute tabstyle { text } +db.rowheader.attribute = + + ## Indicates whether or not the entries in the first column should be considered row headers + attribute rowheader { + + ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + "firstcol" + | + ## Indicates that row headers are identified by use of the headers attribute on entries in the table. + "headers" + | + ## Indicates that entries in the first column have no special significance with respect to column headers. + "norowheader" + } +db.align.attribute = + + ## Specifies the horizontal alignment of text in an entry. + attribute align { + + ## Centered. + "center" + | + ## Aligned on a particular character. + "char" + | + ## Left and right justified. + "justify" + | + ## Left justified. + "left" + | + ## Right justified. + "right" + } +db.valign.attribute = + + ## Specifies the vertical alignment of text in an entry. + attribute valign { + + ## Aligned on the bottom of the entry. + "bottom" + | + ## Aligned in the middle. + "middle" + | + ## Aligned at the top of the entry. + "top" + } +db.specify-col-by-colname.attributes = + + ## Specifies a column specification by name. + attribute colname { text } +db.specify-col-by-namest.attributes = + + ## Specifies a starting column by name. + attribute namest { text } +db.specify-span-by-spanspec.attributes = + + ## Specifies a span by name. + attribute spanname { text } +db.specify-span-directly.attributes = + + ## Specifies a starting column by name. + attribute namest { text } + & + ## Specifies an ending column by name. + attribute nameend { text } +db.column-spec.attributes = + db.specify-col-by-colname.attributes + | db.specify-col-by-namest.attributes + | db.specify-span-by-spanspec.attributes + | db.specify-span-directly.attributes +db.colname.attribute = + + ## Provides a name for a column specification. + attribute colname { text } +db.spanname.attribute = + + ## Provides a name for a span specification. + attribute spanname { text } +div { + db.tgroup.role.attribute = attribute role { text } + db.tgroup.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.tgroup.cols.attribute = + + ## The number of columns in the table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.tgroup.attlist = + db.tgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.tgroup.tgroupstyle.attribute? + & db.tgroup.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.tgroup = + + ## A wrapper for the main content of a table, or part of a table + element tgroup { + db.tgroup.attlist, + db.colspec*, + db.spanspec*, + db.cals.thead?, + db.cals.tfoot?, + db.cals.tbody + } +} +div { + db.colspec.role.attribute = attribute role { text } + db.colspec.colnum.attribute = + + ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + attribute colnum { xsd:positiveInteger } + db.colspec.colwidth.attribute = + + ## Specifies the width of the column. + attribute colwidth { text } + db.colspec.attlist = + db.colspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.colspec.colnum.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.colspec.colwidth.attribute? + & db.charoff.attribute? + & db.colname.attribute? + & db.rowsep.attribute? + & db.align.attribute? + & db.rowheader.attribute? + db.colspec = + + ## Specifications for a column in a table + element colspec { db.colspec.attlist, empty } +} +div { + db.spanspec.role.attribute = attribute role { text } + db.spanspec.namest.attribute = + + ## Specifies a starting column by name. + attribute namest { text } + db.spanspec.nameend.attribute = + + ## Specifies an ending column by name. + attribute nameend { text } + db.spanspec.attlist = + db.spanspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spanname.attribute + & db.spanspec.namest.attribute + & db.spanspec.nameend.attribute + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.spanspec = + + ## Formatting information for a spanned column in a table + element spanspec { db.spanspec.attlist, empty } +} +div { + db.cals.thead.role.attribute = attribute role { text } + db.cals.thead.attlist = + db.cals.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.thead = + + ## A table header consisting of one or more rows + element thead { db.cals.thead.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tfoot.role.attribute = attribute role { text } + db.cals.tfoot.attlist = + db.cals.tfoot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tfoot = + + ## A table footer consisting of one or more rows + element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tbody.role.attribute = attribute role { text } + db.cals.tbody.attlist = + db.cals.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.tbody.attlist, db.row+ } +} +div { + db.row.role.attribute = attribute role { text } + db.row.attlist = + db.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.row = + + ## A row in a table + element row { db.row.attlist, (db.entry | db.entrytbl)+ } +} +div { + db.entry.role.attribute = attribute role { text } + db.entry.morerows.attribute = + + ## Specifies the number of additional rows which this entry occupies. Defaults to zero. + attribute morerows { xsd:integer } + db.entry.rotate.attribute = + + ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + attribute rotate { + + ## Do not rotate the cell. + "0" + | + ## Rotate the cell 90 degrees counter-clockwise. + "1" + } + db.entry.scope.attribute = + + ## Specifies the scope of a header. + attribute scope { + + ## Applies to the row + "row" + | + ## Applies to the column + "col" + | + ## Applies to the row group + "rowgroup" + | + ## Applies to the column group + "colgroup" + } + db.entry.headers.attribute = + + ## Specifies the entry or entries which serve as headers for this element. + attribute headers { xsd:IDREFS } + db.entry.attlist = + db.entry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.entry.morerows.attribute? + & db.column-spec.attributes? + & db.rowsep.attribute? + & db.entry.rotate.attribute? + & db.align.attribute? + & db.entry.scope.attribute? + & db.entry.headers.attribute? + db.entry = + + ## A cell in a table + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of entry" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:informaltable)" + "informaltable must not occur among the children or descendants of entry" + ] + ] + ] + ] + element entry { + db.entry.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.entrytbl.role.attribute = attribute role { text } + db.entrytbl.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.entrytbl.cols.attribute = + + ## The number of columns in the entry table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.entrytbl.attlist = + db.entrytbl.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.column-spec.attributes? + & db.entrytbl.tgroupstyle.attribute? + & db.entrytbl.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.entrytbl = + + ## A subtable appearing in place of an entry in a table + element entrytbl { + db.entrytbl.attlist, + db.colspec*, + db.spanspec*, + db.cals.entrytbl.thead?, + db.cals.entrytbl.tbody + } +} +div { + db.cals.entrytbl.thead.role.attribute = attribute role { text } + db.cals.entrytbl.thead.attlist = + db.cals.entrytbl.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.thead = + + ## A table header consisting of one or more rows + element thead { + db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+ + } +} +div { + db.cals.entrytbl.tbody.role.attribute = attribute role { text } + db.cals.entrytbl.tbody.attlist = + db.cals.entrytbl.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ } +} +div { + db.entrytbl.row.role.attribute = attribute role { text } + db.entrytbl.row.attlist = + db.entrytbl.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.entrytbl.row = + + ## A row in a table + element row { db.entrytbl.row.attlist, db.entry+ } +} +div { + db.cals.table.role.attribute = attribute role { text } + db.cals.table.label.attribute = db.label.attribute + db.cals.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.table.attlist = + db.cals.table.role.attribute? + & db.cals.table.type.attribute? + & db.cals.table.label.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & + ## Indicates if the short or long title should be used in a List of Tables + attribute shortentry { + + ## Indicates that the full title should be used. + "0" + | + ## Indicates that the short short title (titleabbrev) should be used. + "1" + }? + & + ## Indicates if the table should appear in a List of Tables + attribute tocentry { + + ## Indicates that the table should not occur in the List of Tables. + "0" + | + ## Indicates that the table should appear in the List of Tables. + "1" + }? + & db.rowheader.attribute? + db.cals.table.info = db._info.title.onlyreq + db.cals.table = + + ## A formal table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + ] + element table { + db.cals.table.attlist, + db.cals.table.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +div { + db.cals.informaltable.role.attribute = attribute role { text } + db.cals.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.informaltable.attlist = + db.cals.informaltable.role.attribute? + & db.cals.informaltable.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & db.rowheader.attribute? + db.cals.informaltable.info = db._info.title.forbidden + db.cals.informaltable = + + ## A table without a title + element informaltable { + db.cals.informaltable.attlist, + db.cals.informaltable.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +db.html.coreattrs = + + ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + attribute class { text }? + & + ## This attribute specifies style information for the current element. + attribute style { text }? + & + ## This attribute offers advisory information about the element for which it is set. + attribute title { text }? +db.html.i18n = + + ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + attribute lang { text }? +db.html.events = + + ## Occurs when the pointing device button is clicked over an element. + attribute onclick { text }? + & + ## Occurs when the pointing device button is double clicked over an element. + attribute ondblclick { text }? + & + ## Occurs when the pointing device button is pressed over an element. + attribute onmousedown { text }? + & + ## Occurs when the pointing device button is released over an element. + attribute onmouseup { text }? + & + ## Occurs when the pointing device is moved onto an element. + attribute onmouseover { text }? + & + ## Occurs when the pointing device is moved while it is over an element. + attribute onmousemove { text }? + & + ## Occurs when the pointing device is moved away from an element. + attribute onmouseout { text }? + & + ## Occurs when a key is pressed and released over an element. + attribute onkeypress { text }? + & + ## Occurs when a key is pressed down over an element. + attribute onkeydown { text }? + & + ## Occurs when a key is released over an element. + attribute onkeyup { text }? +db.html.attrs = + db.common.attributes + & db.html.coreattrs + & db.html.i18n + & db.html.events +db.html.cellhalign = + + ## Specifies the alignment of data and the justification of text in a cell. + attribute align { + + ## Left-flush data/Left-justify text. This is the default value for table data. + "left" + | + ## Center data/Center-justify text. This is the default value for table headers. + "center" + | + ## Right-flush data/Right-justify text. + "right" + | + ## Double-justify text. + "justify" + | + ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + "char" + }? + & + ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + attribute char { text }? + & + ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + attribute charoff { + xsd:integer >> a:documentation [ "An explicit offset." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage offset." ] + }? +db.html.cellvalign = + + ## Specifies the vertical position of data within a cell. + attribute valign { + + ## Cell data is flush with the top of the cell. + "top" + | + ## Cell data is centered vertically within the cell. This is the default value. + "middle" + | + ## Cell data is flush with the bottom of the cell. + "bottom" + | + ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + "baseline" + }? +db.html.table.attributes = + + ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + attribute summary { text }? + & + ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + attribute width { + xsd:integer >> a:documentation [ "An explicit width." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage width." ] + }? + & + ## Specifies the width (in pixels only) of the frame around a table. + attribute border { xsd:nonNegativeInteger }? + & + ## Specifies which sides of the frame surrounding a table will be visible. + attribute frame { + + ## No sides. This is the default value. + "void" + | + ## The top side only. + "above" + | + ## The bottom side only. + "below" + | + ## The top and bottom sides only. + "hsides" + | + ## The left-hand side only. + "lhs" + | + ## The right-hand side only. + "rhs" + | + ## The right and left sides only. + "vsides" + | + ## All four sides. + "box" + | + ## All four sides. + "border" + }? + & + ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + attribute rules { + + ## No rules. This is the default value. + "none" + | + ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + "groups" + | + ## Rules will appear between rows only. + "rows" + | + ## Rules will appear between columns only. + "cols" + | + ## Rules will appear between all rows and columns. + "all" + }? + & + ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + attribute cellspacing { + xsd:integer >> a:documentation [ "An explicit spacing." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage spacing." ] + }? + & + ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + attribute cellpadding { + xsd:integer >> a:documentation [ "An explicit padding." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage padding." ] + }? +db.html.tablecell.attributes = + + ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + attribute abbr { text }? + & + ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + attribute axis { text }? + & + ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + attribute headers { text }? + & + ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + attribute scope { + + ## The current cell provides header information for the rest of the row that contains it + "row" + | + ## The current cell provides header information for the rest of the column that contains it. + "col" + | + ## The header cell provides header information for the rest of the row group that contains it. + "rowgroup" + | + ## The header cell provides header information for the rest of the column group that contains it. + "colgroup" + }? + & + ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all rows from the current row to the last row of the table section (thead + ## , tbody + ## , or tfoot + ## ) in which the cell is defined. + attribute rowspan { xsd:nonNegativeInteger }? + & + ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup + ## ) in which the cell is defined. + attribute colspan { xsd:nonNegativeInteger }? +db.html.table.info = db._info.title.forbidden +db.html.table.model = + db.html.table.info?, + db.html.caption, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +db.html.informaltable.info = db._info.title.forbidden +db.html.informaltable.model = + db.html.informaltable.info?, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +div { + db.html.table.role.attribute = attribute role { text } + db.html.table.label.attribute = db.label.attribute + db.html.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.table.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.table.role.attribute? + & db.html.table.type.attribute? + & db.html.table.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.table = + + ## A formal (captioned) HTML table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + ] + element table { db.html.table.attlist, db.html.table.model } +} +div { + db.html.informaltable.role.attribute = attribute role { text } + db.html.informaltable.label.attribute = db.label.attribute + db.html.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.informaltable.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.informaltable.role.attribute? + & db.html.informaltable.type.attribute? + & db.html.informaltable.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.informaltable = + + ## An HTML table without a title + element informaltable { + db.html.informaltable.attlist, db.html.informaltable.model + } +} +div { + db.html.caption.attlist = db.html.attrs + db.html.caption = + + ## An HTML table caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + ] + element caption { db.html.caption.attlist, db.all.inlines* } +} +div { + db.html.col.attlist = + db.html.attrs + & + ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned + ## by the col + ## element; the col + ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + ## element shares its attributes with the next N-1 columns. + attribute span { xsd:nonNegativeInteger }? + & + ## Specifies a default width for each column spanned by the current col + ## element. It has the same meaning as the width + ## attribute for the colgroup + ## element and overrides it. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.col = + + ## Specifications for a column in an HTML table + element col { db.html.col.attlist, empty } +} +div { + db.html.colgroup.attlist = + db.html.attrs + & + ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + ## element contains one or more col + ## elements. + attribute span { xsd:nonNegativeInteger }? + & + ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + ## element. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.colgroup = + + ## A group of columns in an HTML table + element colgroup { db.html.colgroup.attlist, db.html.col* } +} +div { + db.html.thead.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.thead = + + ## A table header consisting of one or more rows in an HTML table + element thead { db.html.thead.attlist, db.html.tr+ } +} +div { + db.html.tfoot.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tfoot = + + ## A table footer consisting of one or more rows in an HTML table + element tfoot { db.html.tfoot.attlist, db.html.tr+ } +} +div { + db.html.tbody.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tbody = + + ## A wrapper for the rows of an HTML table or informal HTML table + element tbody { db.html.tbody.attlist, db.html.tr+ } +} +div { + db.html.tr.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tr = + + ## A row in an HTML table + element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ } +} +div { + db.html.th.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.th = + + ## A table header entry in an HTML table + element th { + db.html.th.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.html.td.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.td = + + ## A table entry in an HTML table + element td { + db.html.td.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.msgset.role.attribute = attribute role { text } + db.msgset.attlist = + db.msgset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgset.info = db._info.title.only + db.msgset = + + ## A detailed set of messages, usually error messages + element msgset { + db.msgset.attlist, + db.msgset.info, + (db.msgentry+ | db.simplemsgentry+) + } +} +div { + db.msgentry.role.attribute = attribute role { text } + db.msgentry.attlist = + db.msgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgentry = + + ## A wrapper for an entry in a message set + element msgentry { + db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan* + } +} +div { + db.simplemsgentry.role.attribute = attribute role { text } + db.simplemsgentry.msgaud.attribute = + + ## The audience to which the message relevant + attribute msgaud { text } + db.simplemsgentry.msgorig.attribute = + + ## The origin of the message + attribute msgorig { text } + db.simplemsgentry.msglevel.attribute = + + ## The level of importance or severity of a message + attribute msglevel { text } + db.simplemsgentry.attlist = + db.simplemsgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplemsgentry.msgaud.attribute? + & db.simplemsgentry.msgorig.attribute? + & db.simplemsgentry.msglevel.attribute? + db.simplemsgentry = + + ## A wrapper for a simpler entry in a message set + element simplemsgentry { + db.simplemsgentry.attlist, db.msgtext, db.msgexplan+ + } +} +div { + db.msg.role.attribute = attribute role { text } + db.msg.attlist = + db.msg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msg.info = db._info.title.only + db.msg = + + ## A message in a message set + element msg { + db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)* + } +} +div { + db.msgmain.role.attribute = attribute role { text } + db.msgmain.attlist = + db.msgmain.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgmain.info = db._info.title.only + db.msgmain = + + ## The primary component of a message in a message set + element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext } +} +div { + db.msgsub.role.attribute = attribute role { text } + db.msgsub.attlist = + db.msgsub.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgsub.info = db._info.title.only + db.msgsub = + + ## A subcomponent of a message in a message set + element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext } +} +div { + db.msgrel.role.attribute = attribute role { text } + db.msgrel.attlist = + db.msgrel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgrel.info = db._info.title.only + db.msgrel = + + ## A related component of a message in a message set + element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext } +} +div { + db.msgtext.role.attribute = attribute role { text } + db.msgtext.attlist = + db.msgtext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgtext = + + ## The actual text of a message component in a message set + element msgtext { db.msgtext.attlist, db.all.blocks+ } +} +div { + db.msginfo.role.attribute = attribute role { text } + db.msginfo.attlist = + db.msginfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msginfo = + + ## Information about a message in a message set + element msginfo { + db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)* + } +} +div { + db.msglevel.role.attribute = attribute role { text } + db.msglevel.attlist = + db.msglevel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msglevel = + + ## The level of importance or severity of a message in a message set + element msglevel { db.msglevel.attlist, db._text } +} +div { + db.msgorig.role.attribute = attribute role { text } + db.msgorig.attlist = + db.msgorig.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgorig = + + ## The origin of a message in a message set + element msgorig { db.msgorig.attlist, db._text } +} +div { + db.msgaud.role.attribute = attribute role { text } + db.msgaud.attlist = + db.msgaud.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgaud = + + ## The audience to which a message in a message set is relevant + element msgaud { db.msgaud.attlist, db._text } +} +div { + db.msgexplan.role.attribute = attribute role { text } + db.msgexplan.attlist = + db.msgexplan.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgexplan.info = db._info.title.only + db.msgexplan = + + ## Explanatory material relating to a message in a message set + element msgexplan { + db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+ + } +} +div { + db.qandaset.role.attribute = attribute role { text } + db.qandaset.defaultlabel.enumeration = + + ## No labels + "none" + | + ## Numeric labels + "number" + | + ## "Q:" and "A:" labels + "qanda" + db.qandaset.defaultlabel.attribute = + + ## Specifies the default labelling + attribute defaultlabel { db.qandaset.defaultlabel.enumeration } + db.qandaset.attlist = + db.qandaset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.qandaset.defaultlabel.attribute? + db.qandaset.info = db._info.title.only + db.qandaset = + + ## A question-and-answer set + element qandaset { + db.qandaset.attlist, + db.qandaset.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandadiv.role.attribute = attribute role { text } + db.qandadiv.attlist = + db.qandadiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandadiv.info = db._info.title.only + db.qandadiv = + + ## A titled division in a qandaset + element qandadiv { + db.qandadiv.attlist, + db.qandadiv.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandaentry.role.attribute = attribute role { text } + db.qandaentry.attlist = + db.qandaentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandaentry.info = db._info.title.only + db.qandaentry = + + ## A question/answer set within a qandaset + element qandaentry { + db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer* + } +} +div { + db.question.role.attribute = attribute role { text } + db.question.attlist = + db.question.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.question = + + ## A question in a qandaset + element question { db.question.attlist, db.label?, db.all.blocks+ } +} +div { + db.answer.role.attribute = attribute role { text } + db.answer.attlist = + db.answer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.answer = + + ## An answer to a question posed in a qandaset + element answer { db.answer.attlist, db.label?, db.all.blocks+ } +} +div { + db.label.role.attribute = attribute role { text } + db.label.attlist = + db.label.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.label = + + ## A label on a question or answer + element label { db.label.attlist, db._text } +} +db.math.inlines = db.inlineequation +db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+ +db.inlineequation.content = + (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+ +div { + db.equation.role.attribute = attribute role { text } + db.equation.label.attribute = db.label.attribute + db.equation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.equation.attlist = + db.equation.role.attribute? + & db.equation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.equation.label.attribute? + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.equation.info = db._info.title.only + db.equation = + + ## A displayed mathematical equation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of equation" + ] + ] + ] + ] + element equation { + db.equation.attlist, + db.equation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.informalequation.role.attribute = attribute role { text } + db.informalequation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.informalequation.attlist = + db.informalequation.role.attribute? + & db.informalequation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.informalequation.info = db._info.title.forbidden + db.informalequation = + + ## A displayed mathematical equation without a title + element informalequation { + db.informalequation.attlist, + db.informalequation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.inlineequation.role.attribute = attribute role { text } + db.inlineequation.attlist = + db.inlineequation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlineequation = + + ## A mathematical equation or expression occurring inline + element inlineequation { + db.inlineequation.attlist, db.alt?, db.inlineequation.content + } +} +div { + db.mathphrase.role.attribute = attribute role { text } + db.mathphrase.attlist = + db.mathphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mathphrase = + + ## A mathematical phrase that can be represented with ordinary text and a small amount of markup + element mathphrase { + db.mathphrase.attlist, + (db._text | db.ubiq.inlines | db._emphasis)* + } +} +db.imagedata.mathml.content = db._any.mml +div { + db.imagedata.mathml.role.attribute = attribute role { text } + db.imagedata.mathml.attlist = + db.imagedata.mathml.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is MathML + attribute format { + + ## Specifies MathML. + "mathml" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.mathml.info = db._info.title.forbidden + db.imagedata.mathml = + + ## A MathML expression in a media object + element imagedata { + db.imagedata.mathml.attlist, + db.imagedata.mathml.info, + db.imagedata.mathml.content+ + } +} +div { + db._any.mml = + + ## Any element from the MathML namespace + element mml:* { (db._any.attribute | text | db._any)* } +} +db.imagedata.svg.content = db._any.svg +div { + db.imagedata.svg.role.attribute = attribute role { text } + db.imagedata.svg.attlist = + db.imagedata.svg.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is SVG + attribute format { + + ## Specifies SVG. + "svg" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.svg.info = db._info.title.forbidden + db.imagedata.svg = + + ## An SVG drawing in a media object + element imagedata { + db.imagedata.svg.attlist, + db.imagedata.svg.info, + db.imagedata.svg.content+ + } +} +div { + db._any.svg = + + ## Any element from the SVG namespace + element svg:* { (db._any.attribute | text | db._any)* } +} +db.markup.inlines = + db.tag + | db.markup + | db.token + | db.symbol + | db.literal + | db.code + | db.constant + | db.email + | db.uri +div { + db.markup.role.attribute = attribute role { text } + db.markup.attlist = + db.markup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.markup = + + ## A string of formatting markup in text that is to be represented literally + element markup { db.markup.attlist, db._text } +} +div { + db.tag.role.attribute = attribute role { text } + db.tag.class.enumeration = + + ## An attribute + "attribute" + | + ## An attribute value + "attvalue" + | + ## An element + "element" + | + ## An empty element tag + "emptytag" + | + ## An end tag + "endtag" + | + ## A general entity + "genentity" + | + ## The local name part of a qualified name + "localname" + | + ## A namespace + "namespace" + | + ## A numeric character reference + "numcharref" + | + ## A parameter entity + "paramentity" + | + ## A processing instruction + "pi" + | + ## The prefix part of a qualified name + "prefix" + | + ## An SGML comment + "comment" + | + ## A start tag + "starttag" + | + ## An XML processing instruction + "xmlpi" + db.tag.class.attribute = + + ## Identifies the nature of the tag content + attribute class { db.tag.class.enumeration } + db.tag.namespace.attribute = + + ## Identifies the namespace of the tag content + attribute namespace { xsd:anyURI } + db.tag.attlist = + db.tag.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tag.class.attribute? + & db.tag.namespace.attribute? + db.tag = + + ## A component of XML (or SGML) markup + element tag { db.tag.attlist, (db._text | db.tag)* } +} +div { + db.symbol.class.attribute = + + ## Identifies the class of symbol + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.symbol.role.attribute = attribute role { text } + db.symbol.attlist = + db.symbol.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.symbol.class.attribute? + db.symbol = + + ## A name that is replaced by a value before processing + element symbol { db.symbol.attlist, db._text } +} +div { + db.token.role.attribute = attribute role { text } + db.token.attlist = + db.token.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.token = + + ## A unit of information + element token { db.token.attlist, db._text } +} +div { + db.literal.role.attribute = attribute role { text } + db.literal.attlist = + db.literal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.literal = + + ## Inline text that is some literal value + element literal { db.literal.attlist, db._text } +} +div { + code.language.attribute = + + ## Identifies the (computer) language of the code fragment + attribute language { text } + db.code.role.attribute = attribute role { text } + db.code.attlist = + db.code.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & code.language.attribute? + db.code = + + ## An inline code fragment + element code { + db.code.attlist, (db.programming.inlines | db._text)* + } +} +div { + db.constant.class.attribute = + + ## Identifies the class of constant + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.constant.role.attribute = attribute role { text } + db.constant.attlist = + db.constant.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.constant.class.attribute? + db.constant = + + ## A programming or system constant + element constant { db.constant.attlist, db._text } +} +div { + db.productname.role.attribute = attribute role { text } + db.productname.class.enumeration = + + ## A name with a copyright + "copyright" + | + ## A name with a registered copyright + "registered" + | + ## A name of a service + "service" + | + ## A name which is trademarked + "trade" + db.productname.class.attribute = + + ## Specifies the class of product name + attribute class { db.productname.class.enumeration } + db.productname.attlist = + db.productname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.productname.class.attribute? + db.productname = + + ## The formal name of a product + element productname { db.productname.attlist, db._text } +} +div { + db.productnumber.role.attribute = attribute role { text } + db.productnumber.attlist = + db.productnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productnumber = + + ## A number assigned to a product + element productnumber { db.productnumber.attlist, db._text } +} +div { + db.database.class.enumeration = + + ## An alternate or secondary key + "altkey" + | + ## A constraint + "constraint" + | + ## A data type + "datatype" + | + ## A field + "field" + | + ## A foreign key + "foreignkey" + | + ## A group + "group" + | + ## An index + "index" + | + ## The first or primary key + "key1" + | + ## An alternate or secondary key + "key2" + | + ## A name + "name" + | + ## The primary key + "primarykey" + | + ## A (stored) procedure + "procedure" + | + ## A record + "record" + | + ## A rule + "rule" + | + ## The secondary key + "secondarykey" + | + ## A table + "table" + | + ## A user + "user" + | + ## A view + "view" + db.database.class.attribute = + + ## Identifies the class of database artifact + attribute class { db.database.class.enumeration } + db.database.role.attribute = attribute role { text } + db.database.attlist = + db.database.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.database.class.attribute? + db.database = + + ## The name of a database, or part of a database + element database { db.database.attlist, db._text } +} +div { + db.application.class.enumeration = + + ## A hardware application + "hardware" + | + ## A software application + "software" + db.application.class.attribute = + + ## Identifies the class of application + attribute class { db.application.class.enumeration } + db.application.role.attribute = attribute role { text } + db.application.attlist = + db.application.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.application.class.attribute? + db.application = + + ## The name of a software program + element application { db.application.attlist, db._text } +} +div { + db.hardware.role.attribute = attribute role { text } + db.hardware.attlist = + db.hardware.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.hardware = + + ## A physical part of a computer system + element hardware { db.hardware.attlist, db._text } +} +db.gui.inlines = + db.guiicon + | db.guibutton + | db.guimenuitem + | db.guimenu + | db.guisubmenu + | db.guilabel + | db.menuchoice + | db.mousebutton +div { + db.guibutton.role.attribute = attribute role { text } + db.guibutton.attlist = + db.guibutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guibutton = + + ## The text on a button in a GUI + element guibutton { + db.guibutton.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guiicon.role.attribute = attribute role { text } + db.guiicon.attlist = + db.guiicon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guiicon = + + ## Graphic and/or text appearing as a icon in a GUI + element guiicon { + db.guiicon.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guilabel.role.attribute = attribute role { text } + db.guilabel.attlist = + db.guilabel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guilabel = + + ## The text of a label in a GUI + element guilabel { + db.guilabel.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenu.role.attribute = attribute role { text } + db.guimenu.attlist = + db.guimenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenu = + + ## The name of a menu in a GUI + element guimenu { + db.guimenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenuitem.role.attribute = attribute role { text } + db.guimenuitem.attlist = + db.guimenuitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenuitem = + + ## The name of a terminal menu item in a GUI + element guimenuitem { + db.guimenuitem.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guisubmenu.role.attribute = attribute role { text } + db.guisubmenu.attlist = + db.guisubmenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guisubmenu = + + ## The name of a submenu in a GUI + element guisubmenu { + db.guisubmenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.menuchoice.role.attribute = attribute role { text } + db.menuchoice.attlist = + db.menuchoice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.menuchoice = + + ## A selection or series of selections from a menu + element menuchoice { + db.menuchoice.attlist, + db.shortcut?, + (db.guibutton + | db.guiicon + | db.guilabel + | db.guimenu + | db.guimenuitem + | db.guisubmenu)+ + } +} +div { + db.mousebutton.role.attribute = attribute role { text } + db.mousebutton.attlist = + db.mousebutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mousebutton = + + ## The conventional name of a mouse button + element mousebutton { db.mousebutton.attlist, db._text } +} +db.keyboard.inlines = + db.keycombo + | db.keycap + | db.keycode + | db.keysym + | db.shortcut + | db.accel +div { + db.keycap.function.enumeration = + + ## The "Alt" key + "alt" + | + ## The "Alt Graph" key + "altgr" + | + ## The "Backspace" key + "backspace" + | + ## The "Command" key + "command" + | + ## The "Control" key + "control" + | + ## The "Delete" key + "delete" + | + ## The down arrow + "down" + | + ## The "End" key + "end" + | + ## The "Enter" key + "enter" + | + ## The "Escape" key + "escape" + | + ## The "Home" key + "home" + | + ## The "Insert" key + "insert" + | + ## The left arrow + "left" + | + ## The "Meta" key + "meta" + | + ## The "Option" key + "option" + | + ## The page down key + "pagedown" + | + ## The page up key + "pageup" + | + ## The right arrow + "right" + | + ## The "Return" key + "return" + | + ## The "Shift" key + "shift" + | + ## The spacebar + "space" + | + ## The "Tab" key + "tab" + | + ## The up arrow + "up" + db.keycap.function-enum.attribute = + + ## Identifies the function key + attribute function { db.keycap.function.enumeration }? + db.keycap.function-other.attributes = + + ## Identifies the function key + attribute function { + + ## Indicates a non-standard function key + "other" + }?, + + ## Specifies a keyword that identifies the non-standard key + attribute otherfunction { text } + db.keycap.function.attrib = + db.keycap.function-enum.attribute + | db.keycap.function-other.attributes + db.keycap.role.attribute = attribute role { text } + db.keycap.attlist = + db.keycap.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycap.function.attrib + db.keycap = + + ## The text printed on a key on a keyboard + element keycap { db.keycap.attlist, db._text } +} +div { + db.keycode.role.attribute = attribute role { text } + db.keycode.attlist = + db.keycode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keycode = + + ## The internal, frequently numeric, identifier for a key on a keyboard + element keycode { db.keycode.attlist, db._text } +} +db.keycombination.contentmodel = + (db.keycap | db.keycombo | db.keysym) | db.mousebutton +div { + db.keycombo.action.enumeration = + + ## A (single) mouse click. + "click" + | + ## A double mouse click. + "double-click" + | + ## A mouse or key press. + "press" + | + ## Sequential clicks or presses. + "seq" + | + ## Simultaneous clicks or presses. + "simul" + db.keycombo.action-enum.attribute = + + ## Identifies the nature of the action taken. If keycombo + ## contains more than one element, simul + ## is the default, otherwise there is no default. + attribute action { db.keycombo.action.enumeration }? + db.keycombo.action-other.attributes = + + ## Identifies the nature of the action taken + attribute action { + + ## Indicates a non-standard action + "other" + }?, + + ## Identifies the non-standard action in some unspecified way. + attribute otheraction { text } + db.keycombo.action.attrib = + db.keycombo.action-enum.attribute + | db.keycombo.action-other.attributes + db.keycombo.role.attribute = attribute role { text } + db.keycombo.attlist = + db.keycombo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycombo.action.attrib + db.keycombo = + + ## A combination of input actions + element keycombo { + db.keycombo.attlist, db.keycombination.contentmodel+ + } +} +div { + db.keysym.role.attribute = attribute role { text } + db.keysym.attlist = + db.keysym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keysym = + + ## The symbolic name of a key on a keyboard + element keysym { db.keysym.attlist, db._text } +} +div { + db.accel.role.attribute = attribute role { text } + db.accel.attlist = + db.accel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.accel = + + ## A graphical user interface (GUI) keyboard shortcut + element accel { db.accel.attlist, db._text } +} +div { + db.shortcut.action.attrib = db.keycombo.action.attrib + db.shortcut.role.attribute = attribute role { text } + db.shortcut.attlist = + db.shortcut.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.shortcut.action.attrib + db.shortcut = + + ## A key combination for an action that is also accessible through a menu + element shortcut { + db.shortcut.attlist, db.keycombination.contentmodel+ + } +} +db.os.inlines = + db.prompt + | db.envar + | db.filename + | db.command + | db.computeroutput + | db.userinput +db.computeroutput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines +db.userinput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines +db.prompt.inlines = db._text | db.co +div { + db.prompt.role.attribute = attribute role { text } + db.prompt.attlist = + db.prompt.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.prompt = + + ## A character or string indicating the start of an input field in a computer display + element prompt { db.prompt.attlist, db.prompt.inlines* } +} +div { + db.envar.role.attribute = attribute role { text } + db.envar.attlist = + db.envar.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.envar = + + ## A software environment variable + element envar { db.envar.attlist, db._text } +} +div { + db.filename.class.enumeration = + + ## A device + "devicefile" + | + ## A directory + "directory" + | + ## A filename extension + "extension" + | + ## A header file (as for a programming language) + "headerfile" + | + ## A library file + "libraryfile" + | + ## A partition (as of a hard disk) + "partition" + | + ## A symbolic link + "symlink" + db.filename.class.attribute = + + ## Identifies the class of filename + attribute class { db.filename.class.enumeration } + db.filename.path.attribute = + + ## Specifies the path of the filename + attribute path { text } + db.filename.role.attribute = attribute role { text } + db.filename.attlist = + db.filename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.filename.path.attribute? + & db.filename.class.attribute? + db.filename = + + ## The name of a file + element filename { db.filename.attlist, db._text } +} +div { + db.command.role.attribute = attribute role { text } + db.command.attlist = + db.command.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.command = + + ## The name of an executable program or other software command + element command { db.command.attlist, db._text } +} +div { + db.computeroutput.role.attribute = attribute role { text } + db.computeroutput.attlist = + db.computeroutput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.computeroutput = + + ## Data, generally text, displayed or presented by a computer + element computeroutput { + db.computeroutput.attlist, db.computeroutput.inlines* + } +} +div { + db.userinput.role.attribute = attribute role { text } + db.userinput.attlist = + db.userinput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.userinput = + + ## Data entered by the user + element userinput { db.userinput.attlist, db.userinput.inlines* } +} +div { + db.cmdsynopsis.role.attribute = attribute role { text } + db.cmdsynopsis.sepchar.attribute = + + ## Specifies the character that should separate the command and its top-level arguments + attribute sepchar { text } + db.cmdsynopsis.cmdlength.attribute = + + ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + attribute cmdlength { text } + db.cmdsynopsis.label.attribute = db.label.attribute + db.cmdsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.cmdsynopsis.attlist = + db.cmdsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.cmdsynopsis.sepchar.attribute? + & db.cmdsynopsis.cmdlength.attribute? + & db.cmdsynopsis.label.attribute? + & db.cmdsynopsis.packageref.attribute? + db.cmdsynopsis.info = db._info.title.forbidden + db.cmdsynopsis = + + ## A syntax summary for a software command + element cmdsynopsis { + db.cmdsynopsis.attlist, + db.cmdsynopsis.info, + (db.command | db.arg | db.group | db.sbr)+, + db.synopfragment* + } +} +db.rep.enumeration = + + ## Can not be repeated. + "norepeat" + | + ## Can be repeated. + "repeat" +db.rep.attribute = + + ## Indicates whether or not repetition is possible. + [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration } +db.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted without indication. + "plain" + | + ## Formatted to indicate that it is required. + "req" +db.choice.opt.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration } +db.choice.req.attribute = + + ## Indicates optionality. + [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration } +div { + db.arg.role.attribute = attribute role { text } + db.arg.rep.attribute = db.rep.attribute + db.arg.choice.attribute = db.choice.opt.attribute + db.arg.attlist = + db.arg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.arg.rep.attribute? + & db.arg.choice.attribute? + db.arg = + + ## An argument in a cmdsynopsis + element arg { + db.arg.attlist, + (db._text + | db.arg + | db.group + | db.option + | db.synopfragmentref + | db.sbr)* + } +} +div { + db.group.role.attribute = attribute role { text } + db.group.rep.attribute = db.rep.attribute + db.group.choice.attribute = db.choice.opt.attribute + db.group.attlist = + db.group.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.rep.attribute? + & db.group.choice.attribute? + db.group = + + ## A group of elements in a cmdsynopsis + element group { + db.group.attlist, + (db.arg + | db.group + | db.option + | db.synopfragmentref + | db.replaceable + | db.sbr)+ + } +} +div { + db.sbr.role.attribute = attribute role { text } + db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes + db.sbr = + + ## An explicit line break in a command synopsis + element sbr { db.sbr.attlist, empty } +} +div { + db.synopfragment.role.attribute = attribute role { text } + db.synopfragment.attlist = + db.synopfragment.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.synopfragment = + + ## A portion of a cmdsynopsis broken out from the main body of the synopsis + element synopfragment { + db.synopfragment.attlist, (db.arg | db.group)+ + } +} +div { + db.synopfragmentref.role.attribute = attribute role { text } + db.synopfragmentref.attlist = + db.synopfragmentref.role.attribute? + & db.common.attributes + & db.linkend.attribute + db.synopfragmentref = + + ## A reference to a fragment of a command synopsis + [ + s:pattern [ + s:title [ "Synopsis fragment type constraint" ] + s:rule [ + context = "db:synopfragmentref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on synopfragmentref must point to a synopfragment." + ] + ] + ] + ] + element synopfragmentref { db.synopfragmentref.attlist, text } +} +db.programming.inlines = + db.function + | db.parameter + | db.varname + | db.returnvalue + | db.type + | db.classname + | db.exceptionname + | db.interfacename + | db.methodname + | db.modifier + | db.initializer + | db.buildtarget + | db.oo.inlines + | db.templatename + | db.macroname + | db.unionname + | db.enumname + | db.enumvalue + | db.enumidentifier + | db.typedefname +db.oo.inlines = db.ooclass | db.ooexception | db.oointerface +db.synopsis.blocks = + (db.funcsynopsis + | db.classsynopsis + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.enumsynopsis + | db.typedefsynopsis + | db.packagesynopsis + | db.macrosynopsis + | db.unionsynopsis) + | db.cmdsynopsis +div { + db.synopsis.role.attribute = attribute role { text } + db.synopsis.label.attribute = db.label.attribute + db.synopsis.attlist = + db.synopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.synopsis.label.attribute? + db.synopsis = + + ## A general-purpose element for representing the syntax of commands or functions + element synopsis { db.synopsis.attlist, db.verbatim.contentmodel } +} +div { + db.synopsisinfo.role.attribute = attribute role { text } + db.synopsisinfo.attlist = + db.synopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.synopsisinfo = + + ## Information supplementing synopsis + element synopsisinfo { + db.synopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcsynopsis.info = db._info.title.forbidden + db.funcsynopsis.role.attribute = attribute role { text } + db.funcsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.funcsynopsis.attlist = + db.funcsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.funcsynopsis.packageref.attribute? + db.funcsynopsis = + + ## The syntax summary for a function definition + element funcsynopsis { + db.funcsynopsis.attlist, + db.funcsynopsis.info, + (db.funcsynopsisinfo | db.funcprototype)+ + } +} +div { + db.funcsynopsisinfo.role.attribute = attribute role { text } + db.funcsynopsisinfo.attlist = + db.funcsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.funcsynopsisinfo = + + ## Information supplementing the funcdefs of a funcsynopsis + element funcsynopsisinfo { + db.funcsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcprototype.role.attribute = attribute role { text } + db.funcprototype.attlist = + db.funcprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcprototype = + + ## The prototype of a function + element funcprototype { + db.funcprototype.attlist, + db.modifier*, + db.funcdef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.funcdef.role.attribute = attribute role { text } + db.funcdef.attlist = + db.funcdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcdef = + + ## A function (subroutine) name and its return type + element funcdef { + db.funcdef.attlist, + (db._text | db.type | db.templatename | db.void | db.function)* + } +} +div { + db.function.role.attribute = attribute role { text } + db.function.attlist = + db.function.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.function = + + ## The name of a function or subroutine, as in a programming language + element function { db.function.attlist, db._text } +} +div { + db.void.role.attribute = attribute role { text } + db.void.attlist = + db.void.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.void = + + ## An empty element in a function synopsis indicating that the function in question takes no arguments + element void { db.void.attlist, empty } +} +div { + db.varargs.role.attribute = attribute role { text } + db.varargs.attlist = + db.varargs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varargs = + + ## An empty element in a function synopsis indicating a variable number of arguments + element varargs { db.varargs.attlist, empty } +} +div { + db.group.paramdef.role.attribute = attribute role { text } + db.group.paramdef.choice.attribute = db.choice.opt.attribute + db.group.paramdef.attlist = + db.group.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.paramdef.choice.attribute? + db.group.paramdef = + + ## A group of parameters + element group { + db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+ + } +} +div { + db.paramdef.role.attribute = attribute role { text } + db.paramdef.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted to indicate that it is required. + "req" + db.paramdef.choice.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] + attribute choice { db.paramdef.choice.enumeration } + db.paramdef.attlist = + db.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.paramdef.choice.attribute? + db.paramdef = + + ## Information about a function parameter in a programming language + element paramdef { + db.paramdef.attlist, + (db._text + | db.initializer + | db.modifier + | db.type + | db.templatename + | db.parameter + | db.funcparams)* + } +} +div { + db.funcparams.role.attribute = attribute role { text } + db.funcparams.attlist = + db.funcparams.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcparams = + + ## Parameters for a function referenced through a function pointer in a synopsis + element funcparams { db.funcparams.attlist, db._text } +} +div { + db.classsynopsis.info = db._info.title.forbidden + db.classsynopsis.role.attribute = attribute role { text } + db.classsynopsis.class.enumeration = + + ## This is the synopsis of a class + "class" + | + ## This is the synopsis of an interface + "interface" + db.classsynopsis.class.attribute = + + ## Specifies the nature of the synopsis + attribute class { db.classsynopsis.class.enumeration } + db.classsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.classsynopsis.attlist = + db.classsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.classsynopsis.class.attribute? + & db.classsynopsis.packageref.attribute? + db.classsynopsis = + + ## The syntax summary for a class definition + element classsynopsis { + db.classsynopsis.attlist, + db.classsynopsis.info, + db.classsynopsisinfo*, + db.templatename*, + db.oo.inlines, + (db.template + | db.ooexception + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.classsynopsisinfo)* + } +} +div { + db.classsynopsisinfo.role.attribute = attribute role { text } + db.classsynopsisinfo.attlist = + db.classsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.classsynopsisinfo = + + ## Information supplementing the contents of a classsynopsis + element classsynopsisinfo { + db.classsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.ooclass.role.attribute = attribute role { text } + db.ooclass.attlist = + db.ooclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooclass = + + ## A class in an object-oriented programming language + element ooclass { + db.ooclass.attlist, + (db.package | db.modifier)*, + db.classname, + db.modifier* + } +} +div { + db.oointerface.role.attribute = attribute role { text } + db.oointerface.attlist = + db.oointerface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.oointerface = + + ## An interface in an object-oriented programming language + element oointerface { + db.oointerface.attlist, + (db.package | db.modifier)*, + db.interfacename, + db.modifier* + } +} +div { + db.ooexception.role.attribute = attribute role { text } + db.ooexception.attlist = + db.ooexception.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooexception = + + ## An exception in an object-oriented programming language + element ooexception { + db.ooexception.attlist, + (db.package | db.modifier)*, + db.exceptionname, + db.modifier* + } +} +db.modifier.xml.space.attribute = + + ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + attribute xml:space { + + ## Extra whitespace and line breaks must be preserved. + [ + # Ideally the definition of xml:space used on modifier would be + # different from the definition used on the verbatim elements. The + # verbatim elements forbid the use of xml:space="default" which + # wouldn't be a problem on modifier. But doing that causes the + # generated XSD schemas to be broken so I'm just reusing the existing + # definition for now. It won't be backwards incompatible to fix this + # problem in the future. + # | ## Extra whitespace and line breaks are not preserved. + # "default" + + ] + "preserve" + } +div { + db.modifier.role.attribute = attribute role { text } + db.modifier.attlist = + db.modifier.xml.space.attribute? + & db.modifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.modifier = + + ## Modifiers in a synopsis + element modifier { db.modifier.attlist, db._text } +} +div { + db.interfacename.role.attribute = attribute role { text } + db.interfacename.attlist = + db.interfacename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.interfacename = + + ## The name of an interface + element interfacename { db.interfacename.attlist, db._text } +} +div { + db.exceptionname.role.attribute = attribute role { text } + db.exceptionname.attlist = + db.exceptionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.exceptionname = + + ## The name of an exception + element exceptionname { db.exceptionname.attlist, db._text } +} +div { + db.fieldsynopsis.info = db._info.title.forbidden + db.fieldsynopsis.role.attribute = attribute role { text } + db.fieldsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.fieldsynopsis.attlist = + db.fieldsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.fieldsynopsis.packageref.attribute? + db.fieldsynopsis = + + ## The name of a field in a class definition + element fieldsynopsis { + db.fieldsynopsis.attlist, + db.fieldsynopsis.info, + db.synopsisinfo*, + db.modifier*, + (db.type | db.templatename)*, + db.varname, + db.modifier*, + db.initializer?, + db.synopsisinfo* + } +} +div { + db.initializer.role.attribute = attribute role { text } + db.initializer.attlist = + db.initializer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines + db.initializer = + + ## The initializer for a fieldsynopsis + element initializer { + db.initializer.attlist, db.initializer.inlines* + } +} +div { + db.constructorsynopsis.info = db._info.title.forbidden + db.constructorsynopsis.role.attribute = attribute role { text } + db.constructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.constructorsynopsis.attlist = + db.constructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.constructorsynopsis.packageref.attribute? + db.constructorsynopsis = + + ## A syntax summary for a constructor + element constructorsynopsis { + db.constructorsynopsis.attlist, + db.constructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.destructorsynopsis.info = db._info.title.forbidden + db.destructorsynopsis.role.attribute = attribute role { text } + db.destructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.destructorsynopsis.attlist = + db.destructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.destructorsynopsis.packageref.attribute? + db.destructorsynopsis = + + ## A syntax summary for a destructor + element destructorsynopsis { + db.destructorsynopsis.attlist, + db.destructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.methodsynopsis.info = db._info.title.forbidden + db.methodsynopsis.role.attribute = attribute role { text } + db.methodsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.methodsynopsis.attlist = + db.methodsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.methodsynopsis.packageref.attribute? + db.methodsynopsis = + + ## A syntax summary for a method + element methodsynopsis { + db.methodsynopsis.attlist, + db.methodsynopsis.info, + db.synopsisinfo*, + (db.templatename | db.modifier)*, + (db.type | db.void)?, + db.methodname, + db.templatename*, + ((db.methodparam | db.group.methodparam)+ | db.void), + (db.exceptionname | db.modifier | db.templatename)*, + db.synopsisinfo* + } +} +div { + db.methodname.role.attribute = attribute role { text } + db.methodname.attlist = + db.methodname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.methodname = + + ## The name of a method + element methodname { db.methodname.attlist, db._text } +} +div { + db.methodparam.role.attribute = attribute role { text } + db.methodparam.rep.attribute = db.rep.attribute + db.methodparam.choice.attribute = db.choice.req.attribute + db.methodparam.attlist = + db.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.methodparam.rep.attribute? + & db.methodparam.choice.attribute? + db.methodparam = + + ## Parameters to a method + element methodparam { + db.methodparam.attlist, + (db.modifier | db.type | db.templatename)*, + ((db.parameter, db.initializer?) | db.funcparams), + db.modifier* + } +} +div { + db.group.methodparam.role.attribute = attribute role { text } + db.group.methodparam.choice.attribute = db.choice.opt.attribute + db.group.methodparam.attlist = + db.group.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.methodparam.choice.attribute? + db.group.methodparam = + + ## A group of method parameters + element group { + db.group.methodparam.attlist, + (db.methodparam | db.group.methodparam)+ + } +} +div { + db.varname.role.attribute = attribute role { text } + db.varname.attlist = + db.varname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varname = + + ## The name of a variable + element varname { db.varname.attlist, db._text } +} +div { + db.buildtarget.role.attribute = attribute role { text } + db.buildtarget.attlist = + db.buildtarget.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.buildtarget = + + ## Target of a build + element buildtarget { db.buildtarget.attlist, db._text } +} +div { + db.returnvalue.role.attribute = attribute role { text } + db.returnvalue.attlist = + db.returnvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.returnvalue = + + ## The value returned by a function + element returnvalue { db.returnvalue.attlist, db._text } +} +div { + db.type.role.attribute = attribute role { text } + db.type.class.enumeration = + + ## Combined type is union of nested types + "union" + | + ## Combined type is intersection of nested types + "intersection" + db.type.class.attribute = + + ## Specifies the way how are nested types combined together + attribute class { db.type.class.enumeration } + db.type.attlist = + db.type.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.type.class.attribute? + db.type = + + ## The classification of a value + element type { + db.type.attlist, (db._text | db.programming.inlines)* + } +} +div { + db.classname.role.attribute = attribute role { text } + db.classname.attlist = + db.classname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.classname = + + ## The name of a class, in the object-oriented programming sense + element classname { db.classname.attlist, db._text } +} +div { + db.templatename.role.attribute = attribute role { text } + db.templatename.attlist = + db.templatename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.templatename = + + ## The identifier for a template, in the generic programming sense + element templatename { db.templatename.attlist, db._text } +} +div { + db.template.role.attribute = attribute role { text } + db.template.attlist = + db.template.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.template = + + ## The definition of a template, in the generic programming sense + element template { + db.template.attlist, + (((db.modifier | db.type | db._text)*, + db.templatename, + (db.modifier | db.type | db._text)*) + | db.specializedtemplate) + } +} +div { + db.specializedtemplate.role.attribute = attribute role { text } + db.specializedtemplate.attlist = + db.specializedtemplate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.specializedtemplate = + + ## The specialization of a template identifier, in the generic programming sense + element specializedtemplate { + db.specializedtemplate.attlist, + (db.modifier | db.type | db._text)* + } +} +div { + db.packagesynopsis.info = db._info.title.forbidden + db.packagesynopsis.role.attribute = attribute role { text } + db.packagesynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.packagesynopsis.attlist = + db.packagesynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.packagesynopsis.packageref.attribute? + db.packagesynopsis = + + ## The syntax summary for a package definition + element packagesynopsis { + db.packagesynopsis.attlist, + db.packagesynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.package, + db.modifier*, + (db.synopsis.blocks | db.synopsisinfo)* + } +} +div { + db.macroname.role.attribute = attribute role { text } + db.macroname.attlist = + db.macroname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroname = + + ## The name of a macro (a code-generating function) + element macroname { db.macroname.attlist, db._text } +} +div { + db.macrosynopsis.info = db._info.title.forbidden + db.macrosynopsis.role.attribute = attribute role { text } + db.macrosynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.macrosynopsis.attlist = + db.macrosynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.macrosynopsis.packageref.attribute? + db.macrosynopsis = + + ## The syntax summary for a macro definition (code-generating function) + element macrosynopsis { + db.macrosynopsis.attlist, + db.macrosynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.macroname, + (db.package | db.modifier)*, + db.macroprototype+, + db.synopsisinfo* + } +} +div { + db.macroprototype.role.attribute = attribute role { text } + db.macroprototype.attlist = + db.macroprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroprototype = + + ## The prototype of a macro (code-generating function) + element macroprototype { + db.macroprototype.attlist, + db.modifier*, + db.macrodef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.macrodef.role.attribute = attribute role { text } + db.macrodef.attlist = + db.macrodef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macrodef = + + ## A macro name and its return type + element macrodef { + db.macrodef.attlist, (db.type | db.templatename)*, db.macroname + } +} +div { + db.unionname.role.attribute = attribute role { text } + db.unionname.attlist = + db.unionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.unionname = + + ## The name of a union of types + element unionname { db.unionname.attlist, db._text } +} +div { + db.union.role.attribute = attribute role { text } + db.union.attlist = + db.union.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.union = + + ## The definition of a union of types, which may be more than a name + element union { db.union.attlist, db.type+ } +} +div { + db.unionsynopsis.info = db._info.title.forbidden + db.unionsynopsis.role.attribute = attribute role { text } + # N.B. the enumeration is explicitly identical to the enumeration + # on enumsynopsis by default. + db.unionsynopsis.ordered.attribute = + + ## Indicates how the value of a union is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.unionsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.unionsynopsis.attlist = + db.unionsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.unionsynopsis.ordered.attribute? + & db.unionsynopsis.packageref.attribute? + db.unionsynopsis = + + ## The syntax summary for a union-of-types definition + element unionsynopsis { + db.unionsynopsis.attlist, + db.unionsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.unionname?, + db.union, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.enumname.role.attribute = attribute role { text } + db.enumname.attlist = + db.enumname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumname = + + ## The name of an enumeration + element enumname { db.enumname.attlist, db._text } +} +div { + db.enumvalue.role.attribute = attribute role { text } + db.enumvalue.attlist = + db.enumvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumvalue = + + ## The value an enumerated type can take + element enumvalue { db.enumvalue.attlist, db._text } +} +div { + db.enumitemdescription.role.attribute = attribute role { text } + db.enumitemdescription.attlist = + db.enumitemdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitemdescription = + + ## The description of a value an enumerated type can take + element enumitemdescription { + db.enumitemdescription.attlist, db.all.inlines* + } +} +div { + db.enumidentifier.role.attribute = attribute role { text } + db.enumidentifier.attlist = + db.enumidentifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumidentifier = + + ## The identifier of a value an enumerated type can take + element enumidentifier { db.enumidentifier.attlist, db._text } +} +div { + db.enumitem.role.attribute = attribute role { text } + db.enumitem.attlist = + db.enumitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitem = + + ## A value an enumerated type can take and its description + element enumitem { + db.enumitem.attlist, + db.enumidentifier, + db.enumvalue*, + db.enumitemdescription? + } +} +div { + db.enumsynopsis.info = db._info.title.forbidden + db.enumsynopsis.role.attribute = attribute role { text } + db.enumsynopsis.ordered.enumeration = + + ## Value of enum is specified explicitly using enumvalue + "0" + | + ## Value of enum is inferred from its position + "1" + db.enumsynopsis.ordered.attribute = + + ## Indicates how the value of an enumeration is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.enumsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.enumsynopsis.attlist = + db.enumsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.enumsynopsis.ordered.attribute? + & db.enumsynopsis.packageref.attribute? + db.enumsynopsis = + + ## The syntax summary for an enumerated-type definition + element enumsynopsis { + db.enumsynopsis.attlist, + db.enumsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + (db.enumname, db.modifier*)?, + db.enumitem+, + db.synopsisinfo* + } +} +div { + db.typedefname.role.attribute = attribute role { text } + db.typedefname.attlist = + db.typedefname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.typedefname = + + ## The name of a type alias + element typedefname { db.typedefname.attlist, db._text } +} +div { + db.typedefsynopsis.info = db._info.title.forbidden + db.typedefsynopsis.role.attribute = attribute role { text } + db.typedefsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.typedefsynopsis.attlist = + db.typedefsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.typedefsynopsis.packageref.attribute? + db.typedefsynopsis = + + ## The syntax summary for a type-alias definition + element typedefsynopsis { + db.typedefsynopsis.attlist, + db.typedefsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.typedefname, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.programlisting.role.attribute = attribute role { text } + db.programlisting.width.attribute = db.width.characters.attribute + db.programlisting.attlist = + db.programlisting.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.programlisting.width.attribute? + db.programlisting = + + ## A literal listing of all or part of a program + element programlisting { + db.programlisting.attlist, db.verbatim.contentmodel + } +} +db.admonition.blocks = + db.caution | db.danger | db.important | db.note | db.tip | db.warning +db.admonition.contentmodel = db._info.title.only, db.all.blocks+ +div { + db.caution.role.attribute = attribute role { text } + db.caution.attlist = + db.caution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caution = + + ## A note of caution + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caution" + ] + ] + ] + ] + element caution { db.caution.attlist, db.admonition.contentmodel } +} +div { + db.danger.role.attribute = attribute role { text } + db.danger.attlist = + db.danger.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.danger = + + ## An admonition set off from the text indicating hazardous situation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of danger" + ] + ] + ] + ] + element danger { db.danger.attlist, db.admonition.contentmodel } +} +div { + db.important.role.attribute = attribute role { text } + db.important.attlist = + db.important.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.important = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of important" + ] + ] + ] + ] + element important { + db.important.attlist, db.admonition.contentmodel + } +} +div { + db.note.role.attribute = attribute role { text } + db.note.attlist = + db.note.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.note = + + ## A message set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of note" + ] + ] + ] + ] + element note { db.note.attlist, db.admonition.contentmodel } +} +div { + db.tip.role.attribute = attribute role { text } + db.tip.attlist = + db.tip.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tip = + + ## A suggestion to the user, set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of tip" + ] + ] + ] + ] + element tip { db.tip.attlist, db.admonition.contentmodel } +} +div { + db.warning.role.attribute = attribute role { text } + db.warning.attlist = + db.warning.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.warning = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of warning" + ] + ] + ] + ] + element warning { db.warning.attlist, db.admonition.contentmodel } +} +db.error.inlines = + db.errorcode | db.errortext | db.errorname | db.errortype +div { + db.errorcode.role.attribute = attribute role { text } + db.errorcode.attlist = + db.errorcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorcode = + + ## An error code + element errorcode { db.errorcode.attlist, db._text } +} +div { + db.errorname.role.attribute = attribute role { text } + db.errorname.attlist = + db.errorname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorname = + + ## An error name + element errorname { db.errorname.attlist, db._text } +} +div { + db.errortext.role.attribute = attribute role { text } + db.errortext.attlist = + db.errortext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortext = + + ## An error message. + element errortext { db.errortext.attlist, db._text } +} +div { + db.errortype.role.attribute = attribute role { text } + db.errortype.attlist = + db.errortype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortype = + + ## The classification of an error message + element errortype { db.errortype.attlist, db._text } +} +db.systemitem.inlines = db._text | db.co +div { + db.systemitem.class.enumeration = + + ## A daemon or other system process (syslogd) + "daemon" + | + ## A domain name (example.com) + "domainname" + | + ## An ethernet address (00:05:4E:49:FD:8E) + "etheraddress" + | + ## An event of some sort (SIGHUP) + "event" + | + ## An event handler of some sort (hangup) + "eventhandler" + | + ## A filesystem (ext3) + "filesystem" + | + ## A fully qualified domain name (my.example.com) + "fqdomainname" + | + ## A group name (wheel) + "groupname" + | + ## A network interface (eth0) + "interface" + | + ## An IP address (127.0.0.1) + "ipaddress" + | + ## A library (libncurses) + "library" + | + ## A macro + "macro" + | + ## A netmask (255.255.255.192) + "netmask" + | + ## A newsgroup (comp.text.xml) + "newsgroup" + | + ## An operating system name (Hurd) + "osname" + | + ## A process (gnome-cups-icon) + "process" + | + ## A protocol (ftp) + "protocol" + | + ## A resource + "resource" + | + ## A security context (a role, permission, or security token, for example) + "securitycontext" + | + ## A server (mail.example.com) + "server" + | + ## A service (ppp) + "service" + | + ## A system name (hephaistos) + "systemname" + | + ## A user name (ndw) + "username" + db.systemitem.class-enum.attribute = + + ## Identifies the nature of the system item + attribute class { db.systemitem.class.enumeration }? + db.systemitem.class-other.attribute = + + ## Identifies the nature of the non-standard system item + attribute otherclass { xsd:NMTOKEN } + db.systemitem.class-other.attributes = + + ## Identifies the kind of systemitemgraphic identifier + attribute class { + + ## Indicates that the system item is some 'other' kind. + "other" + } + & db.systemitem.class-other.attribute + db.systemitem.class.attribute = + db.systemitem.class-enum.attribute + | db.systemitem.class-other.attributes + db.systemitem.role.attribute = attribute role { text } + db.systemitem.attlist = + db.systemitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.systemitem.class.attribute? + db.systemitem = + + ## A system-related item or term + element systemitem { db.systemitem.attlist, db.systemitem.inlines* } +} +div { + db.option.role.attribute = attribute role { text } + db.option.attlist = + db.option.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.option = + + ## An option for a software command + element option { db.option.attlist, db._text } +} +div { + db.optional.role.attribute = attribute role { text } + db.optional.attlist = + db.optional.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.optional = + + ## Optional information + element optional { db.optional.attlist, (db._text | db.optional)* } +} +div { + db.property.role.attribute = attribute role { text } + db.property.attlist = + db.property.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.property = + + ## A unit of data associated with some part of a computer system + element property { db.property.attlist, db._text } +} +div { + db.topic.status.attribute = db.status.attribute + db.topic.role.attribute = attribute role { text } + db.topic.type.attribute = + + ## Identifies the topic type + attribute type { text } + db.topic.attlist = + db.topic.role.attribute? + & db.topic.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.topic.status.attribute? + db.topic.info = db._info.title.req + db.topic = + + ## A modular unit of documentation not part of any particular narrative flow + element topic { + db.topic.attlist, + db.topic.info, + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* + } +} +start = + db.assembly + | db.structure + | db.resources + | db.relationships + | db.transforms + | db.module +db.grammar.attribute = + + ## Identifies the markup grammar of a resource + attribute grammar { text } +div { + db.assembly.role.attribute = attribute role { text } + db.assembly.attlist = + db.assembly.role.attribute? & db.common.attributes + db.assembly.info = db._info + db.assembly = + + ## Defines the hierarchy and relationships for a collection of resources + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:assembly" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element assembly { + db.assembly.attlist, + db.assembly.info, + db.resources+, + db.structure*, + db.relationships*, + db.transforms? + } + | db.xi.include +} +div { + db.resources.role.attribute = attribute role { text } + db.resources.grammar.attribute = db.grammar.attribute + db.resources.attlist = + db.resources.role.attribute? + & db.resources.grammar.attribute? + & db.common.attributes + db.resources.info = db._info.title.forbidden + db.resources = + + ## Contains one or more resource objects that are managed by the assembly + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:resources" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element resources { + db.resources.attlist, + db.resources.info?, + (db.description*, db.resource+) + } + | db.xi.include +} +div { + db.resource.role.attribute = attribute role { text } + db.resource.href.attribute = + + ## Indentifies the location of the data by URI + attribute href { xsd:anyURI } + db.resource.grammar.attribute = db.grammar.attribute + db.resource.transform.attribute = + + ## Identifies the markup grammar of a resource + attribute transform { xsd:NMTOKEN } + db.resource.attlist = + db.resource.role.attribute? + & (db.resource.transform.attribute | db.resource.grammar.attribute)? + & db.common.attributes + db.resource = + + ## Identifies an object managed within the assembly + element resource { + db.resource.attlist, db.resource.href.attribute, db.description* + } +} +div { + db.structure.role.attribute = attribute role { text } + db.structure.type.attribute = + + ## Identifies the structure type of the structure + attribute type { xsd:NMTOKEN } + db.structure.resourceref.attribute = + + ## Indicates a single resource from which to construct this structure + attribute resourceref { xsd:IDREF } + db.structure.defaultformat.attribute = + + ## Identifies the default format of the structure + attribute defaultformat { xsd:NMTOKEN } + db.structure.renderas.attribute = + + ## Specifies the DocBook element to which this unit should be renamed + attribute renderas { xsd:QName } + db.structure.attlist = + db.structure.role.attribute? + & db.structure.type.attribute? + & db.structure.resourceref.attribute? + & db.structure.renderas.attribute? + & db.structure.defaultformat.attribute? + & db.common.attributes + db.structure.info = db.info? + db.structure = + + ## Describes the structure of a document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:structure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + s:pattern [ + s:title [ "Specification of renderas" ] + s:rule [ + context = "db:structure" + s:assert [ + test = "not(@renderas and db:output/@renderas)" + "The renderas attribute can be specified on either the structure or output, but not both." + ] + ] + ] + ] + element structure { + db.structure.attlist, + (db.output* & db.filterin? & db.filterout? & db.structure.info), + db.merge?, + db.revhistory?, + db.module+ + } +} +div { + db.output.role.attribute = attribute role { text } + db.output.chunk.attribute = + + ## Specifies chunking for this module + [ a:defaultValue = "auto" ] + attribute chunk { db.module.chunk.enumeration } + db.output.file.attribute = + + ## Specifies the output file for this module or structure + attribute file { xsd:anyURI } + db.output.renderas.attribute = + + ## Specifies the DocBook element to which this unit should be renamed + attribute renderas { xsd:QName } + db.output.transform.attribute = + + ## Specifies the transformation that should be applied to this unit + attribute transform { xsd:NMTOKEN } + db.output.suppress.attribute = + + ## Indicates whether or not this unit should be suppressed + attribute suppress { xsd:boolean } + db.output.attlist = + db.output.role.attribute? + & db.common.attributes + & db.output.chunk.attribute? + & db.output.file.attribute? + & db.output.renderas.attribute? + & db.output.transform.attribute? + & db.output.suppress.attribute? + db.output = + + ## Specify an output format and/or file name and/or renderas + element output { db.output.attlist, empty } +} +div { + db.merge.role.attribute = attribute role { text } + db.merge.resourceref.attribute = + + ## Indicates a single resource from which to read merged info + attribute resourceref { xsd:IDREF } + db.merge.attlist = + db.merge.role.attribute? + & db.merge.resourceref.attribute? + & db.common.attributes + db.merge = + + ## A wrapper for information that a module overrides in the resource it includes + element merge { db.merge.attlist, (db._title & db.info.elements*) } +} +div { + db.module.role.attribute = attribute role { text } + db.module.chunk.enumeration = + + ## This module will be in a chunk + "true" + | + ## This module will not be in a chunk + "false" + | + ## Chunking of this module depends on the overall chunking algorithm + "auto" + db.module.chunk.attribute = + + ## Specifies chunking for this module + [ a:defaultValue = "auto" ] + attribute chunk { db.module.chunk.enumeration } + db.module.resourceref.attribute = + + ## Identifies a single resource or structure within the assembly from which to construct this module + attribute resourceref { xsd:IDREF } + db.module.omittitles.attribute = + + ## Indicates if titles should be omitted when including a resource + attribute omittitles { xsd:boolean }? + db.module.contentonly.attribute = + + ## Indicates if the root element should be omitted when including the resource (copying only the children) + attribute contentonly { xsd:boolean }? + db.module.renderas.attribute = + + ## Changes the name of the root element of the included resource to the specified name + attribute renderas { xsd:QName } + db.module.attlist = + db.module.role.attribute? + & db.module.chunk.attribute? + & db.module.resourceref.attribute? + & db.module.omittitles.attribute? + & db.module.contentonly.attribute? + & db.module.renderas.attribute? + & db.common.attributes + db.module.info = db.info? + db.module = + + ## A modular component within a structure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:module" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + s:pattern [ + s:title [ "Specification of renderas" ] + s:rule [ + context = "db:module" + s:assert [ + test = "not(@renderas and db:output/@renderas)" + "The renderas attribute can be specified on either the structure or output, but not both." + ] + ] + ] + ] + element module { + db.module.attlist, + ((db.output | db.filterin | db.filterout)*, + db.module.info, + db.merge?, + db.module*) + } + | db.xi.include +} +div { + db.filterout.role.attribute = attribute role { text } + db.filterout.attlist = + db.filterout.role.attribute? & db.common.attributes + db.filterout = + + ## Elements with effectivity attributes matching this element are suppressed + element filterout { db.filterout.attlist, empty } +} +div { + db.filterin.role.attribute = attribute role { text } + db.filterin.attlist = + db.filterin.role.attribute? & db.common.attributes + db.filterin = + + ## Elements with effectivity attributes matching this element are allowed + element filterin { db.filterin.attlist, empty } +} +div { + db.relationships.role.attribute = attribute role { text } + db.relationships.type.attribute = + + ## Identifies the type of the contained relationships + attribute type { xsd:NMTOKENS } + db.relationships.attlist = + db.relationships.role.attribute? + & db.relationships.type.attribute? + & db.common.attributes + db.relationships.info = db._info + db.relationships = + + ## Groups relationship elements to define associations between resources + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:relationships" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element relationships { + db.relationships.attlist, + db.relationships.info, + (db.relationship | db.instance)+ + } + | db.xi.include +} +div { + db.relationship.role.attribute = attribute role { text } + db.relationship.type.attribute = + + ## Identifies the type of the relationship + attribute type { xsd:NMTOKEN } + db.relationship.attlist = + db.relationship.role.attribute? + & db.relationship.type.attribute? + & db.linkend.attribute? + & db.common.attributes + db.relationship = + + ## A relationship associates one or more resources + element relationship { + db.relationship.attlist, db.association, db.instance+ + } +} +div { + db.association.role.attribute = attribute role { text } + db.association.attlist = + db.association.role.attribute? + & db.linkend.attribute? + & db.common.attributes + db.association = + + ## Identifies the type of relationship between one or more resources + element association { db.association.attlist, text? } +} +div { + db.instance.role.attribute = attribute role { text } + db.instance.linking.attribute = + + ## Specifies the type of link for this instance + attribute linking { xsd:NMTOKENS } + db.instance.attlist = + db.instance.role.attribute? + & db.instance.linking.attribute? + & db.common.attributes + db.instance = + + ## Identifies a resource that is part of a relationship + element instance { + db.instance.attlist, db.linkend.attribute, empty + } +} +div { + db.transforms.role.attribute = attribute role { text } + db.transforms.attlist = + db.transforms.role.attribute? & db.common.attributes + db.transforms.info = db._info + db.transforms = + + ## List of transforms for converting from non-DocBook schemas + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:transforms" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element transforms { + db.transforms.attlist, db.transforms.info, db.transform+ + } + | db.xi.include +} +div { + db.transform.role.attribute = attribute role { text } + db.transform.grammar.attribute = db.grammar.attribute + db.transform.href.attribute = + + ## Indentifies the location of the data by URI + attribute href { xsd:anyURI } + db.transform.name.attribute = + + ## The name of the transform + attribute name { xsd:NMTOKEN } + db.transform.attlist = + db.transform.role.attribute? + & (db.transform.grammar.attribute | db.transform.name.attribute) + & db.transform.href.attribute + & db.common.attributes + db.transform = + + ## Identifies a transform for converting from a non-DocBook schema + element transform { db.transform.attlist, empty } +} +div { + db.description.role.attribute = attribute role { text } + db.description.attlist = + db.description.role.attribute? & db.common.attributes + db.description = + + ## A description of a resource or resources + element description { db.description.attlist, db._text } +} +div { + db.any.other.attribute = attribute * - local:* { text } + db.xi.include.attlist = + attribute href { + xsd:anyURI { pattern = "[^#]+" } + }?, + [ a:defaultValue = "xml" ] attribute parse { "xml" | "text" }?, + attribute xpointer { text }?, + attribute fragid { text }?, + attribute set-xml-id { text }?, + attribute encoding { text }?, + attribute accept { text }?, + attribute accept-language { text }?, + db.any.other.attribute* + db.xi.include = + + ## An XInclude + element xi:include { db.xi.include.attlist, db.xi.fallback? } +} +div { + # The fallback element has no attributes + db.xi.fallback = + + ## An XInclude fallback + element xi:fallback { db.all.blocks+ | db.all.inlines+ | db._any* } +} diff --git a/catalog/docbook5.2/rng/assemblyxi.rng b/catalog/docbook5.2/rng/assemblyxi.rng new file mode 100755 index 0000000..00c9b74 --- /dev/null +++ b/catalog/docbook5.2/rng/assemblyxi.rng @@ -0,0 +1,18359 @@ + + + + + + + + + + + + + + +
+ + + Any attribute, including any attribute in any namespace + + + + + + Any attribute in any other explicit namespace + + + + + + + + + + + + + + Any element from almost any namespace + + + + + + + + + + + + + + +
+ + + Designates the computer or chip architecture to which the element applies + + + + + Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + + + + + provides a standard place for application-specific effectivity + + + + + Indicates standards conformance characteristics of the element + + + + + Indicates the operating system to which the element is applicable + + + + + Indicates the editorial revision to which the element belongs + + + + + Indicates something about the security level associated with the element to which it applies + + + + + Indicates the level of user experience for which the element applies + + + + + Indicates the computer vendor to which the element applies + + + + + Indicates the word size (width in bits) of the computer architecture to which the element applies + + + + + Indicates the output format (for example, print or epub) to which the element applies + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Points to the element whose content is to be used as the text of the link + + + + + + Points to an internal link target by identifying the value of its xml:id attribute + + + + + + Points to one or more internal link targets by identifying the value of their xml:id attributes + + + + + + Identifies a link target with a URI + + + + + + Identifies the XLink link type + simple + An XLink simple link type + + + + + Identifies the XLink role of the link + + + + + + Identifies the XLink arcrole of the link + + + + + + Identifies the XLink title of the link + + + + + new + An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + replace + An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + embed + An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + other + The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink show behavior of the link + + + + + + onLoad + An application should traverse to the ending resource immediately on loading the starting resource. + onRequest + An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + other + The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink actuate behavior of the link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identifies the unique ID value of the element + + + + + + Specifies the DocBook version of the element and its descendants + + + + + Specifies the natural language of the element and its descendants + + + + + Specifies the base URI of the element and its descendants + + + + + + Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + + + + + Provides the text that is to be generated for a cross reference to the element + + + + + Specifies a keyword or keywords identifying additional style information + + + + + changed + The element has been changed. + added + The element is new (has been added to the document). + deleted + The element has been deleted. + off + Explicitly turns off revision markup for this element. + + + + + Identifies the revision status of the element + + + + + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + + Identifies the direction of text in an element + + + + + + The RDFa Lite vocab + + + + + + The RDFa Lite typeof + + + + + The RDFa Lite property + + + + + The RDFa Lite resource + + + + + The RDFa Lite prefix + + + + + + + + + + + + + + + + + + + + + + + + none + No ID fixup strategy + suffix + ID fixup by concatenating suffixes + auto + ID fixup by creating unique values + + + + + The transclusion ID fixup strategy + + + + + + The transclusion suffix to use when the suffix ID fixup strategy is employed + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + + + + user + No link scope adjustments are made + local + The link scopes are adjusted with the suffix property + near + The link scopes are adjusted based on proximity + global + The link scopes are adjusted based on document order + + + + + The transclusion link scope adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the format of the data + + + + + Indentifies the location of the data by URI + + + + Identifies the location of the data by external identifier (entity name) + + + + + + + continues + Line numbering continues from the immediately preceding element with the same name. + restarts + Line numbering restarts (begins at 1, usually). + + + + + Determines whether line numbering continues from the previous element or restarts + + + + + + numbered + Lines are numbered. + unnumbered + Lines are not numbered. + + + + + Determines whether lines are numbered + + + + + + Specifies the initial line number + + + + + + Identifies the language (i.e. programming language) of the verbatim content + + + + + Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + preserve + Whitespace must be preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies an identifying string for presentation purposes + + + + + Specifies the width (in characters) of the element + + + + + + compact + The spacing should be "compact". + normal + The spacing should be "normal". + + + + + Specifies (a hint about) the spacing of the content + + + + + + 0 + The element should be rendered in the current text flow (with the flow column width). + 1 + The element should be rendered across the full text page. + + + + + Indicates if the element is rendered across the column or the page + + + + + + Identifies the language (i.e. programming language) of the content + + + + + optional + The content describes an optional step or steps. + required + The content describes a required step or steps. + + + + + Specifies if the content is required or optional + + + + + + Specifies style information to be used when rendering the float + + + + + Specifies the width of the element + + + + + Specifies the depth of the element + + + + + Specifies the width of the content rectangle + + + + + Specifies the depth of the content rectangle + + + + + 0 + False (do not scale-to-fit; anamorphic scaling may occur) + 1 + True (scale-to-fit; anamorphic scaling is forbidden) + + + + + Specifies the scaling factor + + + + + + Specifies a classid for a media object player + + + + + Specifies the autoplay setting for a media object player + + + + + center + Centered horizontally + char + Aligned horizontally on the specified character + justify + Fully justified (left and right margins or edges) + left + Left aligned + right + Right aligned + + + + + bottom + Aligned on the bottom of the region + middle + Centered vertically + top + Aligned on the top of the region + + + + + doi + A digital object identifier. + isbn + An international standard book number. + isrn + An international standard technical report number (ISO 10444). + issn + An international standard serial number. + istc + An international standard text code. + libraryofcongress + A Library of Congress reference number. + pubsnumber + A publication number (an internal number or possibly organizational standard). + uri + A Uniform Resource Identifier + + + + + + Identifies the kind of bibliographic identifier + + + + + + + Identifies the nature of the non-standard bibliographic identifier + + + + + + + Identifies the kind of bibliographic identifier + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + article + An article + bbs + A bulletin board system + book + A book + cdrom + A CD-ROM + chapter + A chapter (as of a book) + dvd + A DVD + emailmessage + An email message + gopher + A gopher page + journal + A journal + manuscript + A manuscript + newsposting + A posting to a newsgroup + part + A part (as of a book) + refentry + A reference entry + section + A section (as of a book or article) + series + A series + set + A set (as of books) + webpage + A web page + wiki + A wiki page + other + Some other kind of work + + + + + + + + + Identifies the nature of the published work + + + + + + + Identifies the nature of some other kind of published work + + + + + + + Identifies that this is some other kind of published work + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text of the title of a section of a document or of a formal block-level element + + + + + + +
+
+ + + + + + + + + + + + + + + The abbreviation of a title + + + + + + +
+
+ + + + + + + + + + + + + + + The subtitle of a document + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with a required title + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a title + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a required title + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block without a title + + + + + + +
+
+ + + + + + Identifies the controlled vocabulary used by this set's terms + + + + + + + + + + + + + + + + + + A set of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + Specifies a ranking for this subject relative to other subjects in the same set + + + + + + + + + + + + + + + + + One of a group of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + + + + + + + + + + A term in a group of terms describing the subject matter of a document + + + + +
+
+ + + + + + + + + + + + + + + A set of keywords describing the content of a document + + + + + + +
+
+ + + + + + + + + + + + + + + One of a set of keywords describing the content of a document + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + Identifies the type of procedure + + + + + + + + + + + + + + + + + + + + + A list of operations to be performed in a well-defined sequence + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A unit of action in a procedure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + Alternative steps in a procedure + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for steps that occur within steps in a procedure + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for identifying the results of a procedure or step + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + A portion of a document that is isolated from the main narrative flow + + Element exclusion + + sidebar must not occur among the children or descendants of sidebar + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short description or note about a person + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A quotation set off from the main text + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The source of a block quote or epigraph + + + + + + + + + + + + +
+
+ + + sect1 + Render as a first-level section + sect2 + Render as a second-level section + sect3 + Render as a third-level section + sect4 + Render as a fourth-level section + sect5 + Render as a fifth-level section + + + + + + Indicates how the bridge head should be rendered + + + + + + + Identifies the nature of the non-standard rendering + + + + + + + Indicates how the bridge head should be rendered + other + Identifies a non-standard rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + A free-floating heading + + + + + + +
+
+ + + + + + + + + + + + + + + A remark (or comment) intended for presentation in a draft manuscript + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short inscription at the beginning of a document or component + + + + + + + + + + + + + +
+
+ + + + + + Identifies the desired footnote mark + + + + + + + + + + + + + + + + + + A footnote + + Element exclusion + + footnote must not occur among the children or descendants of footnote + + + + Element exclusion + + example must not occur among the children or descendants of footnote + + + + Element exclusion + + figure must not occur among the children or descendants of footnote + + + + Element exclusion + + table must not occur among the children or descendants of footnote + + + + Element exclusion + + equation must not occur among the children or descendants of footnote + + + + Element exclusion + + sidebar must not occur among the children or descendants of footnote + + + + Element exclusion + + task must not occur among the children or descendants of footnote + + + + Element exclusion + + epigraph must not occur among the children or descendants of footnote + + + + Element exclusion + + caution must not occur among the children or descendants of footnote + + + + Element exclusion + + danger must not occur among the children or descendants of footnote + + + + Element exclusion + + important must not occur among the children or descendants of footnote + + + + Element exclusion + + note must not occur among the children or descendants of footnote + + + + Element exclusion + + tip must not occur among the children or descendants of footnote + + + + Element exclusion + + warning must not occur among the children or descendants of footnote + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph with a title + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph that contains only text and inline markup, no block elements + + + + + + + +
+
+ + + + + + Identifies the type of mark to be used on items in this list + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a bullet or other dingbat + + + + + + + + + + +
+
+ + + + + + continues + Specifies that numbering should begin where the preceding list left off + restarts + Specifies that numbering should begin again at 1 + + + + + Indicates how list numbering should begin relative to the immediately preceding list + + + + + + Specifies the initial line number + + + + + + ignore + Specifies that numbering should ignore list nesting + inherit + Specifies that numbering should inherit from outer-level lists + + + + + Indicates whether or not item numbering should be influenced by list nesting + + + + + + arabic + Specifies Arabic numeration (1, 2, 3, …) + upperalpha + Specifies upper-case alphabetic numeration (A, B, C, …) + loweralpha + Specifies lower-case alphabetic numeration (a, b, c, …) + upperroman + Specifies upper-case Roman numeration (I, II, III, …) + lowerroman + Specifies lower-case Roman numeration (i, ii, iii …) + + + + + Indicates the desired numeration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a sequentially incremented label + + + + + + + + + + +
+
+ + + + + + Specifies the keyword for the type of mark that should be used on this + item, instead of the mark that would be used by default + + + + + + + + + + + + + + + + + + + + + A wrapper for the elements of a list item + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A segmented list, a list of sets of elements + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of an element of a list item in a segmented list + + + + + + +
+
+ + + + + + + + + + + + + + + A list item in a segmented list + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a list item in a segmented list + + + + + + +
+
+ + + + + + horiz + A tabular presentation in row-major order. + vert + A tabular presentation in column-major order. + inline + An inline presentation, usually a comma-delimited list. + + + + + Specifies the type of list presentation + + + + + + Specifies the number of columns for horizontal or vertical presentation + + + + + + + + + + + + + + + + + + + + + An undecorated list of single words or short phrases + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a simple list + + + + + + +
+
+ + + + + + Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is composed of a set of one or more terms and an associated description + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for a set of terms and the associated description in a variable list + + + + + + + +
+
+ + + + + + + + + + + + + + + The word or phrase being defined or described in a variable list + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal example, with a title + + Element exclusion + + example must not occur among the children or descendants of example + + + + Element exclusion + + figure must not occur among the children or descendants of example + + + + Element exclusion + + table must not occur among the children or descendants of example + + + + Element exclusion + + equation must not occur among the children or descendants of example + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed example without a title + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + monospaced + The literal layout should be formatted with a monospaced font + normal + The literal layout should be formatted with the current font + + + + + Specifies the class of literal layout + + + + + + + + + + + + + + + + + + + A block of text in which line breaks and white space are to be reproduced faithfully + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + Text that a user sees or might see on a computer screen + + + + +
+
+ + + + + + + + + + + + + + + + + + A representation of what the user sees or might see on a computer screen + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal figure, generally an illustration, with a title + + Element exclusion + + example must not occur among the children or descendants of figure + + + + Element exclusion + + figure must not occur among the children or descendants of figure + + + + Element exclusion + + table must not occur among the children or descendants of figure + + + + Element exclusion + + equation must not occur among the children or descendants of figure + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A untitled figure + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A displayed media object (video, audio, image, etc.) + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + An inline media object (video, audio, image, and so on) + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for video data and its associated meta-information + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for audio data and its associated meta-information + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for image data and its associated meta-information + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a text description of an object and its associated meta-information + + + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external video data + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external audio data + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the image data + + + + + + + + + Specifies the vertical alignment of the image data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external image data + + + + + + + +
+
+ + + + + + Identifies the encoding of the text in the external file + + + + + + + + + + + + + + + + + + + + Pointer to external text data + + + + +
+
+ + + + + + Specifies the name of the parameter + + + + + Specifies the value of the parameter + + + + + Specifies the type of the value of the parameter + + + + + + + + + + + + + + + + + + Application specific parameters for a media player + + + + +
+
+ + + + + + + + + + + + + + + + + + A caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A real-world address, generally a postal address + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A street address in an address + + + + +
+
+ + + + + + + + + + + + + + + A post office box in an address + + + + +
+
+ + + + + + + + + + + + + + + A postal code in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a city in an address + + + + +
+
+ + + + + + + + + + + + + + + A state or province in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a country + + + + +
+
+ + + + + + + + + + + + + + + A telephone number + + + + +
+
+ + + + + + + + + + + + + + + A fax number + + + + +
+
+ + + + + + + + + + + + + + + Uncategorized information in address + + + + +
+
+ + + + + + + + + + + + + + + The institutional affiliation of an individual + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A brief description of an affiliation + + + + +
+
+ + + + + + + + + + + + + + + The title of an individual in an organization + + + + +
+
+ + + consortium + A consortium + corporation + A corporation + informal + An informal organization + nonprofit + A non-profit organization + + + + + Specifies the nature of the organization + + + + + + Specifies the nature of the organization + other + Indicates a non-standard organization class + + + Identifies the non-standard nature of the organization + + + + + + + + + + + + + + + + + + + + + + + + + + The name of an organization + + + + +
+
+ + + + + + + + + + + + + + + A division of an organization + + + + + + +
+
+ + + + + + + + + + + + + + + The page numbers of an article as published + + + + +
+
+ + + + + + + + + + + + + + + The personal name of an individual + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The name of an individual author + + + + +
+
+ + + + + + + + + + + + + + + Wrapper for author information when a document has multiple authors or collaborators + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Identifies a collaborator + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The initials or other short identifier for an author + + + + +
+
+ + + + + + + + + + + + + + + A person and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An organization and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for document meta-information about a conference + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The dates of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The title of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + An identifier, frequently numerical, associated with a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The contract number of a document + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a contract + + + + +
+
+ + + + + + + + + + + + + + + Copyright information about a document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The year of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the individual or organization that holds a copyright + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + Additional content for the cover of a publication + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + The date of publication or revision of a document + + + + +
+
+ + + + + + + + + + + + + + + The name or number of an edition of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the editor of a document + + + + +
+
+ + + + + + + + + + + + + + + + An identifier for a document + + + + +
+
+ + + + + + + + + + + + + + + + A citation of a bibliographic identifier + + + + +
+
+ + + + + + + + + + + + + + + + The source of a document + + + + +
+
+ + + hasformat + The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + haspart + The described resource includes the referenced resource either physically or logically + hasversion + The described resource has a version, edition, or adaptation, namely, the referenced resource + isformatof + The described resource is the same intellectual content of the referenced resource, but presented in another format + ispartof + The described resource is a physical or logical part of the referenced resource + isreferencedby + The described resource is referenced, cited, or otherwise pointed to by the referenced resource + isreplacedby + The described resource is supplanted, displaced, or superceded by the referenced resource + isrequiredby + The described resource is required by the referenced resource, either physically or logically + isversionof + The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + references + The described resource references, cites, or otherwise points to the referenced resource + replaces + The described resource supplants, displaces, or supersedes the referenced resource + requires + The described resource requires the referenced resource to support its function, delivery, or coherence of content + + + + + + Identifies the type of relationship + + + + + + + + Identifies the type of relationship + othertype + The described resource has a non-standard relationship with the referenced resource + + + + A keyword that identififes the type of the non-standard relationship + + + + + + + + + + + + + + + + + + + + + + + + + + The relationship of a document to another + + + + +
+
+ + + dcmipoint + The DCMI Point identifies a point in space using its geographic coordinates + iso3166 + ISO 3166 Codes for the representation of names of countries + dcmibox + The DCMI Box identifies a region of space using its geographic limits + tgn + The Getty Thesaurus of Geographic Names + + + + + + Specifies the type of spatial coverage + + + + + + + + Specifies the type of spatial coverage + otherspatial + Identifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + dcmiperiod + A specification of the limits of a time interval + w3c-dtf + W3C Encoding rules for dates and times—a profile based on ISO 8601 + + + + + + Specifies the type of temporal coverage + + + + + + + + Specifies the type of temporal coverage + othertemporal + Specifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The spatial or temporal coverage of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A statement of legal obligations or requirements + + + + + + + +
+
+ + + copyeditor + A copy editor + graphicdesigner + A graphic designer + productioneditor + A production editor + technicaleditor + A technical editor + translator + A translator + indexer + An indexer + proofreader + A proof-reader + coverdesigner + A cover designer + interiordesigner + An interior designer + illustrator + An illustrator + reviewer + A reviewer + typesetter + A typesetter + conversion + A converter (a persons responsible for conversion, not an application) + + + + + + Identifies the nature of the contributor + + + + + + + Identifies the nature of the non-standard contribution + + + + + + + Identifies the nature of the contributor + other + Identifies a non-standard contribution + + + + + + + + + + + + + + + + + + + + + + + + + + A person or entity, other than an author or editor, credited in a document + + + + +
+
+ + + + + + + + + + + + + + + The numbers of the pages in a book, for use in a bibliographic entry + + + + +
+
+ + + + + + + + + + + + + + + A summary of the contributions made to a document by a credited source + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a person + + + + +
+
+ + + + + + + + + + + + + + + A given name of a person + + + + +
+
+ + + + + + + + + + + + + + + The given name of a person + + + + +
+
+ + + + + + + + + + + + + + + An inherited or family name; in western cultures the last name + + + + +
+
+ + + + + + + + + + + + + + + The portion of a person's name indicating a relationship to ancestors + + + + +
+
+ + + + + + + + + + + + + + + A component of a person's name that is not a first name, surname, or lineage + + + + +
+
+ + + + + + + + + + + + + + + The printing history of a document + + + + + + +
+
+ + + + + + + + + + + + + + + The date of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The publisher of a document + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of the publisher of a document + + + + +
+
+ + + + + + + + + + + + + + + Information about a particular release of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A history of the revisions to a document + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry describing a single revision in the history of the revisions to a document + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A document revision number + + + + +
+
+ + + + + + + + + + + + + + + A description of a revision to a document + + + + +
+
+ + + + + + + + + + + + + + + A extended description of a revision to a document + + + + + + +
+
+ + + + + + + + + + + + + + + Numbers of the volumes in a series of books + + + + +
+
+ + + + + + + + + + + + + + + The volume number of a document in a set (as of books in a set or articles in a journal) + + + + +
+
+ + + + + + + + + + + + + + + The number of an issue of a journal + + + + +
+
+ + + + + + A name for the metadata element + + + + + The metadata content + + + + + + + + + + + + + + + + + A generic metadata element + + + + + + + + A generic metadata element + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A software or application package + + + + +
+
+ + + + + + + + + + + + + + + An email address + + + + +
+
+ + + + + + + + + + + + + + + A comment on a line in a verbatim listing + + + + +
+
+ + + command + A command + function + A function + option + An option + + + + + Identifies the class of parameter + + + + + + + + + + + + + + + + + + + + + A value or a symbolic reference to a value + + + + +
+ + + + + + +
+ + + command + A command + function + A function + option + An option + parameter + A parameter + + + + + Identifies the nature of the replaceable text + + + + + + + + + + + + + + + + + + + + + Content that may or must be replaced by the user + + + + + + +
+
+ + + + Identifies the type of URI specified + + + + + + + + + + + + + + + + + + + A Uniform Resource Identifier + + + + +
+
+ + + + + + + + + + + + + + + An abbreviation, especially one followed by a period + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An often pronounceable word made from the initial (or selected) letters of a name or phrase + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An inline bibliographic reference to another published work + + + + + + +
+
+ + + + + + + + + + + + + + + A citation to a reference page + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A reference volume number + + + + +
+
+ + + + + + Identifies the nature of the publication being cited + + + + + + Identifies the nature of some other kind of publication being cited + + + + + + + Identifies that this is some other kind of publication being cited + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The title of a cited work + + + + + + +
+
+ + + + + + + + + + + + + + + Emphasized text + + + + + + +
+
+ + + A limited span of emphasized text + + + + +
+
+ + + + + + + + + + + + + + + A word or phrase in a language other than the primary language of the document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A limited word or phrase in a language other than the primary language of the document + + + + +
+
+ + + + + + + + + + + + + + + A span of text + + + + + + +
+
+ + + A limited span of text + + + + +
+
+ + + + + + + + + + + + + + + An inline quotation + + + + + + +
+
+ + + + + + + + + + + + + + + A limited inline quotation + + + + +
+
+ + + + + + + + + + + + + + + A subscript (as in Hâ‚‚O, the molecular formula for water) + + + + +
+
+ + + + + + + + + + + + + + + A superscript (as in x², the mathematical notation for x multiplied by itself) + + + + +
+
+ + + copyright + A copyright + registered + A registered copyright + service + A service + trade + A trademark + + + + + Identifies the class of trade mark + + + + + + + + + + + + + + + + + + + + + A trademark + + + + +
+
+ + + + + + + + + + + + + + + A word meant specifically as a word and not representing anything else + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a footnote (a footnote mark) + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A cross reference to another part of the document + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A hypertext link + + + + + + +
+
+ + + + + + + + + Holds additional information that may be used by the application when resolving the link + + + + + Specifies the URI of the document in which the link target appears + + + + + + Specifies the location of the link target in the document + + + + + Identifies application-specific customization of the link behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + A link that addresses its target indirectly + + + + + + +
+
+ + + + + + + + + + + + + + A spot in the document + + + + +
+
+ + + + + + + + + + + + + + A text-only annotation, often used for accessibility + + + + + + + + + +
+
+ + + Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A group of formal objects, for example subfigures + + + + + + + + + + + + + + + + + + +
+ + + Identifies the editorial or publication status of the element on which it occurs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of books + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A book + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + The dedication of a book or other component + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Acknowledgements of a book or other component + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Text at the back of a book describing facts about its production + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An appendix in a book or article + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A chapter, as of a book + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a book + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Introductory matter preceding the first chapter of a book + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An introduction to the contents of a part + + + + + + + +
+
+ + + + + legal + A section of legal obligations or requirements + + + + Identifies the nature of the section + + + + + + Identifies a non-standard section class + + + + + + + Indicates that a non-standard section class is applied + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a document with no subdivisions + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + faq + A collection of frequently asked questions. + journalarticle + An article in a journal or other periodical. + productsheet + A description of a product. + specification + A specification. + techreport + A technical report. + whitepaper + A white paper. + + + + + Identifies the nature of the article + + + + + + Identifies the nature of the non-standard article + + + + + + + Identifies the nature of the article + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An article + + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies one or more annotations that apply to this element + + +
+ + + + + + Identifies one or more elements to which this annotation applies + + + + + + + + + + + + + + + + + + + An annotation + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + + + + + + + +
+ + + Identifies the XLink extended link type + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + extended + An XLink extended link type + + + + + Identifies the XLink locator link type + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + locator + An XLink locator link type + + + + + Identifies the XLink arc link type + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + arc + An XLink arc link type + + + + + Identifies the XLink resource link type + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + resource + An XLink resource link type + + + + + Identifies the XLink title link type + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + title + An XLink title link type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the XLink traversal-from + + + + + + Specifies the XLink label + + + + + + Specifies the XLink traversal-to + + + +
+ + + + + + + + + + + + Identifies the XLink link type + extended + An XLink extended link + + + + + + + + + + + + + An XLink extended link + + + + + + + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + locator + An XLink locator link + + + + + + + + + + + + + + + + + An XLink locator in an extendedlink + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + arc + An XLink arc link + + + + + + + + + + + + + + + + + + + + + + + + + An XLink arc in an extendedlink + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A top-level section of document + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect1 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect2 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect3 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect4 + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of reference entries + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A reference page (originally a UNIX man-style reference page) + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Meta-information for a reference entry + + + + + + + + + + + + + + + + +
+ + + source + The name of the software product or component to which this topic applies + version + The version of the software product or component to which this topic applies + manual + The section title of the reference page (e.g., User Commands) + sectdesc + The section title of the reference page (believed synonymous with "manual" but in wide use) + software + The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + + + + + + Identifies the kind of miscellaneous information + + + + + + + Identifies the nature of non-standard miscellaneous information + + + + + + Identifies the kind of miscellaneious information + other + Indicates that the information is some 'other' kind. + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + Meta-information for a reference entry other than the title and volume number + + + + +
+
+ + + + + + + + + + + + + + + The name, purpose, and classification of a reference page + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A description of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The name of (one of) the subject(s) of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A short (one sentence) synopsis of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The scope or other indication of applicability of a reference entry + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A syntactic synopsis of the subject of the reference page + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section in a refentry + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A major subsection of a reference entry + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect1 + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect2 + + + + + + + +
+ + + + + + + + + + + + Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for a list of glossary entries + + + + + + + + + + + + +
+
+ + + + + + Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + + + + + + + + + + + + + + + + + An entry in a glossary or glosslist + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies a list of keywords for the definition + + + + + + + + + + + + + + + + + A definition in a glossentry + + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry + to another + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry to another + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term, with limited content + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A glossary + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a glossary + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + An inline definition of a term + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + + + + + +
+ + + Identifies the relationship between the bibliographic elemnts + + +
+ + + + + + + + + + + + + + + + + + + + + A raw entry in a bibliography + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked entry in a bibliography + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A raw container for related bibliographic information + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked container for related bibliographic information + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Untyped bibliographic information + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A bibliography + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a bibliography + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a list of bibliography entries + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + The units (for example, pages) used to identify the beginning and ending of a reference. + + + + + + Identifies the beginning of a reference; the location within the work that is being referenced. + + + + + + Identifies the end of a reference. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cross-reference to a bibliographic entry + + + + +
+ + + normal + Normal + preferred + Preferred + + + + + Specifies the significance of the term + + + + + + Specifies the IDs of the elements to which this term applies + + + + + + Indicates the page on which this index term occurs in some version of the printed document + + + + + all + All indexes + global + The global index (as for a combined index of a set of books) + local + The local index (the index for this document only) + + + + + Specifies the scope of the index term + + + + + + Specifies the string by which the term is to be sorted; if unspecified, the term content is used + + + + + Specifies the target index for this term + + +
+ + + + + + + + + + + + + + + A set of index terms in the meta-information of a document + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Identifies the class of index term + singular + A singular index term + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term + + + + +
+
+ + + + + + Identifies the class of index term + startofrange + The start of a range + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term that covers a range + + + + +
+
+ + + + + + Identifies the class of index term + endofrange + The end of a range + + + + + Points to the start of the range + + + + + + + + + + + + + + + + + Identifies the end of a range associated with an indexed term + + Indexterm 'startref' type constraint + + @startref on indexterm must point to an indexterm. + @startref on indexterm must point to a startofrange indexterm. + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary word or phrase under which an index term should be sorted + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A secondary word or phrase in an index term + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A tertiary word or phrase in an index term + + + + + + +
+
+ + + + + + Identifies the class of 'see' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader instead to another entry in the index + + + + + + +
+
+ + + + + + Identifies the class of 'seealso' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader also to another entry in the index + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a book or part of a book + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a set of books + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in an index + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry in an index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + A primary term in an index entry, not in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A secondary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A tertiary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See +entry in an index, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See also + entry in an index, rather than in the text + + + + + + +
+ + + Indicates the page on which this element occurs in some version of the printed document + + +
+ + + + + + + + + + + + + + + + + + A table of contents + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + A division in a table of contents + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A component title in a table of contents + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + A task to be completed + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary of a task + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The prerequisites for a task + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + Information related to a task + + + + + + + +
+ + + calspair + Coordinates expressed as a pair of CALS graphic coordinates. + linecolumn + Coordinates expressed as a line and column. + linecolumnpair + Coordinates expressed as a pair of lines and columns. + linerange + Coordinates expressed as a line range. + + + + + + Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + for graphics and linecolumn + for line-oriented elements. + + + + + + + + Indicates that non-standard units are used for this area +. In this case otherunits + must be specified. + other + Coordinates expressed in some non-standard units. + + + + Identifies the units used in the coords + attribute when the units + attribute is other +. This attribute is forbidden otherwise. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A list of callout +s + + + + + + + + + + +
+
+ + + + + + Identifies the areas described by this callout. + + + + + + + + + + + + + + + + A called out + description of a marked area + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A program listing with associated areas used in callouts + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A collection of regions in a graphic or code example + + + + + + + + + +
+
+ + + + + + Point to the callout +s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + + + + + + Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + + + + + Provides the coordinates of the area. The coordinates must be interpreted using the units + specified. + + + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A set of related areas in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A screen with associated areas used in callouts + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for an image object with callouts + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + The location of a callout embedded in text + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a co + + + + +
+
+ + + + + + + + + + + + + + + + + + A set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A production in a set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The left-hand side of an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + The right-hand side of an EBNF production + + + + + + + + + + + +
+
+ + + + + + Specifies a URI that points to a production +where the nonterminal + is defined + + + + + + + + + + + + + + + + A non-terminal in an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + A constraint in an EBNF production + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + + + +
+
+ + + + + + + + + + + + + + + A cross-reference to an EBNF production + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The definition of a constraint in an EBNF production + + + + + + + +
+ + + Specifies the alignment character when align + is set to char +. + + + + + Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + when align + is set to char +. + + 0 + 100 + + + + + + Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + + all + Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + bottom + Frame only the bottom of the table. + none + Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + sides + Frame the left and right sides of the table. + top + Frame the top of the table. + topbot + Frame the top and bottom of the table. + + + + + + Specifies the presence or absence of the column separator + + 0 + No column separator rule. + 1 + Provide a column separator rule on the right + + + + + + Specifies the presence or absence of the row separator + + 0 + No row separator rule. + 1 + Provide a row separator rule below + + + + + + Specifies the orientation of the table + + land + 90 degrees counter-clockwise from the rest of the text flow. + port + The same orientation as the rest of the text flow. + + + + + + Specifies the table style + + + + + Indicates whether or not the entries in the first column should be considered row headers + + firstcol + Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + headers + Indicates that row headers are identified by use of the headers attribute on entries in the table. + norowheader + Indicates that entries in the first column have no special significance with respect to column headers. + + + + + + Specifies the horizontal alignment of text in an entry. + + center + Centered. + char + Aligned on a particular character. + justify + Left and right justified. + left + Left justified. + right + Right justified. + + + + + + Specifies the vertical alignment of text in an entry. + + bottom + Aligned on the bottom of the entry. + middle + Aligned in the middle. + top + Aligned at the top of the entry. + + + + + + Specifies a column specification by name. + + + + + Specifies a starting column by name. + + + + + Specifies a span by name. + + + + + + Specifies a starting column by name. + + + Specifies an ending column by name. + + + + + + + + + + + + + + Provides a name for a column specification. + + + + + Provides a name for a span specification. + + +
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for the main content of a table, or part of a table + + + + + + + + + + + + + + + + +
+
+ + + + + + The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + + + + + + Specifies the width of the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications for a column in a table + + + + +
+
+ + + + + + Specifies a starting column by name. + + + + + Specifies an ending column by name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formatting information for a spanned column in a table + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table footer consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + + + + +
+
+ + + + + + Specifies the number of additional rows which this entry occupies. Defaults to zero. + + + + + + Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + + 0 + Do not rotate the cell. + 1 + Rotate the cell 90 degrees counter-clockwise. + + + + + + Specifies the scope of a header. + + row + Applies to the row + col + Applies to the column + rowgroup + Applies to the row group + colgroup + Applies to the column group + + + + + + Specifies the entry or entries which serve as headers for this element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cell in a table + + Element exclusion + + table must not occur among the children or descendants of entry + + + + Element exclusion + + informaltable must not occur among the children or descendants of entry + + + + + + + + + + + + + +
+
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the entry table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subtable appearing in place of an entry in a table + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the short or long title should be used in a List of Tables + + 0 + Indicates that the full title should be used. + 1 + Indicates that the short short title (titleabbrev) should be used. + + + + + + Indicates if the table should appear in a List of Tables + + 0 + Indicates that the table should not occur in the List of Tables. + 1 + Indicates that the table should appear in the List of Tables. + + + + + + + + + + + + + + A formal table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A table without a title + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + + + + + This attribute specifies style information for the current element. + + + + + This attribute offers advisory information about the element for which it is set. + + + + + + + + This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + + + + + + + + Occurs when the pointing device button is clicked over an element. + + + + + Occurs when the pointing device button is double clicked over an element. + + + + + Occurs when the pointing device button is pressed over an element. + + + + + Occurs when the pointing device button is released over an element. + + + + + Occurs when the pointing device is moved onto an element. + + + + + Occurs when the pointing device is moved while it is over an element. + + + + + Occurs when the pointing device is moved away from an element. + + + + + Occurs when a key is pressed and released over an element. + + + + + Occurs when a key is pressed down over an element. + + + + + Occurs when a key is released over an element. + + + + + + + + + + + + + + + + + Specifies the alignment of data and the justification of text in a cell. + + left + Left-flush data/Left-justify text. This is the default value for table data. + center + Center data/Center-justify text. This is the default value for table headers. + right + Right-flush data/Right-justify text. + justify + Double-justify text. + char + Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + + + + + + This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + + + + + When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + + + An explicit offset. + + [0-9]+% + + A percentage offset. + + + + + + + + + Specifies the vertical position of data within a cell. + + top + Cell data is flush with the top of the cell. + middle + Cell data is centered vertically within the cell. This is the default value. + bottom + Cell data is flush with the bottom of the cell. + baseline + All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + + + + + + + + + Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + + + + + Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + + + An explicit width. + + [0-9]+% + + A percentage width. + + + + + + Specifies the width (in pixels only) of the frame around a table. + + + + + + Specifies which sides of the frame surrounding a table will be visible. + + void + No sides. This is the default value. + above + The top side only. + below + The bottom side only. + hsides + The top and bottom sides only. + lhs + The left-hand side only. + rhs + The right-hand side only. + vsides + The right and left sides only. + box + All four sides. + border + All four sides. + + + + + + Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + + none + No rules. This is the default value. + groups + Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + rows + Rules will appear between rows only. + cols + Rules will appear between columns only. + all + Rules will appear between all rows and columns. + + + + + + Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + + + An explicit spacing. + + [0-9]+% + + A percentage spacing. + + + + + + Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + + + An explicit padding. + + [0-9]+% + + A percentage padding. + + + + + + + + + + Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + + + + + This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + + + + + Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + + + + + Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + + row + The current cell provides header information for the rest of the row that contains it + col + The current cell provides header information for the rest of the column that contains it. + rowgroup + The header cell provides header information for the rest of the row group that contains it. + colgroup + The header cell provides header information for the rest of the column group that contains it. + + + + + + Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all rows from the current row to the last row of the table section (thead +, tbody +, or tfoot +) in which the cell is defined. + + + + + + Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all columns from the current column to the last column of the column group (colgroup +) in which the cell is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal (captioned) HTML table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An HTML table without a title + + + + +
+
+ + + + + + An HTML table caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + + + + + +
+
+ + + + + + This attribute, whose value must be an integer > 0, specifies the number of columns spanned + by the col + element; the col + element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + element shares its attributes with the next N-1 columns. + + + + + + Specifies a default width for each column spanned by the current col + element. It has the same meaning as the width + attribute for the colgroup + element and overrides it. + + + + + + + + + Specifications for a column in an HTML table + + + + +
+
+ + + + + + This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + element contains one or more col + elements. + + + + + + This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + element. + + + + + + + + + A group of columns in an HTML table + + + + + + +
+
+ + + + + + + + + + A table header consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A table footer consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A wrapper for the rows of an HTML table or informal HTML table + + + + + + +
+
+ + + + + + + + + + A row in an HTML table + + + + + + + + + +
+
+ + + + + + + + + + + A table header entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + A table entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A detailed set of messages, usually error messages + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for an entry in a message set + + + + + + + + + + + + +
+
+ + + + + + The audience to which the message relevant + + + + + The origin of the message + + + + + The level of importance or severity of a message + + + + + + + + + + + + + + + + + + + + + + + A wrapper for a simpler entry in a message set + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A message in a message set + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary component of a message in a message set + + + + + +
+
+ + + + + + + + + + + + + + + + + + A subcomponent of a message in a message set + + + + + +
+
+ + + + + + + + + + + + + + + + + + A related component of a message in a message set + + + + + +
+
+ + + + + + + + + + + + + + + The actual text of a message component in a message set + + + + + + +
+
+ + + + + + + + + + + + + + + Information about a message in a message set + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The level of importance or severity of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The origin of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The audience to which a message in a message set is relevant + + + + +
+
+ + + + + + + + + + + + + + + + + + Explanatory material relating to a message in a message set + + + + + + + +
+
+ + + + + + none + No labels + number + Numeric labels + qanda + "Q:" and "A:" labels + + + + + Specifies the default labelling + + + + + + + + + + + + + + + + + + + + + A question-and-answer set + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A titled division in a qandaset + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A question/answer set within a qandaset + + + + + + + + +
+
+ + + + + + + + + + + + + + + A question in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An answer to a question posed in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A label on a question or answer + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation + + Element exclusion + + example must not occur among the children or descendants of equation + + + + Element exclusion + + figure must not occur among the children or descendants of equation + + + + Element exclusion + + table must not occur among the children or descendants of equation + + + + Element exclusion + + equation must not occur among the children or descendants of equation + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation without a title + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical equation or expression occurring inline + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical phrase that can be represented with ordinary text and a small amount of markup + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is MathML + mathml + Specifies MathML. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A MathML expression in a media object + + + + + + + +
+
+ + + Any element from the MathML namespace + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is SVG + svg + Specifies SVG. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SVG drawing in a media object + + + + + + + +
+
+ + + Any element from the SVG namespace + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A string of formatting markup in text that is to be represented literally + + + + +
+
+ + + + + + attribute + An attribute + attvalue + An attribute value + element + An element + emptytag + An empty element tag + endtag + An end tag + genentity + A general entity + localname + The local name part of a qualified name + namespace + A namespace + numcharref + A numeric character reference + paramentity + A parameter entity + pi + A processing instruction + prefix + The prefix part of a qualified name + comment + An SGML comment + starttag + A start tag + xmlpi + An XML processing instruction + + + + + Identifies the nature of the tag content + + + + + + Identifies the namespace of the tag content + + + + + + + + + + + + + + + + + + + + + A component of XML (or SGML) markup + + + + + + + + + +
+
+ + + Identifies the class of symbol + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A name that is replaced by a value before processing + + + + +
+
+ + + + + + + + + + + + + + + A unit of information + + + + +
+
+ + + + + + + + + + + + + + + Inline text that is some literal value + + + + +
+
+ + + Identifies the (computer) language of the code fragment + + + + + + + + + + + + + + + + + + + + An inline code fragment + + + + + + + + + +
+
+ + + Identifies the class of constant + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A programming or system constant + + + + +
+
+ + + + + + copyright + A name with a copyright + registered + A name with a registered copyright + service + A name of a service + trade + A name which is trademarked + + + + + Specifies the class of product name + + + + + + + + + + + + + + + + + + The formal name of a product + + + + +
+
+ + + + + + + + + + + + + + + A number assigned to a product + + + + +
+
+ + + altkey + An alternate or secondary key + constraint + A constraint + datatype + A data type + field + A field + foreignkey + A foreign key + group + A group + index + An index + key1 + The first or primary key + key2 + An alternate or secondary key + name + A name + primarykey + The primary key + procedure + A (stored) procedure + record + A record + rule + A rule + secondarykey + The secondary key + table + A table + user + A user + view + A view + + + + + Identifies the class of database artifact + + + + + + + + + + + + + + + + + + + + + The name of a database, or part of a database + + + + +
+
+ + + hardware + A hardware application + software + A software application + + + + + Identifies the class of application + + + + + + + + + + + + + + + + + + + + + The name of a software program + + + + +
+
+ + + + + + + + + + + + + + + A physical part of a computer system + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text on a button in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Graphic and/or text appearing as a icon in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The text of a label in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a menu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a terminal menu item in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a submenu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A selection or series of selections from a menu + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The conventional name of a mouse button + + + + +
+ + + + + + + + + + +
+ + + alt + The "Alt" key + altgr + The "Alt Graph" key + backspace + The "Backspace" key + command + The "Command" key + control + The "Control" key + delete + The "Delete" key + down + The down arrow + end + The "End" key + enter + The "Enter" key + escape + The "Escape" key + home + The "Home" key + insert + The "Insert" key + left + The left arrow + meta + The "Meta" key + option + The "Option" key + pagedown + The page down key + pageup + The page up key + right + The right arrow + return + The "Return" key + shift + The "Shift" key + space + The spacebar + tab + The "Tab" key + up + The up arrow + + + + + + Identifies the function key + + + + + + + + Identifies the function key + other + Indicates a non-standard function key + + + + Specifies a keyword that identifies the non-standard key + + + + + + + + + + + + + + + + + + + + + + + + The text printed on a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + The internal, frequently numeric, identifier for a key on a keyboard + + + + +
+ + + + + + + + + + +
+ + + click + A (single) mouse click. + double-click + A double mouse click. + press + A mouse or key press. + seq + Sequential clicks or presses. + simul + Simultaneous clicks or presses. + + + + + + Identifies the nature of the action taken. If keycombo + contains more than one element, simul + is the default, otherwise there is no default. + + + + + + + + Identifies the nature of the action taken + other + Indicates a non-standard action + + + + Identifies the non-standard action in some unspecified way. + + + + + + + + + + + + + + + + + + + + + + + + A combination of input actions + + + + + + +
+
+ + + + + + + + + + + + + + + The symbolic name of a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + A graphical user interface (GUI) keyboard shortcut + + + + +
+
+ + + + + + + + + + + + + + + + + + + A key combination for an action that is also accessible through a menu + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A character or string indicating the start of an input field in a computer display + + + + + + +
+
+ + + + + + + + + + + + + + + A software environment variable + + + + +
+
+ + + devicefile + A device + directory + A directory + extension + A filename extension + headerfile + A header file (as for a programming language) + libraryfile + A library file + partition + A partition (as of a hard disk) + symlink + A symbolic link + + + + + Identifies the class of filename + + + + + + Specifies the path of the filename + + + + + + + + + + + + + + + + + + + + + + + The name of a file + + + + +
+
+ + + + + + + + + + + + + + + The name of an executable program or other software command + + + + +
+
+ + + + + + + + + + + + + + + Data, generally text, displayed or presented by a computer + + + + + + +
+
+ + + + + + + + + + + + + + + Data entered by the user + + + + + + +
+
+ + + + + + Specifies the character that should separate the command and its top-level arguments + + + + + Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A syntax summary for a software command + + + + + + + + + + + + + + + +
+ + + norepeat + Can not be repeated. + repeat + Can be repeated. + + + + + Indicates whether or not repetition is possible. + + + + + + opt + Formatted to indicate that it is optional. + plain + Formatted without indication. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + Indicates optionality. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An argument in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A group of elements in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + An explicit line break in a command synopsis + + + + +
+
+ + + + + + + + + + + + + + + A portion of a cmdsynopsis broken out from the main body of the synopsis + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A reference to a fragment of a command synopsis + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + A general-purpose element for representing the syntax of commands or functions + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing synopsis + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a function definition + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the funcdefs of a funcsynopsis + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a function + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A function (subroutine) name and its return type + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a function or subroutine, as in a programming language + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating that the function in question takes no arguments + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating a variable number of arguments + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of parameters + + + + + + + + + +
+
+ + + + + + opt + Formatted to indicate that it is optional. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + + + + + + + + + + + + + Information about a function parameter in a programming language + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Parameters for a function referenced through a function pointer in a synopsis + + + + +
+
+ + + + + + + + + class + This is the synopsis of a class + interface + This is the synopsis of an interface + + + + + Specifies the nature of the synopsis + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a class definition + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the contents of a classsynopsis + + + + +
+
+ + + + + + + + + + + + + + + A class in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An interface in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An exception in an object-oriented programming language + + + + + + + + + + + + + +
+ + + Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + preserve + Extra whitespace and line breaks must be preserved. + + + +
+ + + + + + + + + + + + + + + + + + Modifiers in a synopsis + + + + +
+
+ + + + + + + + + + + + + + + The name of an interface + + + + +
+
+ + + + + + + + + + + + + + + The name of an exception + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The name of a field in a class definition + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + The initializer for a fieldsynopsis + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a constructor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a destructor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a method + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters to a method + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of method parameters + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a variable + + + + +
+
+ + + + + + + + + + + + + + + Target of a build + + + + +
+
+ + + + + + + + + + + + + + + The value returned by a function + + + + +
+
+ + + + + + union + Combined type is union of nested types + intersection + Combined type is intersection of nested types + + + + + Specifies the way how are nested types combined together + + + + + + + + + + + + + + + + + + The classification of a value + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a class, in the object-oriented programming sense + + + + +
+
+ + + + + + + + + + + + + + + The identifier for a template, in the generic programming sense + + + + +
+
+ + + + + + + + + + + + + + + The definition of a template, in the generic programming sense + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The specialization of a template identifier, in the generic programming sense + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a package definition + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a macro (a code-generating function) + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a macro definition (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a macro (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A macro name and its return type + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a union of types + + + + +
+
+ + + + + + + + + + + + + + + The definition of a union of types, which may be more than a name + + + + + + +
+
+ + + + + + + + + + Indicates how the value of a union is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a union-of-types definition + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of an enumeration + + + + +
+
+ + + + + + + + + + + + + + + The value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + The description of a value an enumerated type can take + + + + + + +
+
+ + + + + + + + + + + + + + + The identifier of a value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + A value an enumerated type can take and its description + + + + + + + + + + +
+
+ + + + + + + + + 0 + Value of enum is specified explicitly using enumvalue + 1 + Value of enum is inferred from its position + + + + + Indicates how the value of an enumeration is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for an enumerated-type definition + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a type alias + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a type-alias definition + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A literal listing of all or part of a program + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A note of caution + + Element exclusion + + caution must not occur among the children or descendants of caution + + + + Element exclusion + + danger must not occur among the children or descendants of caution + + + + Element exclusion + + important must not occur among the children or descendants of caution + + + + Element exclusion + + note must not occur among the children or descendants of caution + + + + Element exclusion + + tip must not occur among the children or descendants of caution + + + + Element exclusion + + warning must not occur among the children or descendants of caution + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text indicating hazardous situation + + Element exclusion + + caution must not occur among the children or descendants of danger + + + + Element exclusion + + danger must not occur among the children or descendants of danger + + + + Element exclusion + + important must not occur among the children or descendants of danger + + + + Element exclusion + + note must not occur among the children or descendants of danger + + + + Element exclusion + + tip must not occur among the children or descendants of danger + + + + Element exclusion + + warning must not occur among the children or descendants of danger + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of important + + + + Element exclusion + + danger must not occur among the children or descendants of important + + + + Element exclusion + + important must not occur among the children or descendants of important + + + + Element exclusion + + note must not occur among the children or descendants of important + + + + Element exclusion + + tip must not occur among the children or descendants of important + + + + Element exclusion + + warning must not occur among the children or descendants of important + + + + + + +
+
+ + + + + + + + + + + + + + + A message set off from the text + + Element exclusion + + caution must not occur among the children or descendants of note + + + + Element exclusion + + danger must not occur among the children or descendants of note + + + + Element exclusion + + important must not occur among the children or descendants of note + + + + Element exclusion + + note must not occur among the children or descendants of note + + + + Element exclusion + + tip must not occur among the children or descendants of note + + + + Element exclusion + + warning must not occur among the children or descendants of note + + + + + + +
+
+ + + + + + + + + + + + + + + A suggestion to the user, set off from the text + + Element exclusion + + caution must not occur among the children or descendants of tip + + + + Element exclusion + + danger must not occur among the children or descendants of tip + + + + Element exclusion + + important must not occur among the children or descendants of tip + + + + Element exclusion + + note must not occur among the children or descendants of tip + + + + Element exclusion + + tip must not occur among the children or descendants of tip + + + + Element exclusion + + warning must not occur among the children or descendants of tip + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of warning + + + + Element exclusion + + danger must not occur among the children or descendants of warning + + + + Element exclusion + + important must not occur among the children or descendants of warning + + + + Element exclusion + + note must not occur among the children or descendants of warning + + + + Element exclusion + + tip must not occur among the children or descendants of warning + + + + Element exclusion + + warning must not occur among the children or descendants of warning + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + An error code + + + + +
+
+ + + + + + + + + + + + + + + An error name + + + + +
+
+ + + + + + + + + + + + + + + An error message. + + + + +
+
+ + + + + + + + + + + + + + + The classification of an error message + + + + +
+ + + + + + +
+ + + daemon + A daemon or other system process (syslogd) + domainname + A domain name (example.com) + etheraddress + An ethernet address (00:05:4E:49:FD:8E) + event + An event of some sort (SIGHUP) + eventhandler + An event handler of some sort (hangup) + filesystem + A filesystem (ext3) + fqdomainname + A fully qualified domain name (my.example.com) + groupname + A group name (wheel) + interface + A network interface (eth0) + ipaddress + An IP address (127.0.0.1) + library + A library (libncurses) + macro + A macro + netmask + A netmask (255.255.255.192) + newsgroup + A newsgroup (comp.text.xml) + osname + An operating system name (Hurd) + process + A process (gnome-cups-icon) + protocol + A protocol (ftp) + resource + A resource + securitycontext + A security context (a role, permission, or security token, for example) + server + A server (mail.example.com) + service + A service (ppp) + systemname + A system name (hephaistos) + username + A user name (ndw) + + + + + + Identifies the nature of the system item + + + + + + + Identifies the nature of the non-standard system item + + + + + + + Identifies the kind of systemitemgraphic identifier + other + Indicates that the system item is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + A system-related item or term + + + + + + +
+
+ + + + + + + + + + + + + + + An option for a software command + + + + +
+
+ + + + + + + + + + + + + + + Optional information + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A unit of data associated with some part of a computer system + + + + +
+
+ + + + + + + + + Identifies the topic type + + + + + + + + + + + + + + + + + + + + + + + + + + A modular unit of documentation not part of any particular narrative flow + + + + + + + + + + + +
+ + + + + + + + + + + + + Identifies the markup grammar of a resource + + +
+ + + + + + + + + + + + + + + + + + Defines the hierarchy and relationships for a collection of resources + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + Contains one or more resource objects that are managed by the assembly + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Indentifies the location of the data by URI + + + + + + + + + Identifies the markup grammar of a resource + + + + + + + + + + + + + + + + + + + + Identifies an object managed within the assembly + + + + + + + +
+
+ + + + + + Identifies the structure type of the structure + + + + + + Indicates a single resource from which to construct this structure + + + + + + Identifies the default format of the structure + + + + + + Specifies the DocBook element to which this unit should be renamed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Describes the structure of a document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + Specification of renderas + + The renderas attribute can be specified on either the structure or output, but not both. + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies chunking for this module + + + + + + Specifies the output file for this module or structure + + + + + + Specifies the DocBook element to which this unit should be renamed + + + + + + Specifies the transformation that should be applied to this unit + + + + + + Indicates whether or not this unit should be suppressed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specify an output format and/or file name and/or renderas + + + + +
+
+ + + + + + Indicates a single resource from which to read merged info + + + + + + + + + + + + + + + + + A wrapper for information that a module overrides in the resource it includes + + + + + + + + + +
+
+ + + + + + true + This module will be in a chunk + false + This module will not be in a chunk + auto + Chunking of this module depends on the overall chunking algorithm + + + + + Specifies chunking for this module + + + + + + Identifies a single resource or structure within the assembly from which to construct this module + + + + + + + Indicates if titles should be omitted when including a resource + + + + + + + + Indicates if the root element should be omitted when including the resource (copying only the children) + + + + + + + Changes the name of the root element of the included resource to the specified name + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A modular component within a structure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + Specification of renderas + + The renderas attribute can be specified on either the structure or output, but not both. + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + Elements with effectivity attributes matching this element are suppressed + + + + +
+
+ + + + + + + + + + + + + + Elements with effectivity attributes matching this element are allowed + + + + +
+
+ + + + + + Identifies the type of the contained relationships + + + + + + + + + + + + + + + + + + + + + Groups relationship elements to define associations between resources + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + Identifies the type of the relationship + + + + + + + + + + + + + + + + + + + + A relationship associates one or more resources + + + + + + + +
+
+ + + + + + + + + + + + + + + + + Identifies the type of relationship between one or more resources + + + + + + +
+
+ + + + + + Specifies the type of link for this instance + + + + + + + + + + + + + + + + + Identifies a resource that is part of a relationship + + + + + +
+
+ + + + + + + + + + + + + + + + + + List of transforms for converting from non-DocBook schemas + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + Indentifies the location of the data by URI + + + + + + The name of the transform + + + + + + + + + + + + + + + + + + + Identifies a transform for converting from a non-DocBook schema + + + + +
+
+ + + + + + + + + + + + + + A description of a resource or resources + + + + +
+
+ + + + + + + + + + + + + + [^#]+ + + + + + + + xml + text + + + + + + + + + + + + + + + + + + + + + + + + + + + + An XInclude + + + + + + +
+
+ + + + An XInclude fallback + + + + + + + + + + + + + +
+
diff --git a/catalog/docbook5.2/rng/dbits.rnc b/catalog/docbook5.2/rng/dbits.rnc new file mode 100755 index 0000000..ba3db29 --- /dev/null +++ b/catalog/docbook5.2/rng/dbits.rnc @@ -0,0 +1,12791 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ctrl = "http://nwalsh.com/xmlns/schema-control/" +default namespace db = "http://docbook.org/ns/docbook" +namespace html = "http://www.w3.org/1999/xhtml" +namespace its = "http://www.w3.org/2005/11/its" +namespace local = "" +namespace mml = "http://www.w3.org/1998/Math/MathML" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace s = "http://purl.oclc.org/dsdl/schematron" +namespace svg = "http://www.w3.org/2000/svg" +namespace trans = "http://docbook.org/ns/transclusion" +namespace xlink = "http://www.w3.org/1999/xlink" + +# This file is part of DocBook ITS V5.2CR5 +# +# Copyright 2007-2020 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Jirka Kosek, 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-comment@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. +# +# ====================================================================== + +s:ns [ + prefix = "a" + uri = "http://relaxng.org/ns/compatibility/annotations/1.0" +] +s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ] +s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ] +s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ] +s:ns [ prefix = "its" uri = "http://www.w3.org/2005/11/its" ] +s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ] +s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ] +s:ns [ prefix = "s" uri = "http://purl.oclc.org/dsdl/schematron" ] +s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ] +s:ns [ prefix = "trans" uri = "http://docbook.org/ns/transclusion" ] +s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ] +start = + (db.set + | db.book + | db.divisions + | db.components + | db.navigation.components + | db.section + | db.para) + | (db.abstract + | db.mediaobject.content + | db.audiodata + | db.imagedata + | db.textdata + | db.videodata + | db.caption + | db.publishing.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.formalpara + | db.inlinemediaobject + | db.list.blocks + | db.legalnotice + | db.verbatim.blocks + | db.graphic.blocks + | db.personblurb + | db.revhistory + | db.simpara + | db.step + | db.stepalternatives + | db.info) + | (db.partintro | db.simplesect) + | db.annotation + | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5) + | (db.refentry | db.refsection | db.refsynopsisdiv) + | (db.refsect1 | db.refsect2 | db.refsect3) + | (db.glossary | db.glossdiv | db.glosslist) + | (db.bibliodiv | db.bibliolist) + | (db.setindex | db.index | db.indexdiv) + | (db.toc | db.tocdiv) + | (db.task | db.taskprerequisites | db.taskrelated | db.tasksummary) + | (db.calloutlist + | db.programlistingco + | db.screenco + | db.imageobjectco) + | (db.productionset | db.constraintdef) + | (db.msg + | db.msgexplan + | db.msgmain + | db.msgrel + | db.msgset + | db.msgsub) + | (db.qandadiv | db.qandaentry | db.qandaset) + | (db.equation | db.informalequation) + | db.cmdsynopsis + | (db.synopsis.blocks | db.funcsynopsisinfo | db.classsynopsisinfo) + | db.admonition.blocks + | db.topic +div { + db._any.attribute = + + ## Any attribute, including any attribute in any namespace + attribute * { text } +} +db.arch.attribute = + + ## Designates the computer or chip architecture to which the element applies + attribute arch { text } +db.audience.attribute = + + ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + attribute audience { text } +db.condition.attribute = + + ## provides a standard place for application-specific effectivity + attribute condition { text } +db.conformance.attribute = + + ## Indicates standards conformance characteristics of the element + attribute conformance { text } +db.os.attribute = + + ## Indicates the operating system to which the element is applicable + attribute os { text } +db.revision.attribute = + + ## Indicates the editorial revision to which the element belongs + attribute revision { text } +db.security.attribute = + + ## Indicates something about the security level associated with the element to which it applies + attribute security { text } +db.userlevel.attribute = + + ## Indicates the level of user experience for which the element applies + attribute userlevel { text } +db.vendor.attribute = + + ## Indicates the computer vendor to which the element applies + attribute vendor { text } +db.wordsize.attribute = + + ## Indicates the word size (width in bits) of the computer architecture to which the element applies + attribute wordsize { text } +db.outputformat.attribute = + + ## Indicates the output format (for example, print or epub) to which the element applies + attribute outputformat { text } +db.effectivity.attributes = + db.arch.attribute? + & db.audience.attribute? + & db.condition.attribute? + & db.conformance.attribute? + & db.os.attribute? + & db.revision.attribute? + & db.security.attribute? + & db.userlevel.attribute? + & db.vendor.attribute? + & db.wordsize.attribute? + & db.outputformat.attribute? +db.endterm.attribute = + + ## Points to the element whose content is to be used as the text of the link + attribute endterm { xsd:IDREF } +db.linkend.attribute = + + ## Points to an internal link target by identifying the value of its xml:id attribute + attribute linkend { xsd:IDREF } +db.linkends.attribute = + + ## Points to one or more internal link targets by identifying the value of their xml:id attributes + attribute linkends { xsd:IDREFS } +db.xlink.href.attribute = + + ## Identifies a link target with a URI + attribute xlink:href { xsd:anyURI } +db.xlink.simple.type.attribute = + + ## Identifies the XLink link type + attribute xlink:type { + + ## An XLink simple link type + "simple" + } +db.xlink.role.attribute = + + ## Identifies the XLink role of the link + attribute xlink:role { xsd:anyURI } +db.xlink.arcrole.attribute = + + ## Identifies the XLink arcrole of the link + attribute xlink:arcrole { xsd:anyURI } +db.xlink.title.attribute = + + ## Identifies the XLink title of the link + attribute xlink:title { text } +db.xlink.show.enumeration = + + ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + "new" + | + ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + "replace" + | + ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + "embed" + | + ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.show.attribute = + + ## Identifies the XLink show behavior of the link + attribute xlink:show { db.xlink.show.enumeration } +db.xlink.actuate.enumeration = + + ## An application should traverse to the ending resource immediately on loading the starting resource. + "onLoad" + | + ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + "onRequest" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.actuate.attribute = + + ## Identifies the XLink actuate behavior of the link + attribute xlink:actuate { db.xlink.actuate.enumeration } +db.xlink.simple.link.attributes = + db.xlink.simple.type.attribute? + & db.xlink.href.attribute? + & db.xlink.role.attribute? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? +db.xlink.attributes = + db.xlink.simple.link.attributes + | (db.xlink.extended.link.attributes + | db.xlink.locator.link.attributes + | db.xlink.arc.link.attributes + | db.xlink.resource.link.attributes + | db.xlink.title.link.attributes) +db.xml.id.attribute = + + ## Identifies the unique ID value of the element + attribute xml:id { xsd:ID } +db.version.attribute = + + ## Specifies the DocBook version of the element and its descendants + attribute version { text } +db.xml.lang.attribute = + + ## Specifies the natural language of the element and its descendants + attribute xml:lang { text } +db.xml.base.attribute = + + ## Specifies the base URI of the element and its descendants + attribute xml:base { xsd:anyURI } +db.remap.attribute = + + ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + attribute remap { text } +db.xreflabel.attribute = + + ## Provides the text that is to be generated for a cross reference to the element + attribute xreflabel { text } +db.xrefstyle.attribute = + + ## Specifies a keyword or keywords identifying additional style information + attribute xrefstyle { text } +db.revisionflag.enumeration = + + ## The element has been changed. + "changed" + | + ## The element is new (has been added to the document). + "added" + | + ## The element has been deleted. + "deleted" + | + ## Explicitly turns off revision markup for this element. + "off" +db.revisionflag.attribute = + + ## Identifies the revision status of the element + attribute revisionflag { db.revisionflag.enumeration } +db.dir.enumeration = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" +db.dir.attribute = + + ## Identifies the direction of text in an element + attribute dir { db.dir.enumeration } +db.rdfalite.vocab = + + ## The RDFa Lite vocab + attribute vocab { xsd:anyURI } +db.rdfalite.typeof = + + ## The RDFa Lite typeof + attribute typeof { text } +db.rdfalite.property = + + ## The RDFa Lite property + attribute property { text } +db.rdfalite.resource = + + ## The RDFa Lite resource + attribute resource { text } +db.rdfalite.prefix = + + ## The RDFa Lite prefix + attribute prefix { text } +db.rdfalite.attributes = + db.rdfalite.vocab? + & db.rdfalite.typeof? + & db.rdfalite.property? + & db.rdfalite.resource? + & db.rdfalite.prefix? +db.trans.idfixup.enumeration = + + ## No ID fixup strategy + "none" + | + ## ID fixup by concatenating suffixes + "suffix" + | + ## ID fixup by creating unique values + "auto" +db.trans.idfixup.attribute = + + ## The transclusion ID fixup strategy + attribute trans:idfixup { db.trans.idfixup.enumeration } +db.trans.suffix.attribute = + + ## The transclusion suffix to use when the suffix ID fixup strategy is employed + [ + s:pattern [ + s:title [ "Suffix fixup must be specified" ] + s:rule [ + context = "db:*[@trans:suffix]" + s:assert [ + test = "@trans:idfixup = 'suffix'" + "If a suffix is specified, suffix ID fixup must also be specified." + ] + ] + ] + ] + attribute trans:suffix { text } +db.trans.linkscope.enumeration = + + ## No link scope adjustments are made + "user" + | + ## The link scopes are adjusted with the suffix property + "local" + | + ## The link scopes are adjusted based on proximity + "near" + | + ## The link scopes are adjusted based on document order + "global" +db.trans.linkscope.attribute = + + ## The transclusion link scope adjustment + attribute trans:linkscope { db.trans.linkscope.enumeration } +db.common.transclusion.attributes = + db.trans.idfixup.attribute? + & db.trans.suffix.attribute? + & db.trans.linkscope.attribute? +db.common.base.attributes = + db.version.attribute? + & db.xml.lang.attribute? + & db.xml.base.attribute? + & db.remap.attribute? + & db.xreflabel.attribute? + & db.revisionflag.attribute? + & db.dir.attribute? + & db.effectivity.attributes + & db.rdfalite.attributes + & db.common.transclusion.attributes + & db._any_other.attribute* + & (its-local.attributes & its-attribute.version?) +db.common.attributes = + db.xml.id.attribute? + & db.common.base.attributes + & db.annotations.attribute? +db.common.idreq.attributes = + db.xml.id.attribute + & db.common.base.attributes + & db.annotations.attribute? +db.common.linking.attributes = + (db.linkend.attribute | db.xlink.attributes)? +db.common.req.linking.attributes = + db.linkend.attribute | db.xlink.attributes +db.common.data.attributes = + + ## Specifies the format of the data + attribute format { text }?, + ( + ## Indentifies the location of the data by URI + attribute fileref { xsd:anyURI } + | + ## Identifies the location of the data by external identifier (entity name) + attribute entityref { xsd:ENTITY }) +db.verbatim.continuation.enumeration = + + ## Line numbering continues from the immediately preceding element with the same name. + "continues" + | + ## Line numbering restarts (begins at 1, usually). + "restarts" +db.verbatim.continuation.attribute = + + ## Determines whether line numbering continues from the previous element or restarts + attribute continuation { db.verbatim.continuation.enumeration } +db.verbatim.linenumbering.enumeration = + + ## Lines are numbered. + "numbered" + | + ## Lines are not numbered. + "unnumbered" +db.verbatim.linenumbering.attribute = + + ## Determines whether lines are numbered + attribute linenumbering { db.verbatim.linenumbering.enumeration } +db.verbatim.startinglinenumber.attribute = + + ## Specifies the initial line number + attribute startinglinenumber { xsd:integer } +db.verbatim.language.attribute = + + ## Identifies the language (i.e. programming language) of the verbatim content + attribute language { text } +db.verbatim.xml.space.attribute = + + ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + attribute xml:space { + + ## Whitespace must be preserved. + "preserve" + } +db.verbatim.common.attributes = + db.verbatim.continuation.attribute? + & db.verbatim.linenumbering.attribute? + & db.verbatim.startinglinenumber.attribute? + & db.verbatim.xml.space.attribute? +db.verbatim.attributes = + db.verbatim.common.attributes & db.verbatim.language.attribute? +db.label.attribute = + + ## Specifies an identifying string for presentation purposes + attribute label { text } +db.width.characters.attribute = + + ## Specifies the width (in characters) of the element + attribute width { xsd:nonNegativeInteger } +db.spacing.enumeration = + + ## The spacing should be "compact". + "compact" + | + ## The spacing should be "normal". + "normal" +db.spacing.attribute = + + ## Specifies (a hint about) the spacing of the content + attribute spacing { db.spacing.enumeration } +db.pgwide.enumeration = + + ## The element should be rendered in the current text flow (with the flow column width). + "0" + | + ## The element should be rendered across the full text page. + "1" +db.pgwide.attribute = + + ## Indicates if the element is rendered across the column or the page + attribute pgwide { db.pgwide.enumeration } +db.language.attribute = + + ## Identifies the language (i.e. programming language) of the content + attribute language { text } +db.performance.enumeration = + + ## The content describes an optional step or steps. + "optional" + | + ## The content describes a required step or steps. + "required" +db.performance.attribute = + + ## Specifies if the content is required or optional + attribute performance { db.performance.enumeration } +db.floatstyle.attribute = + + ## Specifies style information to be used when rendering the float + attribute floatstyle { text } +db.width.attribute = + + ## Specifies the width of the element + attribute width { text } +db.depth.attribute = + + ## Specifies the depth of the element + attribute depth { text } +db.contentwidth.attribute = + + ## Specifies the width of the content rectangle + attribute contentwidth { text } +db.contentdepth.attribute = + + ## Specifies the depth of the content rectangle + attribute contentdepth { text } +db.scalefit.enumeration = + + ## False (do not scale-to-fit; anamorphic scaling may occur) + "0" + | + ## True (scale-to-fit; anamorphic scaling is forbidden) + "1" +db.scale.attribute = + + ## Specifies the scaling factor + attribute scale { xsd:positiveInteger } +db.classid.attribute = + + ## Specifies a classid for a media object player + attribute classid { text } +db.autoplay.attribute = + + ## Specifies the autoplay setting for a media object player + attribute autoplay { text } +db.halign.enumeration = + + ## Centered horizontally + "center" + | + ## Aligned horizontally on the specified character + "char" + | + ## Fully justified (left and right margins or edges) + "justify" + | + ## Left aligned + "left" + | + ## Right aligned + "right" +db.valign.enumeration = + + ## Aligned on the bottom of the region + "bottom" + | + ## Centered vertically + "middle" + | + ## Aligned on the top of the region + "top" +db.biblio.class.enumeration = + + ## A digital object identifier. + "doi" + | + ## An international standard book number. + "isbn" + | + ## An international standard technical report number (ISO 10444). + "isrn" + | + ## An international standard serial number. + "issn" + | + ## An international standard text code. + "istc" + | + ## A Library of Congress reference number. + "libraryofcongress" + | + ## A publication number (an internal number or possibly organizational standard). + "pubsnumber" + | + ## A Uniform Resource Identifier + "uri" +db.biblio.class-enum.attribute = + + ## Identifies the kind of bibliographic identifier + attribute class { db.biblio.class.enumeration }? +db.biblio.class-other.attribute = + + ## Identifies the nature of the non-standard bibliographic identifier + attribute otherclass { xsd:NMTOKEN } +db.biblio.class-other.attributes = + + ## Identifies the kind of bibliographic identifier + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.biblio.class-other.attribute +db.biblio.class.attribute = + db.biblio.class-enum.attribute | db.biblio.class-other.attributes +db.pubwork.enumeration = + + ## An article + "article" + | + ## A bulletin board system + "bbs" + | + ## A book + "book" + | + ## A CD-ROM + "cdrom" + | + ## A chapter (as of a book) + "chapter" + | + ## A DVD + "dvd" + | + ## An email message + "emailmessage" + | + ## A gopher page + "gopher" + | + ## A journal + "journal" + | + ## A manuscript + "manuscript" + | + ## A posting to a newsgroup + "newsposting" + | + ## A part (as of a book) + "part" + | + ## A reference entry + "refentry" + | + ## A section (as of a book or article) + "section" + | + ## A series + "series" + | + ## A set (as of books) + "set" + | + ## A web page + "webpage" + | + ## A wiki page + "wiki" + | + ## Some other kind of work + "other" +db.biblio.pubwork.enumeration = db.pubwork.enumeration +db.biblio.pubwork-enum.attribute = + + ## Identifies the nature of the published work + attribute pubwork { db.biblio.pubwork.enumeration }? +db.biblio.pubwork-other.attribute = + + ## Identifies the nature of some other kind of published work + attribute otherpubwork { xsd:NMTOKEN } +db.biblio.pubwork-other.attributes = + + ## Identifies that this is some other kind of published work + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.biblio.pubwork-other.attribute +db.biblio.pubwork.attribute = + db.biblio.pubwork-enum.attribute | db.biblio.pubwork-other.attributes +db.ubiq.inlines = + (db.inlinemediaobject + | db.remark + | db.link.inlines + | db.alt + | db.trademark + | # below, effectively the publishing inlines (as of 5.0) + db.abbrev + | db.acronym + | db.date + | db._emphasis + | db.footnote + | db.footnoteref + | db._foreignphrase + | db._phrase + | db._quote + | db.subscript + | db.superscript + | db.wordasword) + | db.annotation + | (db._firstterm | db._glossterm) + | db.indexterm + | db.coref +db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)* +db._title = db.title? & db.titleabbrev? & db.subtitle? +db._title.req = db.title & db.titleabbrev? & db.subtitle? +db._title.only = db.title? & db.titleabbrev? +db._title.onlyreq = db.title & db.titleabbrev? +db._info = (db._title, db.titleforbidden.info?) | db.info? +db._info.title.req = + (db._title.req, db.titleforbidden.info?) | db.titlereq.info +db._info.title.only = + (db._title.only, db.titleforbidden.info?) | db.titleonly.info +db._info.title.onlyreq = + (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info +db._info.title.forbidden = db.titleforbidden.info? +db.all.inlines = + text + | db.ubiq.inlines + | db.general.inlines + | db.domain.inlines + | db.extension.inlines +db.general.inlines = + db.publishing.inlines + | db.product.inlines + | db.bibliography.inlines + | db.graphic.inlines + | db.indexing.inlines + | db.link.inlines +db.domain.inlines = + db.technical.inlines + | db.math.inlines + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines + | db.os.inlines + | db.programming.inlines + | db.error.inlines +db.technical.inlines = + (db.replaceable | db.package | db.parameter) + | db.termdef + | db.nonterminal + | (db.systemitem | db.option | db.optional | db.property) +db.product.inlines = + db.trademark + | (db.productnumber + | db.productname + | db.database + | db.application + | db.hardware) +db.bibliography.inlines = + db.citation + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.author + | db.person + | db.personname + | db.org + | db.orgname + | db.editor + | db.jobtitle +db.publishing.inlines = + (db.abbrev + | db.acronym + | db.date + | db.emphasis + | db.footnote + | db.footnoteref + | db.foreignphrase + | db.phrase + | db.quote + | db.revnumber + | db.subscript + | db.superscript + | db.wordasword) + | db.glossary.inlines + | db.coref +db.graphic.inlines = db.inlinemediaobject +db.indexing.inlines = notAllowed | db.indexterm +db.link.inlines = + (db.xref | db.link | db.olink | db.anchor) | db.biblioref +db.extension.inlines = notAllowed +db.nopara.blocks = + (db.list.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.indexterm + | db.synopsis.blocks + | db.admonition.blocks +db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara +db.all.blocks = + (db.nopara.blocks | db.para.blocks | db.extension.blocks) + | db.annotation +db.wrapper.blocks = db.formalgroup +db.formal.blocks = (db.example | db.figure | db.table) | db.equation +db.informal.blocks = + (db.informalexample | db.informalfigure | db.informaltable) + | db.informalequation +db.publishing.blocks = + db.sidebar | db.blockquote | db.address | db.epigraph +db.graphic.blocks = db.mediaobject | db.screenshot +db.technical.blocks = + db.procedure + | db.task + | (db.productionset | db.constraintdef) + | db.msgset +db.list.blocks = + (db.itemizedlist + | db.orderedlist + | db.procedure + | db.simplelist + | db.variablelist + | db.segmentedlist) + | db.glosslist + | db.bibliolist + | db.calloutlist + | db.qandaset +db.verbatim.blocks = + (db.screen | db.literallayout) + | (db.programlistingco | db.screenco) + | (db.programlisting | db.synopsis) +db.extension.blocks = notAllowed +db.info.extension = db._any | (its-rules | its-standoff) +db.info.elements = + (db.abstract + | db.address + | db.artpagenums + | db.author + | db.authorgroup + | db.authorinitials + | db.bibliocoverage + | db.biblioid + | db.bibliosource + | db.collab + | db.confgroup + | db.contractsponsor + | db.contractnum + | db.copyright + | db.cover + | db.date + | db.edition + | db.editor + | db.issuenum + | 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.meta + | db.info.extension) + | db.annotation + | db.extendedlink + | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset) + | db.itermset + | (db.productname | db.productnumber) +db.bibliographic.elements = + db.info.elements + | db.publishing.inlines + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.person + | db.personblurb + | db.personname + | db.subtitle + | db.title + | db.titleabbrev +div { + db.title.role.attribute = attribute role { text } + db.title.attlist = + db.title.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.title = + + ## The text of the title of a section of a document or of a formal block-level element + element title { db.title.attlist, db.all.inlines* } +} +div { + db.titleabbrev.role.attribute = attribute role { text } + db.titleabbrev.attlist = + db.titleabbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.titleabbrev = + + ## The abbreviation of a title + element titleabbrev { db.titleabbrev.attlist, db.all.inlines* } +} +div { + db.subtitle.role.attribute = attribute role { text } + db.subtitle.attlist = + db.subtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subtitle = + + ## The subtitle of a document + element subtitle { db.subtitle.attlist, db.all.inlines* } +} +div { + db.info.role.attribute = attribute role { text } + db.info.attlist = db.info.role.attribute? & db.common.attributes + db.info = + + ## A wrapper for information about a component or other block + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.info.attlist, (db._title & db.info.elements*) } +} +div { + db.titlereq.info.role.attribute = attribute role { text } + db.titlereq.info.attlist = + db.titlereq.info.role.attribute? & db.common.attributes + db.titlereq.info = + + ## A wrapper for information about a component or other block with a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titlereq.info.attlist, (db._title.req & db.info.elements*) + } +} +div { + db.titleonly.info.role.attribute = attribute role { text } + db.titleonly.info.attlist = + db.titleonly.info.role.attribute? & db.common.attributes + db.titleonly.info = + + ## A wrapper for information about a component or other block with only a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonly.info.attlist, (db._title.only & db.info.elements*) + } +} +div { + db.titleonlyreq.info.role.attribute = attribute role { text } + db.titleonlyreq.info.attlist = + db.titleonlyreq.info.role.attribute? & db.common.attributes + db.titleonlyreq.info = + + ## A wrapper for information about a component or other block with only a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonlyreq.info.attlist, + (db._title.onlyreq & db.info.elements*) + } +} +div { + db.titleforbidden.info.role.attribute = attribute role { text } + db.titleforbidden.info.attlist = + db.titleforbidden.info.role.attribute? & db.common.attributes + db.titleforbidden.info = + + ## A wrapper for information about a component or other block without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.titleforbidden.info.attlist, db.info.elements* } +} +div { + db.subjectset.role.attribute = attribute role { text } + db.subjectset.scheme.attribute = + + ## Identifies the controlled vocabulary used by this set's terms + attribute scheme { xsd:NMTOKEN } + db.subjectset.attlist = + db.subjectset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subjectset.scheme.attribute? + db.subjectset = + + ## A set of terms describing the subject matter of a document + element subjectset { db.subjectset.attlist, db.subject+ } +} +div { + db.subject.role.attribute = attribute role { text } + db.subject.weight.attribute = + + ## Specifies a ranking for this subject relative to other subjects in the same set + attribute weight { text } + db.subject.attlist = + db.subject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subject.weight.attribute? + db.subject = + + ## One of a group of terms describing the subject matter of a document + element subject { db.subject.attlist, db.subjectterm+ } +} +div { + db.subjectterm.role.attribute = attribute role { text } + db.subjectterm.attlist = + db.subjectterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subjectterm = + + ## A term in a group of terms describing the subject matter of a document + element subjectterm { db.subjectterm.attlist, text } +} +div { + db.keywordset.role.attribute = attribute role { text } + db.keywordset.attlist = + db.keywordset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keywordset = + + ## A set of keywords describing the content of a document + element keywordset { db.keywordset.attlist, db.keyword+ } +} +div { + db.keyword.role.attribute = attribute role { text } + db.keyword.attlist = + db.keyword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keyword = + + ## One of a set of keywords describing the content of a document + element keyword { db.keyword.attlist, text } +} +db.table.choice = notAllowed | db.cals.table | db.html.table +db.informaltable.choice = + notAllowed | db.cals.informaltable | db.html.informaltable +db.table = db.table.choice +db.informaltable = db.informaltable.choice +div { + db.procedure.role.attribute = attribute role { text } + db.procedure.type.attribute = + + ## Identifies the type of procedure + attribute type { text }? + db.procedure.attlist = + db.procedure.role.attribute? + & db.procedure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + db.procedure.info = db._info.title.only + db.procedure = + + ## A list of operations to be performed in a well-defined sequence + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:procedure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element procedure { + db.procedure.attlist, + db.procedure.info, + db.all.blocks*, + db.step+, + db.result? + } +} +div { + db.step.role.attribute = attribute role { text } + db.step.attlist = + db.step.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.step.info = db._info.title.only + # This content model is blocks*, step|stepalternatives, blocks* but + # expressed this way it avoids UPA issues in XSD and DTD versions + db.step = + + ## A unit of action in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:step" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element step { + db.step.attlist, + db.step.info, + ((db.all.blocks+, + ((db.substeps | db.stepalternatives), db.all.blocks*)?, + db.result?) + | ((db.substeps | db.stepalternatives), + db.all.blocks*, + db.result?)) + } +} +div { + db.stepalternatives.role.attribute = attribute role { text } + db.stepalternatives.attlist = + db.stepalternatives.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.stepalternatives.info = db._info.title.forbidden + db.stepalternatives = + + ## Alternative steps in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:stepalternatives" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element stepalternatives { + db.stepalternatives.attlist, db.stepalternatives.info, db.step+ + } +} +div { + db.substeps.role.attribute = attribute role { text } + db.substeps.attlist = + db.substeps.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.substeps = + + ## A wrapper for steps that occur within steps in a procedure + element substeps { db.substeps.attlist, db.step+ } +} +div { + db.result.role.attribute = attribute role { text } + db.result.attlist = + db.result.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.result = + + ## A wrapper for identifying the results of a procedure or step + element result { db.result.attlist, db.all.blocks+ } +} +div { + db.sidebar.floatstyle.attribute = db.floatstyle.attribute + db.sidebar.role.attribute = attribute role { text } + db.sidebar.attlist = + db.sidebar.role.attribute? + & db.sidebar.floatstyle.attribute? + & db.common.attributes + & db.common.linking.attributes + db.sidebar.info = db._info + db.sidebar = + + ## A portion of a document that is isolated from the main narrative flow + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:sidebar" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of sidebar" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sidebar" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sidebar { + db.sidebar.attlist, db.sidebar.info, db.all.blocks+ + } +} +div { + db.abstract.role.attribute = attribute role { text } + db.abstract.attlist = + db.abstract.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abstract.info = db._info.title.only + db.abstract = + + ## A summary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:abstract" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element abstract { + db.abstract.attlist, db.abstract.info, db.all.blocks+ + } +} +div { + db.personblurb.role.attribute = attribute role { text } + db.personblurb.attlist = + db.personblurb.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personblurb.info = db._info.title.only + db.personblurb = + + ## A short description or note about a person + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:personblurb" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element personblurb { + db.personblurb.attlist, db.personblurb.info, db.para.blocks+ + } +} +div { + db.blockquote.role.attribute = attribute role { text } + db.blockquote.attlist = + db.blockquote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.blockquote.info = db._info.title.only + db.blockquote = + + ## A quotation set off from the main text + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:blockquote" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element blockquote { + db.blockquote.attlist, + db.blockquote.info, + db.attribution?, + db.all.blocks+ + } +} +div { + db.attribution.role.attribute = attribute role { text } + db.attribution.attlist = + db.attribution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.attribution = + + ## The source of a block quote or epigraph + element attribution { + db.attribution.attlist, + (db._text + | db.person + | db.personname + | db.citetitle + | db.citation)* + } +} +div { + db.bridgehead.renderas.enumeration = + + ## Render as a first-level section + "sect1" + | + ## Render as a second-level section + "sect2" + | + ## Render as a third-level section + "sect3" + | + ## Render as a fourth-level section + "sect4" + | + ## Render as a fifth-level section + "sect5" + db.bridgehead.renderas-enum.attribute = + + ## Indicates how the bridge head should be rendered + attribute renderas { db.bridgehead.renderas.enumeration }? + db.bridgehead.renderas-other.attribute = + + ## Identifies the nature of the non-standard rendering + attribute otherrenderas { xsd:NMTOKEN } + db.bridgehead.renderas-other.attributes = + + ## Indicates how the bridge head should be rendered + attribute renderas { + + ## Identifies a non-standard rendering + "other" + } + & db.bridgehead.renderas-other.attribute + db.bridgehead.renderas.attribute = + db.bridgehead.renderas-enum.attribute + | db.bridgehead.renderas-other.attributes + db.bridgehead.role.attribute = attribute role { text } + db.bridgehead.attlist = + db.bridgehead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bridgehead.renderas.attribute? + db.bridgehead = + + ## A free-floating heading + element bridgehead { db.bridgehead.attlist, db.all.inlines* } +} +div { + db.remark.role.attribute = attribute role { text } + db.remark.attlist = + db.remark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.remark = + + ## A remark (or comment) intended for presentation in a draft manuscript + element remark { db.remark.attlist, db.all.inlines* } +} +div { + db.epigraph.role.attribute = attribute role { text } + db.epigraph.attlist = + db.epigraph.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.epigraph.info = db._info.title.forbidden + db.epigraph = + + ## A short inscription at the beginning of a document or component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:epigraph" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element epigraph { + db.epigraph.attlist, + db.epigraph.info, + db.attribution?, + (db.para.blocks | db.literallayout)+ + } +} +div { + db.footnote.role.attribute = attribute role { text } + db.footnote.label.attribute = + + ## Identifies the desired footnote mark + attribute label { xsd:NMTOKEN } + db.footnote.attlist = + db.footnote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.footnote.label.attribute? + db.footnote = + + ## A footnote + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:footnote)" + "footnote must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:epigraph)" + "epigraph must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of footnote" + ] + ] + ] + ] + element footnote { db.footnote.attlist, db.all.blocks+ } +} +div { + db.formalpara.role.attribute = attribute role { text } + db.formalpara.attlist = + db.formalpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.formalpara.info = db._info.title.onlyreq + db.formalpara = + + ## A paragraph with a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalpara { + db.formalpara.attlist, + db.formalpara.info, + db.indexing.inlines*, + db.para + } +} +div { + db.para.role.attribute = attribute role { text } + db.para.attlist = + db.para.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.para.info = db._info.title.forbidden + db.para = + + ## A paragraph + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:para" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element para { + db.para.attlist, + db.para.info, + (db.all.inlines | db.nopara.blocks)* + } +} +div { + db.simpara.role.attribute = attribute role { text } + db.simpara.attlist = + db.simpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.simpara.info = db._info.title.forbidden + db.simpara = + + ## A paragraph that contains only text and inline markup, no block elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simpara { + db.simpara.attlist, db.simpara.info, db.all.inlines* + } +} +div { + db.itemizedlist.role.attribute = attribute role { text } + db.itemizedlist.mark.attribute = + + ## Identifies the type of mark to be used on items in this list + attribute mark { xsd:NMTOKEN } + db.itemizedlist.attlist = + db.itemizedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.itemizedlist.mark.attribute? + db.itemizedlist.info = db._info.title.only + db.itemizedlist = + + ## A list in which each entry is marked with a bullet or other dingbat + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:itemizedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element itemizedlist { + db.itemizedlist.attlist, + db.itemizedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.orderedlist.role.attribute = attribute role { text } + db.orderedlist.continuation.enumeration = + + ## Specifies that numbering should begin where the preceding list left off + "continues" + | + ## Specifies that numbering should begin again at 1 + "restarts" + db.orderedlist.continuation.attribute = + + ## Indicates how list numbering should begin relative to the immediately preceding list + attribute continuation { db.orderedlist.continuation.enumeration } + db.orderedlist.startingnumber.attribute = + + ## Specifies the initial line number + attribute startingnumber { xsd:integer } + db.orderedlist.inheritnum.enumeration = + + ## Specifies that numbering should ignore list nesting + "ignore" + | + ## Specifies that numbering should inherit from outer-level lists + "inherit" + db.orderedlist.inheritnum.attribute = + + ## Indicates whether or not item numbering should be influenced by list nesting + attribute inheritnum { db.orderedlist.inheritnum.enumeration } + db.orderedlist.numeration.enumeration = + + ## Specifies Arabic numeration (1, 2, 3, …) + "arabic" + | + ## Specifies upper-case alphabetic numeration (A, B, C, …) + "upperalpha" + | + ## Specifies lower-case alphabetic numeration (a, b, c, …) + "loweralpha" + | + ## Specifies upper-case Roman numeration (I, II, III, …) + "upperroman" + | + ## Specifies lower-case Roman numeration (i, ii, iii …) + "lowerroman" + db.orderedlist.numeration.attribute = + + ## Indicates the desired numeration + attribute numeration { db.orderedlist.numeration.enumeration } + db.orderedlist.attlist = + db.orderedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & (db.orderedlist.continuation.attribute + | db.orderedlist.startingnumber.attribute)? + & db.orderedlist.inheritnum.attribute? + & db.orderedlist.numeration.attribute? + db.orderedlist.info = db._info.title.only + db.orderedlist = + + ## A list in which each entry is marked with a sequentially incremented label + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:orderedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element orderedlist { + db.orderedlist.attlist, + db.orderedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.listitem.role.attribute = attribute role { text } + db.listitem.override.attribute = + + ## Specifies the keyword for the type of mark that should be used on this + ## item, instead of the mark that would be used by default + attribute override { xsd:NMTOKEN } + db.listitem.attlist = + db.listitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.listitem.override.attribute? + db.listitem.info = db._info.title.forbidden + db.listitem = + + ## A wrapper for the elements of a list item + element listitem { + db.listitem.attlist, db.listitem.info, db.all.blocks+ + } +} +div { + db.segmentedlist.role.attribute = attribute role { text } + db.segmentedlist.attlist = + db.segmentedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segmentedlist.info = db._info.title.only + db.segmentedlist = + + ## A segmented list, a list of sets of elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:segmentedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element segmentedlist { + db.segmentedlist.attlist, + db.segmentedlist.info, + db.segtitle+, + db.seglistitem+ + } +} +div { + db.segtitle.role.attribute = attribute role { text } + db.segtitle.attlist = + db.segtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segtitle = + + ## The title of an element of a list item in a segmented list + element segtitle { db.segtitle.attlist, db.all.inlines* } +} +div { + db.seglistitem.role.attribute = attribute role { text } + db.seglistitem.attlist = + db.seglistitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seglistitem = + + ## A list item in a segmented list + [ + s:pattern [ + s:title [ "Cardinality of segments and titles" ] + s:rule [ + context = "db:seglistitem" + s:assert [ + test = "count(db:seg) = count(../db:segtitle)" + "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist" + ] + ] + ] + ] + element seglistitem { db.seglistitem.attlist, db.seg+ } +} +div { + db.seg.role.attribute = attribute role { text } + db.seg.attlist = + db.seg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seg = + + ## An element of a list item in a segmented list + element seg { db.seg.attlist, db.all.inlines* } +} +div { + db.simplelist.role.attribute = attribute role { text } + db.simplelist.type.enumeration = + + ## A tabular presentation in row-major order. + "horiz" + | + ## A tabular presentation in column-major order. + "vert" + | + ## An inline presentation, usually a comma-delimited list. + "inline" + db.simplelist.type.attribute = + + ## Specifies the type of list presentation + [ a:defaultValue = "vert" ] + attribute type { db.simplelist.type.enumeration } + db.simplelist.columns.attribute = + + ## Specifies the number of columns for horizontal or vertical presentation + attribute columns { xsd:integer } + db.simplelist.attlist = + db.simplelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplelist.type.attribute? + & db.simplelist.columns.attribute? + db.simplelist = + + ## An undecorated list of single words or short phrases + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplelist { db.simplelist.attlist, db.member+ } +} +div { + db.member.role.attribute = attribute role { text } + db.member.attlist = + db.member.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.member = + + ## An element of a simple list + element member { db.member.attlist, db.all.inlines* } +} +div { + db.variablelist.role.attribute = attribute role { text } + db.variablelist.termlength.attribute = + + ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + attribute termlength { text } + db.variablelist.attlist = + db.variablelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.variablelist.termlength.attribute? + db.variablelist.info = db._info.title.only + db.variablelist = + + ## A list in which each entry is composed of a set of one or more terms and an associated description + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:variablelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element variablelist { + db.variablelist.attlist, + db.variablelist.info, + db.all.blocks*, + db.varlistentry+ + } +} +div { + db.varlistentry.role.attribute = attribute role { text } + db.varlistentry.attlist = + db.varlistentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varlistentry = + + ## A wrapper for a set of terms and the associated description in a variable list + element varlistentry { + db.varlistentry.attlist, db.term+, db.listitem + } +} +div { + db.term.role.attribute = attribute role { text } + db.term.attlist = + db.term.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.term = + + ## The word or phrase being defined or described in a variable list + element term { db.term.attlist, db.all.inlines* } +} +div { + db.example.role.attribute = attribute role { text } + db.example.label.attribute = db.label.attribute + db.example.width.attribute = db.width.characters.attribute + db.example.pgwide.attribute = db.pgwide.attribute + db.example.floatstyle.attribute = db.floatstyle.attribute + db.example.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.example.attlist = + db.example.role.attribute? + & db.example.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.example.label.attribute? + & db.example.floatstyle.attribute? + & (db.example.width.attribute | db.example.pgwide.attribute)? + db.example.info = db._info.title.onlyreq + db.example = + + ## A formal example, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:example" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element example { + db.example.attlist, db.example.info, db.all.blocks+, db.caption? + } +} +div { + db.informalexample.role.attribute = attribute role { text } + db.informalexample.width.attribute = db.width.characters.attribute + db.informalexample.pgwide.attribute = db.pgwide.attribute + db.informalexample.floatstyle.attribute = db.floatstyle.attribute + db.informalexample.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.informalexample.attlist = + db.informalexample.role.attribute? + & db.informalexample.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalexample.floatstyle.attribute? + & (db.informalexample.width.attribute + | db.informalexample.pgwide.attribute)? + db.informalexample.info = db._info.title.forbidden + db.informalexample = + + ## A displayed example without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalexample" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalexample { + db.informalexample.attlist, + db.informalexample.info, + db.all.blocks+, + db.caption? + } +} +db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co +db.verbatim.contentmodel = + db._info.title.forbidden, (db.textobject | db.verbatim.inlines*) +div { + db.literallayout.role.attribute = attribute role { text } + db.literallayout.class.enumeration = + + ## The literal layout should be formatted with a monospaced font + "monospaced" + | + ## The literal layout should be formatted with the current font + "normal" + db.literallayout.class.attribute = + + ## Specifies the class of literal layout + attribute class { db.literallayout.class.enumeration } + db.literallayout.attlist = + db.literallayout.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.literallayout.class.attribute? + db.literallayout = + + ## A block of text in which line breaks and white space are to be reproduced faithfully + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:literallayout" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element literallayout { + db.literallayout.attlist, db.verbatim.contentmodel + } +} +div { + db.screen.role.attribute = attribute role { text } + db.screen.width.attribute = db.width.characters.attribute + db.screen.attlist = + db.screen.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.screen.width.attribute? + db.screen = + + ## Text that a user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screen" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screen { db.screen.attlist, db.verbatim.contentmodel } +} +div { + db.screenshot.role.attribute = attribute role { text } + db.screenshot.attlist = + db.screenshot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenshot.info = db._info + db.screenshot = + + ## A representation of what the user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenshot" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenshot { + db.screenshot.attlist, db.screenshot.info, db.mediaobject + } +} +div { + db.figure.role.attribute = attribute role { text } + db.figure.label.attribute = db.label.attribute + db.figure.pgwide.attribute = db.pgwide.attribute + db.figure.floatstyle.attribute = db.floatstyle.attribute + db.figure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.figure.attlist = + db.figure.role.attribute? + & db.figure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.figure.label.attribute? + & db.figure.pgwide.attribute? + & db.figure.floatstyle.attribute? + db.figure.info = db._info.title.onlyreq + db.figure = + + ## A formal figure, generally an illustration, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:figure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element figure { + db.figure.attlist, db.figure.info, db.all.blocks+, db.caption? + } +} +div { + db.informalfigure.role.attribute = attribute role { text } + db.informalfigure.label.attribute = db.label.attribute + db.informalfigure.pgwide.attribute = db.pgwide.attribute + db.informalfigure.floatstyle.attribute = db.floatstyle.attribute + db.informalfigure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.informalfigure.attlist = + db.informalfigure.role.attribute? + & db.informalfigure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalfigure.label.attribute? + & db.informalfigure.pgwide.attribute? + & db.informalfigure.floatstyle.attribute? + db.informalfigure.info = db._info.title.forbidden + db.informalfigure = + + ## A untitled figure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalfigure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalfigure { + db.informalfigure.attlist, + db.informalfigure.info, + db.all.blocks+, + db.caption? + } +} +db.mediaobject.content = + (db.videoobject | db.audioobject | db.imageobject | db.textobject) + | db.imageobjectco +div { + db.mediaobject.role.attribute = attribute role { text } + db.mediaobject.attlist = + db.mediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mediaobject.info = db._info.title.forbidden + db.mediaobject = + + ## A displayed media object (video, audio, image, etc.) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:mediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element mediaobject { + db.mediaobject.attlist, + db.mediaobject.info, + db.alt?, + db.mediaobject.content+, + db.caption? + } +} +div { + db.inlinemediaobject.role.attribute = attribute role { text } + db.inlinemediaobject.attlist = + db.inlinemediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlinemediaobject.info = db._info.title.forbidden + db.inlinemediaobject = + + ## An inline media object (video, audio, image, and so on) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:inlinemediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element inlinemediaobject { + db.inlinemediaobject.attlist, + db.inlinemediaobject.info, + db.alt?, + db.mediaobject.content+ + } +} +div { + db.videoobject.role.attribute = attribute role { text } + db.videoobject.attlist = + db.videoobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.videoobject.info = db._info.title.forbidden + db.videoobject = + + ## A wrapper for video data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videoobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videoobject { + db.videoobject.attlist, db.videoobject.info, db.videodata+ + } +} +div { + db.audioobject.role.attribute = attribute role { text } + db.audioobject.attlist = + db.audioobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.audioobject.info = db._info.title.forbidden + db.audioobject = + + ## A wrapper for audio data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audioobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audioobject { + db.audioobject.attlist, db.audioobject.info, db.audiodata+ + } +} +db.imageobject.content = + db.imagedata+ | db.imagedata.mathml | db.imagedata.svg+ +div { + db.imageobject.role.attribute = attribute role { text } + db.imageobject.attlist = + db.imageobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobject.info = db._info.title.forbidden + db.imageobject = + + ## A wrapper for image data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobject { + db.imageobject.attlist, + db.imageobject.info, + db.imageobject.content + } +} +div { + db.textobject.role.attribute = attribute role { text } + db.textobject.attlist = + db.textobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.textobject.info = db._info.title.forbidden + db.textobject = + + ## A wrapper for a text description of an object and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textobject { + db.textobject.attlist, + db.textobject.info, + (db.phrase | db.textdata | db.all.blocks+) + } +} +div { + db.videodata.role.attribute = attribute role { text } + db.videodata.align.enumeration = db.halign.enumeration + db.videodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.videodata.align.enumeration } + db.videodata.autoplay.attribute = db.autoplay.attribute + db.videodata.classid.attribute = db.classid.attribute + db.videodata.valign.enumeration = db.valign.enumeration + db.videodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.videodata.valign.enumeration } + db.videodata.width.attribute = db.width.attribute + db.videodata.depth.attribute = db.depth.attribute + db.videodata.contentwidth.attribute = db.contentwidth.attribute + db.videodata.contentdepth.attribute = db.contentdepth.attribute + db.videodata.scalefit.enumeration = db.scalefit.enumeration + db.videodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.videodata.scalefit.enumeration } + db.videodata.scale.attribute = db.scale.attribute + db.videodata.attlist = + db.videodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.videodata.align.attribute? + & db.videodata.valign.attribute? + & db.videodata.width.attribute? + & db.videodata.contentwidth.attribute? + & db.videodata.scalefit.attribute? + & db.videodata.scale.attribute? + & db.videodata.depth.attribute? + & db.videodata.contentdepth.attribute? + & db.videodata.autoplay.attribute? + & db.videodata.classid.attribute? + db.videodata.info = db._info.title.forbidden + db.videodata = + + ## Pointer to external video data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videodata { + db.videodata.attlist, db.videodata.info, db.multimediaparam* + } +} +div { + db.audiodata.role.attribute = attribute role { text } + db.audiodata.align.enumeration = db.halign.enumeration + db.audiodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.audiodata.align.enumeration } + db.audiodata.autoplay.attribute = db.autoplay.attribute + db.audiodata.classid.attribute = db.classid.attribute + db.audiodata.contentwidth.attribute = db.contentwidth.attribute + db.audiodata.contentdepth.attribute = db.contentdepth.attribute + db.audiodata.depth.attribute = db.depth.attribute + db.audiodata.scale.attribute = db.scale.attribute + db.audiodata.scalefit.enumeration = db.scalefit.enumeration + db.audiodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.audiodata.scalefit.enumeration } + db.audiodata.valign.enumeration = db.valign.enumeration + db.audiodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.audiodata.valign.enumeration } + db.audiodata.width.attribute = db.width.attribute + db.audiodata.attlist = + db.audiodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.audiodata.align.attribute? + & db.audiodata.autoplay.attribute? + & db.audiodata.classid.attribute? + & db.audiodata.contentdepth.attribute? + & db.audiodata.contentwidth.attribute? + & db.audiodata.depth.attribute? + & db.audiodata.scale.attribute? + & db.audiodata.scalefit.attribute? + & db.audiodata.valign.attribute? + & db.audiodata.width.attribute? + db.audiodata.info = db._info.title.forbidden + db.audiodata = + + ## Pointer to external audio data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audiodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audiodata { + db.audiodata.attlist, db.audiodata.info, db.multimediaparam* + } +} +div { + db.imagedata.role.attribute = attribute role { text } + db.imagedata.align.enumeration = db.halign.enumeration + db.imagedata.align.attribute = + + ## Specifies the (horizontal) alignment of the image data + attribute align { db.imagedata.align.enumeration } + db.imagedata.valign.enumeration = db.valign.enumeration + db.imagedata.valign.attribute = + + ## Specifies the vertical alignment of the image data + attribute valign { db.imagedata.valign.enumeration } + db.imagedata.width.attribute = db.width.attribute + db.imagedata.depth.attribute = db.depth.attribute + db.imagedata.contentwidth.attribute = db.contentwidth.attribute + db.imagedata.contentdepth.attribute = db.contentdepth.attribute + db.imagedata.scalefit.enumeration = db.scalefit.enumeration + db.imagedata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.imagedata.scalefit.enumeration } + db.imagedata.scale.attribute = db.scale.attribute + db.imagedata.attlist = + db.imagedata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.info = db._info.title.forbidden + db.imagedata = + + ## Pointer to external image data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.attlist, db.imagedata.info, db.multimediaparam* + } +} +div { + db.textdata.role.attribute = attribute role { text } + db.textdata.encoding.attribute = + + ## Identifies the encoding of the text in the external file + attribute encoding { text } + db.textdata.attlist = + db.textdata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.textdata.encoding.attribute? + db.textdata.info = db._info.title.forbidden + db.textdata = + + ## Pointer to external text data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textdata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textdata { db.textdata.attlist, db.textdata.info } +} +div { + db.multimediaparam.role.attribute = attribute role { text } + db.multimediaparam.name.attribute = + + ## Specifies the name of the parameter + attribute name { text } + db.multimediaparam.value.attribute = + + ## Specifies the value of the parameter + attribute value { text } + db.multimediaparam.valuetype.attribute = + + ## Specifies the type of the value of the parameter + attribute valuetype { text } + db.multimediaparam.attlist = + db.multimediaparam.role.attribute? + & db.common.attributes + & db.multimediaparam.name.attribute + & db.multimediaparam.value.attribute + & db.multimediaparam.valuetype.attribute? + db.multimediaparam = + + ## Application specific parameters for a media player + element multimediaparam { db.multimediaparam.attlist, empty } +} +div { + db.caption.role.attribute = attribute role { text } + db.caption.attlist = + db.caption.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caption.info = db._info.title.forbidden + db.caption = + + ## A caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { + db.caption.attlist, db.caption.info, db.all.blocks+ + } +} +div { + db.address.role.attribute = attribute role { text } + db.address.attlist = + db.address.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.address = + + ## A real-world address, generally a postal address + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:address" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element address { + db.address.attlist, + (db._text + | db.personname + | db.orgname + | db.pob + | db.street + | db.city + | db.state + | db.postcode + | db.country + | db.phone + | db.fax + | db.email + | db.uri + | db.otheraddr)* + } +} +div { + db.street.role.attribute = attribute role { text } + db.street.attlist = + db.street.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.street = + + ## A street address in an address + element street { db.street.attlist, db._text } +} +div { + db.pob.role.attribute = attribute role { text } + db.pob.attlist = + db.pob.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pob = + + ## A post office box in an address + element pob { db.pob.attlist, db._text } +} +div { + db.postcode.role.attribute = attribute role { text } + db.postcode.attlist = + db.postcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.postcode = + + ## A postal code in an address + element postcode { db.postcode.attlist, db._text } +} +div { + db.city.role.attribute = attribute role { text } + db.city.attlist = + db.city.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.city = + + ## The name of a city in an address + element city { db.city.attlist, db._text } +} +div { + db.state.role.attribute = attribute role { text } + db.state.attlist = + db.state.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.state = + + ## A state or province in an address + element state { db.state.attlist, db._text } +} +div { + db.country.role.attribute = attribute role { text } + db.country.attlist = + db.country.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.country = + + ## The name of a country + element country { db.country.attlist, db._text } +} +div { + db.phone.role.attribute = attribute role { text } + db.phone.attlist = + db.phone.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.phone = + + ## A telephone number + element phone { db.phone.attlist, db._text } +} +div { + db.fax.role.attribute = attribute role { text } + db.fax.attlist = + db.fax.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.fax = + + ## A fax number + element fax { db.fax.attlist, db._text } +} +div { + db.otheraddr.role.attribute = attribute role { text } + db.otheraddr.attlist = + db.otheraddr.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.otheraddr = + + ## Uncategorized information in address + element otheraddr { db.otheraddr.attlist, db._text } +} +div { + db.affiliation.role.attribute = attribute role { text } + db.affiliation.attlist = + db.affiliation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.affiliation = + + ## The institutional affiliation of an individual + element affiliation { + db.affiliation.attlist, + db.shortaffil?, + db.jobtitle*, + (db.org? | (db.orgname?, db.orgdiv*, db.address*)) + } +} +div { + db.shortaffil.role.attribute = attribute role { text } + db.shortaffil.attlist = + db.shortaffil.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.shortaffil = + + ## A brief description of an affiliation + element shortaffil { db.shortaffil.attlist, db._text } +} +div { + db.jobtitle.role.attribute = attribute role { text } + db.jobtitle.attlist = + db.jobtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.jobtitle = + + ## The title of an individual in an organization + element jobtitle { db.jobtitle.attlist, db._text } +} +div { + db.orgname.class.enumeration = + + ## A consortium + "consortium" + | + ## A corporation + "corporation" + | + ## An informal organization + "informal" + | + ## A non-profit organization + "nonprofit" + db.orgname.class-enum.attribute = + + ## Specifies the nature of the organization + attribute class { db.orgname.class.enumeration } + db.orgname.class-other.attributes = + + ## Specifies the nature of the organization + attribute class { + + ## Indicates a non-standard organization class + "other" + }, + + ## Identifies the non-standard nature of the organization + attribute otherclass { text } + db.orgname.class.attribute = + db.orgname.class-enum.attribute | db.orgname.class-other.attributes + db.orgname.role.attribute = attribute role { text } + db.orgname.attlist = + db.orgname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.orgname.class.attribute? + db.orgname = + + ## The name of an organization + element orgname { db.orgname.attlist, db._text } +} +div { + db.orgdiv.role.attribute = attribute role { text } + db.orgdiv.attlist = + db.orgdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.orgdiv = + + ## A division of an organization + element orgdiv { db.orgdiv.attlist, db.all.inlines* } +} +div { + db.artpagenums.role.attribute = attribute role { text } + db.artpagenums.attlist = + db.artpagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.artpagenums = + + ## The page numbers of an article as published + element artpagenums { db.artpagenums.attlist, db._text } +} +div { + db.personname.role.attribute = attribute role { text } + db.personname.attlist = + db.personname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personname = + + ## The personal name of an individual + element personname { + db.personname.attlist, + (db._text + | (db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername)+ + | (db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername)+) + } +} +db.person.author.contentmodel = + db.personname, + (db.personblurb + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.org.author.contentmodel = + db.orgname, + (db.orgdiv + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.credit.contentmodel = + db.person.author.contentmodel | db.org.author.contentmodel +div { + db.author.role.attribute = attribute role { text } + db.author.attlist = + db.author.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.author = + + ## The name of an individual author + element author { db.author.attlist, db.credit.contentmodel } +} +div { + db.authorgroup.role.attribute = attribute role { text } + db.authorgroup.attlist = + db.authorgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorgroup = + + ## Wrapper for author information when a document has multiple authors or collaborators + element authorgroup { + db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+ + } +} +div { + db.collab.role.attribute = attribute role { text } + db.collab.attlist = + db.collab.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.collab = + + ## Identifies a collaborator + element collab { + db.collab.attlist, + (db.person | db.personname | db.org | db.orgname)+, + db.affiliation* + } +} +div { + db.authorinitials.role.attribute = attribute role { text } + db.authorinitials.attlist = + db.authorinitials.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorinitials = + + ## The initials or other short identifier for an author + element authorinitials { db.authorinitials.attlist, db._text } +} +div { + db.person.role.attribute = attribute role { text } + db.person.attlist = + db.person.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.person = + + ## A person and associated metadata + element person { + db.person.attlist, + db.personname, + (db.address + | db.affiliation + | db.email + | db.uri + | db.personblurb)* + } +} +div { + db.org.role.attribute = attribute role { text } + db.org.attlist = + db.org.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.org = + + ## An organization and associated metadata + element org { + db.org.attlist, + db.orgname, + (db.address | db.affiliation | db.email | db.uri | db.orgdiv)* + } +} +div { + db.confgroup.role.attribute = attribute role { text } + db.confgroup.attlist = + db.confgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confgroup = + + ## A wrapper for document meta-information about a conference + element confgroup { + db.confgroup.attlist, + (db.confdates + | db.conftitle + | db.confnum + | db.confsponsor + | db.address)* + } +} +div { + db.confdates.role.attribute = attribute role { text } + db.confdates.attlist = + db.confdates.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confdates = + + ## The dates of a conference for which a document was written + element confdates { db.confdates.attlist, db._text } +} +div { + db.conftitle.role.attribute = attribute role { text } + db.conftitle.attlist = + db.conftitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.conftitle = + + ## The title of a conference for which a document was written + element conftitle { db.conftitle.attlist, db._text } +} +div { + db.confnum.role.attribute = attribute role { text } + db.confnum.attlist = + db.confnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confnum = + + ## An identifier, frequently numerical, associated with a conference for which a document was written + element confnum { db.confnum.attlist, db._text } +} +div { + db.confsponsor.role.attribute = attribute role { text } + db.confsponsor.attlist = + db.confsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confsponsor = + + ## The sponsor of a conference for which a document was written + element confsponsor { db.confsponsor.attlist, db._text } +} +div { + db.contractnum.role.attribute = attribute role { text } + db.contractnum.attlist = + db.contractnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractnum = + + ## The contract number of a document + element contractnum { db.contractnum.attlist, db._text } +} +div { + db.contractsponsor.role.attribute = attribute role { text } + db.contractsponsor.attlist = + db.contractsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractsponsor = + + ## The sponsor of a contract + element contractsponsor { db.contractsponsor.attlist, db._text } +} +div { + db.copyright.role.attribute = attribute role { text } + db.copyright.attlist = + db.copyright.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.copyright = + + ## Copyright information about a document + element copyright { db.copyright.attlist, db.year+, db.holder* } +} +div { + db.year.role.attribute = attribute role { text } + db.year.attlist = + db.year.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.year = + + ## The year of publication of a document + element year { db.year.attlist, db._text } +} +div { + db.holder.role.attribute = attribute role { text } + db.holder.attlist = + db.holder.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.holder = + + ## The name of the individual or organization that holds a copyright + element holder { db.holder.attlist, db._text } +} +db.cover.contentmodel = + (db.para.blocks + | db.extension.blocks + | db.list.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.synopsis.blocks +div { + db.cover.role.attribute = attribute role { text } + db.cover.attlist = + db.cover.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.cover = + + ## Additional content for the cover of a publication + element cover { db.cover.attlist, db.cover.contentmodel+ } +} +db.date.contentmodel = + xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text +div { + db.date.role.attribute = attribute role { text } + db.date.attlist = + db.date.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.date = + + ## The date of publication or revision of a document + element date { db.date.attlist, db.date.contentmodel } +} +div { + db.edition.role.attribute = attribute role { text } + db.edition.attlist = + db.edition.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.edition = + + ## The name or number of an edition of a document + element edition { db.edition.attlist, db._text } +} +div { + db.editor.role.attribute = attribute role { text } + db.editor.attlist = + db.editor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.editor = + + ## The name of the editor of a document + element editor { db.editor.attlist, db.credit.contentmodel } +} +div { + db.biblioid.role.attribute = attribute role { text } + db.biblioid.attlist = + db.biblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.biblioid = + + ## An identifier for a document + element biblioid { db.biblioid.attlist, db._text } +} +div { + db.citebiblioid.role.attribute = attribute role { text } + db.citebiblioid.attlist = + db.citebiblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.citebiblioid = + + ## A citation of a bibliographic identifier + element citebiblioid { db.citebiblioid.attlist, db._text } +} +div { + db.bibliosource.role.attribute = attribute role { text } + db.bibliosource.attlist = + db.bibliosource.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.bibliosource = + + ## The source of a document + element bibliosource { db.bibliosource.attlist, db._text } +} +div { + db.bibliorelation.type.enumeration = + + ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + "hasformat" + | + ## The described resource includes the referenced resource either physically or logically + "haspart" + | + ## The described resource has a version, edition, or adaptation, namely, the referenced resource + "hasversion" + | + ## The described resource is the same intellectual content of the referenced resource, but presented in another format + "isformatof" + | + ## The described resource is a physical or logical part of the referenced resource + "ispartof" + | + ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource + "isreferencedby" + | + ## The described resource is supplanted, displaced, or superceded by the referenced resource + "isreplacedby" + | + ## The described resource is required by the referenced resource, either physically or logically + "isrequiredby" + | + ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + "isversionof" + | + ## The described resource references, cites, or otherwise points to the referenced resource + "references" + | + ## The described resource supplants, displaces, or supersedes the referenced resource + "replaces" + | + ## The described resource requires the referenced resource to support its function, delivery, or coherence of content + "requires" + db.bibliorelation.type-enum.attribute = + + ## Identifies the type of relationship + attribute type { db.bibliorelation.type.enumeration }? + db.bibliorelation.type-other.attributes = + + ## Identifies the type of relationship + attribute type { + + ## The described resource has a non-standard relationship with the referenced resource + "othertype" + }?, + + ## A keyword that identififes the type of the non-standard relationship + attribute othertype { xsd:NMTOKEN } + db.bibliorelation.type.attribute = + db.bibliorelation.type-enum.attribute + | db.bibliorelation.type-other.attributes + db.bibliorelation.role.attribute = attribute role { text } + db.bibliorelation.attlist = + db.bibliorelation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + & db.bibliorelation.type.attribute + db.bibliorelation = + + ## The relationship of a document to another + element bibliorelation { db.bibliorelation.attlist, db._text } +} +div { + db.bibliocoverage.spacial.enumeration = + + ## The DCMI Point identifies a point in space using its geographic coordinates + "dcmipoint" + | + ## ISO 3166 Codes for the representation of names of countries + "iso3166" + | + ## The DCMI Box identifies a region of space using its geographic limits + "dcmibox" + | + ## The Getty Thesaurus of Geographic Names + "tgn" + db.bibliocoverage.spatial-enum.attribute = + + ## Specifies the type of spatial coverage + attribute spatial { db.bibliocoverage.spacial.enumeration }? + db.bibliocoverage.spatial-other.attributes = + + ## Specifies the type of spatial coverage + attribute spatial { + + ## Identifies a non-standard type of coverage + "otherspatial" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute otherspatial { xsd:NMTOKEN } + db.bibliocoverage.spatial.attribute = + db.bibliocoverage.spatial-enum.attribute + | db.bibliocoverage.spatial-other.attributes + db.bibliocoverage.temporal.enumeration = + + ## A specification of the limits of a time interval + "dcmiperiod" + | + ## W3C Encoding rules for dates and times—a profile based on ISO 8601 + "w3c-dtf" + db.bibliocoverage.temporal-enum.attribute = + + ## Specifies the type of temporal coverage + attribute temporal { db.bibliocoverage.temporal.enumeration }? + db.bibliocoverage.temporal-other.attributes = + + ## Specifies the type of temporal coverage + attribute temporal { + + ## Specifies a non-standard type of coverage + "othertemporal" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute othertemporal { xsd:NMTOKEN } + db.bibliocoverage.temporal.attribute = + db.bibliocoverage.temporal-enum.attribute + | db.bibliocoverage.temporal-other.attributes + db.bibliocoverage.coverage.attrib = + db.bibliocoverage.spatial.attribute + & db.bibliocoverage.temporal.attribute + db.bibliocoverage.role.attribute = attribute role { text } + db.bibliocoverage.attlist = + db.bibliocoverage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bibliocoverage.coverage.attrib + db.bibliocoverage = + + ## The spatial or temporal coverage of a document + element bibliocoverage { db.bibliocoverage.attlist, db._text } +} +div { + db.legalnotice.role.attribute = attribute role { text } + db.legalnotice.attlist = + db.legalnotice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.legalnotice.info = db._info.title.only + db.legalnotice = + + ## A statement of legal obligations or requirements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:legalnotice" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element legalnotice { + db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+ + } +} +div { + db.othercredit.class.enumeration = + + ## A copy editor + "copyeditor" + | + ## A graphic designer + "graphicdesigner" + | + ## A production editor + "productioneditor" + | + ## A technical editor + "technicaleditor" + | + ## A translator + "translator" + | + ## An indexer + "indexer" + | + ## A proof-reader + "proofreader" + | + ## A cover designer + "coverdesigner" + | + ## An interior designer + "interiordesigner" + | + ## An illustrator + "illustrator" + | + ## A reviewer + "reviewer" + | + ## A typesetter + "typesetter" + | + ## A converter (a persons responsible for conversion, not an application) + "conversion" + db.othercredit.class-enum.attribute = + + ## Identifies the nature of the contributor + attribute class { db.othercredit.class.enumeration }? + db.othercredit.class-other.attribute = + + ## Identifies the nature of the non-standard contribution + attribute otherclass { xsd:NMTOKEN } + db.othercredit.class-other.attributes = + + ## Identifies the nature of the contributor + attribute class { + + ## Identifies a non-standard contribution + "other" + } + & db.othercredit.class-other.attribute + db.othercredit.class.attribute = + db.othercredit.class-enum.attribute + | db.othercredit.class-other.attributes + db.othercredit.role.attribute = attribute role { text } + db.othercredit.attlist = + db.othercredit.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.othercredit.class.attribute + db.othercredit = + + ## A person or entity, other than an author or editor, credited in a document + element othercredit { + db.othercredit.attlist, db.credit.contentmodel + } +} +div { + db.pagenums.role.attribute = attribute role { text } + db.pagenums.attlist = + db.pagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pagenums = + + ## The numbers of the pages in a book, for use in a bibliographic entry + element pagenums { db.pagenums.attlist, db._text } +} +div { + db.contrib.role.attribute = attribute role { text } + db.contrib.attlist = + db.contrib.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contrib = + + ## A summary of the contributions made to a document by a credited source + element contrib { db.contrib.attlist, db.all.inlines* } +} +div { + db.honorific.role.attribute = attribute role { text } + db.honorific.attlist = + db.honorific.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.honorific = + + ## The title of a person + element honorific { db.honorific.attlist, db._text } +} +div { + db.firstname.role.attribute = attribute role { text } + db.firstname.attlist = + db.firstname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.firstname = + + ## A given name of a person + element firstname { db.firstname.attlist, db._text } +} +div { + db.givenname.role.attribute = attribute role { text } + db.givenname.attlist = + db.givenname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.givenname = + + ## The given name of a person + element givenname { db.givenname.attlist, db._text } +} +div { + db.surname.role.attribute = attribute role { text } + db.surname.attlist = + db.surname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.surname = + + ## An inherited or family name; in western cultures the last name + element surname { db.surname.attlist, db._text } +} +div { + db.lineage.role.attribute = attribute role { text } + db.lineage.attlist = + db.lineage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineage = + + ## The portion of a person's name indicating a relationship to ancestors + element lineage { db.lineage.attlist, db._text } +} +div { + db.othername.role.attribute = attribute role { text } + db.othername.attlist = + db.othername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.othername = + + ## A component of a person's name that is not a first name, surname, or lineage + element othername { db.othername.attlist, db._text } +} +div { + db.printhistory.role.attribute = attribute role { text } + db.printhistory.attlist = + db.printhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.printhistory = + + ## The printing history of a document + element printhistory { db.printhistory.attlist, db.para.blocks+ } +} +div { + db.pubdate.role.attribute = attribute role { text } + db.pubdate.attlist = + db.pubdate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pubdate = + + ## The date of publication of a document + element pubdate { db.pubdate.attlist, db.date.contentmodel } +} +div { + db.publisher.role.attribute = attribute role { text } + db.publisher.attlist = + db.publisher.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publisher = + + ## The publisher of a document + element publisher { + db.publisher.attlist, db.publishername, db.address* + } +} +div { + db.publishername.role.attribute = attribute role { text } + db.publishername.attlist = + db.publishername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publishername = + + ## The name of the publisher of a document + element publishername { db.publishername.attlist, db._text } +} +div { + db.releaseinfo.role.attribute = attribute role { text } + db.releaseinfo.attlist = + db.releaseinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.releaseinfo = + + ## Information about a particular release of a document + element releaseinfo { db.releaseinfo.attlist, db._text } +} +div { + db.revhistory.role.attribute = attribute role { text } + db.revhistory.attlist = + db.revhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revhistory.info = db._info.title.only + db.revhistory = + + ## A history of the revisions to a document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:revhistory" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element revhistory { + db.revhistory.attlist, db.revhistory.info, db.revision+ + } +} +div { + db.revision.role.attribute = attribute role { text } + db.revision.attlist = + db.revision.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revision = + + ## An entry describing a single revision in the history of the revisions to a document + element revision { + db.revision.attlist, + db.revnumber?, + db.date, + (db.authorinitials | db.author)*, + (db.revremark | db.revdescription)? + } +} +div { + db.revnumber.role.attribute = attribute role { text } + db.revnumber.attlist = + db.revnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revnumber = + + ## A document revision number + element revnumber { db.revnumber.attlist, db._text } +} +div { + db.revremark.role.attribute = attribute role { text } + db.revremark.attlist = + db.revremark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revremark = + + ## A description of a revision to a document + element revremark { db.revremark.attlist, db._text } +} +div { + db.revdescription.role.attribute = attribute role { text } + db.revdescription.attlist = + db.revdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revdescription = + + ## A extended description of a revision to a document + element revdescription { db.revdescription.attlist, db.all.blocks* } +} +div { + db.seriesvolnums.role.attribute = attribute role { text } + db.seriesvolnums.attlist = + db.seriesvolnums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seriesvolnums = + + ## Numbers of the volumes in a series of books + element seriesvolnums { db.seriesvolnums.attlist, db._text } +} +div { + db.volumenum.role.attribute = attribute role { text } + db.volumenum.attlist = + db.volumenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.volumenum = + + ## The volume number of a document in a set (as of books in a set or articles in a journal) + element volumenum { db.volumenum.attlist, db._text } +} +div { + db.issuenum.role.attribute = attribute role { text } + db.issuenum.attlist = + db.issuenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.issuenum = + + ## The number of an issue of a journal + element issuenum { db.issuenum.attlist, db._text } +} +div { + db.meta.role.attribute = attribute role { text } + db.meta.name.attribute = + + ## A name for the metadata element + attribute name { text } + db.meta.content.attribute = + + ## The metadata content + attribute content { text } + db.meta.attlist = + db.meta.name.attribute? + & db.meta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.meta.empty = + + ## A generic metadata element + element meta { db.meta.attlist, db.meta.content.attribute, empty } + db.meta.content = + + ## A generic metadata element + element meta { + db.meta.attlist, + (text | db._any | db.all.inlines | db.all.blocks)* + } + db.meta = db.meta.empty | db.meta.content +} +div { + db.package.role.attribute = attribute role { text } + db.package.attlist = + db.package.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.package = + + ## A software or application package + element package { db.package.attlist, db._text } +} +div { + db.email.role.attribute = attribute role { text } + db.email.attlist = + db.email.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.email = + + ## An email address + element email { db.email.attlist, db._text } +} +div { + db.lineannotation.role.attribute = attribute role { text } + db.lineannotation.attlist = + db.lineannotation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineannotation = + + ## A comment on a line in a verbatim listing + element lineannotation { db.lineannotation.attlist, db._text } +} +div { + db.parameter.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + db.parameter.class.attribute = + + ## Identifies the class of parameter + attribute class { db.parameter.class.enumeration } + db.parameter.role.attribute = attribute role { text } + db.parameter.attlist = + db.parameter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.parameter.class.attribute? + db.parameter = + + ## A value or a symbolic reference to a value + element parameter { db.parameter.attlist, db._text } +} +db.replaceable.inlines = db._text | db.co +div { + db.replaceable.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + | + ## A parameter + "parameter" + db.replaceable.class.attribute = + + ## Identifies the nature of the replaceable text + attribute class { db.replaceable.class.enumeration } + db.replaceable.role.attribute = attribute role { text } + db.replaceable.attlist = + db.replaceable.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.replaceable.class.attribute? + db.replaceable = + + ## Content that may or must be replaced by the user + element replaceable { + db.replaceable.attlist, db.replaceable.inlines* + } +} +div { + db.uri.type.attribute = + + ## Identifies the type of URI specified + attribute type { text }? + db.uri.role.attribute = attribute role { text } + db.uri.attlist = + db.uri.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.uri.type.attribute + db.uri = + + ## A Uniform Resource Identifier + element uri { db.uri.attlist, db._text } +} +div { + db.abbrev.role.attribute = attribute role { text } + db.abbrev.attlist = + db.abbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abbrev = + + ## An abbreviation, especially one followed by a period + element abbrev { + db.abbrev.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.acronym.role.attribute = attribute role { text } + db.acronym.attlist = + db.acronym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.acronym = + + ## An often pronounceable word made from the initial (or selected) letters of a name or phrase + element acronym { + db.acronym.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.citation.role.attribute = attribute role { text } + db.citation.attlist = + db.citation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citation = + + ## An inline bibliographic reference to another published work + element citation { db.citation.attlist, db.all.inlines* } +} +div { + db.citerefentry.role.attribute = attribute role { text } + db.citerefentry.attlist = + db.citerefentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citerefentry = + + ## A citation to a reference page + element citerefentry { + db.citerefentry.attlist, db.refentrytitle, db.manvolnum? + } +} +div { + db.refentrytitle.role.attribute = attribute role { text } + db.refentrytitle.attlist = + db.refentrytitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refentrytitle = + + ## The title of a reference page + element refentrytitle { db.refentrytitle.attlist, db.all.inlines* } +} +div { + db.manvolnum.role.attribute = attribute role { text } + db.manvolnum.attlist = + db.manvolnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.manvolnum = + + ## A reference volume number + element manvolnum { db.manvolnum.attlist, db._text } +} +div { + db.citetitle.pubwork.enumeration = db.pubwork.enumeration + db.citetitle.pubwork-enum.attribute = + + ## Identifies the nature of the publication being cited + attribute pubwork { db.citetitle.pubwork.enumeration } + db.citetitle.pubwork-other.attribute = + + ## Identifies the nature of some other kind of publication being cited + attribute otherpubwork { xsd:NMTOKEN } + db.citetitle.pubwork-other.attributes = + + ## Identifies that this is some other kind of publication being cited + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.citetitle.pubwork-other.attribute + db.citetitle.pubwork.attribute = + db.citetitle.pubwork-enum.attribute + | db.citetitle.pubwork-other.attributes + db.citetitle.role.attribute = attribute role { text } + db.citetitle.attlist = + db.citetitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.citetitle.pubwork.attribute? + db.citetitle = + + ## The title of a cited work + element citetitle { db.citetitle.attlist, db.all.inlines* } +} +div { + db.emphasis.role.attribute = attribute role { text } + db.emphasis.attlist = + db.emphasis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.emphasis = + + ## Emphasized text + element emphasis { db.emphasis.attlist, db.all.inlines* } +} +div { + db._emphasis = + + ## A limited span of emphasized text + element emphasis { db.emphasis.attlist, db._text } +} +div { + db.foreignphrase.role.attribute = attribute role { text } + db.foreignphrase.attlist = + db.foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.foreignphrase = + + ## A word or phrase in a language other than the primary language of the document + element foreignphrase { + db.foreignphrase.attlist, (text | db.general.inlines)* + } +} +div { + db._foreignphrase.role.attribute = attribute role { text } + db._foreignphrase.attlist = + db._foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._foreignphrase = + + ## A limited word or phrase in a language other than the primary language of the document + element foreignphrase { db._foreignphrase.attlist, db._text } +} +div { + db.phrase.role.attribute = attribute role { text } + 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* } +} +div { + db._phrase = + + ## A limited span of text + element phrase { db.phrase.attlist, db._text } +} +div { + db.quote.role.attribute = attribute role { text } + db.quote.attlist = + db.quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.quote = + + ## An inline quotation + element quote { db.quote.attlist, db.all.inlines* } +} +div { + db._quote.role.attribute = attribute role { text } + db._quote.attlist = + db._quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._quote = + + ## A limited inline quotation + element quote { db._quote.attlist, db._text } +} +div { + db.subscript.role.attribute = attribute role { text } + db.subscript.attlist = + db.subscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subscript = + + ## A subscript (as in H₂O, the molecular formula for water) + element subscript { db.subscript.attlist, db._text } +} +div { + db.superscript.role.attribute = attribute role { text } + db.superscript.attlist = + db.superscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.superscript = + + ## A superscript (as in x², the mathematical notation for x multiplied by itself) + element superscript { db.superscript.attlist, db._text } +} +div { + db.trademark.class.enumeration = + + ## A copyright + "copyright" + | + ## A registered copyright + "registered" + | + ## A service + "service" + | + ## A trademark + "trade" + db.trademark.class.attribute = + + ## Identifies the class of trade mark + attribute class { db.trademark.class.enumeration } + db.trademark.role.attribute = attribute role { text } + db.trademark.attlist = + db.trademark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.trademark.class.attribute? + db.trademark = + + ## A trademark + element trademark { db.trademark.attlist, db._text } +} +div { + db.wordasword.role.attribute = attribute role { text } + db.wordasword.attlist = + db.wordasword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.wordasword = + + ## A word meant specifically as a word and not representing anything else + element wordasword { db.wordasword.attlist, db._text } +} +div { + db.footnoteref.role.attribute = attribute role { text } + db.footnoteref.label.attribute = db.label.attribute + db.footnoteref.attlist = + db.footnoteref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.footnoteref.label.attribute? + db.footnoteref = + + ## A cross reference to a footnote (a footnote mark) + [ + s:pattern [ + s:title [ "Footnote reference type constraint" ] + s:rule [ + context = "db:footnoteref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on footnoteref must point to a footnote." + ] + ] + ] + ] + element footnoteref { db.footnoteref.attlist, empty } +} +div { + db.xref.role.attribute = attribute role { text } + db.xref.xrefstyle.attribute = db.xrefstyle.attribute + db.xref.endterm.attribute = db.endterm.attribute + db.xref.attlist = + db.xref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.xref.xrefstyle.attribute? + & db.xref.endterm.attribute? + db.xref = + + ## A cross reference to another part of the document + element xref { db.xref.attlist, empty } +} +div { + db.link.role.attribute = attribute role { text } + db.link.xrefstyle.attribute = db.xrefstyle.attribute + db.link.endterm.attribute = db.endterm.attribute + db.link.attlist = + db.link.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.link.xrefstyle.attribute? + & db.link.endterm.attribute? + db.link = + + ## A hypertext link + element link { db.link.attlist, db.all.inlines* } +} +div { + db.olink.role.attribute = attribute role { text } + db.olink.xrefstyle.attribute = db.xrefstyle.attribute + db.olink.localinfo.attribute = + + ## Holds additional information that may be used by the application when resolving the link + attribute localinfo { text } + db.olink.targetdoc.attribute = + + ## Specifies the URI of the document in which the link target appears + attribute targetdoc { xsd:anyURI } + db.olink.targetptr.attribute = + + ## Specifies the location of the link target in the document + attribute targetptr { text } + db.olink.type.attribute = + + ## Identifies application-specific customization of the link behavior + attribute type { text } + db.olink.attlist = + db.common.attributes + & db.olink.targetdoc.attribute? + & db.olink.role.attribute? + & db.olink.xrefstyle.attribute? + & db.olink.localinfo.attribute? + & db.olink.targetptr.attribute? + & db.olink.type.attribute? + db.olink = + + ## A link that addresses its target indirectly + element olink { db.olink.attlist, db.all.inlines* } +} +div { + db.anchor.role.attribute = attribute role { text } + db.anchor.attlist = + db.anchor.role.attribute? & db.common.idreq.attributes + db.anchor = + + ## A spot in the document + element anchor { db.anchor.attlist, empty } +} +div { + db.alt.role.attribute = attribute role { text } + db.alt.attlist = db.alt.role.attribute? & db.common.attributes + db.alt = + + ## A text-only annotation, often used for accessibility + element alt { db.alt.attlist, (text | db.inlinemediaobject)* } +} +div { + db.formalgroup.fgstyle.attribute = + + ## Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + attribute fgstyle { text } + db.formalgroup.role.attribute = attribute role { text } + db.formalgroup.pgwide.attribute = db.pgwide.attribute + db.formalgroup.floatstyle.attribute = db.floatstyle.attribute + db.formalgroup.attlist = + db.formalgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.formalgroup.floatstyle.attribute? + & db.formalgroup.pgwide.attribute? + & db.formalgroup.fgstyle.attribute? + db.formalgroup.info = db._info.title.onlyreq + db.formalgroup = + + ## A group of formal objects, for example subfigures + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalgroup" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalgroup { + db.formalgroup.attlist, + db.formalgroup.info, + (db.figure+ | db.table+ | db.example+ | db.equation+) + } +} +db.status.attribute = + + ## Identifies the editorial or publication status of the element on which it occurs + attribute status { text } +db.toplevel.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | (db.sect1+, db.simplesect*) + | db.refentry+ +db.toplevel.blocks.or.sections = + (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections +db.recursive.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | db.refentry+ +db.recursive.blocks.or.sections = + (db.all.blocks+, db.recursive.sections?) | db.recursive.sections +db.divisions = db.part | db.reference +db.components = + db.dedication + | db.acknowledgements + | db.preface + | db.chapter + | db.appendix + | db.article + | db.colophon +db.navigation.components = + notAllowed | db.glossary | db.bibliography | db.index | db.toc +db.component.contentmodel = + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* +db.setindex.components = notAllowed | db.setindex +db.toc.components = notAllowed | db.toc +db.set.components = db.set | db.book | db.article +div { + db.set.status.attribute = db.status.attribute + db.set.role.attribute = attribute role { text } + db.set.attlist = + db.set.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.set.status.attribute? + db.set.info = db._info.title.req + db.set = + + ## A collection of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:set" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element set { + db.set.attlist, + db.set.info, + db.toc.components?, + db.set.components+, + db.setindex.components? + } +} +db.book.components = + (db.navigation.components | db.components | db.divisions)* | db.topic* +div { + db.book.status.attribute = db.status.attribute + db.book.role.attribute = attribute role { text } + db.book.attlist = + db.book.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.book.status.attribute? + db.book.info = db._info + db.book = + + ## A book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:book" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element book { db.book.attlist, db.book.info, db.book.components } +} +div { + db.dedication.status.attribute = db.status.attribute + db.dedication.role.attribute = attribute role { text } + db.dedication.attlist = + db.dedication.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.dedication.status.attribute? + db.dedication.info = db._info + db.dedication = + + ## The dedication of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:dedication" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element dedication { + db.dedication.attlist, db.dedication.info, db.all.blocks+ + } +} +div { + db.acknowledgements.status.attribute = db.status.attribute + db.acknowledgements.role.attribute = attribute role { text } + db.acknowledgements.attlist = + db.acknowledgements.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.acknowledgements.status.attribute? + db.acknowledgements.info = db._info + db.acknowledgements = + + ## Acknowledgements of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:acknowledgements" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element acknowledgements { + db.acknowledgements.attlist, + db.acknowledgements.info, + db.all.blocks+ + } +} +div { + db.colophon.status.attribute = db.status.attribute + db.colophon.role.attribute = attribute role { text } + db.colophon.attlist = + db.colophon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.colophon.status.attribute? + db.colophon.info = db._info + db.colophon = + + ## Text at the back of a book describing facts about its production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:colophon" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element colophon { + db.colophon.attlist, + db.colophon.info, + ((db.all.blocks+, db.simplesect*) + | (db.all.blocks*, db.simplesect+)) + } +} +db.appendix.contentmodel = db.component.contentmodel | db.topic+ +div { + db.appendix.status.attribute = db.status.attribute + db.appendix.role.attribute = attribute role { text } + db.appendix.attlist = + db.appendix.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.appendix.status.attribute? + db.appendix.info = db._info.title.req + db.appendix = + + ## An appendix in a book or article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:appendix" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element appendix { + db.appendix.attlist, db.appendix.info, db.appendix.contentmodel? + } +} +db.chapter.contentmodel = db.component.contentmodel | db.topic+ +div { + db.chapter.status.attribute = db.status.attribute + db.chapter.role.attribute = attribute role { text } + db.chapter.attlist = + db.chapter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.chapter.status.attribute? + db.chapter.info = db._info.title.req + db.chapter = + + ## A chapter, as of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:chapter" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element chapter { + db.chapter.attlist, db.chapter.info, db.chapter.contentmodel? + } +} +db.part.components = + (db.navigation.components | db.components) + | (db.refentry | db.reference) +db.part.contentmodel = db.part.components+ | db.topic+ +div { + db.part.status.attribute = db.status.attribute + db.part.role.attribute = attribute role { text } + db.part.attlist = + db.part.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.part.status.attribute? + db.part.info = db._info.title.req + db.part = + + ## A division in a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:part" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element part { + db.part.attlist, + db.part.info, + db.partintro?, + db.part.contentmodel? + } +} +div { + db.preface.status.attribute = db.status.attribute + db.preface.role.attribute = attribute role { text } + db.preface.attlist = + db.preface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.preface.status.attribute? + db.preface.info = db._info.title.req + db.preface = + + ## Introductory matter preceding the first chapter of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:preface" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element preface { + db.preface.attlist, db.preface.info, db.component.contentmodel? + } +} +div { + db.partintro.status.attribute = db.status.attribute + db.partintro.role.attribute = attribute role { text } + db.partintro.attlist = + db.partintro.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.partintro.status.attribute? + db.partintro.info = db._info + db.partintro = + + ## An introduction to the contents of a part + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:partintro" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element partintro { + db.partintro.attlist, + db.partintro.info, + db.toplevel.blocks.or.sections? + } +} +div { + db.section.status.attribute = db.status.attribute + db.section.class.enumeration = + + ## A section of legal obligations or requirements + "legal" + db.section.class-enum.attribute = + + ## Identifies the nature of the section + attribute class { db.section.class.enumeration } + db.section.class-other.attribute = + + ## Identifies a non-standard section class + attribute otherclass { xsd:NMTOKEN } + db.section.class-other.attributes = + + ## Indicates that a non-standard section class is applied + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.section.class-other.attribute + db.section.class.attribute = + db.section.class-enum.attribute | db.section.class-other.attributes + db.section.role.attribute = attribute role { text } + db.section.attlist = + db.section.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.section.status.attribute? + & db.section.class.attribute? + db.section.info = db._info.title.req + db.section = + + ## A recursive section + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:section" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element section { + db.section.attlist, + db.section.info, + db.navigation.components*, + db.recursive.blocks.or.sections?, + db.navigation.components* + } +} +div { + db.simplesect.status.attribute = db.status.attribute + db.simplesect.role.attribute = attribute role { text } + db.simplesect.attlist = + db.simplesect.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.simplesect.status.attribute? + db.simplesect.info = db._info.title.req + db.simplesect = + + ## A section of a document with no subdivisions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplesect" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplesect { + db.simplesect.attlist, db.simplesect.info, db.all.blocks* + } +} +db.article.components = db.toplevel.sections +db.article.navcomponents = + db.navigation.components + | db.acknowledgements + | db.dedication + | db.appendix + | db.colophon +div { + db.article.status.attribute = db.status.attribute + db.article.class.enumeration = + + ## A collection of frequently asked questions. + "faq" + | + ## An article in a journal or other periodical. + "journalarticle" + | + ## A description of a product. + "productsheet" + | + ## A specification. + "specification" + | + ## A technical report. + "techreport" + | + ## A white paper. + "whitepaper" + db.article.class-enum.attribute = + + ## Identifies the nature of the article + attribute class { db.article.class.enumeration } + db.article.class-other.attribute = + + ## Identifies the nature of the non-standard article + attribute otherclass { xsd:NMTOKEN } + db.article.class-other.attributes = + + ## Identifies the nature of the article + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.article.class-other.attribute + db.article.class.attribute = + db.article.class-enum.attribute | db.article.class-other.attributes + db.article.role.attribute = attribute role { text } + db.article.attlist = + db.article.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.article.status.attribute? + & db.article.class.attribute? + db.article.info = db._info.title.req + db.article = + + ## An article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:article" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element article { + db.article.attlist, + db.article.info, + db.article.navcomponents*, + ((db.all.blocks+, db.article.components?) + | db.article.components), + db.article.navcomponents* + } +} +db.annotations.attribute = + + ## Identifies one or more annotations that apply to this element + attribute annotations { text } +div { + db.annotation.role.attribute = attribute role { text } + db.annotation.annotates.attribute = + + ## Identifies one or more elements to which this annotation applies + attribute annotates { text } + db.annotation.attlist = + db.annotation.role.attribute? + & db.annotation.annotates.attribute? + & db.common.attributes + db.annotation.info = db._info.title.only + db.annotation = + + ## An annotation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:annotation" + s:assert [ + test = "not(.//db:annotation)" + "annotation must not occur among the children or descendants of annotation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:annotation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element annotation { + db.annotation.attlist, db.annotation.info, db.all.blocks+ + } +} +db.xlink.extended.type.attribute = + + ## Identifies the XLink extended link type + [ + s:pattern [ + s:title [ "XLink extended placement" ] + s:rule [ + context = "*[@xlink:type='extended']" + s:assert [ + test = "not(parent::*[@xlink:type='extended'])" + "An XLink extended type element may not occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink extended link type + "extended" + } +db.xlink.locator.type.attribute = + + ## Identifies the XLink locator link type + [ + s:pattern [ + s:title [ "XLink locator placement" ] + s:rule [ + context = "*[@xlink:type='locator']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink locator type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink locator link type + "locator" + } +db.xlink.arc.type.attribute = + + ## Identifies the XLink arc link type + [ + s:pattern [ + s:title [ "XLink arc placement" ] + s:rule [ + context = "*[@xlink:type='arc']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink arc type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink arc link type + "arc" + } +db.xlink.resource.type.attribute = + + ## Identifies the XLink resource link type + [ + s:pattern [ + s:title [ "XLink resource placement" ] + s:rule [ + context = "*[@xlink:type='resource']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink resource type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink resource link type + "resource" + } +db.xlink.title.type.attribute = + + ## Identifies the XLink title link type + [ + s:pattern [ + s:title [ "XLink title placement" ] + s:rule [ + context = "*[@xlink:type='title']" + s:assert [ + test = + "parent::*[@xlink:type='extended'] or parent::*[@xlink:type='locator'] or parent::*[@xlink:type='arc']" + "An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink title link type + "title" + } +db.xlink.extended.link.attributes = + db.xlink.extended.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? +db.xlink.locator.link.attributes = + db.xlink.locator.type.attribute + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.arc.link.attributes = + db.xlink.arc.type.attribute + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? +db.xlink.resource.link.attributes = + db.xlink.resource.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.title.link.attributes = db.xlink.title.type.attribute +db.xlink.from.attribute = + + ## Specifies the XLink traversal-from + attribute xlink:from { xsd:NMTOKEN } +db.xlink.label.attribute = + + ## Specifies the XLink label + attribute xlink:label { xsd:NMTOKEN } +db.xlink.to.attribute = + + ## Specifies the XLink traversal-to + attribute xlink:to { xsd:NMTOKEN } +div { + db.extendedlink.role.attribute = attribute role { text } + db.extendedlink.attlist = + db.extendedlink.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "extended" ] + attribute xlink:type { + + ## An XLink extended link + "extended" + }? + & db.xlink.role.attribute? + & db.xlink.title.attribute? + db.extendedlink = + + ## An XLink extended link + element extendedlink { + db.extendedlink.attlist, (db.locator | db.arc | db.link)+ + } +} +div { + db.locator.role.attribute = attribute role { text } + db.locator.attlist = + db.locator.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "locator" ] + attribute xlink:type { + + ## An XLink locator link + "locator" + }? + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? + db.locator = + + ## An XLink locator in an extendedlink + element locator { db.locator.attlist, empty } +} +div { + db.arc.role.attribute = attribute role { text } + db.arc.attlist = + db.arc.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "arc" ] + attribute xlink:type { + + ## An XLink arc link + "arc" + }? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? + db.arc = + + ## An XLink arc in an extendedlink + element arc { db.arc.attlist, empty } +} +db.sect1.sections = + ((db.sect2+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect1.status.attribute = db.status.attribute + db.sect1.class.attribute = db.section.class.attribute + db.sect1.role.attribute = attribute role { text } + db.sect1.attlist = + db.sect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect1.status.attribute? + & db.sect1.class.attribute? + db.sect1.info = db._info.title.req + db.sect1 = + + ## A top-level section of document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect1 { + db.sect1.attlist, + db.sect1.info, + db.navigation.components*, + ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections)?, + db.navigation.components* + } +} +db.sect2.sections = + ((db.sect3+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect2.status.attribute = db.status.attribute + db.sect2.class.attribute = db.section.class.attribute + db.sect2.role.attribute = attribute role { text } + db.sect2.attlist = + db.sect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect2.status.attribute? + & db.sect2.class.attribute? + db.sect2.info = db._info.title.req + db.sect2 = + + ## A subsection within a sect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect2 { + db.sect2.attlist, + db.sect2.info, + db.navigation.components*, + ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections)?, + db.navigation.components* + } +} +db.sect3.sections = + ((db.sect4+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect3.status.attribute = db.status.attribute + db.sect3.class.attribute = db.section.class.attribute + db.sect3.role.attribute = attribute role { text } + db.sect3.attlist = + db.sect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect3.status.attribute? + & db.sect3.class.attribute? + db.sect3.info = db._info.title.req + db.sect3 = + + ## A subsection within a sect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect3 { + db.sect3.attlist, + db.sect3.info, + db.navigation.components*, + ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections)?, + db.navigation.components* + } +} +db.sect4.sections = + ((db.sect5+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect4.status.attribute = db.status.attribute + db.sect4.class.attribute = db.section.class.attribute + db.sect4.role.attribute = attribute role { text } + db.sect4.attlist = + db.sect4.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect4.status.attribute? + & db.sect4.class.attribute? + db.sect4.info = db._info.title.req + db.sect4 = + + ## A subsection within a sect3 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect4" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect4 { + db.sect4.attlist, + db.sect4.info, + db.navigation.components*, + ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections)?, + db.navigation.components* + } +} +db.sect5.sections = db.simplesect+ | db.refentry+ +div { + db.sect5.status.attribute = db.status.attribute + db.sect5.class.attribute = db.section.class.attribute + db.sect5.role.attribute = attribute role { text } + db.sect5.attlist = + db.sect5.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect5.status.attribute? + & db.sect5.class.attribute? + db.sect5.info = db._info.title.req + db.sect5 = + + ## A subsection within a sect4 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect5" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect5 { + db.sect5.attlist, + db.sect5.info, + db.navigation.components*, + ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections)?, + db.navigation.components* + } +} +db.toplevel.refsection = db.refsection+ | db.refsect1+ +db.secondlevel.refsection = db.refsection+ | db.refsect2+ +db.reference.components = db.refentry +div { + db.reference.status.attribute = db.status.attribute + db.reference.role.attribute = attribute role { text } + db.reference.attlist = + db.reference.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.reference.status.attribute? + & db.label.attribute? + db.reference.info = db._info.title.req + db.reference = + + ## A collection of reference entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:reference" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element reference { + db.reference.attlist, + db.reference.info, + db.partintro?, + db.reference.components* + } +} +div { + db.refentry.status.attribute = db.status.attribute + db.refentry.role.attribute = attribute role { text } + db.refentry.attlist = + db.refentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refentry.status.attribute? + & db.label.attribute? + db.refentry.info = db._info.title.forbidden + db.refentry = + + ## A reference page (originally a UNIX man-style reference page) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refentry { + db.refentry.attlist, + db.indexterm*, + db.refentry.info, + db.refmeta?, + db.refnamediv+, + db.refsynopsisdiv?, + db.toplevel.refsection + } +} +div { + db.refmeta.role.attribute = attribute role { text } + db.refmeta.attlist = + db.refmeta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refmeta = + + ## Meta-information for a reference entry + element refmeta { + db.refmeta.attlist, + db.indexterm*, + db.refentrytitle, + db.manvolnum?, + db.refmiscinfo*, + db.indexterm* + } +} +db.refmiscinfo.class.enumeration = + + ## The name of the software product or component to which this topic applies + "source" + | + ## The version of the software product or component to which this topic applies + "version" + | + ## The section title of the reference page (e.g., User Commands) + "manual" + | + ## The section title of the reference page (believed synonymous with "manual" but in wide use) + "sectdesc" + | + ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + "software" +db.refmiscinfo.class-enum.attribute = + + ## Identifies the kind of miscellaneous information + attribute class { db.refmiscinfo.class.enumeration }? +db.refmiscinfo.class-other.attribute = + + ## Identifies the nature of non-standard miscellaneous information + attribute otherclass { text } +db.refmiscinfo.class-other.attributes = + + ## Identifies the kind of miscellaneious information + attribute class { + + ## Indicates that the information is some 'other' kind. + "other" + } + & db.refmiscinfo.class-other.attribute +db.refmiscinfo.class.attribute = + db.refmiscinfo.class-enum.attribute + | db.refmiscinfo.class-other.attributes +div { + db.refmiscinfo.role.attribute = attribute role { text } + db.refmiscinfo.attlist = + db.refmiscinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refmiscinfo.class.attribute? + db.refmiscinfo = + + ## Meta-information for a reference entry other than the title and volume number + element refmiscinfo { db.refmiscinfo.attlist, db._text } +} +div { + db.refnamediv.role.attribute = attribute role { text } + db.refnamediv.attlist = + db.refnamediv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refnamediv = + + ## The name, purpose, and classification of a reference page + element refnamediv { + db.refnamediv.attlist, + db.refdescriptor?, + db.refname+, + db.refpurpose, + db.refclass* + } +} +div { + db.refdescriptor.role.attribute = attribute role { text } + db.refdescriptor.attlist = + db.refdescriptor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refdescriptor = + + ## A description of the topic of a reference page + element refdescriptor { db.refdescriptor.attlist, db.all.inlines* } +} +div { + db.refname.role.attribute = attribute role { text } + db.refname.attlist = + db.refname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refname = + + ## The name of (one of) the subject(s) of a reference page + element refname { db.refname.attlist, db.all.inlines* } +} +div { + db.refpurpose.role.attribute = attribute role { text } + db.refpurpose.attlist = + db.refpurpose.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refpurpose = + + ## A short (one sentence) synopsis of the topic of a reference page + element refpurpose { db.refpurpose.attlist, db.all.inlines* } +} +div { + db.refclass.role.attribute = attribute role { text } + db.refclass.attlist = + db.refclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refclass = + + ## The scope or other indication of applicability of a reference entry + element refclass { db.refclass.attlist, (text | db.application)* } +} +div { + db.refsynopsisdiv.role.attribute = attribute role { text } + db.refsynopsisdiv.attlist = + db.refsynopsisdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refsynopsisdiv.info = db._info + db.refsynopsisdiv = + + ## A syntactic synopsis of the subject of the reference page + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsynopsisdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsynopsisdiv { + db.refsynopsisdiv.attlist, + db.refsynopsisdiv.info, + ((db.all.blocks+, db.secondlevel.refsection?) + | db.secondlevel.refsection) + } +} +div { + db.refsection.status.attribute = db.status.attribute + db.refsection.role.attribute = attribute role { text } + db.refsection.attlist = + db.refsection.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refsection.status.attribute? + & db.label.attribute? + db.refsection.info = db._info.title.req + db.refsection = + + ## A recursive section in a refentry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsection" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsection { + db.refsection.attlist, + db.refsection.info, + ((db.all.blocks+, db.refsection*) | db.refsection+) + } +} +db.refsect1.sections = db.refsect2+ +div { + db.refsect1.status.attribute = db.status.attribute + db.refsect1.role.attribute = attribute role { text } + db.refsect1.attlist = + db.refsect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect1.status.attribute? + db.refsect1.info = db._info.title.req + db.refsect1 = + + ## A major subsection of a reference entry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect1 { + db.refsect1.attlist, + db.refsect1.info, + ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections) + } +} +db.refsect2.sections = db.refsect3+ +div { + db.refsect2.status.attribute = db.status.attribute + db.refsect2.role.attribute = attribute role { text } + db.refsect2.attlist = + db.refsect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect2.status.attribute? + db.refsect2.info = db._info.title.req + db.refsect2 = + + ## A subsection of a refsect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect2 { + db.refsect2.attlist, + db.refsect2.info, + ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections) + } +} +div { + db.refsect3.status.attribute = db.status.attribute + db.refsect3.role.attribute = attribute role { text } + db.refsect3.attlist = + db.refsect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect3.status.attribute? + db.refsect3.info = db._info.title.req + db.refsect3 = + + ## A subsection of a refsect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect3 { + db.refsect3.attlist, db.refsect3.info, db.all.blocks+ + } +} +db.glossary.inlines = + db.firstterm | db.glossterm | db._firstterm | db._glossterm +db.baseform.attribute = + + ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + attribute baseform { text }? +div { + db.glosslist.role.attribute = attribute role { text } + db.glosslist.attlist = + db.glosslist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.glosslist.info = db._info.title.only + db.glosslist = + + ## A wrapper for a list of glossary entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glosslist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glosslist { + db.glosslist.attlist, + db.glosslist.info?, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.glossentry.role.attribute = attribute role { text } + db.glossentry.sortas.attribute = + + ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + attribute sortas { text } + db.glossentry.attlist = + db.glossentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossentry.sortas.attribute? + db.glossentry = + + ## An entry in a glossary or glosslist + element glossentry { + db.glossentry.attlist, + db.glossterm, + db.acronym?, + db.abbrev?, + db.indexterm*, + (db.glosssee | db.glossdef+) + } +} +div { + db.glossdef.role.attribute = attribute role { text } + db.glossdef.subject.attribute = + + ## Specifies a list of keywords for the definition + attribute subject { text } + db.glossdef.attlist = + db.glossdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossdef.subject.attribute? + db.glossdef = + + ## A definition in a glossentry + element glossdef { + db.glossdef.attlist, db.all.blocks+, db.glossseealso* + } +} +div { + db.glosssee.role.attribute = attribute role { text } + db.glosssee.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glosssee.attlist = + db.glosssee.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glosssee.otherterm.attribute? + db.glosssee = + + ## A cross-reference from one glossentry + ## to another + [ + s:pattern [ + s:title [ "Glosssary 'see' type constraint" ] + s:rule [ + context = "db:glosssee[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glosssee must point to a glossentry." + ] + ] + ] + ] + element glosssee { db.glosssee.attlist, db.all.inlines* } +} +div { + db.glossseealso.role.attribute = attribute role { text } + db.glossseealso.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glossseealso.attlist = + db.glossseealso.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossseealso.otherterm.attribute? + db.glossseealso = + + ## A cross-reference from one glossentry to another + [ + s:pattern [ + s:title [ "Glossary 'seealso' type constraint" ] + s:rule [ + context = "db:glossseealso[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glossseealso must point to a glossentry." + ] + ] + ] + ] + element glossseealso { db.glossseealso.attlist, db.all.inlines* } +} +div { + db.firstterm.role.attribute = attribute role { text } + db.firstterm.attlist = + db.firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.firstterm = + + ## The first occurrence of a term + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db.firstterm.attlist, db.all.inlines* } +} +div { + db._firstterm.role.attribute = attribute role { text } + db._firstterm.attlist = + db._firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._firstterm = + + ## The first occurrence of a term, with limited content + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db._firstterm.attlist, db._text } +} +div { + db.glossterm.role.attribute = attribute role { text } + db.glossterm.attlist = + db.glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db.glossterm.attlist, db.all.inlines* } +} +div { + db._glossterm.role.attribute = attribute role { text } + db._glossterm.attlist = + db._glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db._glossterm.attlist, db._text } +} +div { + db.glossary.status.attribute = db.status.attribute + db.glossary.role.attribute = attribute role { text } + db.glossary.attlist = + db.glossary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossary.status.attribute? + db.glossary.info = db._info + db.glossary = + + ## A glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossary { + db.glossary.attlist, + db.glossary.info, + db.all.blocks*, + (db.glossdiv* | db.glossentry*), + db.bibliography? + } +} +div { + db.glossdiv.status.attribute = db.status.attribute + db.glossdiv.role.attribute = attribute role { text } + db.glossdiv.attlist = + db.glossdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossdiv.status.attribute? + db.glossdiv.info = db._info.title.req + db.glossdiv = + + ## A division in a glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossdiv { + db.glossdiv.attlist, + db.glossdiv.info, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.termdef.role.attribute = attribute role { text } + db.termdef.attlist = + db.termdef.role.attribute? + & db.glossentry.sortas.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.termdef = + + ## An inline definition of a term + [ + s:pattern [ + s:title [ "Glossary term definition constraint" ] + s:rule [ + context = "db:termdef" + s:assert [ + test = "count(db:firstterm) = 1" + "A termdef must contain exactly one firstterm" + ] + ] + ] + ] + element termdef { db.termdef.attlist, db.all.inlines* } +} +db.relation.attribute = + + ## Identifies the relationship between the bibliographic elemnts + attribute relation { text } +div { + db.biblioentry.role.attribute = attribute role { text } + db.biblioentry.pubwork.attribute = db.biblio.pubwork.attribute + db.biblioentry.attlist = + db.biblioentry.role.attribute? + & db.biblioentry.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.biblioentry = + + ## A raw entry in a bibliography + element biblioentry { + db.biblioentry.attlist, db.bibliographic.elements+ + } +} +div { + db.bibliomixed.role.attribute = attribute role { text } + db.bibliomixed.pubwork.attribute = db.biblio.pubwork.attribute + db.bibliomixed.attlist = + db.bibliomixed.role.attribute? + & db.bibliomixed.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomixed = + + ## A cooked entry in a bibliography + element bibliomixed { + db.bibliomixed.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.biblioset.relation.attribute = db.relation.attribute + db.biblioset.role.attribute = attribute role { text } + db.biblioset.attlist = + db.biblioset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblioset.relation.attribute? + db.biblioset = + + ## A raw container for related bibliographic information + element biblioset { + db.biblioset.attlist, db.bibliographic.elements+ + } +} +div { + 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.bibliomset = + + ## A cooked container for related bibliographic information + element bibliomset { + db.bibliomset.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.bibliomisc.role.attribute = attribute role { text } + db.bibliomisc.attlist = + db.bibliomisc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomisc = + + ## Untyped bibliographic information + element bibliomisc { db.bibliomisc.attlist, db._text } +} +div { + db.bibliography.status.attrib = db.status.attribute + db.bibliography.role.attribute = attribute role { text } + db.bibliography.attlist = + db.bibliography.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliography.status.attrib? + db.bibliography.info = db._info + db.bibliography = + + ## A bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliography" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliography { + db.bibliography.attlist, + db.bibliography.info, + db.all.blocks*, + (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+) + } +} +div { + db.bibliodiv.status.attrib = db.status.attribute + db.bibliodiv.role.attribute = attribute role { text } + db.bibliodiv.attlist = + db.bibliodiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliodiv.status.attrib? + db.bibliodiv.info = db._info.title.req + db.bibliodiv = + + ## A section of a bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliodiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliodiv { + db.bibliodiv.attlist, + db.bibliodiv.info, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.bibliolist.role.attribute = attribute role { text } + db.bibliolist.attlist = + db.bibliolist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliolist.info = db._info.title.only + db.bibliolist = + + ## A wrapper for a list of bibliography entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliolist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliolist { + db.bibliolist.attlist, + db.bibliolist.info?, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.biblioref.role.attribute = attribute role { text } + db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute + db.biblioref.endterm.attribute = db.endterm.attribute + db.biblioref.units.attribute = + + ## The units (for example, pages) used to identify the beginning and ending of a reference. + attribute units { xsd:token } + db.biblioref.begin.attribute = + + ## Identifies the beginning of a reference; the location within the work that is being referenced. + attribute begin { xsd:token } + db.biblioref.end.attribute = + + ## Identifies the end of a reference. + attribute end { xsd:token } + db.biblioref.attlist = + db.biblioref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.biblioref.xrefstyle.attribute? + & db.biblioref.endterm.attribute? + & db.biblioref.units.attribute? + & db.biblioref.begin.attribute? + & db.biblioref.end.attribute? + db.biblioref = + + ## A cross-reference to a bibliographic entry + element biblioref { db.biblioref.attlist, empty } +} +db.significance.enumeration = + + ## Normal + "normal" + | + ## Preferred + "preferred" +db.significance.attribute = + + ## Specifies the significance of the term + attribute significance { db.significance.enumeration } +db.zone.attribute = + + ## Specifies the IDs of the elements to which this term applies + attribute zone { xsd:IDREFS } +db.indexterm.pagenum.attribute = + + ## Indicates the page on which this index term occurs in some version of the printed document + attribute pagenum { text } +db.scope.enumeration = + + ## All indexes + "all" + | + ## The global index (as for a combined index of a set of books) + "global" + | + ## The local index (the index for this document only) + "local" +db.scope.attribute = + + ## Specifies the scope of the index term + attribute scope { db.scope.enumeration } +db.sortas.attribute = + + ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used + attribute sortas { text } +db.index.type.attribute = + + ## Specifies the target index for this term + attribute type { text } +div { + db.itermset.role.attribute = attribute role { text } + db.itermset.attlist = + db.itermset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.itermset = + + ## A set of index terms in the meta-information of a document + element itermset { db.itermset.attlist, db.indexterm.singular+ } +} +db.indexterm.contentmodel = + (db.primary, + (db.secondary, + ((db.tertiary, (db.see | db.seealso+)?)? + | (db.see | db.seealso+)?)?)?)?, + (db.see | db.seealso+)? +div { + db.indexterm.singular.role.attribute = attribute role { text } + db.indexterm.singular.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## A singular index term + "singular" + } + db.indexterm.singular.attlist = + db.indexterm.singular.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.singular.class.attribute? + db.indexterm.singular = + + ## A wrapper for an indexed term + element indexterm { + db.indexterm.singular.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.startofrange.role.attribute = attribute role { text } + db.indexterm.startofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The start of a range + "startofrange" + } + db.indexterm.startofrange.attlist = + db.indexterm.startofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.startofrange.class.attribute + db.indexterm.startofrange = + + ## A wrapper for an indexed term that covers a range + element indexterm { + db.indexterm.startofrange.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.endofrange.role.attribute = attribute role { text } + db.indexterm.endofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The end of a range + "endofrange" + } + db.indexterm.endofrange.startref.attribute = + + ## Points to the start of the range + attribute startref { xsd:IDREF } + db.indexterm.endofrange.attlist = + db.indexterm.endofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.indexterm.endofrange.class.attribute + & db.indexterm.endofrange.startref.attribute + db.indexterm.endofrange = + + ## Identifies the end of a range associated with an indexed term + [ + s:pattern [ + s:title [ "Indexterm 'startref' type constraint" ] + s:rule [ + context = "db:indexterm[@startref]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@startref]) = 'indexterm' and namespace-uri(//*[@xml:id=current()/@startref]) = 'http://docbook.org/ns/docbook'" + "@startref on indexterm must point to an indexterm." + ] + s:assert [ + test = + "//*[@xml:id=current()/@startref]/@class='startofrange'" + "@startref on indexterm must point to a startofrange indexterm." + ] + ] + ] + ] + element indexterm { db.indexterm.endofrange.attlist, empty } +} +div { + db.indexterm = + db.indexterm.singular + | db.indexterm.startofrange + | db.indexterm.endofrange +} +div { + db.primary.role.attribute = attribute role { text } + db.primary.attlist = + db.primary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.primary = + + ## The primary word or phrase under which an index term should be sorted + element primary { db.primary.attlist, db.all.inlines* } +} +div { + db.secondary.role.attribute = attribute role { text } + db.secondary.attlist = + db.secondary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.secondary = + + ## A secondary word or phrase in an index term + element secondary { db.secondary.attlist, db.all.inlines* } +} +div { + db.tertiary.role.attribute = attribute role { text } + db.tertiary.attlist = + db.tertiary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.tertiary = + + ## A tertiary word or phrase in an index term + element tertiary { db.tertiary.attlist, db.all.inlines* } +} +div { + db.see.role.attribute = attribute role { text } + db.see.class.attribute = + + ## Identifies the class of 'see' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.see.attlist = + db.see.role.attribute? + & db.see.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.see = + + ## Part of an index term directing the reader instead to another entry in the index + element see { db.see.attlist, db.all.inlines* } +} +div { + db.seealso.role.attribute = attribute role { text } + db.seealso.class.attribute = + + ## Identifies the class of 'seealso' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.seealso.attlist = + db.seealso.role.attribute? + & db.seealso.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seealso = + + ## Part of an index term directing the reader also to another entry in the index + element seealso { db.seealso.attlist, db.all.inlines* } +} +div { + db.index.status.attribute = db.status.attribute + db.index.role.attribute = attribute role { text } + db.index.attlist = + db.index.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.index.status.attribute? + & db.index.type.attribute? + db.index.info = db._info + # Yes, db.indexdiv* and db.indexentry*; that way an is valid. + # Authors can use an empty index to indicate where a generated index should + # appear. + db.index = + + ## An index to a book or part of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:index" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element index { + db.index.attlist, + db.index.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry* | db.segmentedlist) + } +} +div { + db.setindex.status.attribute = db.status.attribute + db.setindex.role.attribute = attribute role { text } + db.setindex.attlist = + db.setindex.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.setindex.status.attribute? + & db.index.type.attribute? + db.setindex.info = db._info + db.setindex = + + ## An index to a set of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:setindex" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element setindex { + db.setindex.attlist, + db.setindex.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry*) + } +} +div { + db.indexdiv.status.attribute = db.status.attribute + db.indexdiv.role.attribute = attribute role { text } + db.indexdiv.attlist = + db.indexdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.indexdiv.status.attribute? + db.indexdiv.info = db._info.title.req + db.indexdiv = + + ## A division in an index + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:indexdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element indexdiv { + db.indexdiv.attlist, + db.indexdiv.info, + db.all.blocks*, + (db.indexentry+ | db.segmentedlist) + } +} +div { + db.indexentry.role.attribute = attribute role { text } + db.indexentry.attlist = + db.indexentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.indexentry = + + ## An entry in an index + element indexentry { + db.indexentry.attlist, + db.primaryie, + (db.seeie | db.seealsoie)*, + (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)* + } +} +div { + db.primaryie.role.attribute = attribute role { text } + db.primaryie.attlist = + db.primaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.primaryie = + + ## A primary term in an index entry, not in the text + element primaryie { db.primaryie.attlist, db.all.inlines* } +} +div { + db.secondaryie.role.attribute = attribute role { text } + db.secondaryie.attlist = + db.secondaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.secondaryie = + + ## A secondary term in an index entry, rather than in the text + element secondaryie { db.secondaryie.attlist, db.all.inlines* } +} +div { + db.tertiaryie.role.attribute = attribute role { text } + db.tertiaryie.attlist = + db.tertiaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.tertiaryie = + + ## A tertiary term in an index entry, rather than in the text + element tertiaryie { db.tertiaryie.attlist, db.all.inlines* } +} +div { + db.seeie.role.attribute = attribute role { text } + db.seeie.attlist = + db.seeie.role.attribute? + & db.common.attributes + & db.linkend.attribute? + db.seeie = + + ## A See + ## entry in an index, rather than in the text + element seeie { db.seeie.attlist, db.all.inlines* } +} +div { + db.seealsoie.role.attribute = attribute role { text } + db.seealsoie.attlist = + db.seealsoie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.seealsoie = + + ## A See also + ## entry in an index, rather than in the text + element seealsoie { db.seealsoie.attlist, db.all.inlines* } +} +db.toc.pagenum.attribute = + + ## Indicates the page on which this element occurs in some version of the printed document + attribute pagenum { text } +div { + db.toc.role.attribute = attribute role { text } + db.toc.attlist = + db.toc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.toc.info = db._info.title.only + db.toc = + + ## A table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:toc" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element toc { + db.toc.attlist, + db.toc.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)* + } +} +div { + db.tocdiv.role.attribute = attribute role { text } + 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 + db.tocdiv = + + ## A division in a table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tocdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tocdiv { + db.tocdiv.attlist, + db.tocdiv.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)+ + } +} +div { + db.tocentry.role.attribute = attribute role { text } + db.tocentry.pagenum.attribute = db.toc.pagenum.attribute + db.tocentry.attlist = + db.tocentry.role.attribute? + & db.common.attributes + & db.tocentry.pagenum.attribute? + & db.linkend.attribute? + db.tocentry = + + ## A component title in a table of contents + element tocentry { db.tocentry.attlist, db.all.inlines* } +} +db.task.info = db._info.title.req +div { + db.task.role.attribute = attribute role { text } + db.task.attlist = + db.task.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.task = + + ## A task to be completed + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:task" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element task { + db.task.attlist, + db.task.info, + db.tasksummary?, + db.taskprerequisites?, + db.procedure+, + db.example*, + db.taskrelated? + } +} +div { + db.tasksummary.role.attribute = attribute role { text } + db.tasksummary.attlist = + db.tasksummary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tasksummary.info = db._info.title.only + db.tasksummary = + + ## A summary of a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tasksummary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tasksummary { + db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+ + } +} +div { + db.taskprerequisites.role.attribute = attribute role { text } + db.taskprerequisites.attlist = + db.taskprerequisites.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskprerequisites.info = db._info.title.only + db.taskprerequisites = + + ## The prerequisites for a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskprerequisites" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskprerequisites { + db.taskprerequisites.attlist, + db.taskprerequisites.info, + db.all.blocks+ + } +} +div { + db.taskrelated.role.attribute = attribute role { text } + db.taskrelated.attlist = + db.taskrelated.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskrelated.info = db._info.title.only + db.taskrelated = + + ## Information related to a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskrelated" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskrelated { + db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+ + } +} +db.area.units.enumeration = + + ## Coordinates expressed as a pair of CALS graphic coordinates. + "calspair" + | + ## Coordinates expressed as a line and column. + "linecolumn" + | + ## Coordinates expressed as a pair of lines and columns. + "linecolumnpair" + | + ## Coordinates expressed as a line range. + "linerange" +db.area.units-enum.attribute = + + ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + ## for graphics and linecolumn + ## for line-oriented elements. + attribute units { db.area.units.enumeration }? +db.area.units-other.attributes = + + ## Indicates that non-standard units are used for this area + ## . In this case otherunits + ## must be specified. + attribute units { + + ## Coordinates expressed in some non-standard units. + "other" + }?, + + ## Identifies the units used in the coords + ## attribute when the units + ## attribute is other + ## . This attribute is forbidden otherwise. + attribute otherunits { xsd:NMTOKEN } +db.area.units.attribute = + db.area.units-enum.attribute | db.area.units-other.attributes +div { + db.calloutlist.role.attribute = attribute role { text } + db.calloutlist.attlist = + db.calloutlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.calloutlist.info = db._info.title.only + db.calloutlist = + + ## A list of callout + ## s + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:calloutlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element calloutlist { + db.calloutlist.attlist, + db.calloutlist.info, + db.all.blocks*, + db.callout+ + } +} +div { + db.callout.role.attribute = attribute role { text } + db.callout.arearefs.attribute = + + ## Identifies the areas described by this callout. + attribute arearefs { xsd:IDREFS } + db.callout.attlist = + db.callout.role.attribute? + & db.common.attributes + & db.callout.arearefs.attribute + # This requires an XPath 2.0 compatible Schematron processor + db.callout = + + ## A called out + ## description of a marked area + [ + s:pattern [ + s:title [ "Callout cross reference constraint" ] + s:rule [ + context = "db:callout[@arearefs]" + s:assert [ + test = + "every $id in tokenize(current()/@arearefs) satisfies (every $ar in //*[@xml:id = $id] satisfies (local-name($ar) = ('areaset', 'area', 'co') and namespace-uri($ar) = 'http://docbook.org/ns/docbook'))" + "@arearefs on callout must point to a areaset, area, or co." + ] + ] + ] + ] + element callout { db.callout.attlist, db.all.blocks+ } +} +div { + db.programlistingco.role.attribute = attribute role { text } + db.programlistingco.attlist = + db.programlistingco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.programlistingco.info = db._info.title.forbidden + db.programlistingco = + + ## A program listing with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlistingco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlistingco { + db.programlistingco.attlist, + db.programlistingco.info, + db.areaspec, + db.programlisting, + db.calloutlist* + } +} +div { + db.areaspec.role.attribute = attribute role { text } + db.areaspec.attlist = + db.areaspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.area.units.attribute + db.areaspec = + + ## A collection of regions in a graphic or code example + element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ } +} +div { + db.area.role.attribute = attribute role { text } + db.area.linkends.attribute = + + ## Point to the callout + ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + attribute linkends { xsd:IDREFS } + db.area.label.attribute = + + ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + attribute label { text } + db.area.coords.attribute = + + ## Provides the coordinates of the area. The coordinates must be interpreted using the units + ## specified. + attribute coords { text } + db.area.attlist = + db.area.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area = + + ## A region defined for a callout in a graphic or code example + element area { db.area.attlist, db.alt? } +} +div { + # The only difference is that xml:id is optional + db.area.inareaset.attlist = + db.area.role.attribute? + & db.common.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area.inareaset = + + ## A region defined for a callout in a graphic or code example + element area { db.area.inareaset.attlist, db.alt? } +} +div { + db.areaset.role.attribute = attribute role { text } + db.areaset.linkends.attribute = db.linkends.attribute + db.areaset.label.attribute = db.label.attribute + db.areaset.attlist = + db.areaset.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.areaset.linkends.attribute | db.xlink.simple.link.attributes)? + & db.areaset.label.attribute? + db.areaset = + + ## A set of related areas in a graphic or code example + element areaset { db.areaset.attlist, db.area.inareaset+ } +} +div { + db.screenco.role.attribute = attribute role { text } + db.screenco.attlist = + db.screenco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenco.info = db._info.title.forbidden + db.screenco = + + ## A screen with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenco { + db.screenco.attlist, + db.screenco.info, + db.areaspec, + db.screen, + db.calloutlist* + } +} +div { + db.imageobjectco.role.attribute = attribute role { text } + db.imageobjectco.attlist = + db.imageobjectco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobjectco.info = db._info.title.forbidden + db.imageobjectco = + + ## A wrapper for an image object with callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobjectco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobjectco { + db.imageobjectco.attlist, + db.imageobjectco.info, + db.areaspec, + db.imageobject+, + db.calloutlist* + } +} +div { + db.co.role.attribute = attribute role { text } + db.co.linkends.attribute = db.linkends.attribute + db.co.label.attribute = db.label.attribute + db.co.attlist = + db.co.role.attribute? + & db.common.idreq.attributes + & db.co.linkends.attribute? + & db.co.label.attribute? + db.co = + + ## The location of a callout embedded in text + element co { db.co.attlist, empty } +} +div { + db.coref.role.attribute = attribute role { text } + db.coref.label.attribute = db.label.attribute + db.coref.attlist = + db.coref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.coref.label.attribute? + db.coref = + + ## A cross reference to a co + element coref { db.coref.attlist, empty } +} +div { + db.productionset.role.attribute = attribute role { text } + db.productionset.attlist = + db.productionset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productionset.info = db._info.title.only + db.productionset = + + ## A set of EBNF productions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:productionset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element productionset { + db.productionset.attlist, + db.productionset.info, + (db.production | db.productionrecap)+ + } +} +div { + db.production.role.attribute = attribute role { text } + db.production.attlist = + db.production.role.attribute? + & db.common.idreq.attributes + & db.common.linking.attributes + db.production = + + ## A production in a set of EBNF productions + element production { + db.production.attlist, db.lhs, db.rhs+, db.constraint* + } +} +div { + db.lhs.role.attribute = attribute role { text } + db.lhs.attlist = + db.lhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lhs = + + ## The left-hand side of an EBNF production + element lhs { db.lhs.attlist, text } +} +div { + db.rhs.role.attribute = attribute role { text } + db.rhs.attlist = + db.rhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.rhs = + + ## The right-hand side of an EBNF production + element rhs { + db.rhs.attlist, + (text | db.nonterminal | db.lineannotation | db.sbr)* + } +} +div { + db.nonterminal.role.attribute = attribute role { text } + db.nonterminal.def.attribute = + + ## Specifies a URI that points to a production + ## where the nonterminal + ## is defined + attribute def { xsd:anyURI } + db.nonterminal.attlist = + db.nonterminal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.nonterminal.def.attribute + db.nonterminal = + + ## A non-terminal in an EBNF production + element nonterminal { db.nonterminal.attlist, text } +} +div { + db.constraint.role.attribute = attribute role { text } + db.constraint.attlist = + db.constraint.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.constraint = + + ## A constraint in an EBNF production + [ + s:pattern [ + s:title [ "Constraint cross reference constraint" ] + s:rule [ + context = "db:constraint[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'constraintdef' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on constraint must point to a constraintdef." + ] + ] + ] + ] + element constraint { db.constraint.attlist, empty } +} +div { + db.productionrecap.role.attribute = attribute role { text } + db.productionrecap.attlist = + db.productionrecap.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.productionrecap = + + ## A cross-reference to an EBNF production + [ + s:pattern [ + s:title [ "Production recap cross reference constraint" ] + s:rule [ + context = "db:productionrecap[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'production' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on productionrecap must point to a production." + ] + ] + ] + ] + element productionrecap { db.productionrecap.attlist, empty } +} +div { + db.constraintdef.role.attribute = attribute role { text } + db.constraintdef.attlist = + db.constraintdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.constraintdef.info = db._info.title.only + db.constraintdef = + + ## The definition of a constraint in an EBNF production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constraintdef" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constraintdef { + db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+ + } +} +db.char.attribute = + + ## Specifies the alignment character when align + ## is set to char + ## . + attribute char { text } +db.charoff.attribute = + + ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + ## when align + ## is set to char + ## . + attribute charoff { + xsd:decimal { minExclusive = "0" maxExclusive = "100" } + } +db.frame.attribute = + + ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + attribute frame { + + ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + "all" + | + ## Frame only the bottom of the table. + "bottom" + | + ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + "none" + | + ## Frame the left and right sides of the table. + "sides" + | + ## Frame the top of the table. + "top" + | + ## Frame the top and bottom of the table. + "topbot" + } +db.colsep.attribute = + + ## Specifies the presence or absence of the column separator + attribute colsep { + + ## No column separator rule. + "0" + | + ## Provide a column separator rule on the right + "1" + } +db.rowsep.attribute = + + ## Specifies the presence or absence of the row separator + attribute rowsep { + + ## No row separator rule. + "0" + | + ## Provide a row separator rule below + "1" + } +db.orient.attribute = + + ## Specifies the orientation of the table + attribute orient { + + ## 90 degrees counter-clockwise from the rest of the text flow. + "land" + | + ## The same orientation as the rest of the text flow. + "port" + } +db.tabstyle.attribute = + + ## Specifies the table style + attribute tabstyle { text } +db.rowheader.attribute = + + ## Indicates whether or not the entries in the first column should be considered row headers + attribute rowheader { + + ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + "firstcol" + | + ## Indicates that row headers are identified by use of the headers attribute on entries in the table. + "headers" + | + ## Indicates that entries in the first column have no special significance with respect to column headers. + "norowheader" + } +db.align.attribute = + + ## Specifies the horizontal alignment of text in an entry. + attribute align { + + ## Centered. + "center" + | + ## Aligned on a particular character. + "char" + | + ## Left and right justified. + "justify" + | + ## Left justified. + "left" + | + ## Right justified. + "right" + } +db.valign.attribute = + + ## Specifies the vertical alignment of text in an entry. + attribute valign { + + ## Aligned on the bottom of the entry. + "bottom" + | + ## Aligned in the middle. + "middle" + | + ## Aligned at the top of the entry. + "top" + } +db.specify-col-by-colname.attributes = + + ## Specifies a column specification by name. + attribute colname { text } +db.specify-col-by-namest.attributes = + + ## Specifies a starting column by name. + attribute namest { text } +db.specify-span-by-spanspec.attributes = + + ## Specifies a span by name. + attribute spanname { text } +db.specify-span-directly.attributes = + + ## Specifies a starting column by name. + attribute namest { text } + & + ## Specifies an ending column by name. + attribute nameend { text } +db.column-spec.attributes = + db.specify-col-by-colname.attributes + | db.specify-col-by-namest.attributes + | db.specify-span-by-spanspec.attributes + | db.specify-span-directly.attributes +db.colname.attribute = + + ## Provides a name for a column specification. + attribute colname { text } +db.spanname.attribute = + + ## Provides a name for a span specification. + attribute spanname { text } +div { + db.tgroup.role.attribute = attribute role { text } + db.tgroup.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.tgroup.cols.attribute = + + ## The number of columns in the table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.tgroup.attlist = + db.tgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.tgroup.tgroupstyle.attribute? + & db.tgroup.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.tgroup = + + ## A wrapper for the main content of a table, or part of a table + element tgroup { + db.tgroup.attlist, + db.colspec*, + db.spanspec*, + db.cals.thead?, + db.cals.tfoot?, + db.cals.tbody + } +} +div { + db.colspec.role.attribute = attribute role { text } + db.colspec.colnum.attribute = + + ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + attribute colnum { xsd:positiveInteger } + db.colspec.colwidth.attribute = + + ## Specifies the width of the column. + attribute colwidth { text } + db.colspec.attlist = + db.colspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.colspec.colnum.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.colspec.colwidth.attribute? + & db.charoff.attribute? + & db.colname.attribute? + & db.rowsep.attribute? + & db.align.attribute? + & db.rowheader.attribute? + db.colspec = + + ## Specifications for a column in a table + element colspec { db.colspec.attlist, empty } +} +div { + db.spanspec.role.attribute = attribute role { text } + db.spanspec.namest.attribute = + + ## Specifies a starting column by name. + attribute namest { text } + db.spanspec.nameend.attribute = + + ## Specifies an ending column by name. + attribute nameend { text } + db.spanspec.attlist = + db.spanspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spanname.attribute + & db.spanspec.namest.attribute + & db.spanspec.nameend.attribute + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.spanspec = + + ## Formatting information for a spanned column in a table + element spanspec { db.spanspec.attlist, empty } +} +div { + db.cals.thead.role.attribute = attribute role { text } + db.cals.thead.attlist = + db.cals.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.thead = + + ## A table header consisting of one or more rows + element thead { db.cals.thead.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tfoot.role.attribute = attribute role { text } + db.cals.tfoot.attlist = + db.cals.tfoot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tfoot = + + ## A table footer consisting of one or more rows + element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tbody.role.attribute = attribute role { text } + db.cals.tbody.attlist = + db.cals.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.tbody.attlist, db.row+ } +} +div { + db.row.role.attribute = attribute role { text } + db.row.attlist = + db.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.row = + + ## A row in a table + element row { db.row.attlist, (db.entry | db.entrytbl)+ } +} +div { + db.entry.role.attribute = attribute role { text } + db.entry.morerows.attribute = + + ## Specifies the number of additional rows which this entry occupies. Defaults to zero. + attribute morerows { xsd:integer } + db.entry.rotate.attribute = + + ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + attribute rotate { + + ## Do not rotate the cell. + "0" + | + ## Rotate the cell 90 degrees counter-clockwise. + "1" + } + db.entry.scope.attribute = + + ## Specifies the scope of a header. + attribute scope { + + ## Applies to the row + "row" + | + ## Applies to the column + "col" + | + ## Applies to the row group + "rowgroup" + | + ## Applies to the column group + "colgroup" + } + db.entry.headers.attribute = + + ## Specifies the entry or entries which serve as headers for this element. + attribute headers { xsd:IDREFS } + db.entry.attlist = + db.entry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.entry.morerows.attribute? + & db.column-spec.attributes? + & db.rowsep.attribute? + & db.entry.rotate.attribute? + & db.align.attribute? + & db.entry.scope.attribute? + & db.entry.headers.attribute? + db.entry = + + ## A cell in a table + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of entry" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:informaltable)" + "informaltable must not occur among the children or descendants of entry" + ] + ] + ] + ] + element entry { + db.entry.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.entrytbl.role.attribute = attribute role { text } + db.entrytbl.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.entrytbl.cols.attribute = + + ## The number of columns in the entry table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.entrytbl.attlist = + db.entrytbl.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.column-spec.attributes? + & db.entrytbl.tgroupstyle.attribute? + & db.entrytbl.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.entrytbl = + + ## A subtable appearing in place of an entry in a table + element entrytbl { + db.entrytbl.attlist, + db.colspec*, + db.spanspec*, + db.cals.entrytbl.thead?, + db.cals.entrytbl.tbody + } +} +div { + db.cals.entrytbl.thead.role.attribute = attribute role { text } + db.cals.entrytbl.thead.attlist = + db.cals.entrytbl.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.thead = + + ## A table header consisting of one or more rows + element thead { + db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+ + } +} +div { + db.cals.entrytbl.tbody.role.attribute = attribute role { text } + db.cals.entrytbl.tbody.attlist = + db.cals.entrytbl.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ } +} +div { + db.entrytbl.row.role.attribute = attribute role { text } + db.entrytbl.row.attlist = + db.entrytbl.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.entrytbl.row = + + ## A row in a table + element row { db.entrytbl.row.attlist, db.entry+ } +} +div { + db.cals.table.role.attribute = attribute role { text } + db.cals.table.label.attribute = db.label.attribute + db.cals.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.table.attlist = + db.cals.table.role.attribute? + & db.cals.table.type.attribute? + & db.cals.table.label.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & + ## Indicates if the short or long title should be used in a List of Tables + attribute shortentry { + + ## Indicates that the full title should be used. + "0" + | + ## Indicates that the short short title (titleabbrev) should be used. + "1" + }? + & + ## Indicates if the table should appear in a List of Tables + attribute tocentry { + + ## Indicates that the table should not occur in the List of Tables. + "0" + | + ## Indicates that the table should appear in the List of Tables. + "1" + }? + & db.rowheader.attribute? + db.cals.table.info = db._info.title.onlyreq + db.cals.table = + + ## A formal table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { + db.cals.table.attlist, + db.cals.table.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +div { + db.cals.informaltable.role.attribute = attribute role { text } + db.cals.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.informaltable.attlist = + db.cals.informaltable.role.attribute? + & db.cals.informaltable.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & db.rowheader.attribute? + db.cals.informaltable.info = db._info.title.forbidden + db.cals.informaltable = + + ## A table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.cals.informaltable.attlist, + db.cals.informaltable.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +db.html.coreattrs = + + ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + attribute class { text }? + & + ## This attribute specifies style information for the current element. + attribute style { text }? + & + ## This attribute offers advisory information about the element for which it is set. + attribute title { text }? +db.html.i18n = + + ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + attribute lang { text }? +db.html.events = + + ## Occurs when the pointing device button is clicked over an element. + attribute onclick { text }? + & + ## Occurs when the pointing device button is double clicked over an element. + attribute ondblclick { text }? + & + ## Occurs when the pointing device button is pressed over an element. + attribute onmousedown { text }? + & + ## Occurs when the pointing device button is released over an element. + attribute onmouseup { text }? + & + ## Occurs when the pointing device is moved onto an element. + attribute onmouseover { text }? + & + ## Occurs when the pointing device is moved while it is over an element. + attribute onmousemove { text }? + & + ## Occurs when the pointing device is moved away from an element. + attribute onmouseout { text }? + & + ## Occurs when a key is pressed and released over an element. + attribute onkeypress { text }? + & + ## Occurs when a key is pressed down over an element. + attribute onkeydown { text }? + & + ## Occurs when a key is released over an element. + attribute onkeyup { text }? +db.html.attrs = + db.common.attributes + & db.html.coreattrs + & db.html.i18n + & db.html.events +db.html.cellhalign = + + ## Specifies the alignment of data and the justification of text in a cell. + attribute align { + + ## Left-flush data/Left-justify text. This is the default value for table data. + "left" + | + ## Center data/Center-justify text. This is the default value for table headers. + "center" + | + ## Right-flush data/Right-justify text. + "right" + | + ## Double-justify text. + "justify" + | + ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + "char" + }? + & + ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + attribute char { text }? + & + ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + attribute charoff { + xsd:integer >> a:documentation [ "An explicit offset." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage offset." ] + }? +db.html.cellvalign = + + ## Specifies the vertical position of data within a cell. + attribute valign { + + ## Cell data is flush with the top of the cell. + "top" + | + ## Cell data is centered vertically within the cell. This is the default value. + "middle" + | + ## Cell data is flush with the bottom of the cell. + "bottom" + | + ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + "baseline" + }? +db.html.table.attributes = + + ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + attribute summary { text }? + & + ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + attribute width { + xsd:integer >> a:documentation [ "An explicit width." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage width." ] + }? + & + ## Specifies the width (in pixels only) of the frame around a table. + attribute border { xsd:nonNegativeInteger }? + & + ## Specifies which sides of the frame surrounding a table will be visible. + attribute frame { + + ## No sides. This is the default value. + "void" + | + ## The top side only. + "above" + | + ## The bottom side only. + "below" + | + ## The top and bottom sides only. + "hsides" + | + ## The left-hand side only. + "lhs" + | + ## The right-hand side only. + "rhs" + | + ## The right and left sides only. + "vsides" + | + ## All four sides. + "box" + | + ## All four sides. + "border" + }? + & + ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + attribute rules { + + ## No rules. This is the default value. + "none" + | + ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + "groups" + | + ## Rules will appear between rows only. + "rows" + | + ## Rules will appear between columns only. + "cols" + | + ## Rules will appear between all rows and columns. + "all" + }? + & + ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + attribute cellspacing { + xsd:integer >> a:documentation [ "An explicit spacing." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage spacing." ] + }? + & + ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + attribute cellpadding { + xsd:integer >> a:documentation [ "An explicit padding." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage padding." ] + }? +db.html.tablecell.attributes = + + ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + attribute abbr { text }? + & + ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + attribute axis { text }? + & + ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + attribute headers { text }? + & + ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + attribute scope { + + ## The current cell provides header information for the rest of the row that contains it + "row" + | + ## The current cell provides header information for the rest of the column that contains it. + "col" + | + ## The header cell provides header information for the rest of the row group that contains it. + "rowgroup" + | + ## The header cell provides header information for the rest of the column group that contains it. + "colgroup" + }? + & + ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all rows from the current row to the last row of the table section (thead + ## , tbody + ## , or tfoot + ## ) in which the cell is defined. + attribute rowspan { xsd:nonNegativeInteger }? + & + ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup + ## ) in which the cell is defined. + attribute colspan { xsd:nonNegativeInteger }? +db.html.table.info = db._info.title.forbidden +db.html.table.model = + db.html.table.info?, + db.html.caption, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +db.html.informaltable.info = db._info.title.forbidden +db.html.informaltable.model = + db.html.informaltable.info?, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +div { + db.html.table.role.attribute = attribute role { text } + db.html.table.label.attribute = db.label.attribute + db.html.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.table.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.table.role.attribute? + & db.html.table.type.attribute? + & db.html.table.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.table = + + ## A formal (captioned) HTML table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { db.html.table.attlist, db.html.table.model } +} +div { + db.html.informaltable.role.attribute = attribute role { text } + db.html.informaltable.label.attribute = db.label.attribute + db.html.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.informaltable.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.informaltable.role.attribute? + & db.html.informaltable.type.attribute? + & db.html.informaltable.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.informaltable = + + ## An HTML table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.html.informaltable.attlist, db.html.informaltable.model + } +} +div { + db.html.caption.attlist = db.html.attrs + db.html.caption = + + ## An HTML table caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { db.html.caption.attlist, db.all.inlines* } +} +div { + db.html.col.attlist = + db.html.attrs + & + ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned + ## by the col + ## element; the col + ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + ## element shares its attributes with the next N-1 columns. + attribute span { xsd:nonNegativeInteger }? + & + ## Specifies a default width for each column spanned by the current col + ## element. It has the same meaning as the width + ## attribute for the colgroup + ## element and overrides it. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.col = + + ## Specifications for a column in an HTML table + element col { db.html.col.attlist, empty } +} +div { + db.html.colgroup.attlist = + db.html.attrs + & + ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + ## element contains one or more col + ## elements. + attribute span { xsd:nonNegativeInteger }? + & + ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + ## element. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.colgroup = + + ## A group of columns in an HTML table + element colgroup { db.html.colgroup.attlist, db.html.col* } +} +div { + db.html.thead.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.thead = + + ## A table header consisting of one or more rows in an HTML table + element thead { db.html.thead.attlist, db.html.tr+ } +} +div { + db.html.tfoot.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tfoot = + + ## A table footer consisting of one or more rows in an HTML table + element tfoot { db.html.tfoot.attlist, db.html.tr+ } +} +div { + db.html.tbody.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tbody = + + ## A wrapper for the rows of an HTML table or informal HTML table + element tbody { db.html.tbody.attlist, db.html.tr+ } +} +div { + db.html.tr.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tr = + + ## A row in an HTML table + element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ } +} +div { + db.html.th.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.th = + + ## A table header entry in an HTML table + element th { + db.html.th.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.html.td.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.td = + + ## A table entry in an HTML table + element td { + db.html.td.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.msgset.role.attribute = attribute role { text } + db.msgset.attlist = + db.msgset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgset.info = db._info.title.only + db.msgset = + + ## A detailed set of messages, usually error messages + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgset { + db.msgset.attlist, + db.msgset.info, + (db.msgentry+ | db.simplemsgentry+) + } +} +div { + db.msgentry.role.attribute = attribute role { text } + db.msgentry.attlist = + db.msgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgentry = + + ## A wrapper for an entry in a message set + element msgentry { + db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan* + } +} +div { + db.simplemsgentry.role.attribute = attribute role { text } + db.simplemsgentry.msgaud.attribute = + + ## The audience to which the message relevant + attribute msgaud { text } + db.simplemsgentry.msgorig.attribute = + + ## The origin of the message + attribute msgorig { text } + db.simplemsgentry.msglevel.attribute = + + ## The level of importance or severity of a message + attribute msglevel { text } + db.simplemsgentry.attlist = + db.simplemsgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplemsgentry.msgaud.attribute? + & db.simplemsgentry.msgorig.attribute? + & db.simplemsgentry.msglevel.attribute? + db.simplemsgentry = + + ## A wrapper for a simpler entry in a message set + element simplemsgentry { + db.simplemsgentry.attlist, db.msgtext, db.msgexplan+ + } +} +div { + db.msg.role.attribute = attribute role { text } + db.msg.attlist = + db.msg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msg.info = db._info.title.only + db.msg = + + ## A message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msg" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msg { + db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)* + } +} +div { + db.msgmain.role.attribute = attribute role { text } + db.msgmain.attlist = + db.msgmain.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgmain.info = db._info.title.only + db.msgmain = + + ## The primary component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgmain" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext } +} +div { + db.msgsub.role.attribute = attribute role { text } + db.msgsub.attlist = + db.msgsub.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgsub.info = db._info.title.only + db.msgsub = + + ## A subcomponent of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgsub" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext } +} +div { + db.msgrel.role.attribute = attribute role { text } + db.msgrel.attlist = + db.msgrel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgrel.info = db._info.title.only + db.msgrel = + + ## A related component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgrel" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext } +} +div { + db.msgtext.role.attribute = attribute role { text } + db.msgtext.attlist = + db.msgtext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgtext = + + ## The actual text of a message component in a message set + element msgtext { db.msgtext.attlist, db.all.blocks+ } +} +div { + db.msginfo.role.attribute = attribute role { text } + db.msginfo.attlist = + db.msginfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msginfo = + + ## Information about a message in a message set + element msginfo { + db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)* + } +} +div { + db.msglevel.role.attribute = attribute role { text } + db.msglevel.attlist = + db.msglevel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msglevel = + + ## The level of importance or severity of a message in a message set + element msglevel { db.msglevel.attlist, db._text } +} +div { + db.msgorig.role.attribute = attribute role { text } + db.msgorig.attlist = + db.msgorig.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgorig = + + ## The origin of a message in a message set + element msgorig { db.msgorig.attlist, db._text } +} +div { + db.msgaud.role.attribute = attribute role { text } + db.msgaud.attlist = + db.msgaud.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgaud = + + ## The audience to which a message in a message set is relevant + element msgaud { db.msgaud.attlist, db._text } +} +div { + db.msgexplan.role.attribute = attribute role { text } + db.msgexplan.attlist = + db.msgexplan.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgexplan.info = db._info.title.only + db.msgexplan = + + ## Explanatory material relating to a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgexplan" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgexplan { + db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+ + } +} +div { + db.qandaset.role.attribute = attribute role { text } + db.qandaset.defaultlabel.enumeration = + + ## No labels + "none" + | + ## Numeric labels + "number" + | + ## "Q:" and "A:" labels + "qanda" + db.qandaset.defaultlabel.attribute = + + ## Specifies the default labelling + attribute defaultlabel { db.qandaset.defaultlabel.enumeration } + db.qandaset.attlist = + db.qandaset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.qandaset.defaultlabel.attribute? + db.qandaset.info = db._info.title.only + db.qandaset = + + ## A question-and-answer set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaset { + db.qandaset.attlist, + db.qandaset.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandadiv.role.attribute = attribute role { text } + db.qandadiv.attlist = + db.qandadiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandadiv.info = db._info.title.only + db.qandadiv = + + ## A titled division in a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandadiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandadiv { + db.qandadiv.attlist, + db.qandadiv.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandaentry.role.attribute = attribute role { text } + db.qandaentry.attlist = + db.qandaentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandaentry.info = db._info.title.only + db.qandaentry = + + ## A question/answer set within a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaentry { + db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer* + } +} +div { + db.question.role.attribute = attribute role { text } + db.question.attlist = + db.question.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.question = + + ## A question in a qandaset + element question { db.question.attlist, db.label?, db.all.blocks+ } +} +div { + db.answer.role.attribute = attribute role { text } + db.answer.attlist = + db.answer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.answer = + + ## An answer to a question posed in a qandaset + element answer { db.answer.attlist, db.label?, db.all.blocks+ } +} +div { + db.label.role.attribute = attribute role { text } + db.label.attlist = + db.label.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.label = + + ## A label on a question or answer + element label { db.label.attlist, db._text } +} +db.math.inlines = db.inlineequation +db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+ +db.inlineequation.content = + (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+ +div { + db.equation.role.attribute = attribute role { text } + db.equation.label.attribute = db.label.attribute + db.equation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.equation.attlist = + db.equation.role.attribute? + & db.equation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.equation.label.attribute? + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.equation.info = db._info.title.only + db.equation = + + ## A displayed mathematical equation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:equation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element equation { + db.equation.attlist, + db.equation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.informalequation.role.attribute = attribute role { text } + db.informalequation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.informalequation.attlist = + db.informalequation.role.attribute? + & db.informalequation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.informalequation.info = db._info.title.forbidden + db.informalequation = + + ## A displayed mathematical equation without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalequation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalequation { + db.informalequation.attlist, + db.informalequation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.inlineequation.role.attribute = attribute role { text } + db.inlineequation.attlist = + db.inlineequation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlineequation = + + ## A mathematical equation or expression occurring inline + element inlineequation { + db.inlineequation.attlist, db.alt?, db.inlineequation.content + } +} +div { + db.mathphrase.role.attribute = attribute role { text } + db.mathphrase.attlist = + db.mathphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mathphrase = + + ## A mathematical phrase that can be represented with ordinary text and a small amount of markup + element mathphrase { + db.mathphrase.attlist, + (db._text | db.ubiq.inlines | db._emphasis)* + } +} +db.imagedata.mathml.content = db._any.mml +div { + db.imagedata.mathml.role.attribute = attribute role { text } + db.imagedata.mathml.attlist = + db.imagedata.mathml.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is MathML + attribute format { + + ## Specifies MathML. + "mathml" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.mathml.info = db._info.title.forbidden + db.imagedata.mathml = + + ## A MathML expression in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.mathml.attlist, + db.imagedata.mathml.info, + db.imagedata.mathml.content+ + } +} +div { + db._any.mml = + + ## Any element from the MathML namespace + element mml:* { (db._any.attribute | text | db._any)* } +} +db.imagedata.svg.content = db._any.svg +div { + db.imagedata.svg.role.attribute = attribute role { text } + db.imagedata.svg.attlist = + db.imagedata.svg.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is SVG + attribute format { + + ## Specifies SVG. + "svg" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.svg.info = db._info.title.forbidden + db.imagedata.svg = + + ## An SVG drawing in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.svg.attlist, + db.imagedata.svg.info, + db.imagedata.svg.content+ + } +} +div { + db._any.svg = + + ## Any element from the SVG namespace + element svg:* { (db._any.attribute | text | db._any)* } +} +db.markup.inlines = + db.tag + | db.markup + | db.token + | db.symbol + | db.literal + | db.code + | db.constant + | db.email + | db.uri +div { + db.markup.role.attribute = attribute role { text } + db.markup.attlist = + db.markup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.markup = + + ## A string of formatting markup in text that is to be represented literally + element markup { db.markup.attlist, db._text } +} +div { + db.tag.role.attribute = attribute role { text } + db.tag.class.enumeration = + + ## An attribute + "attribute" + | + ## An attribute value + "attvalue" + | + ## An element + "element" + | + ## An empty element tag + "emptytag" + | + ## An end tag + "endtag" + | + ## A general entity + "genentity" + | + ## The local name part of a qualified name + "localname" + | + ## A namespace + "namespace" + | + ## A numeric character reference + "numcharref" + | + ## A parameter entity + "paramentity" + | + ## A processing instruction + "pi" + | + ## The prefix part of a qualified name + "prefix" + | + ## An SGML comment + "comment" + | + ## A start tag + "starttag" + | + ## An XML processing instruction + "xmlpi" + db.tag.class.attribute = + + ## Identifies the nature of the tag content + attribute class { db.tag.class.enumeration } + db.tag.namespace.attribute = + + ## Identifies the namespace of the tag content + attribute namespace { xsd:anyURI } + db.tag.attlist = + db.tag.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tag.class.attribute? + & db.tag.namespace.attribute? + db.tag = + + ## A component of XML (or SGML) markup + element tag { db.tag.attlist, (db._text | db.tag)* } +} +div { + db.symbol.class.attribute = + + ## Identifies the class of symbol + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.symbol.role.attribute = attribute role { text } + db.symbol.attlist = + db.symbol.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.symbol.class.attribute? + db.symbol = + + ## A name that is replaced by a value before processing + element symbol { db.symbol.attlist, db._text } +} +div { + db.token.role.attribute = attribute role { text } + db.token.attlist = + db.token.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.token = + + ## A unit of information + element token { db.token.attlist, db._text } +} +div { + db.literal.role.attribute = attribute role { text } + db.literal.attlist = + db.literal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.literal = + + ## Inline text that is some literal value + element literal { db.literal.attlist, db._text } +} +div { + code.language.attribute = + + ## Identifies the (computer) language of the code fragment + attribute language { text } + db.code.role.attribute = attribute role { text } + db.code.attlist = + db.code.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & code.language.attribute? + db.code = + + ## An inline code fragment + element code { + db.code.attlist, (db.programming.inlines | db._text)* + } +} +div { + db.constant.class.attribute = + + ## Identifies the class of constant + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.constant.role.attribute = attribute role { text } + db.constant.attlist = + db.constant.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.constant.class.attribute? + db.constant = + + ## A programming or system constant + element constant { db.constant.attlist, db._text } +} +div { + db.productname.role.attribute = attribute role { text } + db.productname.class.enumeration = + + ## A name with a copyright + "copyright" + | + ## A name with a registered copyright + "registered" + | + ## A name of a service + "service" + | + ## A name which is trademarked + "trade" + db.productname.class.attribute = + + ## Specifies the class of product name + attribute class { db.productname.class.enumeration } + db.productname.attlist = + db.productname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.productname.class.attribute? + db.productname = + + ## The formal name of a product + element productname { db.productname.attlist, db._text } +} +div { + db.productnumber.role.attribute = attribute role { text } + db.productnumber.attlist = + db.productnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productnumber = + + ## A number assigned to a product + element productnumber { db.productnumber.attlist, db._text } +} +div { + db.database.class.enumeration = + + ## An alternate or secondary key + "altkey" + | + ## A constraint + "constraint" + | + ## A data type + "datatype" + | + ## A field + "field" + | + ## A foreign key + "foreignkey" + | + ## A group + "group" + | + ## An index + "index" + | + ## The first or primary key + "key1" + | + ## An alternate or secondary key + "key2" + | + ## A name + "name" + | + ## The primary key + "primarykey" + | + ## A (stored) procedure + "procedure" + | + ## A record + "record" + | + ## A rule + "rule" + | + ## The secondary key + "secondarykey" + | + ## A table + "table" + | + ## A user + "user" + | + ## A view + "view" + db.database.class.attribute = + + ## Identifies the class of database artifact + attribute class { db.database.class.enumeration } + db.database.role.attribute = attribute role { text } + db.database.attlist = + db.database.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.database.class.attribute? + db.database = + + ## The name of a database, or part of a database + element database { db.database.attlist, db._text } +} +div { + db.application.class.enumeration = + + ## A hardware application + "hardware" + | + ## A software application + "software" + db.application.class.attribute = + + ## Identifies the class of application + attribute class { db.application.class.enumeration } + db.application.role.attribute = attribute role { text } + db.application.attlist = + db.application.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.application.class.attribute? + db.application = + + ## The name of a software program + element application { db.application.attlist, db._text } +} +div { + db.hardware.role.attribute = attribute role { text } + db.hardware.attlist = + db.hardware.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.hardware = + + ## A physical part of a computer system + element hardware { db.hardware.attlist, db._text } +} +db.gui.inlines = + db.guiicon + | db.guibutton + | db.guimenuitem + | db.guimenu + | db.guisubmenu + | db.guilabel + | db.menuchoice + | db.mousebutton +div { + db.guibutton.role.attribute = attribute role { text } + db.guibutton.attlist = + db.guibutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guibutton = + + ## The text on a button in a GUI + element guibutton { + db.guibutton.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guiicon.role.attribute = attribute role { text } + db.guiicon.attlist = + db.guiicon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guiicon = + + ## Graphic and/or text appearing as a icon in a GUI + element guiicon { + db.guiicon.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guilabel.role.attribute = attribute role { text } + db.guilabel.attlist = + db.guilabel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guilabel = + + ## The text of a label in a GUI + element guilabel { + db.guilabel.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenu.role.attribute = attribute role { text } + db.guimenu.attlist = + db.guimenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenu = + + ## The name of a menu in a GUI + element guimenu { + db.guimenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenuitem.role.attribute = attribute role { text } + db.guimenuitem.attlist = + db.guimenuitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenuitem = + + ## The name of a terminal menu item in a GUI + element guimenuitem { + db.guimenuitem.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guisubmenu.role.attribute = attribute role { text } + db.guisubmenu.attlist = + db.guisubmenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guisubmenu = + + ## The name of a submenu in a GUI + element guisubmenu { + db.guisubmenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.menuchoice.role.attribute = attribute role { text } + db.menuchoice.attlist = + db.menuchoice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.menuchoice = + + ## A selection or series of selections from a menu + element menuchoice { + db.menuchoice.attlist, + db.shortcut?, + (db.guibutton + | db.guiicon + | db.guilabel + | db.guimenu + | db.guimenuitem + | db.guisubmenu)+ + } +} +div { + db.mousebutton.role.attribute = attribute role { text } + db.mousebutton.attlist = + db.mousebutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mousebutton = + + ## The conventional name of a mouse button + element mousebutton { db.mousebutton.attlist, db._text } +} +db.keyboard.inlines = + db.keycombo + | db.keycap + | db.keycode + | db.keysym + | db.shortcut + | db.accel +div { + db.keycap.function.enumeration = + + ## The "Alt" key + "alt" + | + ## The "Alt Graph" key + "altgr" + | + ## The "Backspace" key + "backspace" + | + ## The "Command" key + "command" + | + ## The "Control" key + "control" + | + ## The "Delete" key + "delete" + | + ## The down arrow + "down" + | + ## The "End" key + "end" + | + ## The "Enter" key + "enter" + | + ## The "Escape" key + "escape" + | + ## The "Home" key + "home" + | + ## The "Insert" key + "insert" + | + ## The left arrow + "left" + | + ## The "Meta" key + "meta" + | + ## The "Option" key + "option" + | + ## The page down key + "pagedown" + | + ## The page up key + "pageup" + | + ## The right arrow + "right" + | + ## The "Return" key + "return" + | + ## The "Shift" key + "shift" + | + ## The spacebar + "space" + | + ## The "Tab" key + "tab" + | + ## The up arrow + "up" + db.keycap.function-enum.attribute = + + ## Identifies the function key + attribute function { db.keycap.function.enumeration }? + db.keycap.function-other.attributes = + + ## Identifies the function key + attribute function { + + ## Indicates a non-standard function key + "other" + }?, + + ## Specifies a keyword that identifies the non-standard key + attribute otherfunction { text } + db.keycap.function.attrib = + db.keycap.function-enum.attribute + | db.keycap.function-other.attributes + db.keycap.role.attribute = attribute role { text } + db.keycap.attlist = + db.keycap.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycap.function.attrib + db.keycap = + + ## The text printed on a key on a keyboard + element keycap { db.keycap.attlist, db._text } +} +div { + db.keycode.role.attribute = attribute role { text } + db.keycode.attlist = + db.keycode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keycode = + + ## The internal, frequently numeric, identifier for a key on a keyboard + element keycode { db.keycode.attlist, db._text } +} +db.keycombination.contentmodel = + (db.keycap | db.keycombo | db.keysym) | db.mousebutton +div { + db.keycombo.action.enumeration = + + ## A (single) mouse click. + "click" + | + ## A double mouse click. + "double-click" + | + ## A mouse or key press. + "press" + | + ## Sequential clicks or presses. + "seq" + | + ## Simultaneous clicks or presses. + "simul" + db.keycombo.action-enum.attribute = + + ## Identifies the nature of the action taken. If keycombo + ## contains more than one element, simul + ## is the default, otherwise there is no default. + attribute action { db.keycombo.action.enumeration }? + db.keycombo.action-other.attributes = + + ## Identifies the nature of the action taken + attribute action { + + ## Indicates a non-standard action + "other" + }?, + + ## Identifies the non-standard action in some unspecified way. + attribute otheraction { text } + db.keycombo.action.attrib = + db.keycombo.action-enum.attribute + | db.keycombo.action-other.attributes + db.keycombo.role.attribute = attribute role { text } + db.keycombo.attlist = + db.keycombo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycombo.action.attrib + db.keycombo = + + ## A combination of input actions + element keycombo { + db.keycombo.attlist, db.keycombination.contentmodel+ + } +} +div { + db.keysym.role.attribute = attribute role { text } + db.keysym.attlist = + db.keysym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keysym = + + ## The symbolic name of a key on a keyboard + element keysym { db.keysym.attlist, db._text } +} +div { + db.accel.role.attribute = attribute role { text } + db.accel.attlist = + db.accel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.accel = + + ## A graphical user interface (GUI) keyboard shortcut + element accel { db.accel.attlist, db._text } +} +div { + db.shortcut.action.attrib = db.keycombo.action.attrib + db.shortcut.role.attribute = attribute role { text } + db.shortcut.attlist = + db.shortcut.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.shortcut.action.attrib + db.shortcut = + + ## A key combination for an action that is also accessible through a menu + element shortcut { + db.shortcut.attlist, db.keycombination.contentmodel+ + } +} +db.os.inlines = + db.prompt + | db.envar + | db.filename + | db.command + | db.computeroutput + | db.userinput +db.computeroutput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines +db.userinput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines +db.prompt.inlines = db._text | db.co +div { + db.prompt.role.attribute = attribute role { text } + db.prompt.attlist = + db.prompt.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.prompt = + + ## A character or string indicating the start of an input field in a computer display + element prompt { db.prompt.attlist, db.prompt.inlines* } +} +div { + db.envar.role.attribute = attribute role { text } + db.envar.attlist = + db.envar.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.envar = + + ## A software environment variable + element envar { db.envar.attlist, db._text } +} +div { + db.filename.class.enumeration = + + ## A device + "devicefile" + | + ## A directory + "directory" + | + ## A filename extension + "extension" + | + ## A header file (as for a programming language) + "headerfile" + | + ## A library file + "libraryfile" + | + ## A partition (as of a hard disk) + "partition" + | + ## A symbolic link + "symlink" + db.filename.class.attribute = + + ## Identifies the class of filename + attribute class { db.filename.class.enumeration } + db.filename.path.attribute = + + ## Specifies the path of the filename + attribute path { text } + db.filename.role.attribute = attribute role { text } + db.filename.attlist = + db.filename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.filename.path.attribute? + & db.filename.class.attribute? + db.filename = + + ## The name of a file + element filename { db.filename.attlist, db._text } +} +div { + db.command.role.attribute = attribute role { text } + db.command.attlist = + db.command.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.command = + + ## The name of an executable program or other software command + element command { db.command.attlist, db._text } +} +div { + db.computeroutput.role.attribute = attribute role { text } + db.computeroutput.attlist = + db.computeroutput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.computeroutput = + + ## Data, generally text, displayed or presented by a computer + element computeroutput { + db.computeroutput.attlist, db.computeroutput.inlines* + } +} +div { + db.userinput.role.attribute = attribute role { text } + db.userinput.attlist = + db.userinput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.userinput = + + ## Data entered by the user + element userinput { db.userinput.attlist, db.userinput.inlines* } +} +div { + db.cmdsynopsis.role.attribute = attribute role { text } + db.cmdsynopsis.sepchar.attribute = + + ## Specifies the character that should separate the command and its top-level arguments + attribute sepchar { text } + db.cmdsynopsis.cmdlength.attribute = + + ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + attribute cmdlength { text } + db.cmdsynopsis.label.attribute = db.label.attribute + db.cmdsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.cmdsynopsis.attlist = + db.cmdsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.cmdsynopsis.sepchar.attribute? + & db.cmdsynopsis.cmdlength.attribute? + & db.cmdsynopsis.label.attribute? + & db.cmdsynopsis.packageref.attribute? + db.cmdsynopsis.info = db._info.title.forbidden + db.cmdsynopsis = + + ## A syntax summary for a software command + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:cmdsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element cmdsynopsis { + db.cmdsynopsis.attlist, + db.cmdsynopsis.info, + (db.command | db.arg | db.group | db.sbr)+, + db.synopfragment* + } +} +db.rep.enumeration = + + ## Can not be repeated. + "norepeat" + | + ## Can be repeated. + "repeat" +db.rep.attribute = + + ## Indicates whether or not repetition is possible. + [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration } +db.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted without indication. + "plain" + | + ## Formatted to indicate that it is required. + "req" +db.choice.opt.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration } +db.choice.req.attribute = + + ## Indicates optionality. + [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration } +div { + db.arg.role.attribute = attribute role { text } + db.arg.rep.attribute = db.rep.attribute + db.arg.choice.attribute = db.choice.opt.attribute + db.arg.attlist = + db.arg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.arg.rep.attribute? + & db.arg.choice.attribute? + db.arg = + + ## An argument in a cmdsynopsis + element arg { + db.arg.attlist, + (db._text + | db.arg + | db.group + | db.option + | db.synopfragmentref + | db.sbr)* + } +} +div { + db.group.role.attribute = attribute role { text } + db.group.rep.attribute = db.rep.attribute + db.group.choice.attribute = db.choice.opt.attribute + db.group.attlist = + db.group.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.rep.attribute? + & db.group.choice.attribute? + db.group = + + ## A group of elements in a cmdsynopsis + element group { + db.group.attlist, + (db.arg + | db.group + | db.option + | db.synopfragmentref + | db.replaceable + | db.sbr)+ + } +} +div { + db.sbr.role.attribute = attribute role { text } + db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes + db.sbr = + + ## An explicit line break in a command synopsis + element sbr { db.sbr.attlist, empty } +} +div { + db.synopfragment.role.attribute = attribute role { text } + db.synopfragment.attlist = + db.synopfragment.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.synopfragment = + + ## A portion of a cmdsynopsis broken out from the main body of the synopsis + element synopfragment { + db.synopfragment.attlist, (db.arg | db.group)+ + } +} +div { + db.synopfragmentref.role.attribute = attribute role { text } + db.synopfragmentref.attlist = + db.synopfragmentref.role.attribute? + & db.common.attributes + & db.linkend.attribute + db.synopfragmentref = + + ## A reference to a fragment of a command synopsis + [ + s:pattern [ + s:title [ "Synopsis fragment type constraint" ] + s:rule [ + context = "db:synopfragmentref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on synopfragmentref must point to a synopfragment." + ] + ] + ] + ] + element synopfragmentref { db.synopfragmentref.attlist, text } +} +db.programming.inlines = + db.function + | db.parameter + | db.varname + | db.returnvalue + | db.type + | db.classname + | db.exceptionname + | db.interfacename + | db.methodname + | db.modifier + | db.initializer + | db.buildtarget + | db.oo.inlines + | db.templatename + | db.macroname + | db.unionname + | db.enumname + | db.enumvalue + | db.enumidentifier + | db.typedefname +db.oo.inlines = db.ooclass | db.ooexception | db.oointerface +db.synopsis.blocks = + (db.funcsynopsis + | db.classsynopsis + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.enumsynopsis + | db.typedefsynopsis + | db.packagesynopsis + | db.macrosynopsis + | db.unionsynopsis) + | db.cmdsynopsis +div { + db.synopsis.role.attribute = attribute role { text } + db.synopsis.label.attribute = db.label.attribute + db.synopsis.attlist = + db.synopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.synopsis.label.attribute? + db.synopsis = + + ## A general-purpose element for representing the syntax of commands or functions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:synopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element synopsis { db.synopsis.attlist, db.verbatim.contentmodel } +} +div { + db.synopsisinfo.role.attribute = attribute role { text } + db.synopsisinfo.attlist = + db.synopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.synopsisinfo = + + ## Information supplementing synopsis + element synopsisinfo { + db.synopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcsynopsis.info = db._info.title.forbidden + db.funcsynopsis.role.attribute = attribute role { text } + db.funcsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.funcsynopsis.attlist = + db.funcsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.funcsynopsis.packageref.attribute? + db.funcsynopsis = + + ## The syntax summary for a function definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsis { + db.funcsynopsis.attlist, + db.funcsynopsis.info, + (db.funcsynopsisinfo | db.funcprototype)+ + } +} +div { + db.funcsynopsisinfo.role.attribute = attribute role { text } + db.funcsynopsisinfo.attlist = + db.funcsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.funcsynopsisinfo = + + ## Information supplementing the funcdefs of a funcsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsisinfo { + db.funcsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcprototype.role.attribute = attribute role { text } + db.funcprototype.attlist = + db.funcprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcprototype = + + ## The prototype of a function + element funcprototype { + db.funcprototype.attlist, + db.modifier*, + db.funcdef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.funcdef.role.attribute = attribute role { text } + db.funcdef.attlist = + db.funcdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcdef = + + ## A function (subroutine) name and its return type + element funcdef { + db.funcdef.attlist, + (db._text | db.type | db.templatename | db.void | db.function)* + } +} +div { + db.function.role.attribute = attribute role { text } + db.function.attlist = + db.function.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.function = + + ## The name of a function or subroutine, as in a programming language + element function { db.function.attlist, db._text } +} +div { + db.void.role.attribute = attribute role { text } + db.void.attlist = + db.void.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.void = + + ## An empty element in a function synopsis indicating that the function in question takes no arguments + element void { db.void.attlist, empty } +} +div { + db.varargs.role.attribute = attribute role { text } + db.varargs.attlist = + db.varargs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varargs = + + ## An empty element in a function synopsis indicating a variable number of arguments + element varargs { db.varargs.attlist, empty } +} +div { + db.group.paramdef.role.attribute = attribute role { text } + db.group.paramdef.choice.attribute = db.choice.opt.attribute + db.group.paramdef.attlist = + db.group.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.paramdef.choice.attribute? + db.group.paramdef = + + ## A group of parameters + element group { + db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+ + } +} +div { + db.paramdef.role.attribute = attribute role { text } + db.paramdef.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted to indicate that it is required. + "req" + db.paramdef.choice.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] + attribute choice { db.paramdef.choice.enumeration } + db.paramdef.attlist = + db.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.paramdef.choice.attribute? + db.paramdef = + + ## Information about a function parameter in a programming language + element paramdef { + db.paramdef.attlist, + (db._text + | db.initializer + | db.modifier + | db.type + | db.templatename + | db.parameter + | db.funcparams)* + } +} +div { + db.funcparams.role.attribute = attribute role { text } + db.funcparams.attlist = + db.funcparams.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcparams = + + ## Parameters for a function referenced through a function pointer in a synopsis + element funcparams { db.funcparams.attlist, db._text } +} +div { + db.classsynopsis.info = db._info.title.forbidden + db.classsynopsis.role.attribute = attribute role { text } + db.classsynopsis.class.enumeration = + + ## This is the synopsis of a class + "class" + | + ## This is the synopsis of an interface + "interface" + db.classsynopsis.class.attribute = + + ## Specifies the nature of the synopsis + attribute class { db.classsynopsis.class.enumeration } + db.classsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.classsynopsis.attlist = + db.classsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.classsynopsis.class.attribute? + & db.classsynopsis.packageref.attribute? + db.classsynopsis = + + ## The syntax summary for a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsis { + db.classsynopsis.attlist, + db.classsynopsis.info, + db.classsynopsisinfo*, + db.templatename*, + db.oo.inlines, + (db.template + | db.ooexception + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.classsynopsisinfo)* + } +} +div { + db.classsynopsisinfo.role.attribute = attribute role { text } + db.classsynopsisinfo.attlist = + db.classsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.classsynopsisinfo = + + ## Information supplementing the contents of a classsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsisinfo { + db.classsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.ooclass.role.attribute = attribute role { text } + db.ooclass.attlist = + db.ooclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooclass = + + ## A class in an object-oriented programming language + element ooclass { + db.ooclass.attlist, + (db.package | db.modifier)*, + db.classname, + db.modifier* + } +} +div { + db.oointerface.role.attribute = attribute role { text } + db.oointerface.attlist = + db.oointerface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.oointerface = + + ## An interface in an object-oriented programming language + element oointerface { + db.oointerface.attlist, + (db.package | db.modifier)*, + db.interfacename, + db.modifier* + } +} +div { + db.ooexception.role.attribute = attribute role { text } + db.ooexception.attlist = + db.ooexception.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooexception = + + ## An exception in an object-oriented programming language + element ooexception { + db.ooexception.attlist, + (db.package | db.modifier)*, + db.exceptionname, + db.modifier* + } +} +db.modifier.xml.space.attribute = + + ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + attribute xml:space { + + ## Extra whitespace and line breaks must be preserved. + [ + # Ideally the definition of xml:space used on modifier would be + # different from the definition used on the verbatim elements. The + # verbatim elements forbid the use of xml:space="default" which + # wouldn't be a problem on modifier. But doing that causes the + # generated XSD schemas to be broken so I'm just reusing the existing + # definition for now. It won't be backwards incompatible to fix this + # problem in the future. + # | ## Extra whitespace and line breaks are not preserved. + # "default" + + ] + "preserve" + } +div { + db.modifier.role.attribute = attribute role { text } + db.modifier.attlist = + db.modifier.xml.space.attribute? + & db.modifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.modifier = + + ## Modifiers in a synopsis + element modifier { db.modifier.attlist, db._text } +} +div { + db.interfacename.role.attribute = attribute role { text } + db.interfacename.attlist = + db.interfacename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.interfacename = + + ## The name of an interface + element interfacename { db.interfacename.attlist, db._text } +} +div { + db.exceptionname.role.attribute = attribute role { text } + db.exceptionname.attlist = + db.exceptionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.exceptionname = + + ## The name of an exception + element exceptionname { db.exceptionname.attlist, db._text } +} +div { + db.fieldsynopsis.info = db._info.title.forbidden + db.fieldsynopsis.role.attribute = attribute role { text } + db.fieldsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.fieldsynopsis.attlist = + db.fieldsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.fieldsynopsis.packageref.attribute? + db.fieldsynopsis = + + ## The name of a field in a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:fieldsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element fieldsynopsis { + db.fieldsynopsis.attlist, + db.fieldsynopsis.info, + db.synopsisinfo*, + db.modifier*, + (db.type | db.templatename)*, + db.varname, + db.modifier*, + db.initializer?, + db.synopsisinfo* + } +} +div { + db.initializer.role.attribute = attribute role { text } + db.initializer.attlist = + db.initializer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines + db.initializer = + + ## The initializer for a fieldsynopsis + element initializer { + db.initializer.attlist, db.initializer.inlines* + } +} +div { + db.constructorsynopsis.info = db._info.title.forbidden + db.constructorsynopsis.role.attribute = attribute role { text } + db.constructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.constructorsynopsis.attlist = + db.constructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.constructorsynopsis.packageref.attribute? + db.constructorsynopsis = + + ## A syntax summary for a constructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constructorsynopsis { + db.constructorsynopsis.attlist, + db.constructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.destructorsynopsis.info = db._info.title.forbidden + db.destructorsynopsis.role.attribute = attribute role { text } + db.destructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.destructorsynopsis.attlist = + db.destructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.destructorsynopsis.packageref.attribute? + db.destructorsynopsis = + + ## A syntax summary for a destructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:destructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element destructorsynopsis { + db.destructorsynopsis.attlist, + db.destructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.methodsynopsis.info = db._info.title.forbidden + db.methodsynopsis.role.attribute = attribute role { text } + db.methodsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.methodsynopsis.attlist = + db.methodsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.methodsynopsis.packageref.attribute? + db.methodsynopsis = + + ## A syntax summary for a method + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:methodsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element methodsynopsis { + db.methodsynopsis.attlist, + db.methodsynopsis.info, + db.synopsisinfo*, + (db.templatename | db.modifier)*, + (db.type | db.void)?, + db.methodname, + db.templatename*, + ((db.methodparam | db.group.methodparam)+ | db.void), + (db.exceptionname | db.modifier | db.templatename)*, + db.synopsisinfo* + } +} +div { + db.methodname.role.attribute = attribute role { text } + db.methodname.attlist = + db.methodname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.methodname = + + ## The name of a method + element methodname { db.methodname.attlist, db._text } +} +div { + db.methodparam.role.attribute = attribute role { text } + db.methodparam.rep.attribute = db.rep.attribute + db.methodparam.choice.attribute = db.choice.req.attribute + db.methodparam.attlist = + db.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.methodparam.rep.attribute? + & db.methodparam.choice.attribute? + db.methodparam = + + ## Parameters to a method + element methodparam { + db.methodparam.attlist, + (db.modifier | db.type | db.templatename)*, + ((db.parameter, db.initializer?) | db.funcparams), + db.modifier* + } +} +div { + db.group.methodparam.role.attribute = attribute role { text } + db.group.methodparam.choice.attribute = db.choice.opt.attribute + db.group.methodparam.attlist = + db.group.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.methodparam.choice.attribute? + db.group.methodparam = + + ## A group of method parameters + element group { + db.group.methodparam.attlist, + (db.methodparam | db.group.methodparam)+ + } +} +div { + db.varname.role.attribute = attribute role { text } + db.varname.attlist = + db.varname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varname = + + ## The name of a variable + element varname { db.varname.attlist, db._text } +} +div { + db.buildtarget.role.attribute = attribute role { text } + db.buildtarget.attlist = + db.buildtarget.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.buildtarget = + + ## Target of a build + element buildtarget { db.buildtarget.attlist, db._text } +} +div { + db.returnvalue.role.attribute = attribute role { text } + db.returnvalue.attlist = + db.returnvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.returnvalue = + + ## The value returned by a function + element returnvalue { db.returnvalue.attlist, db._text } +} +div { + db.type.role.attribute = attribute role { text } + db.type.class.enumeration = + + ## Combined type is union of nested types + "union" + | + ## Combined type is intersection of nested types + "intersection" + db.type.class.attribute = + + ## Specifies the way how are nested types combined together + attribute class { db.type.class.enumeration } + db.type.attlist = + db.type.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.type.class.attribute? + db.type = + + ## The classification of a value + element type { + db.type.attlist, (db._text | db.programming.inlines)* + } +} +div { + db.classname.role.attribute = attribute role { text } + db.classname.attlist = + db.classname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.classname = + + ## The name of a class, in the object-oriented programming sense + element classname { db.classname.attlist, db._text } +} +div { + db.templatename.role.attribute = attribute role { text } + db.templatename.attlist = + db.templatename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.templatename = + + ## The identifier for a template, in the generic programming sense + element templatename { db.templatename.attlist, db._text } +} +div { + db.template.role.attribute = attribute role { text } + db.template.attlist = + db.template.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.template = + + ## The definition of a template, in the generic programming sense + element template { + db.template.attlist, + (((db.modifier | db.type | db._text)*, + db.templatename, + (db.modifier | db.type | db._text)*) + | db.specializedtemplate) + } +} +div { + db.specializedtemplate.role.attribute = attribute role { text } + db.specializedtemplate.attlist = + db.specializedtemplate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.specializedtemplate = + + ## The specialization of a template identifier, in the generic programming sense + element specializedtemplate { + db.specializedtemplate.attlist, + (db.modifier | db.type | db._text)* + } +} +div { + db.packagesynopsis.info = db._info.title.forbidden + db.packagesynopsis.role.attribute = attribute role { text } + db.packagesynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.packagesynopsis.attlist = + db.packagesynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.packagesynopsis.packageref.attribute? + db.packagesynopsis = + + ## The syntax summary for a package definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:packagesynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element packagesynopsis { + db.packagesynopsis.attlist, + db.packagesynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.package, + db.modifier*, + (db.synopsis.blocks | db.synopsisinfo)* + } +} +div { + db.macroname.role.attribute = attribute role { text } + db.macroname.attlist = + db.macroname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroname = + + ## The name of a macro (a code-generating function) + element macroname { db.macroname.attlist, db._text } +} +div { + db.macrosynopsis.info = db._info.title.forbidden + db.macrosynopsis.role.attribute = attribute role { text } + db.macrosynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.macrosynopsis.attlist = + db.macrosynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.macrosynopsis.packageref.attribute? + db.macrosynopsis = + + ## The syntax summary for a macro definition (code-generating function) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:macrosynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element macrosynopsis { + db.macrosynopsis.attlist, + db.macrosynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.macroname, + (db.package | db.modifier)*, + db.macroprototype+, + db.synopsisinfo* + } +} +div { + db.macroprototype.role.attribute = attribute role { text } + db.macroprototype.attlist = + db.macroprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroprototype = + + ## The prototype of a macro (code-generating function) + element macroprototype { + db.macroprototype.attlist, + db.modifier*, + db.macrodef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.macrodef.role.attribute = attribute role { text } + db.macrodef.attlist = + db.macrodef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macrodef = + + ## A macro name and its return type + element macrodef { + db.macrodef.attlist, (db.type | db.templatename)*, db.macroname + } +} +div { + db.unionname.role.attribute = attribute role { text } + db.unionname.attlist = + db.unionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.unionname = + + ## The name of a union of types + element unionname { db.unionname.attlist, db._text } +} +div { + db.union.role.attribute = attribute role { text } + db.union.attlist = + db.union.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.union = + + ## The definition of a union of types, which may be more than a name + element union { db.union.attlist, db.type+ } +} +div { + db.unionsynopsis.info = db._info.title.forbidden + db.unionsynopsis.role.attribute = attribute role { text } + # N.B. the enumeration is explicitly identical to the enumeration + # on enumsynopsis by default. + db.unionsynopsis.ordered.attribute = + + ## Indicates how the value of a union is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.unionsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.unionsynopsis.attlist = + db.unionsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.unionsynopsis.ordered.attribute? + & db.unionsynopsis.packageref.attribute? + db.unionsynopsis = + + ## The syntax summary for a union-of-types definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:unionsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element unionsynopsis { + db.unionsynopsis.attlist, + db.unionsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.unionname?, + db.union, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.enumname.role.attribute = attribute role { text } + db.enumname.attlist = + db.enumname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumname = + + ## The name of an enumeration + element enumname { db.enumname.attlist, db._text } +} +div { + db.enumvalue.role.attribute = attribute role { text } + db.enumvalue.attlist = + db.enumvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumvalue = + + ## The value an enumerated type can take + element enumvalue { db.enumvalue.attlist, db._text } +} +div { + db.enumitemdescription.role.attribute = attribute role { text } + db.enumitemdescription.attlist = + db.enumitemdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitemdescription = + + ## The description of a value an enumerated type can take + element enumitemdescription { + db.enumitemdescription.attlist, db.all.inlines* + } +} +div { + db.enumidentifier.role.attribute = attribute role { text } + db.enumidentifier.attlist = + db.enumidentifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumidentifier = + + ## The identifier of a value an enumerated type can take + element enumidentifier { db.enumidentifier.attlist, db._text } +} +div { + db.enumitem.role.attribute = attribute role { text } + db.enumitem.attlist = + db.enumitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitem = + + ## A value an enumerated type can take and its description + element enumitem { + db.enumitem.attlist, + db.enumidentifier, + db.enumvalue*, + db.enumitemdescription? + } +} +div { + db.enumsynopsis.info = db._info.title.forbidden + db.enumsynopsis.role.attribute = attribute role { text } + db.enumsynopsis.ordered.enumeration = + + ## Value of enum is specified explicitly using enumvalue + "0" + | + ## Value of enum is inferred from its position + "1" + db.enumsynopsis.ordered.attribute = + + ## Indicates how the value of an enumeration is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.enumsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.enumsynopsis.attlist = + db.enumsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.enumsynopsis.ordered.attribute? + & db.enumsynopsis.packageref.attribute? + db.enumsynopsis = + + ## The syntax summary for an enumerated-type definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:enumsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element enumsynopsis { + db.enumsynopsis.attlist, + db.enumsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + (db.enumname, db.modifier*)?, + db.enumitem+, + db.synopsisinfo* + } +} +div { + db.typedefname.role.attribute = attribute role { text } + db.typedefname.attlist = + db.typedefname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.typedefname = + + ## The name of a type alias + element typedefname { db.typedefname.attlist, db._text } +} +div { + db.typedefsynopsis.info = db._info.title.forbidden + db.typedefsynopsis.role.attribute = attribute role { text } + db.typedefsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.typedefsynopsis.attlist = + db.typedefsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.typedefsynopsis.packageref.attribute? + db.typedefsynopsis = + + ## The syntax summary for a type-alias definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:typedefsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element typedefsynopsis { + db.typedefsynopsis.attlist, + db.typedefsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.typedefname, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.programlisting.role.attribute = attribute role { text } + db.programlisting.width.attribute = db.width.characters.attribute + db.programlisting.attlist = + db.programlisting.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.programlisting.width.attribute? + db.programlisting = + + ## A literal listing of all or part of a program + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlisting" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlisting { + db.programlisting.attlist, db.verbatim.contentmodel + } +} +db.admonition.blocks = + db.caution | db.danger | db.important | db.note | db.tip | db.warning +db.admonition.contentmodel = db._info.title.only, db.all.blocks+ +div { + db.caution.role.attribute = attribute role { text } + db.caution.attlist = + db.caution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caution = + + ## A note of caution + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caution" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caution { db.caution.attlist, db.admonition.contentmodel } +} +div { + db.danger.role.attribute = attribute role { text } + db.danger.attlist = + db.danger.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.danger = + + ## An admonition set off from the text indicating hazardous situation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:danger" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element danger { db.danger.attlist, db.admonition.contentmodel } +} +div { + db.important.role.attribute = attribute role { text } + db.important.attlist = + db.important.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.important = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:important" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element important { + db.important.attlist, db.admonition.contentmodel + } +} +div { + db.note.role.attribute = attribute role { text } + db.note.attlist = + db.note.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.note = + + ## A message set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:note" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element note { db.note.attlist, db.admonition.contentmodel } +} +div { + db.tip.role.attribute = attribute role { text } + db.tip.attlist = + db.tip.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tip = + + ## A suggestion to the user, set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tip" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tip { db.tip.attlist, db.admonition.contentmodel } +} +div { + db.warning.role.attribute = attribute role { text } + db.warning.attlist = + db.warning.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.warning = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:warning" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element warning { db.warning.attlist, db.admonition.contentmodel } +} +db.error.inlines = + db.errorcode | db.errortext | db.errorname | db.errortype +div { + db.errorcode.role.attribute = attribute role { text } + db.errorcode.attlist = + db.errorcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorcode = + + ## An error code + element errorcode { db.errorcode.attlist, db._text } +} +div { + db.errorname.role.attribute = attribute role { text } + db.errorname.attlist = + db.errorname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorname = + + ## An error name + element errorname { db.errorname.attlist, db._text } +} +div { + db.errortext.role.attribute = attribute role { text } + db.errortext.attlist = + db.errortext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortext = + + ## An error message. + element errortext { db.errortext.attlist, db._text } +} +div { + db.errortype.role.attribute = attribute role { text } + db.errortype.attlist = + db.errortype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortype = + + ## The classification of an error message + element errortype { db.errortype.attlist, db._text } +} +db.systemitem.inlines = db._text | db.co +div { + db.systemitem.class.enumeration = + + ## A daemon or other system process (syslogd) + "daemon" + | + ## A domain name (example.com) + "domainname" + | + ## An ethernet address (00:05:4E:49:FD:8E) + "etheraddress" + | + ## An event of some sort (SIGHUP) + "event" + | + ## An event handler of some sort (hangup) + "eventhandler" + | + ## A filesystem (ext3) + "filesystem" + | + ## A fully qualified domain name (my.example.com) + "fqdomainname" + | + ## A group name (wheel) + "groupname" + | + ## A network interface (eth0) + "interface" + | + ## An IP address (127.0.0.1) + "ipaddress" + | + ## A library (libncurses) + "library" + | + ## A macro + "macro" + | + ## A netmask (255.255.255.192) + "netmask" + | + ## A newsgroup (comp.text.xml) + "newsgroup" + | + ## An operating system name (Hurd) + "osname" + | + ## A process (gnome-cups-icon) + "process" + | + ## A protocol (ftp) + "protocol" + | + ## A resource + "resource" + | + ## A security context (a role, permission, or security token, for example) + "securitycontext" + | + ## A server (mail.example.com) + "server" + | + ## A service (ppp) + "service" + | + ## A system name (hephaistos) + "systemname" + | + ## A user name (ndw) + "username" + db.systemitem.class-enum.attribute = + + ## Identifies the nature of the system item + attribute class { db.systemitem.class.enumeration }? + db.systemitem.class-other.attribute = + + ## Identifies the nature of the non-standard system item + attribute otherclass { xsd:NMTOKEN } + db.systemitem.class-other.attributes = + + ## Identifies the kind of systemitemgraphic identifier + attribute class { + + ## Indicates that the system item is some 'other' kind. + "other" + } + & db.systemitem.class-other.attribute + db.systemitem.class.attribute = + db.systemitem.class-enum.attribute + | db.systemitem.class-other.attributes + db.systemitem.role.attribute = attribute role { text } + db.systemitem.attlist = + db.systemitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.systemitem.class.attribute? + db.systemitem = + + ## A system-related item or term + element systemitem { db.systemitem.attlist, db.systemitem.inlines* } +} +div { + db.option.role.attribute = attribute role { text } + db.option.attlist = + db.option.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.option = + + ## An option for a software command + element option { db.option.attlist, db._text } +} +div { + db.optional.role.attribute = attribute role { text } + db.optional.attlist = + db.optional.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.optional = + + ## Optional information + element optional { db.optional.attlist, (db._text | db.optional)* } +} +div { + db.property.role.attribute = attribute role { text } + db.property.attlist = + db.property.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.property = + + ## A unit of data associated with some part of a computer system + element property { db.property.attlist, db._text } +} +div { + db.topic.status.attribute = db.status.attribute + db.topic.role.attribute = attribute role { text } + db.topic.type.attribute = + + ## Identifies the topic type + attribute type { text } + db.topic.attlist = + db.topic.role.attribute? + & db.topic.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.topic.status.attribute? + db.topic.info = db._info.title.req + db.topic = + + ## A modular unit of documentation not part of any particular narrative flow + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:topic" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element topic { + db.topic.attlist, + db.topic.info, + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* + } +} +db._any = + element * - (db:* | its:*) { + (attribute * { text } + | text + | db._any)* + } +db._any_other.attribute = + + ## Any attribute in an other explicit namespace. + attribute * - (db:* | xml:* | xlink:* | trans:* | its:* | local:*) { + text + } +# Include base ITS schema + +## Version of ITS +its-version.type = xsd:string { pattern = "[0-9]+\.[0-9]+" } + +## The query language to be used for processing the rules +its-queryLanguage.type = "xpath" | "css" | text +its-absolute-selector.type = + + ## Absolute selector + string +its-relative-selector.type = + + ## Relative selector + string +its-xpath-expression.type = string +its-confidence.type = + xsd:double { minInclusive = "0" maxInclusive = "1" } + +## The Translate data category information to be attached to the current node +its-translate.type = + + ## The nodes need to be translated + "yes" + | + ## The nodes must not be translated + "no" +its-locNote.type = string + +## The type of localization note +its-locNoteType.type = + + ## Localization note is an alert + "alert" + | + ## Localization note is a description + "description" +its-locNoteRef.type = xsd:anyURI +its-termInfoRef.type = xsd:anyURI + +## Indicates a term locally +its-term.type = + + ## The value 'yes' means that this is a term + "yes" + | + ## The value 'no' means that this is not a term + "no" +its-termConfidence.type = its-confidence.type + +## The text direction for the context +its-dir.type = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" + +## States whether current context is regarded as "within text" +its-withinText.type = + + ## The element and its content are part of the flow of its parent element + "yes" + | + ## The element splits the text flow of its parent element and its content is an independent text flow + "no" + | + ## The element is part of the flow of its parent element, its content is an independent flow + "nested" + +## A comma separated list of mappings between values in the content +## and workflow specific values. The values may contain spaces; in +## that case they MUST be delimited by quotation marks. +its-domainMapping.type = string +its-taConfidence.type = its-confidence.type +its-taClassRefPointer.type = its-relative-selector.type +its-taClassRef.type = xsd:anyURI +its-taIdentRef.type = xsd:anyURI +its-taIdent.type = string +its-taSource.type = string +its-taIdentPointer.type = its-relative-selector.type +its-taIdentRefPointer.type = its-relative-selector.type +its-taSourcePointer.type = its-relative-selector.type +its-localeFilterList.type = string +its-localeFilterType.type = "include" | "exclude" +its-provenanceRecordsRef.type = xsd:anyURI +its-person.type = string +its-personRef.type = xsd:anyURI +its-org.type = string +its-orgRef.type = xsd:anyURI +its-tool.type = string +its-toolRef.type = xsd:anyURI +its-revPerson.type = string +its-revPersonRef.type = xsd:anyURI +its-revOrg.type = string +its-revOrgRef.type = xsd:anyURI +its-revTool.type = string +its-revToolRef.type = xsd:anyURI +its-provRef.type = list { xsd:anyURI+ } +its-locQualityIssuesRef.type = xsd:anyURI +its-locQualityIssueType.type = + "terminology" + | "mistranslation" + | "omission" + | "untranslated" + | "addition" + | "duplication" + | "inconsistency" + | "grammar" + | "legal" + | "register" + | "locale-specific-content" + | "locale-violation" + | "style" + | "characters" + | "misspelling" + | "typographical" + | "formatting" + | "inconsistent-entities" + | "numbers" + | "markup" + | "pattern-problem" + | "whitespace" + | "internationalization" + | "length" + | "non-conformance" + | "uncategorized" + | "other" +its-locQualityIssueComment.type = string +its-locQualityIssueSeverity.type = + xsd:double { minInclusive = "0" maxInclusive = "100" } +its-locQualityIssueProfileRef.type = xsd:anyURI +its-locQualityIssueEnabled.type = "yes" | "no" +its-locQualityRatingScore.type = + xsd:double { minInclusive = "0" maxInclusive = "100" } +its-locQualityRatingVote.type = xsd:integer +its-locQualityRatingScoreThreshold.type = + xsd:double { minInclusive = "0" maxInclusive = "100" } +its-locQualityRatingVoteThreshold.type = xsd:integer +its-locQualityRatingProfileRef.type = xsd:anyURI +its-mtConfidence.type = its-confidence.type +its-allowedCharacters.type = string +its-storageSize.type = xsd:nonNegativeInteger +its-storageEncoding.type = string +its-lineBreakType.type = "cr" | "lf" | "crlf" +its-annotatorsRef.type = string +its-attribute.translate = attribute its:translate { its-translate.type } +its-attribute.translate.nons = + attribute translate { its-translate.type } +its-attribute.dir.nons = attribute dir { its-dir.type } +its-attribute.locNote = attribute its:locNote { its-locNote.type } +its-attribute.locNote.nons = attribute locNote { its-locNote.type } +its-attribute.locNoteType = + attribute its:locNoteType { its-locNoteType.type } +its-attribute.locNoteType.nons = + attribute locNoteType { its-locNoteType.type } +its-attribute.locNoteRef = + attribute its:locNoteRef { its-locNoteRef.type } +its-attribute.locNoteRef.nons = + attribute locNoteRef { its-locNoteRef.type } +its-attribute.termInfoRef = + attribute its:termInfoRef { its-termInfoRef.type } +its-attribute.termInfoRef.nons = + attribute termInfoRef { its-termInfoRef.type } +its-attribute.term = attribute its:term { its-term.type } +its-attribute.term.nons = attribute term { its-term.type } +its-attribute.termConfidence = + attribute its:termConfidence { its-termConfidence.type } +its-attribute.termConfidence.nons = + attribute termConfidence { its-termConfidence.type } +its-attribute.withinText = + attribute its:withinText { its-withinText.type } +its-attribute.withinText.nons = + attribute withinText { its-withinText.type } +its-attribute.domainMapping.nons = + attribute domainMapping { its-domainMapping.type } +its-attribute.taConfidence = + attribute its:taConfidence { its-taConfidence.type } +its-attribute.taConfidence.nons = + attribute taConfidence { its-taConfidence.type } +its-attribute.taClassRef = + attribute its:taClassRef { its-taClassRef.type } +its-attribute.taClassRef.nons = + attribute taClassRef { its-taClassRef.type } +its-attribute.taIdent = attribute its:taIdent { its-taIdent.type } +its-attribute.taIdent.nons = attribute taIdent { its-taIdent.type } +its-attribute.taIdentRef = + attribute its:taIdentRef { its-taIdentRef.type } +its-attribute.taIdentRef.nons = + attribute taIdentRef { its-taIdentRef.type } +its-attribute.taSource = attribute its:taSource { its-taSource.type } +its-attribute.taSource.nons = attribute taSource { its-taSource.type } +its-attribute.localeFilterList = + attribute its:localeFilterList { its-localeFilterList.type } +its-attribute.localeFilterList.nons = + attribute localeFilterList { its-localeFilterList.type } +its-attribute.localeFilterType = + attribute its:localeFilterType { its-localeFilterType.type } +its-attribute.localeFilterType.nons = + attribute localeFilterType { its-localeFilterType.type } +its-attribute.person = attribute its:person { its-person.type } +its-attribute.person.nons = attribute person { its-person.type } +its-attribute.personRef = attribute its:personRef { its-personRef.type } +its-attribute.personRef.nons = + attribute personRef { its-personRef.type } +its-attribute.org = attribute its:org { its-org.type } +its-attribute.org.nons = attribute org { its-org.type } +its-attribute.orgRef = attribute its:orgRef { its-orgRef.type } +its-attribute.orgRef.nons = attribute orgRef { its-orgRef.type } +its-attribute.tool = attribute its:tool { its-tool.type } +its-attribute.tool.nons = attribute tool { its-tool.type } +its-attribute.toolRef = attribute its:toolRef { its-toolRef.type } +its-attribute.toolRef.nons = attribute toolRef { its-toolRef.type } +its-attribute.revPerson = attribute its:revPerson { its-revPerson.type } +its-attribute.revPerson.nons = + attribute revPerson { its-revPerson.type } +its-attribute.revPersonRef = + attribute its:revPersonRef { its-revPersonRef.type } +its-attribute.revPersonRef.nons = + attribute revPersonRef { its-revPersonRef.type } +its-attribute.revOrg = attribute its:revOrg { its-revOrg.type } +its-attribute.revOrg.nons = attribute revOrg { its-revOrg.type } +its-attribute.revOrgRef = attribute its:revOrgRef { its-revOrgRef.type } +its-attribute.revOrgRef.nons = + attribute revOrgRef { its-revOrgRef.type } +its-attribute.revTool = attribute its:revTool { its-revTool.type } +its-attribute.revTool.nons = attribute revTool { its-revTool.type } +its-attribute.revToolRef = + attribute its:revToolRef { its-revToolRef.type } +its-attribute.revToolRef.nons = + attribute revToolRef { its-revToolRef.type } +its-attribute.provRef = attribute its:provRef { its-provRef.type } +its-attribute.provRef.nons = attribute provRef { its-provRef.type } +its-attribute.provenanceRecordsRef = + attribute its:provenanceRecordsRef { its-provenanceRecordsRef.type } +its-attribute.provenanceRecordsRef.nons = + attribute provenanceRecordsRef { its-provenanceRecordsRef.type } +its-attribute.locQualityIssuesRef = + attribute its:locQualityIssuesRef { its-locQualityIssuesRef.type } +its-attribute.locQualityIssuesRef.nons = + attribute locQualityIssuesRef { its-locQualityIssuesRef.type } +its-attribute.locQualityIssueType = + attribute its:locQualityIssueType { its-locQualityIssueType.type } +its-attribute.locQualityIssueType.nons = + attribute locQualityIssueType { its-locQualityIssueType.type } +its-attribute.locQualityIssueComment = + attribute its:locQualityIssueComment { + its-locQualityIssueComment.type + } +its-attribute.locQualityIssueComment.nons = + attribute locQualityIssueComment { its-locQualityIssueComment.type } +its-attribute.locQualityIssueSeverity = + attribute its:locQualityIssueSeverity { + its-locQualityIssueSeverity.type + } +its-attribute.locQualityIssueSeverity.nons = + attribute locQualityIssueSeverity { its-locQualityIssueSeverity.type } +its-attribute.locQualityIssueProfileRef = + attribute its:locQualityIssueProfileRef { + its-locQualityIssueProfileRef.type + } +its-attribute.locQualityIssueProfileRef.nons = + attribute locQualityIssueProfileRef { + its-locQualityIssueProfileRef.type + } +its-attribute.locQualityIssueEnabled = + attribute its:locQualityIssueEnabled { + its-locQualityIssueEnabled.type + } +its-attribute.locQualityIssueEnabled.nons = + attribute locQualityIssueEnabled { its-locQualityIssueEnabled.type } +its-attribute.locQualityRatingScore = + attribute its:locQualityRatingScore { its-locQualityRatingScore.type } +its-attribute.locQualityRatingScore.nons = + attribute locQualityRatingScore { its-locQualityRatingScore.type } +its-attribute.locQualityRatingVote = + attribute its:locQualityRatingVote { its-locQualityRatingVote.type } +its-attribute.locQualityRatingVote.nons = + attribute locQualityRatingVote { its-locQualityRatingVote.type } +its-attribute.locQualityRatingScoreThreshold = + attribute its:locQualityRatingScoreThreshold { + its-locQualityRatingScoreThreshold.type + } +its-attribute.locQualityRatingScoreThreshold.nons = + attribute locQualityRatingScoreThreshold { + its-locQualityRatingScoreThreshold.type + } +its-attribute.locQualityRatingVoteThreshold = + attribute its:locQualityRatingVoteThreshold { + its-locQualityRatingVoteThreshold.type + } +its-attribute.locQualityRatingVoteThreshold.nons = + attribute locQualityRatingVoteThreshold { + its-locQualityRatingVoteThreshold.type + } +its-attribute.locQualityRatingProfileRef = + attribute its:locQualityRatingProfileRef { + its-locQualityRatingProfileRef.type + } +its-attribute.locQualityRatingProfileRef.nons = + attribute locQualityRatingProfileRef { + its-locQualityRatingProfileRef.type + } +its-attribute.mtConfidence = + attribute its:mtConfidence { its-mtConfidence.type } +its-attribute.mtConfidence.nons = + attribute mtConfidence { its-mtConfidence.type } +its-attribute.allowedCharacters = + attribute its:allowedCharacters { its-allowedCharacters.type } +its-attribute.allowedCharacters.nons = + attribute allowedCharacters { its-allowedCharacters.type } +its-attribute.storageSize = + attribute its:storageSize { its-storageSize.type } +its-attribute.storageSize.nons = + attribute storageSize { its-storageSize.type } +its-attribute.storageEncoding = + attribute its:storageEncoding { its-storageEncoding.type } +its-attribute.storageEncoding.nons = + attribute storageEncoding { its-storageEncoding.type } +its-attribute.lineBreakType = + attribute its:lineBreakType { its-lineBreakType.type } +its-attribute.lineBreakType.nons = + attribute lineBreakType { its-lineBreakType.type } +its-attribute.annotatorsRef = + attribute its:annotatorsRef { its-annotatorsRef.type } +its-attribute.annotatorsRef.nons = + attribute annotatorsRef { its-annotatorsRef.type } +its-attribute.version = + + ## Version of ITS + attribute its:version { its-version.type } +its-attribute.version.nons = + + ## Version of ITS + attribute version { its-version.type } +its-attribute.queryLanguage.nons = + attribute queryLanguage { its-queryLanguage.type } +its-attribute.xlink.href = attribute xlink:href { xsd:anyURI } +its-attribute.xlink.type = attribute xlink:type { "simple" } +its-attribute.selector = + attribute selector { its-absolute-selector.type } +its-foreign-attribute = attribute * - local:* { text } +its-foreign-no-xml-id-attribute = + attribute * - (local:* | xml:id) { text } +its-foreign-no-xlink-attribute = + attribute * - (local:* | xlink:*) { text } +its-any-attribute = attribute * { text } +its-any-element = + element * { (its-any-attribute* | text | its-any-element)* } +its-rules = + + ## Container for global rules + element its:rules { its-rules.content, its-rules.attributes } +its-rules.content = + its-param*, + (its-translateRule + | its-locNoteRule + | its-termRule + | its-dirRule + | its-langRule + | its-withinTextRule + | its-domainRule + | its-textAnalysisRule + | its-localeFilterRule + | its-provRule + | its-locQualityIssueRule + | its-mtConfidenceRule + | its-externalResourceRefRule + | its-targetPointerRule + | its-idValueRule + | its-preserveSpaceRule + | its-allowedCharactersRule + | its-storageSizeRule + | its-foreign-element)* +its-rules.attributes = + its-attribute.version.nons, + (its-attribute.xlink.href, its-attribute.xlink.type?)?, + its-attribute.queryLanguage.nons?, + its-foreign-no-xlink-attribute* +its-param = + + ## Declaration of variable used in selectors + element its:param { its-param.content, its-param.attributes } +its-param.content = text +its-param.attributes = + attribute name { xsd:string }, + its-foreign-attribute* +its-local.attributes = + its-attribute.translate? + & its-attribute.dir? + & ((its-attribute.locNote | its-attribute.locNoteRef), + its-attribute.locNoteType?)? + & (its-attribute.term, + its-attribute.termInfoRef?, + its-attribute.termConfidence?)? + & its-attribute.withinText? + & (its-attribute.taConfidence? + & (its-attribute.taClassRef? + & ((its-attribute.taSource, its-attribute.taIdent) + | its-attribute.taIdentRef)?))? + & (its-attribute.localeFilterList, its-attribute.localeFilterType?)? + & (((its-attribute.person | its-attribute.personRef)? + & (its-attribute.org | its-attribute.orgRef)? + & (its-attribute.tool | its-attribute.toolRef)? + & (its-attribute.revPerson | its-attribute.revPersonRef)? + & (its-attribute.revOrg | its-attribute.revOrgRef)? + & (its-attribute.revTool | its-attribute.revToolRef)? + & its-attribute.provRef?) + | its-attribute.provenanceRecordsRef)? + & (its-attribute.locQualityIssuesRef + | ((its-attribute.locQualityIssueType? + & its-attribute.locQualityIssueComment?) + & its-attribute.locQualityIssueSeverity? + & its-attribute.locQualityIssueProfileRef? + & its-attribute.locQualityIssueEnabled?))? + & (((its-attribute.locQualityRatingScore, + its-attribute.locQualityRatingScoreThreshold?) + | (its-attribute.locQualityRatingVote, + its-attribute.locQualityRatingVoteThreshold?)), + its-attribute.locQualityRatingProfileRef?)? + & its-attribute.mtConfidence? + & its-attribute.allowedCharacters? + & (its-attribute.storageSize, + its-attribute.storageEncoding?, + its-attribute.lineBreakType?)? + & its-attribute.annotatorsRef? +its-local.nons.attributes = + its-attribute.translate.nons? + & its-attribute.dir.nons? + & ((its-attribute.locNote.nons | its-attribute.locNoteRef.nons), + its-attribute.locNoteType.nons?)? + & (its-attribute.term.nons, + its-attribute.termInfoRef.nons?, + its-attribute.termConfidence.nons?)? + & its-attribute.withinText.nons? + & (its-attribute.taConfidence.nons? + & (its-attribute.taClassRef.nons? + & ((its-attribute.taSource.nons, its-attribute.taIdent.nons) + | its-attribute.taIdentRef.nons)?))? + & (its-attribute.localeFilterList.nons, + its-attribute.localeFilterType.nons?)? + & (((its-attribute.person.nons | its-attribute.personRef.nons)? + & (its-attribute.org.nons | its-attribute.orgRef.nons)? + & (its-attribute.tool.nons | its-attribute.toolRef.nons)? + & (its-attribute.revPerson.nons + | its-attribute.revPersonRef.nons)? + & (its-attribute.revOrg.nons | its-attribute.revOrgRef.nons)? + & (its-attribute.revTool.nons | its-attribute.revToolRef.nons)? + & its-attribute.provRef.nons?) + | its-attribute.provenanceRecordsRef.nons)? + & (its-attribute.locQualityIssuesRef.nons + | ((its-attribute.locQualityIssueType.nons? + & its-attribute.locQualityIssueComment.nons?) + & its-attribute.locQualityIssueSeverity.nons? + & its-attribute.locQualityIssueProfileRef.nons? + & its-attribute.locQualityIssueEnabled.nons?))? + & (((its-attribute.locQualityRatingScore.nons, + its-attribute.locQualityRatingScoreThreshold.nons?) + | (its-attribute.locQualityRatingVote.nons, + its-attribute.locQualityRatingVoteThreshold.nons?)), + its-attribute.locQualityRatingProfileRef.nons?)? + & its-attribute.mtConfidence.nons? + & its-attribute.allowedCharacters.nons? + & (its-attribute.storageSize.nons, + its-attribute.storageEncoding.nons?, + its-attribute.lineBreakType.nons?)? + & its-attribute.annotatorsRef.nons? +its-span = + + ## Inline element to contain ITS information + element its:span { its-span.content, its-span.attributes } +its-span.content = (text | its-span)* +its-span.attributes = its-local.nons.attributes & its-foreign-attribute* +its-translateRule = + + ## Rule about the Translate data category + element its:translateRule { + its-translateRule.content, its-translateRule.attributes + } +its-translateRule.content = empty +its-translateRule.attributes = + its-attribute.selector, + its-attribute.translate.nons, + its-foreign-attribute* +its-locNoteRule = + + ## Rule about the Localization Note data category + element its:locNoteRule { + its-attribute.selector, + its-attribute.locNoteType.nons, + (its-locNote + | its-attribute.locNotePointer.nons + | its-attribute.locNoteRef.nons + | its-attribute.locNoteRefPointer.nons), + its-foreign-attribute* + } +its-attribute.locNotePointer.nons = + attribute locNotePointer { its-relative-selector.type } +its-attribute.locNoteRefPointer.nons = + attribute locNoteRefPointer { its-relative-selector.type } +its-locNote = + + ## Localization note + element its:locNote { its-locNote.content, its-locNote.attributes } +its-locNote.content = (text | its-span)* +its-locNote.attributes = + its-local.nons.attributes, its-foreign-attribute* +its-termRule = + + ## Rule about the Terminology data category + element its:termRule { its-termRule.content, its-termRule.attributes } +its-termRule.content = empty +its-termRule.attributes = + its-attribute.selector, + its-attribute.term.nons, + (its-attribute.termInfoPointer.nons + | its-attribute.termInfoRef.nons + | its-attribute.termInfoRefPointer.nons)?, + its-foreign-attribute* +its-attribute.termInfoPointer.nons = + attribute termInfoPointer { its-relative-selector.type } +its-attribute.termInfoRefPointer.nons = + attribute termInfoRefPointer { its-relative-selector.type } +its-dirRule = + + ## Rule about the Directionality data category + element its:dirRule { its-dirRule.content, its-dirRule.attributes } +its-dirRule.content = empty +its-dirRule.attributes = + its-attribute.selector, its-attribute.dir.nons, its-foreign-attribute* +its-langRule = + + ## Rule about the Language Information data category + element its:langRule { its-langRule.content, its-langRule.attributes } +its-langRule.content = empty +its-langRule.attributes = + its-attribute.selector, + its-attribute.langPointer.nons, + its-foreign-attribute* +its-attribute.langPointer.nons = + attribute langPointer { its-relative-selector.type } +its-withinTextRule = + + ## Rule about the Elements Within Text data category + element its:withinTextRule { + its-withinTextRule.content, its-withinTextRule.attributes + } +its-withinTextRule.content = empty +its-withinTextRule.attributes = + its-attribute.selector, + its-attribute.withinText.nons, + its-foreign-attribute* +its-domainRule = + + ## Rule about the Domain data category + element its:domainRule { + its-domainRule.content, its-domainRule.attributes + } +its-domainRule.content = empty +its-domainRule.attributes = + its-attribute.selector, + its-attribute.domainPointer.nons, + its-attribute.domainMapping.nons?, + its-foreign-attribute* +its-attribute.domainPointer.nons = + attribute domainPointer { its-relative-selector.type } +its-textAnalysisRule = + + ## Rule about the Disambiguation data category + element its:textAnalysisRule { + its-textAnalysisRule.content, its-textAnalysisRule.attributes + } +its-textAnalysisRule.content = empty +its-textAnalysisRule.attributes = + its-attribute.selector, + its-attribute.taClassRefPointer.nons?, + ((its-attribute.taSourcePointer.nons, + its-attribute.taIdentPointer.nons) + | its-attribute.taIdentRefPointer.nons)?, + its-foreign-attribute* +its-attribute.taClassRefPointer.nons = + attribute taClassRefPointer { its-taClassRefPointer.type } +its-attribute.taIdentPointer.nons = + attribute taIdentPointer { its-taIdentPointer.type } +its-attribute.taSourcePointer.nons = + attribute taSourcePointer { its-taSourcePointer.type } +its-attribute.taIdentRefPointer.nons = + attribute taIdentRefPointer { its-taIdentRefPointer.type } +its-localeFilterRule = + + ## Rule about the LocaleFilter data category + element its:localeFilterRule { + its-localeFilterRule.content, its-localeFilterRule.attributes + } +its-localeFilterRule.content = empty +its-localeFilterRule.attributes = + its-attribute.selector, + its-attribute.localeFilterList.nons, + its-attribute.localeFilterType.nons?, + its-foreign-attribute* +its-provRule = + + ## Rule about the Provenance data category + element its:provRule { its-provRule.content, its-provRule.attributes } +its-provRule.content = empty +its-provRule.attributes = + its-attribute.selector, + its-attribute.provenanceRecordsRefPointer.nons, + its-foreign-attribute* +its-attribute.provenanceRecordsRefPointer.nons = + attribute provenanceRecordsRefPointer { its-relative-selector.type } +its-externalResourceRefRule = + + ## Rule about the External Resource data category + element its:externalResourceRefRule { + its-externalResourceRefRule.content, + its-externalResourceRefRule.attributes + } +its-externalResourceRefRule.content = empty +its-externalResourceRefRule.attributes = + its-attribute.selector, + its-attribute.externalResourceRefPointer.nons, + its-foreign-attribute* +its-attribute.externalResourceRefPointer.nons = + attribute externalResourceRefPointer { its-relative-selector.type } +its-targetPointerRule = + + ## Rule about the Target Pointer data category + element its:targetPointerRule { + its-targetPointerRule.content, its-targetPointerRule.attributes + } +its-targetPointerRule.content = empty +its-targetPointerRule.attributes = + its-attribute.selector, + its-attribute.targetPointer.nons, + its-foreign-attribute* +its-attribute.targetPointer.nons = + attribute targetPointer { its-relative-selector.type } +its-idValueRule = + + ## Rule about the Id Value data category + element its:idValueRule { + its-idValueRule.content, its-idValueRule.attributes + } +its-idValueRule.content = empty +its-idValueRule.attributes = + its-attribute.selector, + its-attribute.idValue.nons, + its-foreign-attribute* +its-attribute.idValue.nons = + attribute idValue { its-xpath-expression.type } +its-preserveSpaceRule = + + ## Rule about the Preserve Space data category + element its:preserveSpaceRule { + its-preserveSpaceRule.content, its-preserveSpaceRule.attributes + } +its-preserveSpaceRule.content = empty +its-preserveSpaceRule.attributes = + its-attribute.selector, + its-attribute.space.nons, + its-foreign-attribute* +its-attribute.space.nons = attribute space { "default" | "preserve" } +its-locQualityIssueRule = + + ## Rule about the Localization Quality Issue data category + element its:locQualityIssueRule { + its-locQualityIssueRule.content, its-locQualityIssueRule.attributes + } +its-locQualityIssueRule.content = empty +its-locQualityIssueRule.attributes = + its-attribute.selector, + ((its-attribute.locQualityIssuesRef.nons + | its-attribute.locQualityIssuesRefPointer.nons) + | ((its-attribute.locQualityIssueType.nons + | its-attribute.locQualityIssueComment.nons)+, + its-attribute.locQualityIssueSeverity.nons?, + its-attribute.locQualityIssueProfileRef.nons?, + its-attribute.locQualityIssueEnabled.nons?)), + its-foreign-attribute* +its-attribute.locQualityIssuesRefPointer.nons = + attribute locQualityIssuesRefPointer { its-relative-selector.type } +its-mtConfidenceRule = + + ## Rule about the MT Confidence data category + element its:mtConfidenceRule { + its-mtConfidenceRule.content, its-mtConfidenceRule.attributes + } +its-mtConfidenceRule.content = empty +its-mtConfidenceRule.attributes = + its-attribute.selector, + its-attribute.mtConfidence.nons, + its-foreign-attribute* +its-allowedCharactersRule = + + ## Rule about the Allowed Characters data category + element its:allowedCharactersRule { + its-allowedCharactersRule.content, + its-allowedCharactersRule.attributes + } +its-allowedCharactersRule.content = empty +its-allowedCharactersRule.attributes = + its-attribute.selector, + (its-attribute.allowedCharacters.nons + | its-attribute.allowedCharactersPointer.nons), + its-foreign-attribute* +its-attribute.allowedCharactersPointer.nons = + attribute allowedCharactersPointer { its-relative-selector.type } +its-storageSizeRule = + + ## Rule about the Allowed Characters data category + element its:storageSizeRule { + its-storageSizeRule.content, its-storageSizeRule.attributes + } +its-storageSizeRule.content = empty +its-storageSizeRule.attributes = + its-attribute.selector, + (its-attribute.storageSize.nons + | its-attribute.storageSizePointer.nons), + (its-attribute.storageEncoding.nons + | its-attribute.storageEncodingPointer.nons)?, + its-attribute.lineBreakType.nons?, + its-foreign-attribute* +its-attribute.storageSizePointer.nons = + attribute storageSizePointer { its-relative-selector.type } +its-attribute.storageEncodingPointer.nons = + attribute storageEncodingPointer { its-relative-selector.type } +its-standoff = its-provenanceRecords | its-locQualityIssues +its-provenanceRecords = + + ## Standoff markup for Provenance data category + element its:provenanceRecords { + its-provenanceRecord+, + attribute xml:id { xsd:ID }, + its-attribute.version.nons?, + its-foreign-no-xml-id-attribute* + } +its-provenanceRecord = + + ## Provenance record used in Provenance standoff markup + element its:provenanceRecord { its-provenanceRecord.attributes } +its-provenanceRecord.attributes = + (its-attribute.person.nons | its-attribute.personRef.nons)? + & (its-attribute.org.nons | its-attribute.orgRef.nons)? + & (its-attribute.tool.nons | its-attribute.toolRef.nons)? + & (its-attribute.revPerson.nons | its-attribute.revPersonRef.nons)? + & (its-attribute.revOrg.nons | its-attribute.revOrgRef.nons)? + & (its-attribute.revTool.nons | its-attribute.revToolRef.nons)? + & its-attribute.provRef.nons? + & its-foreign-attribute* +its-locQualityIssues = + + ## Standoff markup for Localization Quality Issue data category + element its:locQualityIssues { + its-locQualityIssue+, + attribute xml:id { xsd:ID }, + its-attribute.version.nons?, + its-foreign-no-xml-id-attribute* + } +its-locQualityIssue = + + ## Issue recorded in Localization Quality standoff markup + element its:locQualityIssue { its-locQualityIssue.attributes } +its-locQualityIssue.attributes = + its-attribute.locQualityIssueType.nons? + & its-attribute.locQualityIssueComment.nons? + & its-attribute.locQualityIssueSeverity.nons? + & its-attribute.locQualityIssueProfileRef.nons? + & its-attribute.locQualityIssueEnabled.nons? + & its-foreign-attribute* +its-attribute.dir = empty +its-foreign-element = + element * - its:* { + (its-foreign-no-xml-id-attribute* | text | its-foreign-element)* + } +# Add local ITS attributes to all DocBook elements + +# Allow its:rules inside info element diff --git a/catalog/docbook5.2/rng/dbits.rng b/catalog/docbook5.2/rng/dbits.rng new file mode 100755 index 0000000..253b169 --- /dev/null +++ b/catalog/docbook5.2/rng/dbits.rng @@ -0,0 +1,20352 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Any attribute, including any attribute in any namespace + + + +
+ + + Designates the computer or chip architecture to which the element applies + + + + + Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + + + + + provides a standard place for application-specific effectivity + + + + + Indicates standards conformance characteristics of the element + + + + + Indicates the operating system to which the element is applicable + + + + + Indicates the editorial revision to which the element belongs + + + + + Indicates something about the security level associated with the element to which it applies + + + + + Indicates the level of user experience for which the element applies + + + + + Indicates the computer vendor to which the element applies + + + + + Indicates the word size (width in bits) of the computer architecture to which the element applies + + + + + Indicates the output format (for example, print or epub) to which the element applies + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Points to the element whose content is to be used as the text of the link + + + + + + Points to an internal link target by identifying the value of its xml:id attribute + + + + + + Points to one or more internal link targets by identifying the value of their xml:id attributes + + + + + + Identifies a link target with a URI + + + + + + Identifies the XLink link type + simple + An XLink simple link type + + + + + Identifies the XLink role of the link + + + + + + Identifies the XLink arcrole of the link + + + + + + Identifies the XLink title of the link + + + + + new + An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + replace + An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + embed + An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + other + The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink show behavior of the link + + + + + + onLoad + An application should traverse to the ending resource immediately on loading the starting resource. + onRequest + An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + other + The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink actuate behavior of the link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identifies the unique ID value of the element + + + + + + Specifies the DocBook version of the element and its descendants + + + + + Specifies the natural language of the element and its descendants + + + + + Specifies the base URI of the element and its descendants + + + + + + Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + + + + + Provides the text that is to be generated for a cross reference to the element + + + + + Specifies a keyword or keywords identifying additional style information + + + + + changed + The element has been changed. + added + The element is new (has been added to the document). + deleted + The element has been deleted. + off + Explicitly turns off revision markup for this element. + + + + + Identifies the revision status of the element + + + + + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + + Identifies the direction of text in an element + + + + + + The RDFa Lite vocab + + + + + + The RDFa Lite typeof + + + + + The RDFa Lite property + + + + + The RDFa Lite resource + + + + + The RDFa Lite prefix + + + + + + + + + + + + + + + + + + + + + + + + none + No ID fixup strategy + suffix + ID fixup by concatenating suffixes + auto + ID fixup by creating unique values + + + + + The transclusion ID fixup strategy + + + + + + The transclusion suffix to use when the suffix ID fixup strategy is employed + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + + + + user + No link scope adjustments are made + local + The link scopes are adjusted with the suffix property + near + The link scopes are adjusted based on proximity + global + The link scopes are adjusted based on document order + + + + + The transclusion link scope adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the format of the data + + + + + Indentifies the location of the data by URI + + + + Identifies the location of the data by external identifier (entity name) + + + + + + + continues + Line numbering continues from the immediately preceding element with the same name. + restarts + Line numbering restarts (begins at 1, usually). + + + + + Determines whether line numbering continues from the previous element or restarts + + + + + + numbered + Lines are numbered. + unnumbered + Lines are not numbered. + + + + + Determines whether lines are numbered + + + + + + Specifies the initial line number + + + + + + Identifies the language (i.e. programming language) of the verbatim content + + + + + Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + preserve + Whitespace must be preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies an identifying string for presentation purposes + + + + + Specifies the width (in characters) of the element + + + + + + compact + The spacing should be "compact". + normal + The spacing should be "normal". + + + + + Specifies (a hint about) the spacing of the content + + + + + + 0 + The element should be rendered in the current text flow (with the flow column width). + 1 + The element should be rendered across the full text page. + + + + + Indicates if the element is rendered across the column or the page + + + + + + Identifies the language (i.e. programming language) of the content + + + + + optional + The content describes an optional step or steps. + required + The content describes a required step or steps. + + + + + Specifies if the content is required or optional + + + + + + Specifies style information to be used when rendering the float + + + + + Specifies the width of the element + + + + + Specifies the depth of the element + + + + + Specifies the width of the content rectangle + + + + + Specifies the depth of the content rectangle + + + + + 0 + False (do not scale-to-fit; anamorphic scaling may occur) + 1 + True (scale-to-fit; anamorphic scaling is forbidden) + + + + + Specifies the scaling factor + + + + + + Specifies a classid for a media object player + + + + + Specifies the autoplay setting for a media object player + + + + + center + Centered horizontally + char + Aligned horizontally on the specified character + justify + Fully justified (left and right margins or edges) + left + Left aligned + right + Right aligned + + + + + bottom + Aligned on the bottom of the region + middle + Centered vertically + top + Aligned on the top of the region + + + + + doi + A digital object identifier. + isbn + An international standard book number. + isrn + An international standard technical report number (ISO 10444). + issn + An international standard serial number. + istc + An international standard text code. + libraryofcongress + A Library of Congress reference number. + pubsnumber + A publication number (an internal number or possibly organizational standard). + uri + A Uniform Resource Identifier + + + + + + Identifies the kind of bibliographic identifier + + + + + + + Identifies the nature of the non-standard bibliographic identifier + + + + + + + Identifies the kind of bibliographic identifier + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + article + An article + bbs + A bulletin board system + book + A book + cdrom + A CD-ROM + chapter + A chapter (as of a book) + dvd + A DVD + emailmessage + An email message + gopher + A gopher page + journal + A journal + manuscript + A manuscript + newsposting + A posting to a newsgroup + part + A part (as of a book) + refentry + A reference entry + section + A section (as of a book or article) + series + A series + set + A set (as of books) + webpage + A web page + wiki + A wiki page + other + Some other kind of work + + + + + + + + + Identifies the nature of the published work + + + + + + + Identifies the nature of some other kind of published work + + + + + + + Identifies that this is some other kind of published work + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text of the title of a section of a document or of a formal block-level element + + + + + + +
+
+ + + + + + + + + + + + + + + The abbreviation of a title + + + + + + +
+
+ + + + + + + + + + + + + + + The subtitle of a document + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + Identifies the controlled vocabulary used by this set's terms + + + + + + + + + + + + + + + + + + A set of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + Specifies a ranking for this subject relative to other subjects in the same set + + + + + + + + + + + + + + + + + One of a group of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + + + + + + + + + + A term in a group of terms describing the subject matter of a document + + + + +
+
+ + + + + + + + + + + + + + + A set of keywords describing the content of a document + + + + + + +
+
+ + + + + + + + + + + + + + + One of a set of keywords describing the content of a document + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + Identifies the type of procedure + + + + + + + + + + + + + + + + + + + + + A list of operations to be performed in a well-defined sequence + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A unit of action in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + Alternative steps in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for steps that occur within steps in a procedure + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for identifying the results of a procedure or step + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + A portion of a document that is isolated from the main narrative flow + + Element exclusion + + sidebar must not occur among the children or descendants of sidebar + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short description or note about a person + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A quotation set off from the main text + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The source of a block quote or epigraph + + + + + + + + + + + + +
+
+ + + sect1 + Render as a first-level section + sect2 + Render as a second-level section + sect3 + Render as a third-level section + sect4 + Render as a fourth-level section + sect5 + Render as a fifth-level section + + + + + + Indicates how the bridge head should be rendered + + + + + + + Identifies the nature of the non-standard rendering + + + + + + + Indicates how the bridge head should be rendered + other + Identifies a non-standard rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + A free-floating heading + + + + + + +
+
+ + + + + + + + + + + + + + + A remark (or comment) intended for presentation in a draft manuscript + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short inscription at the beginning of a document or component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + Identifies the desired footnote mark + + + + + + + + + + + + + + + + + + A footnote + + Element exclusion + + footnote must not occur among the children or descendants of footnote + + + + Element exclusion + + example must not occur among the children or descendants of footnote + + + + Element exclusion + + figure must not occur among the children or descendants of footnote + + + + Element exclusion + + table must not occur among the children or descendants of footnote + + + + Element exclusion + + equation must not occur among the children or descendants of footnote + + + + Element exclusion + + sidebar must not occur among the children or descendants of footnote + + + + Element exclusion + + task must not occur among the children or descendants of footnote + + + + Element exclusion + + epigraph must not occur among the children or descendants of footnote + + + + Element exclusion + + caution must not occur among the children or descendants of footnote + + + + Element exclusion + + danger must not occur among the children or descendants of footnote + + + + Element exclusion + + important must not occur among the children or descendants of footnote + + + + Element exclusion + + note must not occur among the children or descendants of footnote + + + + Element exclusion + + tip must not occur among the children or descendants of footnote + + + + Element exclusion + + warning must not occur among the children or descendants of footnote + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph with a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph that contains only text and inline markup, no block elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the type of mark to be used on items in this list + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a bullet or other dingbat + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + continues + Specifies that numbering should begin where the preceding list left off + restarts + Specifies that numbering should begin again at 1 + + + + + Indicates how list numbering should begin relative to the immediately preceding list + + + + + + Specifies the initial line number + + + + + + ignore + Specifies that numbering should ignore list nesting + inherit + Specifies that numbering should inherit from outer-level lists + + + + + Indicates whether or not item numbering should be influenced by list nesting + + + + + + arabic + Specifies Arabic numeration (1, 2, 3, …) + upperalpha + Specifies upper-case alphabetic numeration (A, B, C, …) + loweralpha + Specifies lower-case alphabetic numeration (a, b, c, …) + upperroman + Specifies upper-case Roman numeration (I, II, III, …) + lowerroman + Specifies lower-case Roman numeration (i, ii, iii …) + + + + + Indicates the desired numeration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a sequentially incremented label + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Specifies the keyword for the type of mark that should be used on this + item, instead of the mark that would be used by default + + + + + + + + + + + + + + + + + + + + + A wrapper for the elements of a list item + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A segmented list, a list of sets of elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of an element of a list item in a segmented list + + + + + + +
+
+ + + + + + + + + + + + + + + A list item in a segmented list + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a list item in a segmented list + + + + + + +
+
+ + + + + + horiz + A tabular presentation in row-major order. + vert + A tabular presentation in column-major order. + inline + An inline presentation, usually a comma-delimited list. + + + + + Specifies the type of list presentation + + + + + + Specifies the number of columns for horizontal or vertical presentation + + + + + + + + + + + + + + + + + + + + + An undecorated list of single words or short phrases + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a simple list + + + + + + +
+
+ + + + + + Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is composed of a set of one or more terms and an associated description + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for a set of terms and the associated description in a variable list + + + + + + + +
+
+ + + + + + + + + + + + + + + The word or phrase being defined or described in a variable list + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal example, with a title + + Element exclusion + + example must not occur among the children or descendants of example + + + + Element exclusion + + figure must not occur among the children or descendants of example + + + + Element exclusion + + table must not occur among the children or descendants of example + + + + Element exclusion + + equation must not occur among the children or descendants of example + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed example without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + monospaced + The literal layout should be formatted with a monospaced font + normal + The literal layout should be formatted with the current font + + + + + Specifies the class of literal layout + + + + + + + + + + + + + + + + + + + A block of text in which line breaks and white space are to be reproduced faithfully + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + Text that a user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A representation of what the user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal figure, generally an illustration, with a title + + Element exclusion + + example must not occur among the children or descendants of figure + + + + Element exclusion + + figure must not occur among the children or descendants of figure + + + + Element exclusion + + table must not occur among the children or descendants of figure + + + + Element exclusion + + equation must not occur among the children or descendants of figure + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A untitled figure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A displayed media object (video, audio, image, etc.) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + An inline media object (video, audio, image, and so on) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for video data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for audio data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for image data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a text description of an object and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external video data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external audio data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the image data + + + + + + + + + Specifies the vertical alignment of the image data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external image data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the encoding of the text in the external file + + + + + + + + + + + + + + + + + + + + Pointer to external text data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + Specifies the name of the parameter + + + + + Specifies the value of the parameter + + + + + Specifies the type of the value of the parameter + + + + + + + + + + + + + + + + + + Application specific parameters for a media player + + + + +
+
+ + + + + + + + + + + + + + + + + + A caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A real-world address, generally a postal address + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A street address in an address + + + + +
+
+ + + + + + + + + + + + + + + A post office box in an address + + + + +
+
+ + + + + + + + + + + + + + + A postal code in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a city in an address + + + + +
+
+ + + + + + + + + + + + + + + A state or province in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a country + + + + +
+
+ + + + + + + + + + + + + + + A telephone number + + + + +
+
+ + + + + + + + + + + + + + + A fax number + + + + +
+
+ + + + + + + + + + + + + + + Uncategorized information in address + + + + +
+
+ + + + + + + + + + + + + + + The institutional affiliation of an individual + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A brief description of an affiliation + + + + +
+
+ + + + + + + + + + + + + + + The title of an individual in an organization + + + + +
+
+ + + consortium + A consortium + corporation + A corporation + informal + An informal organization + nonprofit + A non-profit organization + + + + + Specifies the nature of the organization + + + + + + Specifies the nature of the organization + other + Indicates a non-standard organization class + + + Identifies the non-standard nature of the organization + + + + + + + + + + + + + + + + + + + + + + + + + + The name of an organization + + + + +
+
+ + + + + + + + + + + + + + + A division of an organization + + + + + + +
+
+ + + + + + + + + + + + + + + The page numbers of an article as published + + + + +
+
+ + + + + + + + + + + + + + + The personal name of an individual + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The name of an individual author + + + + +
+
+ + + + + + + + + + + + + + + Wrapper for author information when a document has multiple authors or collaborators + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Identifies a collaborator + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The initials or other short identifier for an author + + + + +
+
+ + + + + + + + + + + + + + + A person and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An organization and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for document meta-information about a conference + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The dates of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The title of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + An identifier, frequently numerical, associated with a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The contract number of a document + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a contract + + + + +
+
+ + + + + + + + + + + + + + + Copyright information about a document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The year of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the individual or organization that holds a copyright + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + Additional content for the cover of a publication + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + The date of publication or revision of a document + + + + +
+
+ + + + + + + + + + + + + + + The name or number of an edition of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the editor of a document + + + + +
+
+ + + + + + + + + + + + + + + + An identifier for a document + + + + +
+
+ + + + + + + + + + + + + + + + A citation of a bibliographic identifier + + + + +
+
+ + + + + + + + + + + + + + + + The source of a document + + + + +
+
+ + + hasformat + The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + haspart + The described resource includes the referenced resource either physically or logically + hasversion + The described resource has a version, edition, or adaptation, namely, the referenced resource + isformatof + The described resource is the same intellectual content of the referenced resource, but presented in another format + ispartof + The described resource is a physical or logical part of the referenced resource + isreferencedby + The described resource is referenced, cited, or otherwise pointed to by the referenced resource + isreplacedby + The described resource is supplanted, displaced, or superceded by the referenced resource + isrequiredby + The described resource is required by the referenced resource, either physically or logically + isversionof + The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + references + The described resource references, cites, or otherwise points to the referenced resource + replaces + The described resource supplants, displaces, or supersedes the referenced resource + requires + The described resource requires the referenced resource to support its function, delivery, or coherence of content + + + + + + Identifies the type of relationship + + + + + + + + Identifies the type of relationship + othertype + The described resource has a non-standard relationship with the referenced resource + + + + A keyword that identififes the type of the non-standard relationship + + + + + + + + + + + + + + + + + + + + + + + + + + The relationship of a document to another + + + + +
+
+ + + dcmipoint + The DCMI Point identifies a point in space using its geographic coordinates + iso3166 + ISO 3166 Codes for the representation of names of countries + dcmibox + The DCMI Box identifies a region of space using its geographic limits + tgn + The Getty Thesaurus of Geographic Names + + + + + + Specifies the type of spatial coverage + + + + + + + + Specifies the type of spatial coverage + otherspatial + Identifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + dcmiperiod + A specification of the limits of a time interval + w3c-dtf + W3C Encoding rules for dates and times—a profile based on ISO 8601 + + + + + + Specifies the type of temporal coverage + + + + + + + + Specifies the type of temporal coverage + othertemporal + Specifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The spatial or temporal coverage of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A statement of legal obligations or requirements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + copyeditor + A copy editor + graphicdesigner + A graphic designer + productioneditor + A production editor + technicaleditor + A technical editor + translator + A translator + indexer + An indexer + proofreader + A proof-reader + coverdesigner + A cover designer + interiordesigner + An interior designer + illustrator + An illustrator + reviewer + A reviewer + typesetter + A typesetter + conversion + A converter (a persons responsible for conversion, not an application) + + + + + + Identifies the nature of the contributor + + + + + + + Identifies the nature of the non-standard contribution + + + + + + + Identifies the nature of the contributor + other + Identifies a non-standard contribution + + + + + + + + + + + + + + + + + + + + + + + + + + A person or entity, other than an author or editor, credited in a document + + + + +
+
+ + + + + + + + + + + + + + + The numbers of the pages in a book, for use in a bibliographic entry + + + + +
+
+ + + + + + + + + + + + + + + A summary of the contributions made to a document by a credited source + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a person + + + + +
+
+ + + + + + + + + + + + + + + A given name of a person + + + + +
+
+ + + + + + + + + + + + + + + The given name of a person + + + + +
+
+ + + + + + + + + + + + + + + An inherited or family name; in western cultures the last name + + + + +
+
+ + + + + + + + + + + + + + + The portion of a person's name indicating a relationship to ancestors + + + + +
+
+ + + + + + + + + + + + + + + A component of a person's name that is not a first name, surname, or lineage + + + + +
+
+ + + + + + + + + + + + + + + The printing history of a document + + + + + + +
+
+ + + + + + + + + + + + + + + The date of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The publisher of a document + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of the publisher of a document + + + + +
+
+ + + + + + + + + + + + + + + Information about a particular release of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A history of the revisions to a document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry describing a single revision in the history of the revisions to a document + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A document revision number + + + + +
+
+ + + + + + + + + + + + + + + A description of a revision to a document + + + + +
+
+ + + + + + + + + + + + + + + A extended description of a revision to a document + + + + + + +
+
+ + + + + + + + + + + + + + + Numbers of the volumes in a series of books + + + + +
+
+ + + + + + + + + + + + + + + The volume number of a document in a set (as of books in a set or articles in a journal) + + + + +
+
+ + + + + + + + + + + + + + + The number of an issue of a journal + + + + +
+
+ + + + + + A name for the metadata element + + + + + The metadata content + + + + + + + + + + + + + + + + + A generic metadata element + + + + + + + + A generic metadata element + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A software or application package + + + + +
+
+ + + + + + + + + + + + + + + An email address + + + + +
+
+ + + + + + + + + + + + + + + A comment on a line in a verbatim listing + + + + +
+
+ + + command + A command + function + A function + option + An option + + + + + Identifies the class of parameter + + + + + + + + + + + + + + + + + + + + + A value or a symbolic reference to a value + + + + +
+ + + + + + +
+ + + command + A command + function + A function + option + An option + parameter + A parameter + + + + + Identifies the nature of the replaceable text + + + + + + + + + + + + + + + + + + + + + Content that may or must be replaced by the user + + + + + + +
+
+ + + + Identifies the type of URI specified + + + + + + + + + + + + + + + + + + + A Uniform Resource Identifier + + + + +
+
+ + + + + + + + + + + + + + + An abbreviation, especially one followed by a period + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An often pronounceable word made from the initial (or selected) letters of a name or phrase + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An inline bibliographic reference to another published work + + + + + + +
+
+ + + + + + + + + + + + + + + A citation to a reference page + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A reference volume number + + + + +
+
+ + + + + + Identifies the nature of the publication being cited + + + + + + Identifies the nature of some other kind of publication being cited + + + + + + + Identifies that this is some other kind of publication being cited + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The title of a cited work + + + + + + +
+
+ + + + + + + + + + + + + + + Emphasized text + + + + + + +
+
+ + + A limited span of emphasized text + + + + +
+
+ + + + + + + + + + + + + + + A word or phrase in a language other than the primary language of the document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A limited word or phrase in a language other than the primary language of the document + + + + +
+
+ + + + + + + + + + + + + + + A span of text + + + + + + +
+
+ + + A limited span of text + + + + +
+
+ + + + + + + + + + + + + + + An inline quotation + + + + + + +
+
+ + + + + + + + + + + + + + + A limited inline quotation + + + + +
+
+ + + + + + + + + + + + + + + A subscript (as in Hâ‚‚O, the molecular formula for water) + + + + +
+
+ + + + + + + + + + + + + + + A superscript (as in x², the mathematical notation for x multiplied by itself) + + + + +
+
+ + + copyright + A copyright + registered + A registered copyright + service + A service + trade + A trademark + + + + + Identifies the class of trade mark + + + + + + + + + + + + + + + + + + + + + A trademark + + + + +
+
+ + + + + + + + + + + + + + + A word meant specifically as a word and not representing anything else + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a footnote (a footnote mark) + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A cross reference to another part of the document + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A hypertext link + + + + + + +
+
+ + + + + + + + + Holds additional information that may be used by the application when resolving the link + + + + + Specifies the URI of the document in which the link target appears + + + + + + Specifies the location of the link target in the document + + + + + Identifies application-specific customization of the link behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + A link that addresses its target indirectly + + + + + + +
+
+ + + + + + + + + + + + + + A spot in the document + + + + +
+
+ + + + + + + + + + + + + + A text-only annotation, often used for accessibility + + + + + + + + + +
+
+ + + Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A group of formal objects, for example subfigures + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies the editorial or publication status of the element on which it occurs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + The dedication of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Acknowledgements of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Text at the back of a book describing facts about its production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An appendix in a book or article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A chapter, as of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Introductory matter preceding the first chapter of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An introduction to the contents of a part + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + legal + A section of legal obligations or requirements + + + + Identifies the nature of the section + + + + + + Identifies a non-standard section class + + + + + + + Indicates that a non-standard section class is applied + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a document with no subdivisions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + faq + A collection of frequently asked questions. + journalarticle + An article in a journal or other periodical. + productsheet + A description of a product. + specification + A specification. + techreport + A technical report. + whitepaper + A white paper. + + + + + Identifies the nature of the article + + + + + + Identifies the nature of the non-standard article + + + + + + + Identifies the nature of the article + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies one or more annotations that apply to this element + + +
+ + + + + + Identifies one or more elements to which this annotation applies + + + + + + + + + + + + + + + + + + + An annotation + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Identifies the XLink extended link type + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + extended + An XLink extended link type + + + + + Identifies the XLink locator link type + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + locator + An XLink locator link type + + + + + Identifies the XLink arc link type + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + arc + An XLink arc link type + + + + + Identifies the XLink resource link type + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + resource + An XLink resource link type + + + + + Identifies the XLink title link type + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + title + An XLink title link type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the XLink traversal-from + + + + + + Specifies the XLink label + + + + + + Specifies the XLink traversal-to + + + +
+ + + + + + + + + + + + Identifies the XLink link type + extended + An XLink extended link + + + + + + + + + + + + + An XLink extended link + + + + + + + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + locator + An XLink locator link + + + + + + + + + + + + + + + + + An XLink locator in an extendedlink + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + arc + An XLink arc link + + + + + + + + + + + + + + + + + + + + + + + + + An XLink arc in an extendedlink + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A top-level section of document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect3 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect4 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of reference entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A reference page (originally a UNIX man-style reference page) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Meta-information for a reference entry + + + + + + + + + + + + + + + + +
+ + + source + The name of the software product or component to which this topic applies + version + The version of the software product or component to which this topic applies + manual + The section title of the reference page (e.g., User Commands) + sectdesc + The section title of the reference page (believed synonymous with "manual" but in wide use) + software + The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + + + + + + Identifies the kind of miscellaneous information + + + + + + + Identifies the nature of non-standard miscellaneous information + + + + + + Identifies the kind of miscellaneious information + other + Indicates that the information is some 'other' kind. + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + Meta-information for a reference entry other than the title and volume number + + + + +
+
+ + + + + + + + + + + + + + + The name, purpose, and classification of a reference page + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A description of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The name of (one of) the subject(s) of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A short (one sentence) synopsis of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The scope or other indication of applicability of a reference entry + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A syntactic synopsis of the subject of the reference page + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section in a refentry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A major subsection of a reference entry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for a list of glossary entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + + + + + + + + + + + + + + + + + An entry in a glossary or glosslist + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies a list of keywords for the definition + + + + + + + + + + + + + + + + + A definition in a glossentry + + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry + to another + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry to another + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term, with limited content + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + An inline definition of a term + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + + + + + +
+ + + Identifies the relationship between the bibliographic elemnts + + +
+ + + + + + + + + + + + + + + + + + + + + A raw entry in a bibliography + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked entry in a bibliography + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A raw container for related bibliographic information + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked container for related bibliographic information + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Untyped bibliographic information + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a list of bibliography entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + The units (for example, pages) used to identify the beginning and ending of a reference. + + + + + + Identifies the beginning of a reference; the location within the work that is being referenced. + + + + + + Identifies the end of a reference. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cross-reference to a bibliographic entry + + + + +
+ + + normal + Normal + preferred + Preferred + + + + + Specifies the significance of the term + + + + + + Specifies the IDs of the elements to which this term applies + + + + + + Indicates the page on which this index term occurs in some version of the printed document + + + + + all + All indexes + global + The global index (as for a combined index of a set of books) + local + The local index (the index for this document only) + + + + + Specifies the scope of the index term + + + + + + Specifies the string by which the term is to be sorted; if unspecified, the term content is used + + + + + Specifies the target index for this term + + +
+ + + + + + + + + + + + + + + A set of index terms in the meta-information of a document + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Identifies the class of index term + singular + A singular index term + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term + + + + +
+
+ + + + + + Identifies the class of index term + startofrange + The start of a range + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term that covers a range + + + + +
+
+ + + + + + Identifies the class of index term + endofrange + The end of a range + + + + + Points to the start of the range + + + + + + + + + + + + + + + + + Identifies the end of a range associated with an indexed term + + Indexterm 'startref' type constraint + + @startref on indexterm must point to an indexterm. + @startref on indexterm must point to a startofrange indexterm. + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary word or phrase under which an index term should be sorted + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A secondary word or phrase in an index term + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A tertiary word or phrase in an index term + + + + + + +
+
+ + + + + + Identifies the class of 'see' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader instead to another entry in the index + + + + + + +
+
+ + + + + + Identifies the class of 'seealso' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader also to another entry in the index + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a book or part of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a set of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in an index + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry in an index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + A primary term in an index entry, not in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A secondary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A tertiary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See +entry in an index, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See also + entry in an index, rather than in the text + + + + + + +
+ + + Indicates the page on which this element occurs in some version of the printed document + + +
+ + + + + + + + + + + + + + + + + + A table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + A division in a table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A component title in a table of contents + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + A task to be completed + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary of a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The prerequisites for a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + Information related to a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + calspair + Coordinates expressed as a pair of CALS graphic coordinates. + linecolumn + Coordinates expressed as a line and column. + linecolumnpair + Coordinates expressed as a pair of lines and columns. + linerange + Coordinates expressed as a line range. + + + + + + Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + for graphics and linecolumn + for line-oriented elements. + + + + + + + + Indicates that non-standard units are used for this area +. In this case otherunits + must be specified. + other + Coordinates expressed in some non-standard units. + + + + Identifies the units used in the coords + attribute when the units + attribute is other +. This attribute is forbidden otherwise. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A list of callout +s + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Identifies the areas described by this callout. + + + + + + + + + + + + + + + + A called out + description of a marked area + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A program listing with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A collection of regions in a graphic or code example + + + + + + + + + +
+
+ + + + + + Point to the callout +s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + + + + + + Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + + + + + Provides the coordinates of the area. The coordinates must be interpreted using the units + specified. + + + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A set of related areas in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A screen with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for an image object with callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + The location of a callout embedded in text + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a co + + + + +
+
+ + + + + + + + + + + + + + + + + + A set of EBNF productions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A production in a set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The left-hand side of an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + The right-hand side of an EBNF production + + + + + + + + + + + +
+
+ + + + + + Specifies a URI that points to a production +where the nonterminal + is defined + + + + + + + + + + + + + + + + A non-terminal in an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + A constraint in an EBNF production + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + + + +
+
+ + + + + + + + + + + + + + + A cross-reference to an EBNF production + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The definition of a constraint in an EBNF production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Specifies the alignment character when align + is set to char +. + + + + + Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + when align + is set to char +. + + 0 + 100 + + + + + + Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + + all + Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + bottom + Frame only the bottom of the table. + none + Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + sides + Frame the left and right sides of the table. + top + Frame the top of the table. + topbot + Frame the top and bottom of the table. + + + + + + Specifies the presence or absence of the column separator + + 0 + No column separator rule. + 1 + Provide a column separator rule on the right + + + + + + Specifies the presence or absence of the row separator + + 0 + No row separator rule. + 1 + Provide a row separator rule below + + + + + + Specifies the orientation of the table + + land + 90 degrees counter-clockwise from the rest of the text flow. + port + The same orientation as the rest of the text flow. + + + + + + Specifies the table style + + + + + Indicates whether or not the entries in the first column should be considered row headers + + firstcol + Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + headers + Indicates that row headers are identified by use of the headers attribute on entries in the table. + norowheader + Indicates that entries in the first column have no special significance with respect to column headers. + + + + + + Specifies the horizontal alignment of text in an entry. + + center + Centered. + char + Aligned on a particular character. + justify + Left and right justified. + left + Left justified. + right + Right justified. + + + + + + Specifies the vertical alignment of text in an entry. + + bottom + Aligned on the bottom of the entry. + middle + Aligned in the middle. + top + Aligned at the top of the entry. + + + + + + Specifies a column specification by name. + + + + + Specifies a starting column by name. + + + + + Specifies a span by name. + + + + + + Specifies a starting column by name. + + + Specifies an ending column by name. + + + + + + + + + + + + + + Provides a name for a column specification. + + + + + Provides a name for a span specification. + + +
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for the main content of a table, or part of a table + + + + + + + + + + + + + + + + +
+
+ + + + + + The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + + + + + + Specifies the width of the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications for a column in a table + + + + +
+
+ + + + + + Specifies a starting column by name. + + + + + Specifies an ending column by name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formatting information for a spanned column in a table + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table footer consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + + + + +
+
+ + + + + + Specifies the number of additional rows which this entry occupies. Defaults to zero. + + + + + + Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + + 0 + Do not rotate the cell. + 1 + Rotate the cell 90 degrees counter-clockwise. + + + + + + Specifies the scope of a header. + + row + Applies to the row + col + Applies to the column + rowgroup + Applies to the row group + colgroup + Applies to the column group + + + + + + Specifies the entry or entries which serve as headers for this element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cell in a table + + Element exclusion + + table must not occur among the children or descendants of entry + + + + Element exclusion + + informaltable must not occur among the children or descendants of entry + + + + + + + + + + + + + +
+
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the entry table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subtable appearing in place of an entry in a table + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the short or long title should be used in a List of Tables + + 0 + Indicates that the full title should be used. + 1 + Indicates that the short short title (titleabbrev) should be used. + + + + + + Indicates if the table should appear in a List of Tables + + 0 + Indicates that the table should not occur in the List of Tables. + 1 + Indicates that the table should appear in the List of Tables. + + + + + + + + + + + + + + A formal table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + + + + + This attribute specifies style information for the current element. + + + + + This attribute offers advisory information about the element for which it is set. + + + + + + + + This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + + + + + + + + Occurs when the pointing device button is clicked over an element. + + + + + Occurs when the pointing device button is double clicked over an element. + + + + + Occurs when the pointing device button is pressed over an element. + + + + + Occurs when the pointing device button is released over an element. + + + + + Occurs when the pointing device is moved onto an element. + + + + + Occurs when the pointing device is moved while it is over an element. + + + + + Occurs when the pointing device is moved away from an element. + + + + + Occurs when a key is pressed and released over an element. + + + + + Occurs when a key is pressed down over an element. + + + + + Occurs when a key is released over an element. + + + + + + + + + + + + + + + + + Specifies the alignment of data and the justification of text in a cell. + + left + Left-flush data/Left-justify text. This is the default value for table data. + center + Center data/Center-justify text. This is the default value for table headers. + right + Right-flush data/Right-justify text. + justify + Double-justify text. + char + Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + + + + + + This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + + + + + When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + + + An explicit offset. + + [0-9]+% + + A percentage offset. + + + + + + + + + Specifies the vertical position of data within a cell. + + top + Cell data is flush with the top of the cell. + middle + Cell data is centered vertically within the cell. This is the default value. + bottom + Cell data is flush with the bottom of the cell. + baseline + All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + + + + + + + + + Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + + + + + Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + + + An explicit width. + + [0-9]+% + + A percentage width. + + + + + + Specifies the width (in pixels only) of the frame around a table. + + + + + + Specifies which sides of the frame surrounding a table will be visible. + + void + No sides. This is the default value. + above + The top side only. + below + The bottom side only. + hsides + The top and bottom sides only. + lhs + The left-hand side only. + rhs + The right-hand side only. + vsides + The right and left sides only. + box + All four sides. + border + All four sides. + + + + + + Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + + none + No rules. This is the default value. + groups + Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + rows + Rules will appear between rows only. + cols + Rules will appear between columns only. + all + Rules will appear between all rows and columns. + + + + + + Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + + + An explicit spacing. + + [0-9]+% + + A percentage spacing. + + + + + + Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + + + An explicit padding. + + [0-9]+% + + A percentage padding. + + + + + + + + + + Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + + + + + This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + + + + + Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + + + + + Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + + row + The current cell provides header information for the rest of the row that contains it + col + The current cell provides header information for the rest of the column that contains it. + rowgroup + The header cell provides header information for the rest of the row group that contains it. + colgroup + The header cell provides header information for the rest of the column group that contains it. + + + + + + Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all rows from the current row to the last row of the table section (thead +, tbody +, or tfoot +) in which the cell is defined. + + + + + + Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all columns from the current column to the last column of the column group (colgroup +) in which the cell is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal (captioned) HTML table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An HTML table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + An HTML table caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + This attribute, whose value must be an integer > 0, specifies the number of columns spanned + by the col + element; the col + element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + element shares its attributes with the next N-1 columns. + + + + + + Specifies a default width for each column spanned by the current col + element. It has the same meaning as the width + attribute for the colgroup + element and overrides it. + + + + + + + + + Specifications for a column in an HTML table + + + + +
+
+ + + + + + This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + element contains one or more col + elements. + + + + + + This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + element. + + + + + + + + + A group of columns in an HTML table + + + + + + +
+
+ + + + + + + + + + A table header consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A table footer consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A wrapper for the rows of an HTML table or informal HTML table + + + + + + +
+
+ + + + + + + + + + A row in an HTML table + + + + + + + + + +
+
+ + + + + + + + + + + A table header entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + A table entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A detailed set of messages, usually error messages + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for an entry in a message set + + + + + + + + + + + + +
+
+ + + + + + The audience to which the message relevant + + + + + The origin of the message + + + + + The level of importance or severity of a message + + + + + + + + + + + + + + + + + + + + + + + A wrapper for a simpler entry in a message set + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A subcomponent of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A related component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + The actual text of a message component in a message set + + + + + + +
+
+ + + + + + + + + + + + + + + Information about a message in a message set + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The level of importance or severity of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The origin of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The audience to which a message in a message set is relevant + + + + +
+
+ + + + + + + + + + + + + + + + + + Explanatory material relating to a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + none + No labels + number + Numeric labels + qanda + "Q:" and "A:" labels + + + + + Specifies the default labelling + + + + + + + + + + + + + + + + + + + + + A question-and-answer set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A titled division in a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A question/answer set within a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A question in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An answer to a question posed in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A label on a question or answer + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation + + Element exclusion + + example must not occur among the children or descendants of equation + + + + Element exclusion + + figure must not occur among the children or descendants of equation + + + + Element exclusion + + table must not occur among the children or descendants of equation + + + + Element exclusion + + equation must not occur among the children or descendants of equation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical equation or expression occurring inline + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical phrase that can be represented with ordinary text and a small amount of markup + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is MathML + mathml + Specifies MathML. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A MathML expression in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the MathML namespace + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is SVG + svg + Specifies SVG. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SVG drawing in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the SVG namespace + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A string of formatting markup in text that is to be represented literally + + + + +
+
+ + + + + + attribute + An attribute + attvalue + An attribute value + element + An element + emptytag + An empty element tag + endtag + An end tag + genentity + A general entity + localname + The local name part of a qualified name + namespace + A namespace + numcharref + A numeric character reference + paramentity + A parameter entity + pi + A processing instruction + prefix + The prefix part of a qualified name + comment + An SGML comment + starttag + A start tag + xmlpi + An XML processing instruction + + + + + Identifies the nature of the tag content + + + + + + Identifies the namespace of the tag content + + + + + + + + + + + + + + + + + + + + + A component of XML (or SGML) markup + + + + + + + + + +
+
+ + + Identifies the class of symbol + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A name that is replaced by a value before processing + + + + +
+
+ + + + + + + + + + + + + + + A unit of information + + + + +
+
+ + + + + + + + + + + + + + + Inline text that is some literal value + + + + +
+
+ + + Identifies the (computer) language of the code fragment + + + + + + + + + + + + + + + + + + + + An inline code fragment + + + + + + + + + +
+
+ + + Identifies the class of constant + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A programming or system constant + + + + +
+
+ + + + + + copyright + A name with a copyright + registered + A name with a registered copyright + service + A name of a service + trade + A name which is trademarked + + + + + Specifies the class of product name + + + + + + + + + + + + + + + + + + The formal name of a product + + + + +
+
+ + + + + + + + + + + + + + + A number assigned to a product + + + + +
+
+ + + altkey + An alternate or secondary key + constraint + A constraint + datatype + A data type + field + A field + foreignkey + A foreign key + group + A group + index + An index + key1 + The first or primary key + key2 + An alternate or secondary key + name + A name + primarykey + The primary key + procedure + A (stored) procedure + record + A record + rule + A rule + secondarykey + The secondary key + table + A table + user + A user + view + A view + + + + + Identifies the class of database artifact + + + + + + + + + + + + + + + + + + + + + The name of a database, or part of a database + + + + +
+
+ + + hardware + A hardware application + software + A software application + + + + + Identifies the class of application + + + + + + + + + + + + + + + + + + + + + The name of a software program + + + + +
+
+ + + + + + + + + + + + + + + A physical part of a computer system + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text on a button in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Graphic and/or text appearing as a icon in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The text of a label in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a menu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a terminal menu item in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a submenu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A selection or series of selections from a menu + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The conventional name of a mouse button + + + + +
+ + + + + + + + + + +
+ + + alt + The "Alt" key + altgr + The "Alt Graph" key + backspace + The "Backspace" key + command + The "Command" key + control + The "Control" key + delete + The "Delete" key + down + The down arrow + end + The "End" key + enter + The "Enter" key + escape + The "Escape" key + home + The "Home" key + insert + The "Insert" key + left + The left arrow + meta + The "Meta" key + option + The "Option" key + pagedown + The page down key + pageup + The page up key + right + The right arrow + return + The "Return" key + shift + The "Shift" key + space + The spacebar + tab + The "Tab" key + up + The up arrow + + + + + + Identifies the function key + + + + + + + + Identifies the function key + other + Indicates a non-standard function key + + + + Specifies a keyword that identifies the non-standard key + + + + + + + + + + + + + + + + + + + + + + + + The text printed on a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + The internal, frequently numeric, identifier for a key on a keyboard + + + + +
+ + + + + + + + + + +
+ + + click + A (single) mouse click. + double-click + A double mouse click. + press + A mouse or key press. + seq + Sequential clicks or presses. + simul + Simultaneous clicks or presses. + + + + + + Identifies the nature of the action taken. If keycombo + contains more than one element, simul + is the default, otherwise there is no default. + + + + + + + + Identifies the nature of the action taken + other + Indicates a non-standard action + + + + Identifies the non-standard action in some unspecified way. + + + + + + + + + + + + + + + + + + + + + + + + A combination of input actions + + + + + + +
+
+ + + + + + + + + + + + + + + The symbolic name of a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + A graphical user interface (GUI) keyboard shortcut + + + + +
+
+ + + + + + + + + + + + + + + + + + + A key combination for an action that is also accessible through a menu + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A character or string indicating the start of an input field in a computer display + + + + + + +
+
+ + + + + + + + + + + + + + + A software environment variable + + + + +
+
+ + + devicefile + A device + directory + A directory + extension + A filename extension + headerfile + A header file (as for a programming language) + libraryfile + A library file + partition + A partition (as of a hard disk) + symlink + A symbolic link + + + + + Identifies the class of filename + + + + + + Specifies the path of the filename + + + + + + + + + + + + + + + + + + + + + + + The name of a file + + + + +
+
+ + + + + + + + + + + + + + + The name of an executable program or other software command + + + + +
+
+ + + + + + + + + + + + + + + Data, generally text, displayed or presented by a computer + + + + + + +
+
+ + + + + + + + + + + + + + + Data entered by the user + + + + + + +
+
+ + + + + + Specifies the character that should separate the command and its top-level arguments + + + + + Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A syntax summary for a software command + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + norepeat + Can not be repeated. + repeat + Can be repeated. + + + + + Indicates whether or not repetition is possible. + + + + + + opt + Formatted to indicate that it is optional. + plain + Formatted without indication. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + Indicates optionality. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An argument in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A group of elements in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + An explicit line break in a command synopsis + + + + +
+
+ + + + + + + + + + + + + + + A portion of a cmdsynopsis broken out from the main body of the synopsis + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A reference to a fragment of a command synopsis + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + A general-purpose element for representing the syntax of commands or functions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing synopsis + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a function definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the funcdefs of a funcsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a function + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A function (subroutine) name and its return type + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a function or subroutine, as in a programming language + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating that the function in question takes no arguments + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating a variable number of arguments + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of parameters + + + + + + + + + +
+
+ + + + + + opt + Formatted to indicate that it is optional. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + + + + + + + + + + + + + Information about a function parameter in a programming language + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Parameters for a function referenced through a function pointer in a synopsis + + + + +
+
+ + + + + + + + + class + This is the synopsis of a class + interface + This is the synopsis of an interface + + + + + Specifies the nature of the synopsis + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the contents of a classsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A class in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An interface in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An exception in an object-oriented programming language + + + + + + + + + + + + + +
+ + + Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + preserve + Extra whitespace and line breaks must be preserved. + + + +
+ + + + + + + + + + + + + + + + + + Modifiers in a synopsis + + + + +
+
+ + + + + + + + + + + + + + + The name of an interface + + + + +
+
+ + + + + + + + + + + + + + + The name of an exception + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The name of a field in a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + The initializer for a fieldsynopsis + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a constructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a destructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a method + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a method + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters to a method + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of method parameters + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a variable + + + + +
+
+ + + + + + + + + + + + + + + Target of a build + + + + +
+
+ + + + + + + + + + + + + + + The value returned by a function + + + + +
+
+ + + + + + union + Combined type is union of nested types + intersection + Combined type is intersection of nested types + + + + + Specifies the way how are nested types combined together + + + + + + + + + + + + + + + + + + The classification of a value + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a class, in the object-oriented programming sense + + + + +
+
+ + + + + + + + + + + + + + + The identifier for a template, in the generic programming sense + + + + +
+
+ + + + + + + + + + + + + + + The definition of a template, in the generic programming sense + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The specialization of a template identifier, in the generic programming sense + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a package definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a macro (a code-generating function) + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a macro definition (code-generating function) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a macro (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A macro name and its return type + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a union of types + + + + +
+
+ + + + + + + + + + + + + + + The definition of a union of types, which may be more than a name + + + + + + +
+
+ + + + + + + + + + Indicates how the value of a union is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a union-of-types definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of an enumeration + + + + +
+
+ + + + + + + + + + + + + + + The value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + The description of a value an enumerated type can take + + + + + + +
+
+ + + + + + + + + + + + + + + The identifier of a value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + A value an enumerated type can take and its description + + + + + + + + + + +
+
+ + + + + + + + + 0 + Value of enum is specified explicitly using enumvalue + 1 + Value of enum is inferred from its position + + + + + Indicates how the value of an enumeration is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for an enumerated-type definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a type alias + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a type-alias definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A literal listing of all or part of a program + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A note of caution + + Element exclusion + + caution must not occur among the children or descendants of caution + + + + Element exclusion + + danger must not occur among the children or descendants of caution + + + + Element exclusion + + important must not occur among the children or descendants of caution + + + + Element exclusion + + note must not occur among the children or descendants of caution + + + + Element exclusion + + tip must not occur among the children or descendants of caution + + + + Element exclusion + + warning must not occur among the children or descendants of caution + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text indicating hazardous situation + + Element exclusion + + caution must not occur among the children or descendants of danger + + + + Element exclusion + + danger must not occur among the children or descendants of danger + + + + Element exclusion + + important must not occur among the children or descendants of danger + + + + Element exclusion + + note must not occur among the children or descendants of danger + + + + Element exclusion + + tip must not occur among the children or descendants of danger + + + + Element exclusion + + warning must not occur among the children or descendants of danger + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of important + + + + Element exclusion + + danger must not occur among the children or descendants of important + + + + Element exclusion + + important must not occur among the children or descendants of important + + + + Element exclusion + + note must not occur among the children or descendants of important + + + + Element exclusion + + tip must not occur among the children or descendants of important + + + + Element exclusion + + warning must not occur among the children or descendants of important + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A message set off from the text + + Element exclusion + + caution must not occur among the children or descendants of note + + + + Element exclusion + + danger must not occur among the children or descendants of note + + + + Element exclusion + + important must not occur among the children or descendants of note + + + + Element exclusion + + note must not occur among the children or descendants of note + + + + Element exclusion + + tip must not occur among the children or descendants of note + + + + Element exclusion + + warning must not occur among the children or descendants of note + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A suggestion to the user, set off from the text + + Element exclusion + + caution must not occur among the children or descendants of tip + + + + Element exclusion + + danger must not occur among the children or descendants of tip + + + + Element exclusion + + important must not occur among the children or descendants of tip + + + + Element exclusion + + note must not occur among the children or descendants of tip + + + + Element exclusion + + tip must not occur among the children or descendants of tip + + + + Element exclusion + + warning must not occur among the children or descendants of tip + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of warning + + + + Element exclusion + + danger must not occur among the children or descendants of warning + + + + Element exclusion + + important must not occur among the children or descendants of warning + + + + Element exclusion + + note must not occur among the children or descendants of warning + + + + Element exclusion + + tip must not occur among the children or descendants of warning + + + + Element exclusion + + warning must not occur among the children or descendants of warning + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + An error code + + + + +
+
+ + + + + + + + + + + + + + + An error name + + + + +
+
+ + + + + + + + + + + + + + + An error message. + + + + +
+
+ + + + + + + + + + + + + + + The classification of an error message + + + + +
+ + + + + + +
+ + + daemon + A daemon or other system process (syslogd) + domainname + A domain name (example.com) + etheraddress + An ethernet address (00:05:4E:49:FD:8E) + event + An event of some sort (SIGHUP) + eventhandler + An event handler of some sort (hangup) + filesystem + A filesystem (ext3) + fqdomainname + A fully qualified domain name (my.example.com) + groupname + A group name (wheel) + interface + A network interface (eth0) + ipaddress + An IP address (127.0.0.1) + library + A library (libncurses) + macro + A macro + netmask + A netmask (255.255.255.192) + newsgroup + A newsgroup (comp.text.xml) + osname + An operating system name (Hurd) + process + A process (gnome-cups-icon) + protocol + A protocol (ftp) + resource + A resource + securitycontext + A security context (a role, permission, or security token, for example) + server + A server (mail.example.com) + service + A service (ppp) + systemname + A system name (hephaistos) + username + A user name (ndw) + + + + + + Identifies the nature of the system item + + + + + + + Identifies the nature of the non-standard system item + + + + + + + Identifies the kind of systemitemgraphic identifier + other + Indicates that the system item is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + A system-related item or term + + + + + + +
+
+ + + + + + + + + + + + + + + An option for a software command + + + + +
+
+ + + + + + + + + + + + + + + Optional information + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A unit of data associated with some part of a computer system + + + + +
+
+ + + + + + + + + Identifies the topic type + + + + + + + + + + + + + + + + + + + + + + + + + + A modular unit of documentation not part of any particular narrative flow + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + Any attribute in an other explicit namespace. + + + + + + + + + + + + + + + Version of ITS + + [0-9]+\.[0-9]+ + + + + The query language to be used for processing the rules + + xpath + css + + + + + + Absolute selector + + + + + Relative selector + + + + + + + + 0 + 1 + + + + The Translate data category information to be attached to the current node + + yes + The nodes need to be translated + no + The nodes must not be translated + + + + + + + The type of localization note + + alert + Localization note is an alert + description + Localization note is a description + + + + + + + + + + Indicates a term locally + + yes + The value 'yes' means that this is a term + no + The value 'no' means that this is not a term + + + + + + + The text direction for the context + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + States whether current context is regarded as "within text" + + yes + The element and its content are part of the flow of its parent element + no + The element splits the text flow of its parent element and its content is an independent text flow + nested + The element is part of the flow of its parent element, its content is an independent flow + + + + A comma separated list of mappings between values in the content +and workflow specific values. The values may contain spaces; in +that case they MUST be delimited by quotation marks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + include + exclude + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + terminology + mistranslation + omission + untranslated + addition + duplication + inconsistency + grammar + legal + register + locale-specific-content + locale-violation + style + characters + misspelling + typographical + formatting + inconsistent-entities + numbers + markup + pattern-problem + whitespace + internationalization + length + non-conformance + uncategorized + other + + + + + + + + 0 + 100 + + + + + + + + yes + no + + + + + 0 + 100 + + + + + + + + 0 + 100 + + + + + + + + + + + + + + + + + + + + + + + cr + lf + crlf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version of ITS + + + + + + Version of ITS + + + + + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + xml:id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Container for global rules + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Declaration of variable used in selectors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inline element to contain ITS information + + + + + + + + + + + + + + + + + + + + + + + Rule about the Translate data category + + + + + + + + + + + + + + + + + Rule about the Localization Note data category + + + + + + + + + + + + + + + + + + + + + + + + + + Localization note + + + + + + + + + + + + + + + + + + + + + Rule about the Terminology data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the Directionality data category + + + + + + + + + + + + + + + + + Rule about the Language Information data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Elements Within Text data category + + + + + + + + + + + + + + + + + Rule about the Domain data category + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the Disambiguation data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the LocaleFilter data category + + + + + + + + + + + + + + + + + + + + Rule about the Provenance data category + + + + + + + + + + + + + + + + + + + + + + Rule about the External Resource data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Target Pointer data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Id Value data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Preserve Space data category + + + + + + + + + + + + + + + + + + default + preserve + + + + + + Rule about the Localization Quality Issue data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the MT Confidence data category + + + + + + + + + + + + + + + + + Rule about the Allowed Characters data category + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the Allowed Characters data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Standoff markup for Provenance data category + + + + + + + + + + + + + + + + + Provenance record used in Provenance standoff markup + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Standoff markup for Localization Quality Issue data category + + + + + + + + + + + + + + + + + Issue recorded in Localization Quality standoff markup + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/catalog/docbook5.2/rng/dbitsxi.rnc b/catalog/docbook5.2/rng/dbitsxi.rnc new file mode 100755 index 0000000..b6bf90b --- /dev/null +++ b/catalog/docbook5.2/rng/dbitsxi.rnc @@ -0,0 +1,12854 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ctrl = "http://nwalsh.com/xmlns/schema-control/" +default namespace db = "http://docbook.org/ns/docbook" +namespace html = "http://www.w3.org/1999/xhtml" +namespace its = "http://www.w3.org/2005/11/its" +namespace local = "" +namespace mml = "http://www.w3.org/1998/Math/MathML" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace s = "http://purl.oclc.org/dsdl/schematron" +namespace src = "http://nwalsh.com/xmlns/litprog/fragment" +namespace svg = "http://www.w3.org/2000/svg" +namespace trans = "http://docbook.org/ns/transclusion" +namespace xi = "http://www.w3.org/2001/XInclude" +namespace xlink = "http://www.w3.org/1999/xlink" + +# This file is part of DocBook ITS XInclude V5.2CR5 +# +# Copyright 2007-2020 HaL Computer Systems, Inc., +# O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software +# Corporation, Norman Walsh, Jirka Kosek, 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-comment@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. +# +# ====================================================================== + +s:ns [ + prefix = "a" + uri = "http://relaxng.org/ns/compatibility/annotations/1.0" +] +s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ] +s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ] +s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ] +s:ns [ prefix = "its" uri = "http://www.w3.org/2005/11/its" ] +s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ] +s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ] +s:ns [ prefix = "s" uri = "http://purl.oclc.org/dsdl/schematron" ] +s:ns [ prefix = "src" uri = "http://nwalsh.com/xmlns/litprog/fragment" ] +s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ] +s:ns [ prefix = "trans" uri = "http://docbook.org/ns/transclusion" ] +s:ns [ prefix = "xi" uri = "http://www.w3.org/2001/XInclude" ] +s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ] +start = + (db.set + | db.book + | db.divisions + | db.components + | db.navigation.components + | db.section + | db.para) + | (db.abstract + | db.mediaobject.content + | db.audiodata + | db.imagedata + | db.textdata + | db.videodata + | db.caption + | db.publishing.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.formalpara + | db.inlinemediaobject + | db.list.blocks + | db.legalnotice + | db.verbatim.blocks + | db.graphic.blocks + | db.personblurb + | db.revhistory + | db.simpara + | db.step + | db.stepalternatives + | db.info) + | (db.partintro | db.simplesect) + | db.annotation + | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5) + | (db.refentry | db.refsection | db.refsynopsisdiv) + | (db.refsect1 | db.refsect2 | db.refsect3) + | (db.glossary | db.glossdiv | db.glosslist) + | (db.bibliodiv | db.bibliolist) + | (db.setindex | db.index | db.indexdiv) + | (db.toc | db.tocdiv) + | (db.task | db.taskprerequisites | db.taskrelated | db.tasksummary) + | (db.calloutlist + | db.programlistingco + | db.screenco + | db.imageobjectco) + | (db.productionset | db.constraintdef) + | (db.msg + | db.msgexplan + | db.msgmain + | db.msgrel + | db.msgset + | db.msgsub) + | (db.qandadiv | db.qandaentry | db.qandaset) + | (db.equation | db.informalequation) + | db.cmdsynopsis + | (db.synopsis.blocks | db.funcsynopsisinfo | db.classsynopsisinfo) + | db.admonition.blocks + | db.topic +div { + db._any.attribute = + + ## Any attribute, including any attribute in any namespace + attribute * { text } +} +db.arch.attribute = + + ## Designates the computer or chip architecture to which the element applies + attribute arch { text } +db.audience.attribute = + + ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + attribute audience { text } +db.condition.attribute = + + ## provides a standard place for application-specific effectivity + attribute condition { text } +db.conformance.attribute = + + ## Indicates standards conformance characteristics of the element + attribute conformance { text } +db.os.attribute = + + ## Indicates the operating system to which the element is applicable + attribute os { text } +db.revision.attribute = + + ## Indicates the editorial revision to which the element belongs + attribute revision { text } +db.security.attribute = + + ## Indicates something about the security level associated with the element to which it applies + attribute security { text } +db.userlevel.attribute = + + ## Indicates the level of user experience for which the element applies + attribute userlevel { text } +db.vendor.attribute = + + ## Indicates the computer vendor to which the element applies + attribute vendor { text } +db.wordsize.attribute = + + ## Indicates the word size (width in bits) of the computer architecture to which the element applies + attribute wordsize { text } +db.outputformat.attribute = + + ## Indicates the output format (for example, print or epub) to which the element applies + attribute outputformat { text } +db.effectivity.attributes = + db.arch.attribute? + & db.audience.attribute? + & db.condition.attribute? + & db.conformance.attribute? + & db.os.attribute? + & db.revision.attribute? + & db.security.attribute? + & db.userlevel.attribute? + & db.vendor.attribute? + & db.wordsize.attribute? + & db.outputformat.attribute? +db.endterm.attribute = + + ## Points to the element whose content is to be used as the text of the link + attribute endterm { xsd:IDREF } +db.linkend.attribute = + + ## Points to an internal link target by identifying the value of its xml:id attribute + attribute linkend { xsd:IDREF } +db.linkends.attribute = + + ## Points to one or more internal link targets by identifying the value of their xml:id attributes + attribute linkends { xsd:IDREFS } +db.xlink.href.attribute = + + ## Identifies a link target with a URI + attribute xlink:href { xsd:anyURI } +db.xlink.simple.type.attribute = + + ## Identifies the XLink link type + attribute xlink:type { + + ## An XLink simple link type + "simple" + } +db.xlink.role.attribute = + + ## Identifies the XLink role of the link + attribute xlink:role { xsd:anyURI } +db.xlink.arcrole.attribute = + + ## Identifies the XLink arcrole of the link + attribute xlink:arcrole { xsd:anyURI } +db.xlink.title.attribute = + + ## Identifies the XLink title of the link + attribute xlink:title { text } +db.xlink.show.enumeration = + + ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + "new" + | + ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + "replace" + | + ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + "embed" + | + ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.show.attribute = + + ## Identifies the XLink show behavior of the link + attribute xlink:show { db.xlink.show.enumeration } +db.xlink.actuate.enumeration = + + ## An application should traverse to the ending resource immediately on loading the starting resource. + "onLoad" + | + ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + "onRequest" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.actuate.attribute = + + ## Identifies the XLink actuate behavior of the link + attribute xlink:actuate { db.xlink.actuate.enumeration } +db.xlink.simple.link.attributes = + db.xlink.simple.type.attribute? + & db.xlink.href.attribute? + & db.xlink.role.attribute? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? +db.xlink.attributes = + db.xlink.simple.link.attributes + | (db.xlink.extended.link.attributes + | db.xlink.locator.link.attributes + | db.xlink.arc.link.attributes + | db.xlink.resource.link.attributes + | db.xlink.title.link.attributes) +db.xml.id.attribute = + + ## Identifies the unique ID value of the element + attribute xml:id { xsd:ID } +db.version.attribute = + + ## Specifies the DocBook version of the element and its descendants + attribute version { text } +db.xml.lang.attribute = + + ## Specifies the natural language of the element and its descendants + attribute xml:lang { text } +db.xml.base.attribute = + + ## Specifies the base URI of the element and its descendants + attribute xml:base { xsd:anyURI } +db.remap.attribute = + + ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + attribute remap { text } +db.xreflabel.attribute = + + ## Provides the text that is to be generated for a cross reference to the element + attribute xreflabel { text } +db.xrefstyle.attribute = + + ## Specifies a keyword or keywords identifying additional style information + attribute xrefstyle { text } +db.revisionflag.enumeration = + + ## The element has been changed. + "changed" + | + ## The element is new (has been added to the document). + "added" + | + ## The element has been deleted. + "deleted" + | + ## Explicitly turns off revision markup for this element. + "off" +db.revisionflag.attribute = + + ## Identifies the revision status of the element + attribute revisionflag { db.revisionflag.enumeration } +db.dir.enumeration = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" +db.dir.attribute = + + ## Identifies the direction of text in an element + attribute dir { db.dir.enumeration } +db.rdfalite.vocab = + + ## The RDFa Lite vocab + attribute vocab { xsd:anyURI } +db.rdfalite.typeof = + + ## The RDFa Lite typeof + attribute typeof { text } +db.rdfalite.property = + + ## The RDFa Lite property + attribute property { text } +db.rdfalite.resource = + + ## The RDFa Lite resource + attribute resource { text } +db.rdfalite.prefix = + + ## The RDFa Lite prefix + attribute prefix { text } +db.rdfalite.attributes = + db.rdfalite.vocab? + & db.rdfalite.typeof? + & db.rdfalite.property? + & db.rdfalite.resource? + & db.rdfalite.prefix? +db.trans.idfixup.enumeration = + + ## No ID fixup strategy + "none" + | + ## ID fixup by concatenating suffixes + "suffix" + | + ## ID fixup by creating unique values + "auto" +db.trans.idfixup.attribute = + + ## The transclusion ID fixup strategy + attribute trans:idfixup { db.trans.idfixup.enumeration } +db.trans.suffix.attribute = + + ## The transclusion suffix to use when the suffix ID fixup strategy is employed + [ + s:pattern [ + s:title [ "Suffix fixup must be specified" ] + s:rule [ + context = "db:*[@trans:suffix]" + s:assert [ + test = "@trans:idfixup = 'suffix'" + "If a suffix is specified, suffix ID fixup must also be specified." + ] + ] + ] + ] + attribute trans:suffix { text } +db.trans.linkscope.enumeration = + + ## No link scope adjustments are made + "user" + | + ## The link scopes are adjusted with the suffix property + "local" + | + ## The link scopes are adjusted based on proximity + "near" + | + ## The link scopes are adjusted based on document order + "global" +db.trans.linkscope.attribute = + + ## The transclusion link scope adjustment + attribute trans:linkscope { db.trans.linkscope.enumeration } +db.common.transclusion.attributes = + db.trans.idfixup.attribute? + & db.trans.suffix.attribute? + & db.trans.linkscope.attribute? +db.common.base.attributes = + db.version.attribute? + & db.xml.lang.attribute? + & db.xml.base.attribute? + & db.remap.attribute? + & db.xreflabel.attribute? + & db.revisionflag.attribute? + & db.dir.attribute? + & db.effectivity.attributes + & db.rdfalite.attributes + & db.common.transclusion.attributes + & db._any_other.attribute* + & (its-local.attributes & its-attribute.version?) +db.common.attributes = + db.xml.id.attribute? + & db.common.base.attributes + & db.annotations.attribute? +db.common.idreq.attributes = + db.xml.id.attribute + & db.common.base.attributes + & db.annotations.attribute? +db.common.linking.attributes = + (db.linkend.attribute | db.xlink.attributes)? +db.common.req.linking.attributes = + db.linkend.attribute | db.xlink.attributes +db.common.data.attributes = + + ## Specifies the format of the data + attribute format { text }?, + ( + ## Indentifies the location of the data by URI + attribute fileref { xsd:anyURI } + | + ## Identifies the location of the data by external identifier (entity name) + attribute entityref { xsd:ENTITY }) +db.verbatim.continuation.enumeration = + + ## Line numbering continues from the immediately preceding element with the same name. + "continues" + | + ## Line numbering restarts (begins at 1, usually). + "restarts" +db.verbatim.continuation.attribute = + + ## Determines whether line numbering continues from the previous element or restarts + attribute continuation { db.verbatim.continuation.enumeration } +db.verbatim.linenumbering.enumeration = + + ## Lines are numbered. + "numbered" + | + ## Lines are not numbered. + "unnumbered" +db.verbatim.linenumbering.attribute = + + ## Determines whether lines are numbered + attribute linenumbering { db.verbatim.linenumbering.enumeration } +db.verbatim.startinglinenumber.attribute = + + ## Specifies the initial line number + attribute startinglinenumber { xsd:integer } +db.verbatim.language.attribute = + + ## Identifies the language (i.e. programming language) of the verbatim content + attribute language { text } +db.verbatim.xml.space.attribute = + + ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + attribute xml:space { + + ## Whitespace must be preserved. + "preserve" + } +db.verbatim.common.attributes = + db.verbatim.continuation.attribute? + & db.verbatim.linenumbering.attribute? + & db.verbatim.startinglinenumber.attribute? + & db.verbatim.xml.space.attribute? +db.verbatim.attributes = + db.verbatim.common.attributes & db.verbatim.language.attribute? +db.label.attribute = + + ## Specifies an identifying string for presentation purposes + attribute label { text } +db.width.characters.attribute = + + ## Specifies the width (in characters) of the element + attribute width { xsd:nonNegativeInteger } +db.spacing.enumeration = + + ## The spacing should be "compact". + "compact" + | + ## The spacing should be "normal". + "normal" +db.spacing.attribute = + + ## Specifies (a hint about) the spacing of the content + attribute spacing { db.spacing.enumeration } +db.pgwide.enumeration = + + ## The element should be rendered in the current text flow (with the flow column width). + "0" + | + ## The element should be rendered across the full text page. + "1" +db.pgwide.attribute = + + ## Indicates if the element is rendered across the column or the page + attribute pgwide { db.pgwide.enumeration } +db.language.attribute = + + ## Identifies the language (i.e. programming language) of the content + attribute language { text } +db.performance.enumeration = + + ## The content describes an optional step or steps. + "optional" + | + ## The content describes a required step or steps. + "required" +db.performance.attribute = + + ## Specifies if the content is required or optional + attribute performance { db.performance.enumeration } +db.floatstyle.attribute = + + ## Specifies style information to be used when rendering the float + attribute floatstyle { text } +db.width.attribute = + + ## Specifies the width of the element + attribute width { text } +db.depth.attribute = + + ## Specifies the depth of the element + attribute depth { text } +db.contentwidth.attribute = + + ## Specifies the width of the content rectangle + attribute contentwidth { text } +db.contentdepth.attribute = + + ## Specifies the depth of the content rectangle + attribute contentdepth { text } +db.scalefit.enumeration = + + ## False (do not scale-to-fit; anamorphic scaling may occur) + "0" + | + ## True (scale-to-fit; anamorphic scaling is forbidden) + "1" +db.scale.attribute = + + ## Specifies the scaling factor + attribute scale { xsd:positiveInteger } +db.classid.attribute = + + ## Specifies a classid for a media object player + attribute classid { text } +db.autoplay.attribute = + + ## Specifies the autoplay setting for a media object player + attribute autoplay { text } +db.halign.enumeration = + + ## Centered horizontally + "center" + | + ## Aligned horizontally on the specified character + "char" + | + ## Fully justified (left and right margins or edges) + "justify" + | + ## Left aligned + "left" + | + ## Right aligned + "right" +db.valign.enumeration = + + ## Aligned on the bottom of the region + "bottom" + | + ## Centered vertically + "middle" + | + ## Aligned on the top of the region + "top" +db.biblio.class.enumeration = + + ## A digital object identifier. + "doi" + | + ## An international standard book number. + "isbn" + | + ## An international standard technical report number (ISO 10444). + "isrn" + | + ## An international standard serial number. + "issn" + | + ## An international standard text code. + "istc" + | + ## A Library of Congress reference number. + "libraryofcongress" + | + ## A publication number (an internal number or possibly organizational standard). + "pubsnumber" + | + ## A Uniform Resource Identifier + "uri" +db.biblio.class-enum.attribute = + + ## Identifies the kind of bibliographic identifier + attribute class { db.biblio.class.enumeration }? +db.biblio.class-other.attribute = + + ## Identifies the nature of the non-standard bibliographic identifier + attribute otherclass { xsd:NMTOKEN } +db.biblio.class-other.attributes = + + ## Identifies the kind of bibliographic identifier + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.biblio.class-other.attribute +db.biblio.class.attribute = + db.biblio.class-enum.attribute | db.biblio.class-other.attributes +db.pubwork.enumeration = + + ## An article + "article" + | + ## A bulletin board system + "bbs" + | + ## A book + "book" + | + ## A CD-ROM + "cdrom" + | + ## A chapter (as of a book) + "chapter" + | + ## A DVD + "dvd" + | + ## An email message + "emailmessage" + | + ## A gopher page + "gopher" + | + ## A journal + "journal" + | + ## A manuscript + "manuscript" + | + ## A posting to a newsgroup + "newsposting" + | + ## A part (as of a book) + "part" + | + ## A reference entry + "refentry" + | + ## A section (as of a book or article) + "section" + | + ## A series + "series" + | + ## A set (as of books) + "set" + | + ## A web page + "webpage" + | + ## A wiki page + "wiki" + | + ## Some other kind of work + "other" +db.biblio.pubwork.enumeration = db.pubwork.enumeration +db.biblio.pubwork-enum.attribute = + + ## Identifies the nature of the published work + attribute pubwork { db.biblio.pubwork.enumeration }? +db.biblio.pubwork-other.attribute = + + ## Identifies the nature of some other kind of published work + attribute otherpubwork { xsd:NMTOKEN } +db.biblio.pubwork-other.attributes = + + ## Identifies that this is some other kind of published work + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.biblio.pubwork-other.attribute +db.biblio.pubwork.attribute = + db.biblio.pubwork-enum.attribute | db.biblio.pubwork-other.attributes +db.ubiq.inlines = + (db.inlinemediaobject + | db.remark + | db.link.inlines + | db.alt + | db.trademark + | # below, effectively the publishing inlines (as of 5.0) + db.abbrev + | db.acronym + | db.date + | db._emphasis + | db.footnote + | db.footnoteref + | db._foreignphrase + | db._phrase + | db._quote + | db.subscript + | db.superscript + | db.wordasword) + | db.annotation + | (db._firstterm | db._glossterm) + | db.indexterm + | db.coref +db._text = + (text | db.ubiq.inlines | db._phrase | db.replaceable)* + | db.xi.include +db._title = db.title? & db.titleabbrev? & db.subtitle? +db._title.req = db.title & db.titleabbrev? & db.subtitle? +db._title.only = db.title? & db.titleabbrev? +db._title.onlyreq = db.title & db.titleabbrev? +db._info = (db._title, db.titleforbidden.info?) | db.info? +db._info.title.req = + (db._title.req, db.titleforbidden.info?) | db.titlereq.info +db._info.title.only = + (db._title.only, db.titleforbidden.info?) | db.titleonly.info +db._info.title.onlyreq = + (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info +db._info.title.forbidden = db.titleforbidden.info? +db.all.inlines = + (text + | db.ubiq.inlines + | db.general.inlines + | db.domain.inlines + | db.extension.inlines) + | db.xi.include +db.general.inlines = + db.publishing.inlines + | db.product.inlines + | db.bibliography.inlines + | db.graphic.inlines + | db.indexing.inlines + | db.link.inlines +db.domain.inlines = + db.technical.inlines + | db.math.inlines + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines + | db.os.inlines + | db.programming.inlines + | db.error.inlines +db.technical.inlines = + (db.replaceable | db.package | db.parameter) + | db.termdef + | db.nonterminal + | (db.systemitem | db.option | db.optional | db.property) +db.product.inlines = + db.trademark + | (db.productnumber + | db.productname + | db.database + | db.application + | db.hardware) +db.bibliography.inlines = + db.citation + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.author + | db.person + | db.personname + | db.org + | db.orgname + | db.editor + | db.jobtitle +db.publishing.inlines = + (db.abbrev + | db.acronym + | db.date + | db.emphasis + | db.footnote + | db.footnoteref + | db.foreignphrase + | db.phrase + | db.quote + | db.revnumber + | db.subscript + | db.superscript + | db.wordasword) + | db.glossary.inlines + | db.coref +db.graphic.inlines = db.inlinemediaobject +db.indexing.inlines = notAllowed | db.indexterm +db.link.inlines = + (db.xref | db.link | db.olink | db.anchor) | db.biblioref +db.extension.inlines = notAllowed +db.nopara.blocks = + (db.list.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.indexterm + | db.synopsis.blocks + | db.admonition.blocks +db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara +db.all.blocks = + (db.nopara.blocks | db.para.blocks | db.extension.blocks) + | db.annotation + | db.xi.include +db.wrapper.blocks = db.formalgroup +db.formal.blocks = (db.example | db.figure | db.table) | db.equation +db.informal.blocks = + (db.informalexample | db.informalfigure | db.informaltable) + | db.informalequation +db.publishing.blocks = + db.sidebar | db.blockquote | db.address | db.epigraph +db.graphic.blocks = db.mediaobject | db.screenshot +db.technical.blocks = + db.procedure + | db.task + | (db.productionset | db.constraintdef) + | db.msgset +db.list.blocks = + (db.itemizedlist + | db.orderedlist + | db.procedure + | db.simplelist + | db.variablelist + | db.segmentedlist) + | db.glosslist + | db.bibliolist + | db.calloutlist + | db.qandaset +db.verbatim.blocks = + (db.screen | db.literallayout) + | (db.programlistingco | db.screenco) + | (db.programlisting | db.synopsis) +db.extension.blocks = notAllowed +db.info.extension = db._any | (its-rules | its-standoff) +db.info.elements = + (db.abstract + | db.address + | db.artpagenums + | db.author + | db.authorgroup + | db.authorinitials + | db.bibliocoverage + | db.biblioid + | db.bibliosource + | db.collab + | db.confgroup + | db.contractsponsor + | db.contractnum + | db.copyright + | db.cover + | db.date + | db.edition + | db.editor + | db.issuenum + | 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.meta + | db.info.extension) + | db.annotation + | db.extendedlink + | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset) + | db.itermset + | (db.productname | db.productnumber) + | db.xi.include +db.bibliographic.elements = + db.info.elements + | db.publishing.inlines + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.person + | db.personblurb + | db.personname + | db.subtitle + | db.title + | db.titleabbrev +div { + db.title.role.attribute = attribute role { text } + db.title.attlist = + db.title.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.title = + + ## The text of the title of a section of a document or of a formal block-level element + element title { db.title.attlist, db.all.inlines* } +} +div { + db.titleabbrev.role.attribute = attribute role { text } + db.titleabbrev.attlist = + db.titleabbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.titleabbrev = + + ## The abbreviation of a title + element titleabbrev { db.titleabbrev.attlist, db.all.inlines* } +} +div { + db.subtitle.role.attribute = attribute role { text } + db.subtitle.attlist = + db.subtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subtitle = + + ## The subtitle of a document + element subtitle { db.subtitle.attlist, db.all.inlines* } +} +div { + db.info.role.attribute = attribute role { text } + db.info.attlist = db.info.role.attribute? & db.common.attributes + db.info = + + ## A wrapper for information about a component or other block + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.info.attlist, (db._title & db.info.elements*) } +} +div { + db.titlereq.info.role.attribute = attribute role { text } + db.titlereq.info.attlist = + db.titlereq.info.role.attribute? & db.common.attributes + db.titlereq.info = + + ## A wrapper for information about a component or other block with a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titlereq.info.attlist, (db._title.req & db.info.elements*) + } +} +div { + db.titleonly.info.role.attribute = attribute role { text } + db.titleonly.info.attlist = + db.titleonly.info.role.attribute? & db.common.attributes + db.titleonly.info = + + ## A wrapper for information about a component or other block with only a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonly.info.attlist, (db._title.only & db.info.elements*) + } +} +div { + db.titleonlyreq.info.role.attribute = attribute role { text } + db.titleonlyreq.info.attlist = + db.titleonlyreq.info.role.attribute? & db.common.attributes + db.titleonlyreq.info = + + ## A wrapper for information about a component or other block with only a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonlyreq.info.attlist, + (db._title.onlyreq & db.info.elements*) + } +} +div { + db.titleforbidden.info.role.attribute = attribute role { text } + db.titleforbidden.info.attlist = + db.titleforbidden.info.role.attribute? & db.common.attributes + db.titleforbidden.info = + + ## A wrapper for information about a component or other block without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.titleforbidden.info.attlist, db.info.elements* } +} +div { + db.subjectset.role.attribute = attribute role { text } + db.subjectset.scheme.attribute = + + ## Identifies the controlled vocabulary used by this set's terms + attribute scheme { xsd:NMTOKEN } + db.subjectset.attlist = + db.subjectset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subjectset.scheme.attribute? + db.subjectset = + + ## A set of terms describing the subject matter of a document + element subjectset { db.subjectset.attlist, db.subject+ } +} +div { + db.subject.role.attribute = attribute role { text } + db.subject.weight.attribute = + + ## Specifies a ranking for this subject relative to other subjects in the same set + attribute weight { text } + db.subject.attlist = + db.subject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subject.weight.attribute? + db.subject = + + ## One of a group of terms describing the subject matter of a document + element subject { db.subject.attlist, db.subjectterm+ } +} +div { + db.subjectterm.role.attribute = attribute role { text } + db.subjectterm.attlist = + db.subjectterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subjectterm = + + ## A term in a group of terms describing the subject matter of a document + element subjectterm { db.subjectterm.attlist, text } +} +div { + db.keywordset.role.attribute = attribute role { text } + db.keywordset.attlist = + db.keywordset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keywordset = + + ## A set of keywords describing the content of a document + element keywordset { db.keywordset.attlist, db.keyword+ } +} +div { + db.keyword.role.attribute = attribute role { text } + db.keyword.attlist = + db.keyword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keyword = + + ## One of a set of keywords describing the content of a document + element keyword { db.keyword.attlist, text } +} +db.table.choice = notAllowed | db.cals.table | db.html.table +db.informaltable.choice = + notAllowed | db.cals.informaltable | db.html.informaltable +db.table = db.table.choice +db.informaltable = db.informaltable.choice +div { + db.procedure.role.attribute = attribute role { text } + db.procedure.type.attribute = + + ## Identifies the type of procedure + attribute type { text }? + db.procedure.attlist = + db.procedure.role.attribute? + & db.procedure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + db.procedure.info = db._info.title.only + db.procedure = + + ## A list of operations to be performed in a well-defined sequence + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:procedure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element procedure { + db.procedure.attlist, + db.procedure.info, + db.all.blocks*, + db.step+, + db.result? + } +} +div { + db.step.role.attribute = attribute role { text } + db.step.attlist = + db.step.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.step.info = db._info.title.only + # This content model is blocks*, step|stepalternatives, blocks* but + # expressed this way it avoids UPA issues in XSD and DTD versions + db.step = + + ## A unit of action in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:step" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element step { + db.step.attlist, + db.step.info, + ((db.all.blocks+, + ((db.substeps | db.stepalternatives), db.all.blocks*)?, + db.result?) + | ((db.substeps | db.stepalternatives), + db.all.blocks*, + db.result?)) + } +} +div { + db.stepalternatives.role.attribute = attribute role { text } + db.stepalternatives.attlist = + db.stepalternatives.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.stepalternatives.info = db._info.title.forbidden + db.stepalternatives = + + ## Alternative steps in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:stepalternatives" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element stepalternatives { + db.stepalternatives.attlist, db.stepalternatives.info, db.step+ + } +} +div { + db.substeps.role.attribute = attribute role { text } + db.substeps.attlist = + db.substeps.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.substeps = + + ## A wrapper for steps that occur within steps in a procedure + element substeps { db.substeps.attlist, db.step+ } +} +div { + db.result.role.attribute = attribute role { text } + db.result.attlist = + db.result.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.result = + + ## A wrapper for identifying the results of a procedure or step + element result { db.result.attlist, db.all.blocks+ } +} +div { + db.sidebar.floatstyle.attribute = db.floatstyle.attribute + db.sidebar.role.attribute = attribute role { text } + db.sidebar.attlist = + db.sidebar.role.attribute? + & db.sidebar.floatstyle.attribute? + & db.common.attributes + & db.common.linking.attributes + db.sidebar.info = db._info + db.sidebar = + + ## A portion of a document that is isolated from the main narrative flow + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:sidebar" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of sidebar" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sidebar" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sidebar { + db.sidebar.attlist, db.sidebar.info, db.all.blocks+ + } +} +div { + db.abstract.role.attribute = attribute role { text } + db.abstract.attlist = + db.abstract.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abstract.info = db._info.title.only + db.abstract = + + ## A summary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:abstract" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element abstract { + db.abstract.attlist, db.abstract.info, db.all.blocks+ + } +} +div { + db.personblurb.role.attribute = attribute role { text } + db.personblurb.attlist = + db.personblurb.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personblurb.info = db._info.title.only + db.personblurb = + + ## A short description or note about a person + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:personblurb" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element personblurb { + db.personblurb.attlist, db.personblurb.info, db.para.blocks+ + } +} +div { + db.blockquote.role.attribute = attribute role { text } + db.blockquote.attlist = + db.blockquote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.blockquote.info = db._info.title.only + db.blockquote = + + ## A quotation set off from the main text + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:blockquote" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element blockquote { + db.blockquote.attlist, + db.blockquote.info, + db.attribution?, + db.all.blocks+ + } +} +div { + db.attribution.role.attribute = attribute role { text } + db.attribution.attlist = + db.attribution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.attribution = + + ## The source of a block quote or epigraph + element attribution { + db.attribution.attlist, + (db._text + | db.person + | db.personname + | db.citetitle + | db.citation)* + } +} +div { + db.bridgehead.renderas.enumeration = + + ## Render as a first-level section + "sect1" + | + ## Render as a second-level section + "sect2" + | + ## Render as a third-level section + "sect3" + | + ## Render as a fourth-level section + "sect4" + | + ## Render as a fifth-level section + "sect5" + db.bridgehead.renderas-enum.attribute = + + ## Indicates how the bridge head should be rendered + attribute renderas { db.bridgehead.renderas.enumeration }? + db.bridgehead.renderas-other.attribute = + + ## Identifies the nature of the non-standard rendering + attribute otherrenderas { xsd:NMTOKEN } + db.bridgehead.renderas-other.attributes = + + ## Indicates how the bridge head should be rendered + attribute renderas { + + ## Identifies a non-standard rendering + "other" + } + & db.bridgehead.renderas-other.attribute + db.bridgehead.renderas.attribute = + db.bridgehead.renderas-enum.attribute + | db.bridgehead.renderas-other.attributes + db.bridgehead.role.attribute = attribute role { text } + db.bridgehead.attlist = + db.bridgehead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bridgehead.renderas.attribute? + db.bridgehead = + + ## A free-floating heading + element bridgehead { db.bridgehead.attlist, db.all.inlines* } +} +div { + db.remark.role.attribute = attribute role { text } + db.remark.attlist = + db.remark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.remark = + + ## A remark (or comment) intended for presentation in a draft manuscript + element remark { db.remark.attlist, db.all.inlines* } +} +div { + db.epigraph.role.attribute = attribute role { text } + db.epigraph.attlist = + db.epigraph.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.epigraph.info = db._info.title.forbidden + db.epigraph = + + ## A short inscription at the beginning of a document or component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:epigraph" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element epigraph { + db.epigraph.attlist, + db.epigraph.info, + db.attribution?, + (db.para.blocks | db.literallayout)+ + } +} +div { + db.footnote.role.attribute = attribute role { text } + db.footnote.label.attribute = + + ## Identifies the desired footnote mark + attribute label { xsd:NMTOKEN } + db.footnote.attlist = + db.footnote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.footnote.label.attribute? + db.footnote = + + ## A footnote + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:footnote)" + "footnote must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:epigraph)" + "epigraph must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of footnote" + ] + ] + ] + ] + element footnote { db.footnote.attlist, db.all.blocks+ } +} +div { + db.formalpara.role.attribute = attribute role { text } + db.formalpara.attlist = + db.formalpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.formalpara.info = db._info.title.onlyreq + db.formalpara = + + ## A paragraph with a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalpara { + db.formalpara.attlist, + db.formalpara.info, + db.indexing.inlines*, + db.para + } +} +div { + db.para.role.attribute = attribute role { text } + db.para.attlist = + db.para.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.para.info = db._info.title.forbidden + db.para = + + ## A paragraph + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:para" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element para { + db.para.attlist, + db.para.info, + (db.all.inlines | db.nopara.blocks)* + } +} +div { + db.simpara.role.attribute = attribute role { text } + db.simpara.attlist = + db.simpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.simpara.info = db._info.title.forbidden + db.simpara = + + ## A paragraph that contains only text and inline markup, no block elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simpara { + db.simpara.attlist, db.simpara.info, db.all.inlines* + } +} +div { + db.itemizedlist.role.attribute = attribute role { text } + db.itemizedlist.mark.attribute = + + ## Identifies the type of mark to be used on items in this list + attribute mark { xsd:NMTOKEN } + db.itemizedlist.attlist = + db.itemizedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.itemizedlist.mark.attribute? + db.itemizedlist.info = db._info.title.only + db.itemizedlist = + + ## A list in which each entry is marked with a bullet or other dingbat + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:itemizedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element itemizedlist { + db.itemizedlist.attlist, + db.itemizedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.orderedlist.role.attribute = attribute role { text } + db.orderedlist.continuation.enumeration = + + ## Specifies that numbering should begin where the preceding list left off + "continues" + | + ## Specifies that numbering should begin again at 1 + "restarts" + db.orderedlist.continuation.attribute = + + ## Indicates how list numbering should begin relative to the immediately preceding list + attribute continuation { db.orderedlist.continuation.enumeration } + db.orderedlist.startingnumber.attribute = + + ## Specifies the initial line number + attribute startingnumber { xsd:integer } + db.orderedlist.inheritnum.enumeration = + + ## Specifies that numbering should ignore list nesting + "ignore" + | + ## Specifies that numbering should inherit from outer-level lists + "inherit" + db.orderedlist.inheritnum.attribute = + + ## Indicates whether or not item numbering should be influenced by list nesting + attribute inheritnum { db.orderedlist.inheritnum.enumeration } + db.orderedlist.numeration.enumeration = + + ## Specifies Arabic numeration (1, 2, 3, …) + "arabic" + | + ## Specifies upper-case alphabetic numeration (A, B, C, …) + "upperalpha" + | + ## Specifies lower-case alphabetic numeration (a, b, c, …) + "loweralpha" + | + ## Specifies upper-case Roman numeration (I, II, III, …) + "upperroman" + | + ## Specifies lower-case Roman numeration (i, ii, iii …) + "lowerroman" + db.orderedlist.numeration.attribute = + + ## Indicates the desired numeration + attribute numeration { db.orderedlist.numeration.enumeration } + db.orderedlist.attlist = + db.orderedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & (db.orderedlist.continuation.attribute + | db.orderedlist.startingnumber.attribute)? + & db.orderedlist.inheritnum.attribute? + & db.orderedlist.numeration.attribute? + db.orderedlist.info = db._info.title.only + db.orderedlist = + + ## A list in which each entry is marked with a sequentially incremented label + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:orderedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element orderedlist { + db.orderedlist.attlist, + db.orderedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.listitem.role.attribute = attribute role { text } + db.listitem.override.attribute = + + ## Specifies the keyword for the type of mark that should be used on this + ## item, instead of the mark that would be used by default + attribute override { xsd:NMTOKEN } + db.listitem.attlist = + db.listitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.listitem.override.attribute? + db.listitem.info = db._info.title.forbidden + db.listitem = + + ## A wrapper for the elements of a list item + element listitem { + db.listitem.attlist, db.listitem.info, db.all.blocks+ + } +} +div { + db.segmentedlist.role.attribute = attribute role { text } + db.segmentedlist.attlist = + db.segmentedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segmentedlist.info = db._info.title.only + db.segmentedlist = + + ## A segmented list, a list of sets of elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:segmentedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element segmentedlist { + db.segmentedlist.attlist, + db.segmentedlist.info, + db.segtitle+, + db.seglistitem+ + } +} +div { + db.segtitle.role.attribute = attribute role { text } + db.segtitle.attlist = + db.segtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segtitle = + + ## The title of an element of a list item in a segmented list + element segtitle { db.segtitle.attlist, db.all.inlines* } +} +div { + db.seglistitem.role.attribute = attribute role { text } + db.seglistitem.attlist = + db.seglistitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seglistitem = + + ## A list item in a segmented list + [ + s:pattern [ + s:title [ "Cardinality of segments and titles" ] + s:rule [ + context = "db:seglistitem" + s:assert [ + test = "count(db:seg) = count(../db:segtitle)" + "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist" + ] + ] + ] + ] + element seglistitem { db.seglistitem.attlist, db.seg+ } +} +div { + db.seg.role.attribute = attribute role { text } + db.seg.attlist = + db.seg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seg = + + ## An element of a list item in a segmented list + element seg { db.seg.attlist, db.all.inlines* } +} +div { + db.simplelist.role.attribute = attribute role { text } + db.simplelist.type.enumeration = + + ## A tabular presentation in row-major order. + "horiz" + | + ## A tabular presentation in column-major order. + "vert" + | + ## An inline presentation, usually a comma-delimited list. + "inline" + db.simplelist.type.attribute = + + ## Specifies the type of list presentation + [ a:defaultValue = "vert" ] + attribute type { db.simplelist.type.enumeration } + db.simplelist.columns.attribute = + + ## Specifies the number of columns for horizontal or vertical presentation + attribute columns { xsd:integer } + db.simplelist.attlist = + db.simplelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplelist.type.attribute? + & db.simplelist.columns.attribute? + db.simplelist = + + ## An undecorated list of single words or short phrases + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplelist { db.simplelist.attlist, db.member+ } +} +div { + db.member.role.attribute = attribute role { text } + db.member.attlist = + db.member.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.member = + + ## An element of a simple list + element member { db.member.attlist, db.all.inlines* } +} +div { + db.variablelist.role.attribute = attribute role { text } + db.variablelist.termlength.attribute = + + ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + attribute termlength { text } + db.variablelist.attlist = + db.variablelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.variablelist.termlength.attribute? + db.variablelist.info = db._info.title.only + db.variablelist = + + ## A list in which each entry is composed of a set of one or more terms and an associated description + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:variablelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element variablelist { + db.variablelist.attlist, + db.variablelist.info, + db.all.blocks*, + db.varlistentry+ + } +} +div { + db.varlistentry.role.attribute = attribute role { text } + db.varlistentry.attlist = + db.varlistentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varlistentry = + + ## A wrapper for a set of terms and the associated description in a variable list + element varlistentry { + db.varlistentry.attlist, db.term+, db.listitem + } +} +div { + db.term.role.attribute = attribute role { text } + db.term.attlist = + db.term.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.term = + + ## The word or phrase being defined or described in a variable list + element term { db.term.attlist, db.all.inlines* } +} +div { + db.example.role.attribute = attribute role { text } + db.example.label.attribute = db.label.attribute + db.example.width.attribute = db.width.characters.attribute + db.example.pgwide.attribute = db.pgwide.attribute + db.example.floatstyle.attribute = db.floatstyle.attribute + db.example.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.example.attlist = + db.example.role.attribute? + & db.example.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.example.label.attribute? + & db.example.floatstyle.attribute? + & (db.example.width.attribute | db.example.pgwide.attribute)? + db.example.info = db._info.title.onlyreq + db.example = + + ## A formal example, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:example" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element example { + db.example.attlist, db.example.info, db.all.blocks+, db.caption? + } +} +div { + db.informalexample.role.attribute = attribute role { text } + db.informalexample.width.attribute = db.width.characters.attribute + db.informalexample.pgwide.attribute = db.pgwide.attribute + db.informalexample.floatstyle.attribute = db.floatstyle.attribute + db.informalexample.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.informalexample.attlist = + db.informalexample.role.attribute? + & db.informalexample.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalexample.floatstyle.attribute? + & (db.informalexample.width.attribute + | db.informalexample.pgwide.attribute)? + db.informalexample.info = db._info.title.forbidden + db.informalexample = + + ## A displayed example without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalexample" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalexample { + db.informalexample.attlist, + db.informalexample.info, + db.all.blocks+, + db.caption? + } +} +db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co +db.verbatim.contentmodel = + db._info.title.forbidden, (db.textobject | db.verbatim.inlines*) +div { + db.literallayout.role.attribute = attribute role { text } + db.literallayout.class.enumeration = + + ## The literal layout should be formatted with a monospaced font + "monospaced" + | + ## The literal layout should be formatted with the current font + "normal" + db.literallayout.class.attribute = + + ## Specifies the class of literal layout + attribute class { db.literallayout.class.enumeration } + db.literallayout.attlist = + db.literallayout.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.literallayout.class.attribute? + db.literallayout = + + ## A block of text in which line breaks and white space are to be reproduced faithfully + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:literallayout" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element literallayout { + db.literallayout.attlist, db.verbatim.contentmodel + } +} +div { + db.screen.role.attribute = attribute role { text } + db.screen.width.attribute = db.width.characters.attribute + db.screen.attlist = + db.screen.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.screen.width.attribute? + db.screen = + + ## Text that a user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screen" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screen { db.screen.attlist, db.verbatim.contentmodel } +} +div { + db.screenshot.role.attribute = attribute role { text } + db.screenshot.attlist = + db.screenshot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenshot.info = db._info + db.screenshot = + + ## A representation of what the user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenshot" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenshot { + db.screenshot.attlist, db.screenshot.info, db.mediaobject + } +} +div { + db.figure.role.attribute = attribute role { text } + db.figure.label.attribute = db.label.attribute + db.figure.pgwide.attribute = db.pgwide.attribute + db.figure.floatstyle.attribute = db.floatstyle.attribute + db.figure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.figure.attlist = + db.figure.role.attribute? + & db.figure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.figure.label.attribute? + & db.figure.pgwide.attribute? + & db.figure.floatstyle.attribute? + db.figure.info = db._info.title.onlyreq + db.figure = + + ## A formal figure, generally an illustration, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:figure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element figure { + db.figure.attlist, db.figure.info, db.all.blocks+, db.caption? + } +} +div { + db.informalfigure.role.attribute = attribute role { text } + db.informalfigure.label.attribute = db.label.attribute + db.informalfigure.pgwide.attribute = db.pgwide.attribute + db.informalfigure.floatstyle.attribute = db.floatstyle.attribute + db.informalfigure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.informalfigure.attlist = + db.informalfigure.role.attribute? + & db.informalfigure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalfigure.label.attribute? + & db.informalfigure.pgwide.attribute? + & db.informalfigure.floatstyle.attribute? + db.informalfigure.info = db._info.title.forbidden + db.informalfigure = + + ## A untitled figure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalfigure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalfigure { + db.informalfigure.attlist, + db.informalfigure.info, + db.all.blocks+, + db.caption? + } +} +db.mediaobject.content = + (db.videoobject | db.audioobject | db.imageobject | db.textobject) + | db.imageobjectco +div { + db.mediaobject.role.attribute = attribute role { text } + db.mediaobject.attlist = + db.mediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mediaobject.info = db._info.title.forbidden + db.mediaobject = + + ## A displayed media object (video, audio, image, etc.) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:mediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element mediaobject { + db.mediaobject.attlist, + db.mediaobject.info, + db.alt?, + db.mediaobject.content+, + db.caption? + } +} +div { + db.inlinemediaobject.role.attribute = attribute role { text } + db.inlinemediaobject.attlist = + db.inlinemediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlinemediaobject.info = db._info.title.forbidden + db.inlinemediaobject = + + ## An inline media object (video, audio, image, and so on) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:inlinemediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element inlinemediaobject { + db.inlinemediaobject.attlist, + db.inlinemediaobject.info, + db.alt?, + db.mediaobject.content+ + } +} +div { + db.videoobject.role.attribute = attribute role { text } + db.videoobject.attlist = + db.videoobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.videoobject.info = db._info.title.forbidden + db.videoobject = + + ## A wrapper for video data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videoobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videoobject { + db.videoobject.attlist, db.videoobject.info, db.videodata+ + } +} +div { + db.audioobject.role.attribute = attribute role { text } + db.audioobject.attlist = + db.audioobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.audioobject.info = db._info.title.forbidden + db.audioobject = + + ## A wrapper for audio data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audioobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audioobject { + db.audioobject.attlist, db.audioobject.info, db.audiodata+ + } +} +db.imageobject.content = + db.imagedata+ + | db.imagedata.mathml + | db.imagedata.svg+ + | db.xi.include +div { + db.imageobject.role.attribute = attribute role { text } + db.imageobject.attlist = + db.imageobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobject.info = db._info.title.forbidden + db.imageobject = + + ## A wrapper for image data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobject { + db.imageobject.attlist, + db.imageobject.info, + db.imageobject.content + } +} +div { + db.textobject.role.attribute = attribute role { text } + db.textobject.attlist = + db.textobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.textobject.info = db._info.title.forbidden + db.textobject = + + ## A wrapper for a text description of an object and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textobject { + db.textobject.attlist, + db.textobject.info, + (db.phrase | db.textdata | db.all.blocks+) + } +} +div { + db.videodata.role.attribute = attribute role { text } + db.videodata.align.enumeration = db.halign.enumeration + db.videodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.videodata.align.enumeration } + db.videodata.autoplay.attribute = db.autoplay.attribute + db.videodata.classid.attribute = db.classid.attribute + db.videodata.valign.enumeration = db.valign.enumeration + db.videodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.videodata.valign.enumeration } + db.videodata.width.attribute = db.width.attribute + db.videodata.depth.attribute = db.depth.attribute + db.videodata.contentwidth.attribute = db.contentwidth.attribute + db.videodata.contentdepth.attribute = db.contentdepth.attribute + db.videodata.scalefit.enumeration = db.scalefit.enumeration + db.videodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.videodata.scalefit.enumeration } + db.videodata.scale.attribute = db.scale.attribute + db.videodata.attlist = + db.videodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.videodata.align.attribute? + & db.videodata.valign.attribute? + & db.videodata.width.attribute? + & db.videodata.contentwidth.attribute? + & db.videodata.scalefit.attribute? + & db.videodata.scale.attribute? + & db.videodata.depth.attribute? + & db.videodata.contentdepth.attribute? + & db.videodata.autoplay.attribute? + & db.videodata.classid.attribute? + db.videodata.info = db._info.title.forbidden + db.videodata = + + ## Pointer to external video data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videodata { + db.videodata.attlist, db.videodata.info, db.multimediaparam* + } +} +div { + db.audiodata.role.attribute = attribute role { text } + db.audiodata.align.enumeration = db.halign.enumeration + db.audiodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.audiodata.align.enumeration } + db.audiodata.autoplay.attribute = db.autoplay.attribute + db.audiodata.classid.attribute = db.classid.attribute + db.audiodata.contentwidth.attribute = db.contentwidth.attribute + db.audiodata.contentdepth.attribute = db.contentdepth.attribute + db.audiodata.depth.attribute = db.depth.attribute + db.audiodata.scale.attribute = db.scale.attribute + db.audiodata.scalefit.enumeration = db.scalefit.enumeration + db.audiodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.audiodata.scalefit.enumeration } + db.audiodata.valign.enumeration = db.valign.enumeration + db.audiodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.audiodata.valign.enumeration } + db.audiodata.width.attribute = db.width.attribute + db.audiodata.attlist = + db.audiodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.audiodata.align.attribute? + & db.audiodata.autoplay.attribute? + & db.audiodata.classid.attribute? + & db.audiodata.contentdepth.attribute? + & db.audiodata.contentwidth.attribute? + & db.audiodata.depth.attribute? + & db.audiodata.scale.attribute? + & db.audiodata.scalefit.attribute? + & db.audiodata.valign.attribute? + & db.audiodata.width.attribute? + db.audiodata.info = db._info.title.forbidden + db.audiodata = + + ## Pointer to external audio data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audiodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audiodata { + db.audiodata.attlist, db.audiodata.info, db.multimediaparam* + } +} +div { + db.imagedata.role.attribute = attribute role { text } + db.imagedata.align.enumeration = db.halign.enumeration + db.imagedata.align.attribute = + + ## Specifies the (horizontal) alignment of the image data + attribute align { db.imagedata.align.enumeration } + db.imagedata.valign.enumeration = db.valign.enumeration + db.imagedata.valign.attribute = + + ## Specifies the vertical alignment of the image data + attribute valign { db.imagedata.valign.enumeration } + db.imagedata.width.attribute = db.width.attribute + db.imagedata.depth.attribute = db.depth.attribute + db.imagedata.contentwidth.attribute = db.contentwidth.attribute + db.imagedata.contentdepth.attribute = db.contentdepth.attribute + db.imagedata.scalefit.enumeration = db.scalefit.enumeration + db.imagedata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.imagedata.scalefit.enumeration } + db.imagedata.scale.attribute = db.scale.attribute + db.imagedata.attlist = + db.imagedata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.info = db._info.title.forbidden + db.imagedata = + + ## Pointer to external image data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.attlist, db.imagedata.info, db.multimediaparam* + } +} +div { + db.textdata.role.attribute = attribute role { text } + db.textdata.encoding.attribute = + + ## Identifies the encoding of the text in the external file + attribute encoding { text } + db.textdata.attlist = + db.textdata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.textdata.encoding.attribute? + db.textdata.info = db._info.title.forbidden + db.textdata = + + ## Pointer to external text data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textdata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textdata { db.textdata.attlist, db.textdata.info } +} +div { + db.multimediaparam.role.attribute = attribute role { text } + db.multimediaparam.name.attribute = + + ## Specifies the name of the parameter + attribute name { text } + db.multimediaparam.value.attribute = + + ## Specifies the value of the parameter + attribute value { text } + db.multimediaparam.valuetype.attribute = + + ## Specifies the type of the value of the parameter + attribute valuetype { text } + db.multimediaparam.attlist = + db.multimediaparam.role.attribute? + & db.common.attributes + & db.multimediaparam.name.attribute + & db.multimediaparam.value.attribute + & db.multimediaparam.valuetype.attribute? + db.multimediaparam = + + ## Application specific parameters for a media player + element multimediaparam { db.multimediaparam.attlist, empty } +} +div { + db.caption.role.attribute = attribute role { text } + db.caption.attlist = + db.caption.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caption.info = db._info.title.forbidden + db.caption = + + ## A caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { + db.caption.attlist, db.caption.info, db.all.blocks+ + } +} +div { + db.address.role.attribute = attribute role { text } + db.address.attlist = + db.address.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.address = + + ## A real-world address, generally a postal address + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:address" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element address { + db.address.attlist, + (db._text + | db.personname + | db.orgname + | db.pob + | db.street + | db.city + | db.state + | db.postcode + | db.country + | db.phone + | db.fax + | db.email + | db.uri + | db.otheraddr)* + } +} +div { + db.street.role.attribute = attribute role { text } + db.street.attlist = + db.street.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.street = + + ## A street address in an address + element street { db.street.attlist, db._text } +} +div { + db.pob.role.attribute = attribute role { text } + db.pob.attlist = + db.pob.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pob = + + ## A post office box in an address + element pob { db.pob.attlist, db._text } +} +div { + db.postcode.role.attribute = attribute role { text } + db.postcode.attlist = + db.postcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.postcode = + + ## A postal code in an address + element postcode { db.postcode.attlist, db._text } +} +div { + db.city.role.attribute = attribute role { text } + db.city.attlist = + db.city.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.city = + + ## The name of a city in an address + element city { db.city.attlist, db._text } +} +div { + db.state.role.attribute = attribute role { text } + db.state.attlist = + db.state.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.state = + + ## A state or province in an address + element state { db.state.attlist, db._text } +} +div { + db.country.role.attribute = attribute role { text } + db.country.attlist = + db.country.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.country = + + ## The name of a country + element country { db.country.attlist, db._text } +} +div { + db.phone.role.attribute = attribute role { text } + db.phone.attlist = + db.phone.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.phone = + + ## A telephone number + element phone { db.phone.attlist, db._text } +} +div { + db.fax.role.attribute = attribute role { text } + db.fax.attlist = + db.fax.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.fax = + + ## A fax number + element fax { db.fax.attlist, db._text } +} +div { + db.otheraddr.role.attribute = attribute role { text } + db.otheraddr.attlist = + db.otheraddr.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.otheraddr = + + ## Uncategorized information in address + element otheraddr { db.otheraddr.attlist, db._text } +} +div { + db.affiliation.role.attribute = attribute role { text } + db.affiliation.attlist = + db.affiliation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.affiliation = + + ## The institutional affiliation of an individual + element affiliation { + db.affiliation.attlist, + db.shortaffil?, + db.jobtitle*, + (db.org? | (db.orgname?, db.orgdiv*, db.address*)) + } +} +div { + db.shortaffil.role.attribute = attribute role { text } + db.shortaffil.attlist = + db.shortaffil.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.shortaffil = + + ## A brief description of an affiliation + element shortaffil { db.shortaffil.attlist, db._text } +} +div { + db.jobtitle.role.attribute = attribute role { text } + db.jobtitle.attlist = + db.jobtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.jobtitle = + + ## The title of an individual in an organization + element jobtitle { db.jobtitle.attlist, db._text } +} +div { + db.orgname.class.enumeration = + + ## A consortium + "consortium" + | + ## A corporation + "corporation" + | + ## An informal organization + "informal" + | + ## A non-profit organization + "nonprofit" + db.orgname.class-enum.attribute = + + ## Specifies the nature of the organization + attribute class { db.orgname.class.enumeration } + db.orgname.class-other.attributes = + + ## Specifies the nature of the organization + attribute class { + + ## Indicates a non-standard organization class + "other" + }, + + ## Identifies the non-standard nature of the organization + attribute otherclass { text } + db.orgname.class.attribute = + db.orgname.class-enum.attribute | db.orgname.class-other.attributes + db.orgname.role.attribute = attribute role { text } + db.orgname.attlist = + db.orgname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.orgname.class.attribute? + db.orgname = + + ## The name of an organization + element orgname { db.orgname.attlist, db._text } +} +div { + db.orgdiv.role.attribute = attribute role { text } + db.orgdiv.attlist = + db.orgdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.orgdiv = + + ## A division of an organization + element orgdiv { db.orgdiv.attlist, db.all.inlines* } +} +div { + db.artpagenums.role.attribute = attribute role { text } + db.artpagenums.attlist = + db.artpagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.artpagenums = + + ## The page numbers of an article as published + element artpagenums { db.artpagenums.attlist, db._text } +} +div { + db.personname.role.attribute = attribute role { text } + db.personname.attlist = + db.personname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personname = + + ## The personal name of an individual + element personname { + db.personname.attlist, + (db._text + | (db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername)+ + | (db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername)+) + } +} +db.person.author.contentmodel = + db.personname, + (db.personblurb + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.org.author.contentmodel = + db.orgname, + (db.orgdiv + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.credit.contentmodel = + db.person.author.contentmodel | db.org.author.contentmodel +div { + db.author.role.attribute = attribute role { text } + db.author.attlist = + db.author.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.author = + + ## The name of an individual author + element author { db.author.attlist, db.credit.contentmodel } +} +div { + db.authorgroup.role.attribute = attribute role { text } + db.authorgroup.attlist = + db.authorgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorgroup = + + ## Wrapper for author information when a document has multiple authors or collaborators + element authorgroup { + db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+ + } +} +div { + db.collab.role.attribute = attribute role { text } + db.collab.attlist = + db.collab.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.collab = + + ## Identifies a collaborator + element collab { + db.collab.attlist, + (db.person | db.personname | db.org | db.orgname)+, + db.affiliation* + } +} +div { + db.authorinitials.role.attribute = attribute role { text } + db.authorinitials.attlist = + db.authorinitials.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorinitials = + + ## The initials or other short identifier for an author + element authorinitials { db.authorinitials.attlist, db._text } +} +div { + db.person.role.attribute = attribute role { text } + db.person.attlist = + db.person.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.person = + + ## A person and associated metadata + element person { + db.person.attlist, + db.personname, + (db.address + | db.affiliation + | db.email + | db.uri + | db.personblurb)* + } +} +div { + db.org.role.attribute = attribute role { text } + db.org.attlist = + db.org.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.org = + + ## An organization and associated metadata + element org { + db.org.attlist, + db.orgname, + (db.address | db.affiliation | db.email | db.uri | db.orgdiv)* + } +} +div { + db.confgroup.role.attribute = attribute role { text } + db.confgroup.attlist = + db.confgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confgroup = + + ## A wrapper for document meta-information about a conference + element confgroup { + db.confgroup.attlist, + (db.confdates + | db.conftitle + | db.confnum + | db.confsponsor + | db.address)* + } +} +div { + db.confdates.role.attribute = attribute role { text } + db.confdates.attlist = + db.confdates.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confdates = + + ## The dates of a conference for which a document was written + element confdates { db.confdates.attlist, db._text } +} +div { + db.conftitle.role.attribute = attribute role { text } + db.conftitle.attlist = + db.conftitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.conftitle = + + ## The title of a conference for which a document was written + element conftitle { db.conftitle.attlist, db._text } +} +div { + db.confnum.role.attribute = attribute role { text } + db.confnum.attlist = + db.confnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confnum = + + ## An identifier, frequently numerical, associated with a conference for which a document was written + element confnum { db.confnum.attlist, db._text } +} +div { + db.confsponsor.role.attribute = attribute role { text } + db.confsponsor.attlist = + db.confsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confsponsor = + + ## The sponsor of a conference for which a document was written + element confsponsor { db.confsponsor.attlist, db._text } +} +div { + db.contractnum.role.attribute = attribute role { text } + db.contractnum.attlist = + db.contractnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractnum = + + ## The contract number of a document + element contractnum { db.contractnum.attlist, db._text } +} +div { + db.contractsponsor.role.attribute = attribute role { text } + db.contractsponsor.attlist = + db.contractsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractsponsor = + + ## The sponsor of a contract + element contractsponsor { db.contractsponsor.attlist, db._text } +} +div { + db.copyright.role.attribute = attribute role { text } + db.copyright.attlist = + db.copyright.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.copyright = + + ## Copyright information about a document + element copyright { db.copyright.attlist, db.year+, db.holder* } +} +div { + db.year.role.attribute = attribute role { text } + db.year.attlist = + db.year.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.year = + + ## The year of publication of a document + element year { db.year.attlist, db._text } +} +div { + db.holder.role.attribute = attribute role { text } + db.holder.attlist = + db.holder.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.holder = + + ## The name of the individual or organization that holds a copyright + element holder { db.holder.attlist, db._text } +} +db.cover.contentmodel = + (db.para.blocks + | db.extension.blocks + | db.list.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.synopsis.blocks +div { + db.cover.role.attribute = attribute role { text } + db.cover.attlist = + db.cover.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.cover = + + ## Additional content for the cover of a publication + element cover { db.cover.attlist, db.cover.contentmodel+ } +} +db.date.contentmodel = + xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text +div { + db.date.role.attribute = attribute role { text } + db.date.attlist = + db.date.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.date = + + ## The date of publication or revision of a document + element date { db.date.attlist, db.date.contentmodel } +} +div { + db.edition.role.attribute = attribute role { text } + db.edition.attlist = + db.edition.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.edition = + + ## The name or number of an edition of a document + element edition { db.edition.attlist, db._text } +} +div { + db.editor.role.attribute = attribute role { text } + db.editor.attlist = + db.editor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.editor = + + ## The name of the editor of a document + element editor { db.editor.attlist, db.credit.contentmodel } +} +div { + db.biblioid.role.attribute = attribute role { text } + db.biblioid.attlist = + db.biblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.biblioid = + + ## An identifier for a document + element biblioid { db.biblioid.attlist, db._text } +} +div { + db.citebiblioid.role.attribute = attribute role { text } + db.citebiblioid.attlist = + db.citebiblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.citebiblioid = + + ## A citation of a bibliographic identifier + element citebiblioid { db.citebiblioid.attlist, db._text } +} +div { + db.bibliosource.role.attribute = attribute role { text } + db.bibliosource.attlist = + db.bibliosource.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.bibliosource = + + ## The source of a document + element bibliosource { db.bibliosource.attlist, db._text } +} +div { + db.bibliorelation.type.enumeration = + + ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + "hasformat" + | + ## The described resource includes the referenced resource either physically or logically + "haspart" + | + ## The described resource has a version, edition, or adaptation, namely, the referenced resource + "hasversion" + | + ## The described resource is the same intellectual content of the referenced resource, but presented in another format + "isformatof" + | + ## The described resource is a physical or logical part of the referenced resource + "ispartof" + | + ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource + "isreferencedby" + | + ## The described resource is supplanted, displaced, or superceded by the referenced resource + "isreplacedby" + | + ## The described resource is required by the referenced resource, either physically or logically + "isrequiredby" + | + ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + "isversionof" + | + ## The described resource references, cites, or otherwise points to the referenced resource + "references" + | + ## The described resource supplants, displaces, or supersedes the referenced resource + "replaces" + | + ## The described resource requires the referenced resource to support its function, delivery, or coherence of content + "requires" + db.bibliorelation.type-enum.attribute = + + ## Identifies the type of relationship + attribute type { db.bibliorelation.type.enumeration }? + db.bibliorelation.type-other.attributes = + + ## Identifies the type of relationship + attribute type { + + ## The described resource has a non-standard relationship with the referenced resource + "othertype" + }?, + + ## A keyword that identififes the type of the non-standard relationship + attribute othertype { xsd:NMTOKEN } + db.bibliorelation.type.attribute = + db.bibliorelation.type-enum.attribute + | db.bibliorelation.type-other.attributes + db.bibliorelation.role.attribute = attribute role { text } + db.bibliorelation.attlist = + db.bibliorelation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + & db.bibliorelation.type.attribute + db.bibliorelation = + + ## The relationship of a document to another + element bibliorelation { db.bibliorelation.attlist, db._text } +} +div { + db.bibliocoverage.spacial.enumeration = + + ## The DCMI Point identifies a point in space using its geographic coordinates + "dcmipoint" + | + ## ISO 3166 Codes for the representation of names of countries + "iso3166" + | + ## The DCMI Box identifies a region of space using its geographic limits + "dcmibox" + | + ## The Getty Thesaurus of Geographic Names + "tgn" + db.bibliocoverage.spatial-enum.attribute = + + ## Specifies the type of spatial coverage + attribute spatial { db.bibliocoverage.spacial.enumeration }? + db.bibliocoverage.spatial-other.attributes = + + ## Specifies the type of spatial coverage + attribute spatial { + + ## Identifies a non-standard type of coverage + "otherspatial" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute otherspatial { xsd:NMTOKEN } + db.bibliocoverage.spatial.attribute = + db.bibliocoverage.spatial-enum.attribute + | db.bibliocoverage.spatial-other.attributes + db.bibliocoverage.temporal.enumeration = + + ## A specification of the limits of a time interval + "dcmiperiod" + | + ## W3C Encoding rules for dates and times—a profile based on ISO 8601 + "w3c-dtf" + db.bibliocoverage.temporal-enum.attribute = + + ## Specifies the type of temporal coverage + attribute temporal { db.bibliocoverage.temporal.enumeration }? + db.bibliocoverage.temporal-other.attributes = + + ## Specifies the type of temporal coverage + attribute temporal { + + ## Specifies a non-standard type of coverage + "othertemporal" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute othertemporal { xsd:NMTOKEN } + db.bibliocoverage.temporal.attribute = + db.bibliocoverage.temporal-enum.attribute + | db.bibliocoverage.temporal-other.attributes + db.bibliocoverage.coverage.attrib = + db.bibliocoverage.spatial.attribute + & db.bibliocoverage.temporal.attribute + db.bibliocoverage.role.attribute = attribute role { text } + db.bibliocoverage.attlist = + db.bibliocoverage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bibliocoverage.coverage.attrib + db.bibliocoverage = + + ## The spatial or temporal coverage of a document + element bibliocoverage { db.bibliocoverage.attlist, db._text } +} +div { + db.legalnotice.role.attribute = attribute role { text } + db.legalnotice.attlist = + db.legalnotice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.legalnotice.info = db._info.title.only + db.legalnotice = + + ## A statement of legal obligations or requirements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:legalnotice" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element legalnotice { + db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+ + } +} +div { + db.othercredit.class.enumeration = + + ## A copy editor + "copyeditor" + | + ## A graphic designer + "graphicdesigner" + | + ## A production editor + "productioneditor" + | + ## A technical editor + "technicaleditor" + | + ## A translator + "translator" + | + ## An indexer + "indexer" + | + ## A proof-reader + "proofreader" + | + ## A cover designer + "coverdesigner" + | + ## An interior designer + "interiordesigner" + | + ## An illustrator + "illustrator" + | + ## A reviewer + "reviewer" + | + ## A typesetter + "typesetter" + | + ## A converter (a persons responsible for conversion, not an application) + "conversion" + db.othercredit.class-enum.attribute = + + ## Identifies the nature of the contributor + attribute class { db.othercredit.class.enumeration }? + db.othercredit.class-other.attribute = + + ## Identifies the nature of the non-standard contribution + attribute otherclass { xsd:NMTOKEN } + db.othercredit.class-other.attributes = + + ## Identifies the nature of the contributor + attribute class { + + ## Identifies a non-standard contribution + "other" + } + & db.othercredit.class-other.attribute + db.othercredit.class.attribute = + db.othercredit.class-enum.attribute + | db.othercredit.class-other.attributes + db.othercredit.role.attribute = attribute role { text } + db.othercredit.attlist = + db.othercredit.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.othercredit.class.attribute + db.othercredit = + + ## A person or entity, other than an author or editor, credited in a document + element othercredit { + db.othercredit.attlist, db.credit.contentmodel + } +} +div { + db.pagenums.role.attribute = attribute role { text } + db.pagenums.attlist = + db.pagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pagenums = + + ## The numbers of the pages in a book, for use in a bibliographic entry + element pagenums { db.pagenums.attlist, db._text } +} +div { + db.contrib.role.attribute = attribute role { text } + db.contrib.attlist = + db.contrib.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contrib = + + ## A summary of the contributions made to a document by a credited source + element contrib { db.contrib.attlist, db.all.inlines* } +} +div { + db.honorific.role.attribute = attribute role { text } + db.honorific.attlist = + db.honorific.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.honorific = + + ## The title of a person + element honorific { db.honorific.attlist, db._text } +} +div { + db.firstname.role.attribute = attribute role { text } + db.firstname.attlist = + db.firstname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.firstname = + + ## A given name of a person + element firstname { db.firstname.attlist, db._text } +} +div { + db.givenname.role.attribute = attribute role { text } + db.givenname.attlist = + db.givenname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.givenname = + + ## The given name of a person + element givenname { db.givenname.attlist, db._text } +} +div { + db.surname.role.attribute = attribute role { text } + db.surname.attlist = + db.surname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.surname = + + ## An inherited or family name; in western cultures the last name + element surname { db.surname.attlist, db._text } +} +div { + db.lineage.role.attribute = attribute role { text } + db.lineage.attlist = + db.lineage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineage = + + ## The portion of a person's name indicating a relationship to ancestors + element lineage { db.lineage.attlist, db._text } +} +div { + db.othername.role.attribute = attribute role { text } + db.othername.attlist = + db.othername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.othername = + + ## A component of a person's name that is not a first name, surname, or lineage + element othername { db.othername.attlist, db._text } +} +div { + db.printhistory.role.attribute = attribute role { text } + db.printhistory.attlist = + db.printhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.printhistory = + + ## The printing history of a document + element printhistory { db.printhistory.attlist, db.para.blocks+ } +} +div { + db.pubdate.role.attribute = attribute role { text } + db.pubdate.attlist = + db.pubdate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pubdate = + + ## The date of publication of a document + element pubdate { db.pubdate.attlist, db.date.contentmodel } +} +div { + db.publisher.role.attribute = attribute role { text } + db.publisher.attlist = + db.publisher.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publisher = + + ## The publisher of a document + element publisher { + db.publisher.attlist, db.publishername, db.address* + } +} +div { + db.publishername.role.attribute = attribute role { text } + db.publishername.attlist = + db.publishername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publishername = + + ## The name of the publisher of a document + element publishername { db.publishername.attlist, db._text } +} +div { + db.releaseinfo.role.attribute = attribute role { text } + db.releaseinfo.attlist = + db.releaseinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.releaseinfo = + + ## Information about a particular release of a document + element releaseinfo { db.releaseinfo.attlist, db._text } +} +div { + db.revhistory.role.attribute = attribute role { text } + db.revhistory.attlist = + db.revhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revhistory.info = db._info.title.only + db.revhistory = + + ## A history of the revisions to a document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:revhistory" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element revhistory { + db.revhistory.attlist, db.revhistory.info, db.revision+ + } +} +div { + db.revision.role.attribute = attribute role { text } + db.revision.attlist = + db.revision.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revision = + + ## An entry describing a single revision in the history of the revisions to a document + element revision { + db.revision.attlist, + db.revnumber?, + db.date, + (db.authorinitials | db.author)*, + (db.revremark | db.revdescription)? + } +} +div { + db.revnumber.role.attribute = attribute role { text } + db.revnumber.attlist = + db.revnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revnumber = + + ## A document revision number + element revnumber { db.revnumber.attlist, db._text } +} +div { + db.revremark.role.attribute = attribute role { text } + db.revremark.attlist = + db.revremark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revremark = + + ## A description of a revision to a document + element revremark { db.revremark.attlist, db._text } +} +div { + db.revdescription.role.attribute = attribute role { text } + db.revdescription.attlist = + db.revdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revdescription = + + ## A extended description of a revision to a document + element revdescription { db.revdescription.attlist, db.all.blocks* } +} +div { + db.seriesvolnums.role.attribute = attribute role { text } + db.seriesvolnums.attlist = + db.seriesvolnums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seriesvolnums = + + ## Numbers of the volumes in a series of books + element seriesvolnums { db.seriesvolnums.attlist, db._text } +} +div { + db.volumenum.role.attribute = attribute role { text } + db.volumenum.attlist = + db.volumenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.volumenum = + + ## The volume number of a document in a set (as of books in a set or articles in a journal) + element volumenum { db.volumenum.attlist, db._text } +} +div { + db.issuenum.role.attribute = attribute role { text } + db.issuenum.attlist = + db.issuenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.issuenum = + + ## The number of an issue of a journal + element issuenum { db.issuenum.attlist, db._text } +} +div { + db.meta.role.attribute = attribute role { text } + db.meta.name.attribute = + + ## A name for the metadata element + attribute name { text } + db.meta.content.attribute = + + ## The metadata content + attribute content { text } + db.meta.attlist = + db.meta.name.attribute? + & db.meta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.meta.empty = + + ## A generic metadata element + element meta { db.meta.attlist, db.meta.content.attribute, empty } + db.meta.content = + + ## A generic metadata element + element meta { + db.meta.attlist, + (text | db._any | db.all.inlines | db.all.blocks)* + } + db.meta = db.meta.empty | db.meta.content +} +div { + db.package.role.attribute = attribute role { text } + db.package.attlist = + db.package.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.package = + + ## A software or application package + element package { db.package.attlist, db._text } +} +div { + db.email.role.attribute = attribute role { text } + db.email.attlist = + db.email.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.email = + + ## An email address + element email { db.email.attlist, db._text } +} +div { + db.lineannotation.role.attribute = attribute role { text } + db.lineannotation.attlist = + db.lineannotation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineannotation = + + ## A comment on a line in a verbatim listing + element lineannotation { db.lineannotation.attlist, db._text } +} +div { + db.parameter.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + db.parameter.class.attribute = + + ## Identifies the class of parameter + attribute class { db.parameter.class.enumeration } + db.parameter.role.attribute = attribute role { text } + db.parameter.attlist = + db.parameter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.parameter.class.attribute? + db.parameter = + + ## A value or a symbolic reference to a value + element parameter { db.parameter.attlist, db._text } +} +db.replaceable.inlines = db._text | db.co +div { + db.replaceable.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + | + ## A parameter + "parameter" + db.replaceable.class.attribute = + + ## Identifies the nature of the replaceable text + attribute class { db.replaceable.class.enumeration } + db.replaceable.role.attribute = attribute role { text } + db.replaceable.attlist = + db.replaceable.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.replaceable.class.attribute? + db.replaceable = + + ## Content that may or must be replaced by the user + element replaceable { + db.replaceable.attlist, db.replaceable.inlines* + } +} +div { + db.uri.type.attribute = + + ## Identifies the type of URI specified + attribute type { text }? + db.uri.role.attribute = attribute role { text } + db.uri.attlist = + db.uri.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.uri.type.attribute + db.uri = + + ## A Uniform Resource Identifier + element uri { db.uri.attlist, db._text } +} +div { + db.abbrev.role.attribute = attribute role { text } + db.abbrev.attlist = + db.abbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abbrev = + + ## An abbreviation, especially one followed by a period + element abbrev { + db.abbrev.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.acronym.role.attribute = attribute role { text } + db.acronym.attlist = + db.acronym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.acronym = + + ## An often pronounceable word made from the initial (or selected) letters of a name or phrase + element acronym { + db.acronym.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.citation.role.attribute = attribute role { text } + db.citation.attlist = + db.citation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citation = + + ## An inline bibliographic reference to another published work + element citation { db.citation.attlist, db.all.inlines* } +} +div { + db.citerefentry.role.attribute = attribute role { text } + db.citerefentry.attlist = + db.citerefentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citerefentry = + + ## A citation to a reference page + element citerefentry { + db.citerefentry.attlist, db.refentrytitle, db.manvolnum? + } +} +div { + db.refentrytitle.role.attribute = attribute role { text } + db.refentrytitle.attlist = + db.refentrytitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refentrytitle = + + ## The title of a reference page + element refentrytitle { db.refentrytitle.attlist, db.all.inlines* } +} +div { + db.manvolnum.role.attribute = attribute role { text } + db.manvolnum.attlist = + db.manvolnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.manvolnum = + + ## A reference volume number + element manvolnum { db.manvolnum.attlist, db._text } +} +div { + db.citetitle.pubwork.enumeration = db.pubwork.enumeration + db.citetitle.pubwork-enum.attribute = + + ## Identifies the nature of the publication being cited + attribute pubwork { db.citetitle.pubwork.enumeration } + db.citetitle.pubwork-other.attribute = + + ## Identifies the nature of some other kind of publication being cited + attribute otherpubwork { xsd:NMTOKEN } + db.citetitle.pubwork-other.attributes = + + ## Identifies that this is some other kind of publication being cited + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.citetitle.pubwork-other.attribute + db.citetitle.pubwork.attribute = + db.citetitle.pubwork-enum.attribute + | db.citetitle.pubwork-other.attributes + db.citetitle.role.attribute = attribute role { text } + db.citetitle.attlist = + db.citetitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.citetitle.pubwork.attribute? + db.citetitle = + + ## The title of a cited work + element citetitle { db.citetitle.attlist, db.all.inlines* } +} +div { + db.emphasis.role.attribute = attribute role { text } + db.emphasis.attlist = + db.emphasis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.emphasis = + + ## Emphasized text + element emphasis { db.emphasis.attlist, db.all.inlines* } +} +div { + db._emphasis = + + ## A limited span of emphasized text + element emphasis { db.emphasis.attlist, db._text } +} +div { + db.foreignphrase.role.attribute = attribute role { text } + db.foreignphrase.attlist = + db.foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.foreignphrase = + + ## A word or phrase in a language other than the primary language of the document + element foreignphrase { + db.foreignphrase.attlist, (text | db.general.inlines)* + } +} +div { + db._foreignphrase.role.attribute = attribute role { text } + db._foreignphrase.attlist = + db._foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._foreignphrase = + + ## A limited word or phrase in a language other than the primary language of the document + element foreignphrase { db._foreignphrase.attlist, db._text } +} +div { + db.phrase.role.attribute = attribute role { text } + 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* } +} +div { + db._phrase = + + ## A limited span of text + element phrase { db.phrase.attlist, db._text } +} +div { + db.quote.role.attribute = attribute role { text } + db.quote.attlist = + db.quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.quote = + + ## An inline quotation + element quote { db.quote.attlist, db.all.inlines* } +} +div { + db._quote.role.attribute = attribute role { text } + db._quote.attlist = + db._quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._quote = + + ## A limited inline quotation + element quote { db._quote.attlist, db._text } +} +div { + db.subscript.role.attribute = attribute role { text } + db.subscript.attlist = + db.subscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subscript = + + ## A subscript (as in H₂O, the molecular formula for water) + element subscript { db.subscript.attlist, db._text } +} +div { + db.superscript.role.attribute = attribute role { text } + db.superscript.attlist = + db.superscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.superscript = + + ## A superscript (as in x², the mathematical notation for x multiplied by itself) + element superscript { db.superscript.attlist, db._text } +} +div { + db.trademark.class.enumeration = + + ## A copyright + "copyright" + | + ## A registered copyright + "registered" + | + ## A service + "service" + | + ## A trademark + "trade" + db.trademark.class.attribute = + + ## Identifies the class of trade mark + attribute class { db.trademark.class.enumeration } + db.trademark.role.attribute = attribute role { text } + db.trademark.attlist = + db.trademark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.trademark.class.attribute? + db.trademark = + + ## A trademark + element trademark { db.trademark.attlist, db._text } +} +div { + db.wordasword.role.attribute = attribute role { text } + db.wordasword.attlist = + db.wordasword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.wordasword = + + ## A word meant specifically as a word and not representing anything else + element wordasword { db.wordasword.attlist, db._text } +} +div { + db.footnoteref.role.attribute = attribute role { text } + db.footnoteref.label.attribute = db.label.attribute + db.footnoteref.attlist = + db.footnoteref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.footnoteref.label.attribute? + db.footnoteref = + + ## A cross reference to a footnote (a footnote mark) + [ + s:pattern [ + s:title [ "Footnote reference type constraint" ] + s:rule [ + context = "db:footnoteref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on footnoteref must point to a footnote." + ] + ] + ] + ] + element footnoteref { db.footnoteref.attlist, empty } +} +div { + db.xref.role.attribute = attribute role { text } + db.xref.xrefstyle.attribute = db.xrefstyle.attribute + db.xref.endterm.attribute = db.endterm.attribute + db.xref.attlist = + db.xref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.xref.xrefstyle.attribute? + & db.xref.endterm.attribute? + db.xref = + + ## A cross reference to another part of the document + element xref { db.xref.attlist, empty } +} +div { + db.link.role.attribute = attribute role { text } + db.link.xrefstyle.attribute = db.xrefstyle.attribute + db.link.endterm.attribute = db.endterm.attribute + db.link.attlist = + db.link.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.link.xrefstyle.attribute? + & db.link.endterm.attribute? + db.link = + + ## A hypertext link + element link { db.link.attlist, db.all.inlines* } +} +div { + db.olink.role.attribute = attribute role { text } + db.olink.xrefstyle.attribute = db.xrefstyle.attribute + db.olink.localinfo.attribute = + + ## Holds additional information that may be used by the application when resolving the link + attribute localinfo { text } + db.olink.targetdoc.attribute = + + ## Specifies the URI of the document in which the link target appears + attribute targetdoc { xsd:anyURI } + db.olink.targetptr.attribute = + + ## Specifies the location of the link target in the document + attribute targetptr { text } + db.olink.type.attribute = + + ## Identifies application-specific customization of the link behavior + attribute type { text } + db.olink.attlist = + db.common.attributes + & db.olink.targetdoc.attribute? + & db.olink.role.attribute? + & db.olink.xrefstyle.attribute? + & db.olink.localinfo.attribute? + & db.olink.targetptr.attribute? + & db.olink.type.attribute? + db.olink = + + ## A link that addresses its target indirectly + element olink { db.olink.attlist, db.all.inlines* } +} +div { + db.anchor.role.attribute = attribute role { text } + db.anchor.attlist = + db.anchor.role.attribute? & db.common.idreq.attributes + db.anchor = + + ## A spot in the document + element anchor { db.anchor.attlist, empty } +} +div { + db.alt.role.attribute = attribute role { text } + db.alt.attlist = db.alt.role.attribute? & db.common.attributes + db.alt = + + ## A text-only annotation, often used for accessibility + element alt { db.alt.attlist, (text | db.inlinemediaobject)* } +} +div { + db.formalgroup.fgstyle.attribute = + + ## Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + attribute fgstyle { text } + db.formalgroup.role.attribute = attribute role { text } + db.formalgroup.pgwide.attribute = db.pgwide.attribute + db.formalgroup.floatstyle.attribute = db.floatstyle.attribute + db.formalgroup.attlist = + db.formalgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.formalgroup.floatstyle.attribute? + & db.formalgroup.pgwide.attribute? + & db.formalgroup.fgstyle.attribute? + db.formalgroup.info = db._info.title.onlyreq + db.formalgroup = + + ## A group of formal objects, for example subfigures + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalgroup" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalgroup { + db.formalgroup.attlist, + db.formalgroup.info, + (db.figure+ | db.table+ | db.example+ | db.equation+) + } +} +db.status.attribute = + + ## Identifies the editorial or publication status of the element on which it occurs + attribute status { text } +db.toplevel.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | (db.sect1+, db.simplesect*) + | db.refentry+ + | ((db.section | db.xi.include)+ | (db.simplesect | db.xi.include)+) + | (db.refentry | db.xi.include)+ + | (db.refsect1 | db.xi.include)+ + | (db.sect1 | db.xi.include)+ +db.toplevel.blocks.or.sections = + (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections +db.recursive.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | ((db.section | db.xi.include)+ | (db.simplesect | db.xi.include)+) + | (db.refentry | db.xi.include)+ + | (db.refsect1 | db.xi.include)+ +db.recursive.blocks.or.sections = + (db.all.blocks+, db.recursive.sections?) | db.recursive.sections +db.divisions = db.part | db.reference | db.xi.include +db.components = + (db.dedication + | db.acknowledgements + | db.preface + | db.chapter + | db.appendix + | db.article + | db.colophon) + | db.xi.include +db.navigation.components = + notAllowed | db.glossary | db.bibliography | db.index | db.toc +db.component.contentmodel = + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* +db.setindex.components = notAllowed | db.setindex +db.toc.components = notAllowed | db.toc +db.set.components = (db.set | db.book | db.article) | db.xi.include +div { + db.set.status.attribute = db.status.attribute + db.set.role.attribute = attribute role { text } + db.set.attlist = + db.set.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.set.status.attribute? + db.set.info = db._info.title.req + db.set = + + ## A collection of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:set" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element set { + db.set.attlist, + db.set.info, + db.toc.components?, + db.set.components+, + db.setindex.components? + } +} +db.book.components = + (db.navigation.components | db.components | db.divisions)* | db.topic* +div { + db.book.status.attribute = db.status.attribute + db.book.role.attribute = attribute role { text } + db.book.attlist = + db.book.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.book.status.attribute? + db.book.info = db._info + db.book = + + ## A book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:book" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element book { db.book.attlist, db.book.info, db.book.components } +} +div { + db.dedication.status.attribute = db.status.attribute + db.dedication.role.attribute = attribute role { text } + db.dedication.attlist = + db.dedication.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.dedication.status.attribute? + db.dedication.info = db._info + db.dedication = + + ## The dedication of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:dedication" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element dedication { + db.dedication.attlist, db.dedication.info, db.all.blocks+ + } +} +div { + db.acknowledgements.status.attribute = db.status.attribute + db.acknowledgements.role.attribute = attribute role { text } + db.acknowledgements.attlist = + db.acknowledgements.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.acknowledgements.status.attribute? + db.acknowledgements.info = db._info + db.acknowledgements = + + ## Acknowledgements of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:acknowledgements" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element acknowledgements { + db.acknowledgements.attlist, + db.acknowledgements.info, + db.all.blocks+ + } +} +div { + db.colophon.status.attribute = db.status.attribute + db.colophon.role.attribute = attribute role { text } + db.colophon.attlist = + db.colophon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.colophon.status.attribute? + db.colophon.info = db._info + db.colophon = + + ## Text at the back of a book describing facts about its production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:colophon" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element colophon { + db.colophon.attlist, + db.colophon.info, + ((db.all.blocks+, db.simplesect*) + | (db.all.blocks*, db.simplesect+)) + } +} +db.appendix.contentmodel = db.component.contentmodel | db.topic+ +div { + db.appendix.status.attribute = db.status.attribute + db.appendix.role.attribute = attribute role { text } + db.appendix.attlist = + db.appendix.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.appendix.status.attribute? + db.appendix.info = db._info.title.req + db.appendix = + + ## An appendix in a book or article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:appendix" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element appendix { + db.appendix.attlist, db.appendix.info, db.appendix.contentmodel? + } +} +db.chapter.contentmodel = db.component.contentmodel | db.topic+ +div { + db.chapter.status.attribute = db.status.attribute + db.chapter.role.attribute = attribute role { text } + db.chapter.attlist = + db.chapter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.chapter.status.attribute? + db.chapter.info = db._info.title.req + db.chapter = + + ## A chapter, as of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:chapter" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element chapter { + db.chapter.attlist, db.chapter.info, db.chapter.contentmodel? + } +} +db.part.components = + (db.navigation.components | db.components) + | (db.refentry | db.reference) + | db.xi.include +db.part.contentmodel = db.part.components+ | db.topic+ +div { + db.part.status.attribute = db.status.attribute + db.part.role.attribute = attribute role { text } + db.part.attlist = + db.part.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.part.status.attribute? + db.part.info = db._info.title.req + db.part = + + ## A division in a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:part" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element part { + db.part.attlist, + db.part.info, + db.partintro?, + db.part.contentmodel? + } +} +div { + db.preface.status.attribute = db.status.attribute + db.preface.role.attribute = attribute role { text } + db.preface.attlist = + db.preface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.preface.status.attribute? + db.preface.info = db._info.title.req + db.preface = + + ## Introductory matter preceding the first chapter of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:preface" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element preface { + db.preface.attlist, db.preface.info, db.component.contentmodel? + } +} +div { + db.partintro.status.attribute = db.status.attribute + db.partintro.role.attribute = attribute role { text } + db.partintro.attlist = + db.partintro.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.partintro.status.attribute? + db.partintro.info = db._info + db.partintro = + + ## An introduction to the contents of a part + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:partintro" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element partintro { + db.partintro.attlist, + db.partintro.info, + db.toplevel.blocks.or.sections? + } +} +div { + db.section.status.attribute = db.status.attribute + db.section.class.enumeration = + + ## A section of legal obligations or requirements + "legal" + db.section.class-enum.attribute = + + ## Identifies the nature of the section + attribute class { db.section.class.enumeration } + db.section.class-other.attribute = + + ## Identifies a non-standard section class + attribute otherclass { xsd:NMTOKEN } + db.section.class-other.attributes = + + ## Indicates that a non-standard section class is applied + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.section.class-other.attribute + db.section.class.attribute = + db.section.class-enum.attribute | db.section.class-other.attributes + db.section.role.attribute = attribute role { text } + db.section.attlist = + db.section.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.section.status.attribute? + & db.section.class.attribute? + db.section.info = db._info.title.req + db.section = + + ## A recursive section + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:section" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element section { + db.section.attlist, + db.section.info, + db.navigation.components*, + db.recursive.blocks.or.sections?, + db.navigation.components* + } +} +div { + db.simplesect.status.attribute = db.status.attribute + db.simplesect.role.attribute = attribute role { text } + db.simplesect.attlist = + db.simplesect.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.simplesect.status.attribute? + db.simplesect.info = db._info.title.req + db.simplesect = + + ## A section of a document with no subdivisions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplesect" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplesect { + db.simplesect.attlist, db.simplesect.info, db.all.blocks* + } +} +db.article.components = db.toplevel.sections +db.article.navcomponents = + db.navigation.components + | db.acknowledgements + | db.dedication + | db.appendix + | db.colophon +div { + db.article.status.attribute = db.status.attribute + db.article.class.enumeration = + + ## A collection of frequently asked questions. + "faq" + | + ## An article in a journal or other periodical. + "journalarticle" + | + ## A description of a product. + "productsheet" + | + ## A specification. + "specification" + | + ## A technical report. + "techreport" + | + ## A white paper. + "whitepaper" + db.article.class-enum.attribute = + + ## Identifies the nature of the article + attribute class { db.article.class.enumeration } + db.article.class-other.attribute = + + ## Identifies the nature of the non-standard article + attribute otherclass { xsd:NMTOKEN } + db.article.class-other.attributes = + + ## Identifies the nature of the article + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.article.class-other.attribute + db.article.class.attribute = + db.article.class-enum.attribute | db.article.class-other.attributes + db.article.role.attribute = attribute role { text } + db.article.attlist = + db.article.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.article.status.attribute? + & db.article.class.attribute? + db.article.info = db._info.title.req + db.article = + + ## An article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:article" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element article { + db.article.attlist, + db.article.info, + db.article.navcomponents*, + ((db.all.blocks+, db.article.components?) + | db.article.components), + db.article.navcomponents* + } +} +db.annotations.attribute = + + ## Identifies one or more annotations that apply to this element + attribute annotations { text } +div { + db.annotation.role.attribute = attribute role { text } + db.annotation.annotates.attribute = + + ## Identifies one or more elements to which this annotation applies + attribute annotates { text } + db.annotation.attlist = + db.annotation.role.attribute? + & db.annotation.annotates.attribute? + & db.common.attributes + db.annotation.info = db._info.title.only + db.annotation = + + ## An annotation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:annotation" + s:assert [ + test = "not(.//db:annotation)" + "annotation must not occur among the children or descendants of annotation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:annotation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element annotation { + db.annotation.attlist, db.annotation.info, db.all.blocks+ + } +} +db.xlink.extended.type.attribute = + + ## Identifies the XLink extended link type + [ + s:pattern [ + s:title [ "XLink extended placement" ] + s:rule [ + context = "*[@xlink:type='extended']" + s:assert [ + test = "not(parent::*[@xlink:type='extended'])" + "An XLink extended type element may not occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink extended link type + "extended" + } +db.xlink.locator.type.attribute = + + ## Identifies the XLink locator link type + [ + s:pattern [ + s:title [ "XLink locator placement" ] + s:rule [ + context = "*[@xlink:type='locator']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink locator type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink locator link type + "locator" + } +db.xlink.arc.type.attribute = + + ## Identifies the XLink arc link type + [ + s:pattern [ + s:title [ "XLink arc placement" ] + s:rule [ + context = "*[@xlink:type='arc']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink arc type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink arc link type + "arc" + } +db.xlink.resource.type.attribute = + + ## Identifies the XLink resource link type + [ + s:pattern [ + s:title [ "XLink resource placement" ] + s:rule [ + context = "*[@xlink:type='resource']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink resource type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink resource link type + "resource" + } +db.xlink.title.type.attribute = + + ## Identifies the XLink title link type + [ + s:pattern [ + s:title [ "XLink title placement" ] + s:rule [ + context = "*[@xlink:type='title']" + s:assert [ + test = + "parent::*[@xlink:type='extended'] or parent::*[@xlink:type='locator'] or parent::*[@xlink:type='arc']" + "An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink title link type + "title" + } +db.xlink.extended.link.attributes = + db.xlink.extended.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? +db.xlink.locator.link.attributes = + db.xlink.locator.type.attribute + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.arc.link.attributes = + db.xlink.arc.type.attribute + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? +db.xlink.resource.link.attributes = + db.xlink.resource.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.title.link.attributes = db.xlink.title.type.attribute +db.xlink.from.attribute = + + ## Specifies the XLink traversal-from + attribute xlink:from { xsd:NMTOKEN } +db.xlink.label.attribute = + + ## Specifies the XLink label + attribute xlink:label { xsd:NMTOKEN } +db.xlink.to.attribute = + + ## Specifies the XLink traversal-to + attribute xlink:to { xsd:NMTOKEN } +div { + db.extendedlink.role.attribute = attribute role { text } + db.extendedlink.attlist = + db.extendedlink.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "extended" ] + attribute xlink:type { + + ## An XLink extended link + "extended" + }? + & db.xlink.role.attribute? + & db.xlink.title.attribute? + db.extendedlink = + + ## An XLink extended link + element extendedlink { + db.extendedlink.attlist, (db.locator | db.arc | db.link)+ + } +} +div { + db.locator.role.attribute = attribute role { text } + db.locator.attlist = + db.locator.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "locator" ] + attribute xlink:type { + + ## An XLink locator link + "locator" + }? + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? + db.locator = + + ## An XLink locator in an extendedlink + element locator { db.locator.attlist, empty } +} +div { + db.arc.role.attribute = attribute role { text } + db.arc.attlist = + db.arc.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "arc" ] + attribute xlink:type { + + ## An XLink arc link + "arc" + }? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? + db.arc = + + ## An XLink arc in an extendedlink + element arc { db.arc.attlist, empty } +} +db.sect1.sections = + ((db.sect2+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect2 | db.xi.include)+ +div { + db.sect1.status.attribute = db.status.attribute + db.sect1.class.attribute = db.section.class.attribute + db.sect1.role.attribute = attribute role { text } + db.sect1.attlist = + db.sect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect1.status.attribute? + & db.sect1.class.attribute? + db.sect1.info = db._info.title.req + db.sect1 = + + ## A top-level section of document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect1 { + db.sect1.attlist, + db.sect1.info, + db.navigation.components*, + ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections)?, + db.navigation.components* + } +} +db.sect2.sections = + ((db.sect3+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect3 | db.xi.include)+ +div { + db.sect2.status.attribute = db.status.attribute + db.sect2.class.attribute = db.section.class.attribute + db.sect2.role.attribute = attribute role { text } + db.sect2.attlist = + db.sect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect2.status.attribute? + & db.sect2.class.attribute? + db.sect2.info = db._info.title.req + db.sect2 = + + ## A subsection within a sect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect2 { + db.sect2.attlist, + db.sect2.info, + db.navigation.components*, + ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections)?, + db.navigation.components* + } +} +db.sect3.sections = + ((db.sect4+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect4 | db.xi.include)+ +div { + db.sect3.status.attribute = db.status.attribute + db.sect3.class.attribute = db.section.class.attribute + db.sect3.role.attribute = attribute role { text } + db.sect3.attlist = + db.sect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect3.status.attribute? + & db.sect3.class.attribute? + db.sect3.info = db._info.title.req + db.sect3 = + + ## A subsection within a sect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect3 { + db.sect3.attlist, + db.sect3.info, + db.navigation.components*, + ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections)?, + db.navigation.components* + } +} +db.sect4.sections = + ((db.sect5+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect5 | db.xi.include)+ +div { + db.sect4.status.attribute = db.status.attribute + db.sect4.class.attribute = db.section.class.attribute + db.sect4.role.attribute = attribute role { text } + db.sect4.attlist = + db.sect4.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect4.status.attribute? + & db.sect4.class.attribute? + db.sect4.info = db._info.title.req + db.sect4 = + + ## A subsection within a sect3 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect4" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect4 { + db.sect4.attlist, + db.sect4.info, + db.navigation.components*, + ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections)?, + db.navigation.components* + } +} +db.sect5.sections = + db.simplesect+ | db.refentry+ | (db.simplesect | db.xi.include)+ +div { + db.sect5.status.attribute = db.status.attribute + db.sect5.class.attribute = db.section.class.attribute + db.sect5.role.attribute = attribute role { text } + db.sect5.attlist = + db.sect5.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect5.status.attribute? + & db.sect5.class.attribute? + db.sect5.info = db._info.title.req + db.sect5 = + + ## A subsection within a sect4 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect5" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect5 { + db.sect5.attlist, + db.sect5.info, + db.navigation.components*, + ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections)?, + db.navigation.components* + } +} +db.toplevel.refsection = + db.refsection+ + | db.refsect1+ + | (db.refentry | db.xi.include)+ + | (db.refsect1 | db.xi.include)+ +db.secondlevel.refsection = + db.refsection+ + | db.refsect2+ + | (db.refentry | db.xi.include)+ + | (db.refsect2 | db.xi.include)+ +db.reference.components = db.refentry | db.xi.include +div { + db.reference.status.attribute = db.status.attribute + db.reference.role.attribute = attribute role { text } + db.reference.attlist = + db.reference.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.reference.status.attribute? + & db.label.attribute? + db.reference.info = db._info.title.req + db.reference = + + ## A collection of reference entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:reference" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element reference { + db.reference.attlist, + db.reference.info, + db.partintro?, + db.reference.components* + } +} +div { + db.refentry.status.attribute = db.status.attribute + db.refentry.role.attribute = attribute role { text } + db.refentry.attlist = + db.refentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refentry.status.attribute? + & db.label.attribute? + db.refentry.info = db._info.title.forbidden + db.refentry = + + ## A reference page (originally a UNIX man-style reference page) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refentry { + db.refentry.attlist, + db.indexterm*, + db.refentry.info, + db.refmeta?, + db.refnamediv+, + db.refsynopsisdiv?, + db.toplevel.refsection + } +} +div { + db.refmeta.role.attribute = attribute role { text } + db.refmeta.attlist = + db.refmeta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refmeta = + + ## Meta-information for a reference entry + element refmeta { + db.refmeta.attlist, + db.indexterm*, + db.refentrytitle, + db.manvolnum?, + db.refmiscinfo*, + db.indexterm* + } +} +db.refmiscinfo.class.enumeration = + + ## The name of the software product or component to which this topic applies + "source" + | + ## The version of the software product or component to which this topic applies + "version" + | + ## The section title of the reference page (e.g., User Commands) + "manual" + | + ## The section title of the reference page (believed synonymous with "manual" but in wide use) + "sectdesc" + | + ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + "software" +db.refmiscinfo.class-enum.attribute = + + ## Identifies the kind of miscellaneous information + attribute class { db.refmiscinfo.class.enumeration }? +db.refmiscinfo.class-other.attribute = + + ## Identifies the nature of non-standard miscellaneous information + attribute otherclass { text } +db.refmiscinfo.class-other.attributes = + + ## Identifies the kind of miscellaneious information + attribute class { + + ## Indicates that the information is some 'other' kind. + "other" + } + & db.refmiscinfo.class-other.attribute +db.refmiscinfo.class.attribute = + db.refmiscinfo.class-enum.attribute + | db.refmiscinfo.class-other.attributes +div { + db.refmiscinfo.role.attribute = attribute role { text } + db.refmiscinfo.attlist = + db.refmiscinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refmiscinfo.class.attribute? + db.refmiscinfo = + + ## Meta-information for a reference entry other than the title and volume number + element refmiscinfo { db.refmiscinfo.attlist, db._text } +} +div { + db.refnamediv.role.attribute = attribute role { text } + db.refnamediv.attlist = + db.refnamediv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refnamediv = + + ## The name, purpose, and classification of a reference page + element refnamediv { + db.refnamediv.attlist, + db.refdescriptor?, + db.refname+, + db.refpurpose, + db.refclass* + } +} +div { + db.refdescriptor.role.attribute = attribute role { text } + db.refdescriptor.attlist = + db.refdescriptor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refdescriptor = + + ## A description of the topic of a reference page + element refdescriptor { db.refdescriptor.attlist, db.all.inlines* } +} +div { + db.refname.role.attribute = attribute role { text } + db.refname.attlist = + db.refname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refname = + + ## The name of (one of) the subject(s) of a reference page + element refname { db.refname.attlist, db.all.inlines* } +} +div { + db.refpurpose.role.attribute = attribute role { text } + db.refpurpose.attlist = + db.refpurpose.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refpurpose = + + ## A short (one sentence) synopsis of the topic of a reference page + element refpurpose { db.refpurpose.attlist, db.all.inlines* } +} +div { + db.refclass.role.attribute = attribute role { text } + db.refclass.attlist = + db.refclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refclass = + + ## The scope or other indication of applicability of a reference entry + element refclass { db.refclass.attlist, (text | db.application)* } +} +div { + db.refsynopsisdiv.role.attribute = attribute role { text } + db.refsynopsisdiv.attlist = + db.refsynopsisdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refsynopsisdiv.info = db._info + db.refsynopsisdiv = + + ## A syntactic synopsis of the subject of the reference page + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsynopsisdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsynopsisdiv { + db.refsynopsisdiv.attlist, + db.refsynopsisdiv.info, + ((db.all.blocks+, db.secondlevel.refsection?) + | db.secondlevel.refsection) + } +} +div { + db.refsection.status.attribute = db.status.attribute + db.refsection.role.attribute = attribute role { text } + db.refsection.attlist = + db.refsection.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refsection.status.attribute? + & db.label.attribute? + db.refsection.info = db._info.title.req + db.refsection = + + ## A recursive section in a refentry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsection" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsection { + db.refsection.attlist, + db.refsection.info, + ((db.all.blocks+, db.refsection*) | db.refsection+) + } +} +db.refsect1.sections = db.refsect2+ +div { + db.refsect1.status.attribute = db.status.attribute + db.refsect1.role.attribute = attribute role { text } + db.refsect1.attlist = + db.refsect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect1.status.attribute? + db.refsect1.info = db._info.title.req + db.refsect1 = + + ## A major subsection of a reference entry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect1 { + db.refsect1.attlist, + db.refsect1.info, + ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections) + } +} +db.refsect2.sections = db.refsect3+ +div { + db.refsect2.status.attribute = db.status.attribute + db.refsect2.role.attribute = attribute role { text } + db.refsect2.attlist = + db.refsect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect2.status.attribute? + db.refsect2.info = db._info.title.req + db.refsect2 = + + ## A subsection of a refsect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect2 { + db.refsect2.attlist, + db.refsect2.info, + ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections) + } +} +div { + db.refsect3.status.attribute = db.status.attribute + db.refsect3.role.attribute = attribute role { text } + db.refsect3.attlist = + db.refsect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect3.status.attribute? + db.refsect3.info = db._info.title.req + db.refsect3 = + + ## A subsection of a refsect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect3 { + db.refsect3.attlist, db.refsect3.info, db.all.blocks+ + } +} +db.glossary.inlines = + db.firstterm | db.glossterm | db._firstterm | db._glossterm +db.baseform.attribute = + + ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + attribute baseform { text }? +div { + db.glosslist.role.attribute = attribute role { text } + db.glosslist.attlist = + db.glosslist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.glosslist.info = db._info.title.only + db.glosslist = + + ## A wrapper for a list of glossary entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glosslist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glosslist { + db.glosslist.attlist, + db.glosslist.info?, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.glossentry.role.attribute = attribute role { text } + db.glossentry.sortas.attribute = + + ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + attribute sortas { text } + db.glossentry.attlist = + db.glossentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossentry.sortas.attribute? + db.glossentry = + + ## An entry in a glossary or glosslist + element glossentry { + db.glossentry.attlist, + db.glossterm, + db.acronym?, + db.abbrev?, + db.indexterm*, + (db.glosssee | db.glossdef+) + } +} +div { + db.glossdef.role.attribute = attribute role { text } + db.glossdef.subject.attribute = + + ## Specifies a list of keywords for the definition + attribute subject { text } + db.glossdef.attlist = + db.glossdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossdef.subject.attribute? + db.glossdef = + + ## A definition in a glossentry + element glossdef { + db.glossdef.attlist, db.all.blocks+, db.glossseealso* + } +} +div { + db.glosssee.role.attribute = attribute role { text } + db.glosssee.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glosssee.attlist = + db.glosssee.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glosssee.otherterm.attribute? + db.glosssee = + + ## A cross-reference from one glossentry + ## to another + [ + s:pattern [ + s:title [ "Glosssary 'see' type constraint" ] + s:rule [ + context = "db:glosssee[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glosssee must point to a glossentry." + ] + ] + ] + ] + element glosssee { db.glosssee.attlist, db.all.inlines* } +} +div { + db.glossseealso.role.attribute = attribute role { text } + db.glossseealso.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glossseealso.attlist = + db.glossseealso.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossseealso.otherterm.attribute? + db.glossseealso = + + ## A cross-reference from one glossentry to another + [ + s:pattern [ + s:title [ "Glossary 'seealso' type constraint" ] + s:rule [ + context = "db:glossseealso[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glossseealso must point to a glossentry." + ] + ] + ] + ] + element glossseealso { db.glossseealso.attlist, db.all.inlines* } +} +div { + db.firstterm.role.attribute = attribute role { text } + db.firstterm.attlist = + db.firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.firstterm = + + ## The first occurrence of a term + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db.firstterm.attlist, db.all.inlines* } +} +div { + db._firstterm.role.attribute = attribute role { text } + db._firstterm.attlist = + db._firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._firstterm = + + ## The first occurrence of a term, with limited content + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db._firstterm.attlist, db._text } +} +div { + db.glossterm.role.attribute = attribute role { text } + db.glossterm.attlist = + db.glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db.glossterm.attlist, db.all.inlines* } +} +div { + db._glossterm.role.attribute = attribute role { text } + db._glossterm.attlist = + db._glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db._glossterm.attlist, db._text } +} +div { + db.glossary.status.attribute = db.status.attribute + db.glossary.role.attribute = attribute role { text } + db.glossary.attlist = + db.glossary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossary.status.attribute? + db.glossary.info = db._info + db.glossary = + + ## A glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossary { + db.glossary.attlist, + db.glossary.info, + db.all.blocks*, + (db.glossdiv* | db.glossentry*), + db.bibliography? + } +} +div { + db.glossdiv.status.attribute = db.status.attribute + db.glossdiv.role.attribute = attribute role { text } + db.glossdiv.attlist = + db.glossdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossdiv.status.attribute? + db.glossdiv.info = db._info.title.req + db.glossdiv = + + ## A division in a glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossdiv { + db.glossdiv.attlist, + db.glossdiv.info, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.termdef.role.attribute = attribute role { text } + db.termdef.attlist = + db.termdef.role.attribute? + & db.glossentry.sortas.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.termdef = + + ## An inline definition of a term + [ + s:pattern [ + s:title [ "Glossary term definition constraint" ] + s:rule [ + context = "db:termdef" + s:assert [ + test = "count(db:firstterm) = 1" + "A termdef must contain exactly one firstterm" + ] + ] + ] + ] + element termdef { db.termdef.attlist, db.all.inlines* } +} +db.relation.attribute = + + ## Identifies the relationship between the bibliographic elemnts + attribute relation { text } +div { + db.biblioentry.role.attribute = attribute role { text } + db.biblioentry.pubwork.attribute = db.biblio.pubwork.attribute + db.biblioentry.attlist = + db.biblioentry.role.attribute? + & db.biblioentry.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.biblioentry = + + ## A raw entry in a bibliography + element biblioentry { + db.biblioentry.attlist, db.bibliographic.elements+ + } +} +div { + db.bibliomixed.role.attribute = attribute role { text } + db.bibliomixed.pubwork.attribute = db.biblio.pubwork.attribute + db.bibliomixed.attlist = + db.bibliomixed.role.attribute? + & db.bibliomixed.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomixed = + + ## A cooked entry in a bibliography + element bibliomixed { + db.bibliomixed.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.biblioset.relation.attribute = db.relation.attribute + db.biblioset.role.attribute = attribute role { text } + db.biblioset.attlist = + db.biblioset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblioset.relation.attribute? + db.biblioset = + + ## A raw container for related bibliographic information + element biblioset { + db.biblioset.attlist, db.bibliographic.elements+ + } +} +div { + 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.bibliomset = + + ## A cooked container for related bibliographic information + element bibliomset { + db.bibliomset.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.bibliomisc.role.attribute = attribute role { text } + db.bibliomisc.attlist = + db.bibliomisc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomisc = + + ## Untyped bibliographic information + element bibliomisc { db.bibliomisc.attlist, db._text } +} +div { + db.bibliography.status.attrib = db.status.attribute + db.bibliography.role.attribute = attribute role { text } + db.bibliography.attlist = + db.bibliography.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliography.status.attrib? + db.bibliography.info = db._info + db.bibliography = + + ## A bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliography" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliography { + db.bibliography.attlist, + db.bibliography.info, + db.all.blocks*, + (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+) + } +} +div { + db.bibliodiv.status.attrib = db.status.attribute + db.bibliodiv.role.attribute = attribute role { text } + db.bibliodiv.attlist = + db.bibliodiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliodiv.status.attrib? + db.bibliodiv.info = db._info.title.req + db.bibliodiv = + + ## A section of a bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliodiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliodiv { + db.bibliodiv.attlist, + db.bibliodiv.info, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.bibliolist.role.attribute = attribute role { text } + db.bibliolist.attlist = + db.bibliolist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliolist.info = db._info.title.only + db.bibliolist = + + ## A wrapper for a list of bibliography entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliolist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliolist { + db.bibliolist.attlist, + db.bibliolist.info?, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.biblioref.role.attribute = attribute role { text } + db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute + db.biblioref.endterm.attribute = db.endterm.attribute + db.biblioref.units.attribute = + + ## The units (for example, pages) used to identify the beginning and ending of a reference. + attribute units { xsd:token } + db.biblioref.begin.attribute = + + ## Identifies the beginning of a reference; the location within the work that is being referenced. + attribute begin { xsd:token } + db.biblioref.end.attribute = + + ## Identifies the end of a reference. + attribute end { xsd:token } + db.biblioref.attlist = + db.biblioref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.biblioref.xrefstyle.attribute? + & db.biblioref.endterm.attribute? + & db.biblioref.units.attribute? + & db.biblioref.begin.attribute? + & db.biblioref.end.attribute? + db.biblioref = + + ## A cross-reference to a bibliographic entry + element biblioref { db.biblioref.attlist, empty } +} +db.significance.enumeration = + + ## Normal + "normal" + | + ## Preferred + "preferred" +db.significance.attribute = + + ## Specifies the significance of the term + attribute significance { db.significance.enumeration } +db.zone.attribute = + + ## Specifies the IDs of the elements to which this term applies + attribute zone { xsd:IDREFS } +db.indexterm.pagenum.attribute = + + ## Indicates the page on which this index term occurs in some version of the printed document + attribute pagenum { text } +db.scope.enumeration = + + ## All indexes + "all" + | + ## The global index (as for a combined index of a set of books) + "global" + | + ## The local index (the index for this document only) + "local" +db.scope.attribute = + + ## Specifies the scope of the index term + attribute scope { db.scope.enumeration } +db.sortas.attribute = + + ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used + attribute sortas { text } +db.index.type.attribute = + + ## Specifies the target index for this term + attribute type { text } +div { + db.itermset.role.attribute = attribute role { text } + db.itermset.attlist = + db.itermset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.itermset = + + ## A set of index terms in the meta-information of a document + element itermset { db.itermset.attlist, db.indexterm.singular+ } +} +db.indexterm.contentmodel = + (db.primary, + (db.secondary, + ((db.tertiary, (db.see | db.seealso+)?)? + | (db.see | db.seealso+)?)?)?)?, + (db.see | db.seealso+)? +div { + db.indexterm.singular.role.attribute = attribute role { text } + db.indexterm.singular.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## A singular index term + "singular" + } + db.indexterm.singular.attlist = + db.indexterm.singular.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.singular.class.attribute? + db.indexterm.singular = + + ## A wrapper for an indexed term + element indexterm { + db.indexterm.singular.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.startofrange.role.attribute = attribute role { text } + db.indexterm.startofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The start of a range + "startofrange" + } + db.indexterm.startofrange.attlist = + db.indexterm.startofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.startofrange.class.attribute + db.indexterm.startofrange = + + ## A wrapper for an indexed term that covers a range + element indexterm { + db.indexterm.startofrange.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.endofrange.role.attribute = attribute role { text } + db.indexterm.endofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The end of a range + "endofrange" + } + db.indexterm.endofrange.startref.attribute = + + ## Points to the start of the range + attribute startref { xsd:IDREF } + db.indexterm.endofrange.attlist = + db.indexterm.endofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.indexterm.endofrange.class.attribute + & db.indexterm.endofrange.startref.attribute + db.indexterm.endofrange = + + ## Identifies the end of a range associated with an indexed term + [ + s:pattern [ + s:title [ "Indexterm 'startref' type constraint" ] + s:rule [ + context = "db:indexterm[@startref]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@startref]) = 'indexterm' and namespace-uri(//*[@xml:id=current()/@startref]) = 'http://docbook.org/ns/docbook'" + "@startref on indexterm must point to an indexterm." + ] + s:assert [ + test = + "//*[@xml:id=current()/@startref]/@class='startofrange'" + "@startref on indexterm must point to a startofrange indexterm." + ] + ] + ] + ] + element indexterm { db.indexterm.endofrange.attlist, empty } +} +div { + db.indexterm = + db.indexterm.singular + | db.indexterm.startofrange + | db.indexterm.endofrange +} +div { + db.primary.role.attribute = attribute role { text } + db.primary.attlist = + db.primary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.primary = + + ## The primary word or phrase under which an index term should be sorted + element primary { db.primary.attlist, db.all.inlines* } +} +div { + db.secondary.role.attribute = attribute role { text } + db.secondary.attlist = + db.secondary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.secondary = + + ## A secondary word or phrase in an index term + element secondary { db.secondary.attlist, db.all.inlines* } +} +div { + db.tertiary.role.attribute = attribute role { text } + db.tertiary.attlist = + db.tertiary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.tertiary = + + ## A tertiary word or phrase in an index term + element tertiary { db.tertiary.attlist, db.all.inlines* } +} +div { + db.see.role.attribute = attribute role { text } + db.see.class.attribute = + + ## Identifies the class of 'see' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.see.attlist = + db.see.role.attribute? + & db.see.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.see = + + ## Part of an index term directing the reader instead to another entry in the index + element see { db.see.attlist, db.all.inlines* } +} +div { + db.seealso.role.attribute = attribute role { text } + db.seealso.class.attribute = + + ## Identifies the class of 'seealso' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.seealso.attlist = + db.seealso.role.attribute? + & db.seealso.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seealso = + + ## Part of an index term directing the reader also to another entry in the index + element seealso { db.seealso.attlist, db.all.inlines* } +} +div { + db.index.status.attribute = db.status.attribute + db.index.role.attribute = attribute role { text } + db.index.attlist = + db.index.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.index.status.attribute? + & db.index.type.attribute? + db.index.info = db._info + # Yes, db.indexdiv* and db.indexentry*; that way an is valid. + # Authors can use an empty index to indicate where a generated index should + # appear. + db.index = + + ## An index to a book or part of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:index" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element index { + db.index.attlist, + db.index.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry* | db.segmentedlist) + } +} +div { + db.setindex.status.attribute = db.status.attribute + db.setindex.role.attribute = attribute role { text } + db.setindex.attlist = + db.setindex.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.setindex.status.attribute? + & db.index.type.attribute? + db.setindex.info = db._info + db.setindex = + + ## An index to a set of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:setindex" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element setindex { + db.setindex.attlist, + db.setindex.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry*) + } +} +div { + db.indexdiv.status.attribute = db.status.attribute + db.indexdiv.role.attribute = attribute role { text } + db.indexdiv.attlist = + db.indexdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.indexdiv.status.attribute? + db.indexdiv.info = db._info.title.req + db.indexdiv = + + ## A division in an index + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:indexdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element indexdiv { + db.indexdiv.attlist, + db.indexdiv.info, + db.all.blocks*, + (db.indexentry+ | db.segmentedlist) + } +} +div { + db.indexentry.role.attribute = attribute role { text } + db.indexentry.attlist = + db.indexentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.indexentry = + + ## An entry in an index + element indexentry { + db.indexentry.attlist, + db.primaryie, + (db.seeie | db.seealsoie)*, + (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)* + } +} +div { + db.primaryie.role.attribute = attribute role { text } + db.primaryie.attlist = + db.primaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.primaryie = + + ## A primary term in an index entry, not in the text + element primaryie { db.primaryie.attlist, db.all.inlines* } +} +div { + db.secondaryie.role.attribute = attribute role { text } + db.secondaryie.attlist = + db.secondaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.secondaryie = + + ## A secondary term in an index entry, rather than in the text + element secondaryie { db.secondaryie.attlist, db.all.inlines* } +} +div { + db.tertiaryie.role.attribute = attribute role { text } + db.tertiaryie.attlist = + db.tertiaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.tertiaryie = + + ## A tertiary term in an index entry, rather than in the text + element tertiaryie { db.tertiaryie.attlist, db.all.inlines* } +} +div { + db.seeie.role.attribute = attribute role { text } + db.seeie.attlist = + db.seeie.role.attribute? + & db.common.attributes + & db.linkend.attribute? + db.seeie = + + ## A See + ## entry in an index, rather than in the text + element seeie { db.seeie.attlist, db.all.inlines* } +} +div { + db.seealsoie.role.attribute = attribute role { text } + db.seealsoie.attlist = + db.seealsoie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.seealsoie = + + ## A See also + ## entry in an index, rather than in the text + element seealsoie { db.seealsoie.attlist, db.all.inlines* } +} +db.toc.pagenum.attribute = + + ## Indicates the page on which this element occurs in some version of the printed document + attribute pagenum { text } +div { + db.toc.role.attribute = attribute role { text } + db.toc.attlist = + db.toc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.toc.info = db._info.title.only + db.toc = + + ## A table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:toc" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element toc { + db.toc.attlist, + db.toc.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)* + } +} +div { + db.tocdiv.role.attribute = attribute role { text } + 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 + db.tocdiv = + + ## A division in a table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tocdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tocdiv { + db.tocdiv.attlist, + db.tocdiv.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)+ + } +} +div { + db.tocentry.role.attribute = attribute role { text } + db.tocentry.pagenum.attribute = db.toc.pagenum.attribute + db.tocentry.attlist = + db.tocentry.role.attribute? + & db.common.attributes + & db.tocentry.pagenum.attribute? + & db.linkend.attribute? + db.tocentry = + + ## A component title in a table of contents + element tocentry { db.tocentry.attlist, db.all.inlines* } +} +db.task.info = db._info.title.req +div { + db.task.role.attribute = attribute role { text } + db.task.attlist = + db.task.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.task = + + ## A task to be completed + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:task" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element task { + db.task.attlist, + db.task.info, + db.tasksummary?, + db.taskprerequisites?, + db.procedure+, + db.example*, + db.taskrelated? + } +} +div { + db.tasksummary.role.attribute = attribute role { text } + db.tasksummary.attlist = + db.tasksummary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tasksummary.info = db._info.title.only + db.tasksummary = + + ## A summary of a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tasksummary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tasksummary { + db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+ + } +} +div { + db.taskprerequisites.role.attribute = attribute role { text } + db.taskprerequisites.attlist = + db.taskprerequisites.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskprerequisites.info = db._info.title.only + db.taskprerequisites = + + ## The prerequisites for a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskprerequisites" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskprerequisites { + db.taskprerequisites.attlist, + db.taskprerequisites.info, + db.all.blocks+ + } +} +div { + db.taskrelated.role.attribute = attribute role { text } + db.taskrelated.attlist = + db.taskrelated.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskrelated.info = db._info.title.only + db.taskrelated = + + ## Information related to a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskrelated" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskrelated { + db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+ + } +} +db.area.units.enumeration = + + ## Coordinates expressed as a pair of CALS graphic coordinates. + "calspair" + | + ## Coordinates expressed as a line and column. + "linecolumn" + | + ## Coordinates expressed as a pair of lines and columns. + "linecolumnpair" + | + ## Coordinates expressed as a line range. + "linerange" +db.area.units-enum.attribute = + + ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + ## for graphics and linecolumn + ## for line-oriented elements. + attribute units { db.area.units.enumeration }? +db.area.units-other.attributes = + + ## Indicates that non-standard units are used for this area + ## . In this case otherunits + ## must be specified. + attribute units { + + ## Coordinates expressed in some non-standard units. + "other" + }?, + + ## Identifies the units used in the coords + ## attribute when the units + ## attribute is other + ## . This attribute is forbidden otherwise. + attribute otherunits { xsd:NMTOKEN } +db.area.units.attribute = + db.area.units-enum.attribute | db.area.units-other.attributes +div { + db.calloutlist.role.attribute = attribute role { text } + db.calloutlist.attlist = + db.calloutlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.calloutlist.info = db._info.title.only + db.calloutlist = + + ## A list of callout + ## s + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:calloutlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element calloutlist { + db.calloutlist.attlist, + db.calloutlist.info, + db.all.blocks*, + db.callout+ + } +} +div { + db.callout.role.attribute = attribute role { text } + db.callout.arearefs.attribute = + + ## Identifies the areas described by this callout. + attribute arearefs { xsd:IDREFS } + db.callout.attlist = + db.callout.role.attribute? + & db.common.attributes + & db.callout.arearefs.attribute + # This requires an XPath 2.0 compatible Schematron processor + db.callout = + + ## A called out + ## description of a marked area + [ + s:pattern [ + s:title [ "Callout cross reference constraint" ] + s:rule [ + context = "db:callout[@arearefs]" + s:assert [ + test = + "every $id in tokenize(current()/@arearefs) satisfies (every $ar in //*[@xml:id = $id] satisfies (local-name($ar) = ('areaset', 'area', 'co') and namespace-uri($ar) = 'http://docbook.org/ns/docbook'))" + "@arearefs on callout must point to a areaset, area, or co." + ] + ] + ] + ] + element callout { db.callout.attlist, db.all.blocks+ } +} +div { + db.programlistingco.role.attribute = attribute role { text } + db.programlistingco.attlist = + db.programlistingco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.programlistingco.info = db._info.title.forbidden + db.programlistingco = + + ## A program listing with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlistingco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlistingco { + db.programlistingco.attlist, + db.programlistingco.info, + db.areaspec, + db.programlisting, + db.calloutlist* + } +} +div { + db.areaspec.role.attribute = attribute role { text } + db.areaspec.attlist = + db.areaspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.area.units.attribute + db.areaspec = + + ## A collection of regions in a graphic or code example + element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ } +} +div { + db.area.role.attribute = attribute role { text } + db.area.linkends.attribute = + + ## Point to the callout + ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + attribute linkends { xsd:IDREFS } + db.area.label.attribute = + + ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + attribute label { text } + db.area.coords.attribute = + + ## Provides the coordinates of the area. The coordinates must be interpreted using the units + ## specified. + attribute coords { text } + db.area.attlist = + db.area.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area = + + ## A region defined for a callout in a graphic or code example + element area { db.area.attlist, db.alt? } +} +div { + # The only difference is that xml:id is optional + db.area.inareaset.attlist = + db.area.role.attribute? + & db.common.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area.inareaset = + + ## A region defined for a callout in a graphic or code example + element area { db.area.inareaset.attlist, db.alt? } +} +div { + db.areaset.role.attribute = attribute role { text } + db.areaset.linkends.attribute = db.linkends.attribute + db.areaset.label.attribute = db.label.attribute + db.areaset.attlist = + db.areaset.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.areaset.linkends.attribute | db.xlink.simple.link.attributes)? + & db.areaset.label.attribute? + db.areaset = + + ## A set of related areas in a graphic or code example + element areaset { db.areaset.attlist, db.area.inareaset+ } +} +div { + db.screenco.role.attribute = attribute role { text } + db.screenco.attlist = + db.screenco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenco.info = db._info.title.forbidden + db.screenco = + + ## A screen with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenco { + db.screenco.attlist, + db.screenco.info, + db.areaspec, + db.screen, + db.calloutlist* + } +} +div { + db.imageobjectco.role.attribute = attribute role { text } + db.imageobjectco.attlist = + db.imageobjectco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobjectco.info = db._info.title.forbidden + db.imageobjectco = + + ## A wrapper for an image object with callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobjectco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobjectco { + db.imageobjectco.attlist, + db.imageobjectco.info, + db.areaspec, + db.imageobject+, + db.calloutlist* + } +} +div { + db.co.role.attribute = attribute role { text } + db.co.linkends.attribute = db.linkends.attribute + db.co.label.attribute = db.label.attribute + db.co.attlist = + db.co.role.attribute? + & db.common.idreq.attributes + & db.co.linkends.attribute? + & db.co.label.attribute? + db.co = + + ## The location of a callout embedded in text + element co { db.co.attlist, empty } +} +div { + db.coref.role.attribute = attribute role { text } + db.coref.label.attribute = db.label.attribute + db.coref.attlist = + db.coref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.coref.label.attribute? + db.coref = + + ## A cross reference to a co + element coref { db.coref.attlist, empty } +} +div { + db.productionset.role.attribute = attribute role { text } + db.productionset.attlist = + db.productionset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productionset.info = db._info.title.only + db.productionset = + + ## A set of EBNF productions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:productionset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element productionset { + db.productionset.attlist, + db.productionset.info, + (db.production | db.productionrecap)+ + } +} +div { + db.production.role.attribute = attribute role { text } + db.production.attlist = + db.production.role.attribute? + & db.common.idreq.attributes + & db.common.linking.attributes + db.production = + + ## A production in a set of EBNF productions + element production { + db.production.attlist, db.lhs, db.rhs+, db.constraint* + } +} +div { + db.lhs.role.attribute = attribute role { text } + db.lhs.attlist = + db.lhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lhs = + + ## The left-hand side of an EBNF production + element lhs { db.lhs.attlist, text } +} +div { + db.rhs.role.attribute = attribute role { text } + db.rhs.attlist = + db.rhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.rhs = + + ## The right-hand side of an EBNF production + element rhs { + db.rhs.attlist, + (text | db.nonterminal | db.lineannotation | db.sbr)* + } +} +div { + db.nonterminal.role.attribute = attribute role { text } + db.nonterminal.def.attribute = + + ## Specifies a URI that points to a production + ## where the nonterminal + ## is defined + attribute def { xsd:anyURI } + db.nonterminal.attlist = + db.nonterminal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.nonterminal.def.attribute + db.nonterminal = + + ## A non-terminal in an EBNF production + element nonterminal { db.nonterminal.attlist, text } +} +div { + db.constraint.role.attribute = attribute role { text } + db.constraint.attlist = + db.constraint.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.constraint = + + ## A constraint in an EBNF production + [ + s:pattern [ + s:title [ "Constraint cross reference constraint" ] + s:rule [ + context = "db:constraint[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'constraintdef' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on constraint must point to a constraintdef." + ] + ] + ] + ] + element constraint { db.constraint.attlist, empty } +} +div { + db.productionrecap.role.attribute = attribute role { text } + db.productionrecap.attlist = + db.productionrecap.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.productionrecap = + + ## A cross-reference to an EBNF production + [ + s:pattern [ + s:title [ "Production recap cross reference constraint" ] + s:rule [ + context = "db:productionrecap[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'production' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on productionrecap must point to a production." + ] + ] + ] + ] + element productionrecap { db.productionrecap.attlist, empty } +} +div { + db.constraintdef.role.attribute = attribute role { text } + db.constraintdef.attlist = + db.constraintdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.constraintdef.info = db._info.title.only + db.constraintdef = + + ## The definition of a constraint in an EBNF production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constraintdef" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constraintdef { + db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+ + } +} +db.char.attribute = + + ## Specifies the alignment character when align + ## is set to char + ## . + attribute char { text } +db.charoff.attribute = + + ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + ## when align + ## is set to char + ## . + attribute charoff { + xsd:decimal { minExclusive = "0" maxExclusive = "100" } + } +db.frame.attribute = + + ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + attribute frame { + + ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + "all" + | + ## Frame only the bottom of the table. + "bottom" + | + ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + "none" + | + ## Frame the left and right sides of the table. + "sides" + | + ## Frame the top of the table. + "top" + | + ## Frame the top and bottom of the table. + "topbot" + } +db.colsep.attribute = + + ## Specifies the presence or absence of the column separator + attribute colsep { + + ## No column separator rule. + "0" + | + ## Provide a column separator rule on the right + "1" + } +db.rowsep.attribute = + + ## Specifies the presence or absence of the row separator + attribute rowsep { + + ## No row separator rule. + "0" + | + ## Provide a row separator rule below + "1" + } +db.orient.attribute = + + ## Specifies the orientation of the table + attribute orient { + + ## 90 degrees counter-clockwise from the rest of the text flow. + "land" + | + ## The same orientation as the rest of the text flow. + "port" + } +db.tabstyle.attribute = + + ## Specifies the table style + attribute tabstyle { text } +db.rowheader.attribute = + + ## Indicates whether or not the entries in the first column should be considered row headers + attribute rowheader { + + ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + "firstcol" + | + ## Indicates that row headers are identified by use of the headers attribute on entries in the table. + "headers" + | + ## Indicates that entries in the first column have no special significance with respect to column headers. + "norowheader" + } +db.align.attribute = + + ## Specifies the horizontal alignment of text in an entry. + attribute align { + + ## Centered. + "center" + | + ## Aligned on a particular character. + "char" + | + ## Left and right justified. + "justify" + | + ## Left justified. + "left" + | + ## Right justified. + "right" + } +db.valign.attribute = + + ## Specifies the vertical alignment of text in an entry. + attribute valign { + + ## Aligned on the bottom of the entry. + "bottom" + | + ## Aligned in the middle. + "middle" + | + ## Aligned at the top of the entry. + "top" + } +db.specify-col-by-colname.attributes = + + ## Specifies a column specification by name. + attribute colname { text } +db.specify-col-by-namest.attributes = + + ## Specifies a starting column by name. + attribute namest { text } +db.specify-span-by-spanspec.attributes = + + ## Specifies a span by name. + attribute spanname { text } +db.specify-span-directly.attributes = + + ## Specifies a starting column by name. + attribute namest { text } + & + ## Specifies an ending column by name. + attribute nameend { text } +db.column-spec.attributes = + db.specify-col-by-colname.attributes + | db.specify-col-by-namest.attributes + | db.specify-span-by-spanspec.attributes + | db.specify-span-directly.attributes +db.colname.attribute = + + ## Provides a name for a column specification. + attribute colname { text } +db.spanname.attribute = + + ## Provides a name for a span specification. + attribute spanname { text } +div { + db.tgroup.role.attribute = attribute role { text } + db.tgroup.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.tgroup.cols.attribute = + + ## The number of columns in the table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.tgroup.attlist = + db.tgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.tgroup.tgroupstyle.attribute? + & db.tgroup.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.tgroup = + + ## A wrapper for the main content of a table, or part of a table + element tgroup { + db.tgroup.attlist, + db.colspec*, + db.spanspec*, + db.cals.thead?, + db.cals.tfoot?, + db.cals.tbody + } +} +div { + db.colspec.role.attribute = attribute role { text } + db.colspec.colnum.attribute = + + ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + attribute colnum { xsd:positiveInteger } + db.colspec.colwidth.attribute = + + ## Specifies the width of the column. + attribute colwidth { text } + db.colspec.attlist = + db.colspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.colspec.colnum.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.colspec.colwidth.attribute? + & db.charoff.attribute? + & db.colname.attribute? + & db.rowsep.attribute? + & db.align.attribute? + & db.rowheader.attribute? + db.colspec = + + ## Specifications for a column in a table + element colspec { db.colspec.attlist, empty } +} +div { + db.spanspec.role.attribute = attribute role { text } + db.spanspec.namest.attribute = + + ## Specifies a starting column by name. + attribute namest { text } + db.spanspec.nameend.attribute = + + ## Specifies an ending column by name. + attribute nameend { text } + db.spanspec.attlist = + db.spanspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spanname.attribute + & db.spanspec.namest.attribute + & db.spanspec.nameend.attribute + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.spanspec = + + ## Formatting information for a spanned column in a table + element spanspec { db.spanspec.attlist, empty } +} +div { + db.cals.thead.role.attribute = attribute role { text } + db.cals.thead.attlist = + db.cals.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.thead = + + ## A table header consisting of one or more rows + element thead { db.cals.thead.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tfoot.role.attribute = attribute role { text } + db.cals.tfoot.attlist = + db.cals.tfoot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tfoot = + + ## A table footer consisting of one or more rows + element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tbody.role.attribute = attribute role { text } + db.cals.tbody.attlist = + db.cals.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.tbody.attlist, db.row+ } +} +div { + db.row.role.attribute = attribute role { text } + db.row.attlist = + db.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.row = + + ## A row in a table + element row { db.row.attlist, (db.entry | db.entrytbl)+ } +} +div { + db.entry.role.attribute = attribute role { text } + db.entry.morerows.attribute = + + ## Specifies the number of additional rows which this entry occupies. Defaults to zero. + attribute morerows { xsd:integer } + db.entry.rotate.attribute = + + ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + attribute rotate { + + ## Do not rotate the cell. + "0" + | + ## Rotate the cell 90 degrees counter-clockwise. + "1" + } + db.entry.scope.attribute = + + ## Specifies the scope of a header. + attribute scope { + + ## Applies to the row + "row" + | + ## Applies to the column + "col" + | + ## Applies to the row group + "rowgroup" + | + ## Applies to the column group + "colgroup" + } + db.entry.headers.attribute = + + ## Specifies the entry or entries which serve as headers for this element. + attribute headers { xsd:IDREFS } + db.entry.attlist = + db.entry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.entry.morerows.attribute? + & db.column-spec.attributes? + & db.rowsep.attribute? + & db.entry.rotate.attribute? + & db.align.attribute? + & db.entry.scope.attribute? + & db.entry.headers.attribute? + db.entry = + + ## A cell in a table + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of entry" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:informaltable)" + "informaltable must not occur among the children or descendants of entry" + ] + ] + ] + ] + element entry { + db.entry.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.entrytbl.role.attribute = attribute role { text } + db.entrytbl.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.entrytbl.cols.attribute = + + ## The number of columns in the entry table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.entrytbl.attlist = + db.entrytbl.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.column-spec.attributes? + & db.entrytbl.tgroupstyle.attribute? + & db.entrytbl.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.entrytbl = + + ## A subtable appearing in place of an entry in a table + element entrytbl { + db.entrytbl.attlist, + db.colspec*, + db.spanspec*, + db.cals.entrytbl.thead?, + db.cals.entrytbl.tbody + } +} +div { + db.cals.entrytbl.thead.role.attribute = attribute role { text } + db.cals.entrytbl.thead.attlist = + db.cals.entrytbl.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.thead = + + ## A table header consisting of one or more rows + element thead { + db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+ + } +} +div { + db.cals.entrytbl.tbody.role.attribute = attribute role { text } + db.cals.entrytbl.tbody.attlist = + db.cals.entrytbl.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ } +} +div { + db.entrytbl.row.role.attribute = attribute role { text } + db.entrytbl.row.attlist = + db.entrytbl.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.entrytbl.row = + + ## A row in a table + element row { db.entrytbl.row.attlist, db.entry+ } +} +div { + db.cals.table.role.attribute = attribute role { text } + db.cals.table.label.attribute = db.label.attribute + db.cals.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.table.attlist = + db.cals.table.role.attribute? + & db.cals.table.type.attribute? + & db.cals.table.label.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & + ## Indicates if the short or long title should be used in a List of Tables + attribute shortentry { + + ## Indicates that the full title should be used. + "0" + | + ## Indicates that the short short title (titleabbrev) should be used. + "1" + }? + & + ## Indicates if the table should appear in a List of Tables + attribute tocentry { + + ## Indicates that the table should not occur in the List of Tables. + "0" + | + ## Indicates that the table should appear in the List of Tables. + "1" + }? + & db.rowheader.attribute? + db.cals.table.info = db._info.title.onlyreq + db.cals.table = + + ## A formal table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { + db.cals.table.attlist, + db.cals.table.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +div { + db.cals.informaltable.role.attribute = attribute role { text } + db.cals.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.informaltable.attlist = + db.cals.informaltable.role.attribute? + & db.cals.informaltable.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & db.rowheader.attribute? + db.cals.informaltable.info = db._info.title.forbidden + db.cals.informaltable = + + ## A table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.cals.informaltable.attlist, + db.cals.informaltable.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +db.html.coreattrs = + + ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + attribute class { text }? + & + ## This attribute specifies style information for the current element. + attribute style { text }? + & + ## This attribute offers advisory information about the element for which it is set. + attribute title { text }? +db.html.i18n = + + ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + attribute lang { text }? +db.html.events = + + ## Occurs when the pointing device button is clicked over an element. + attribute onclick { text }? + & + ## Occurs when the pointing device button is double clicked over an element. + attribute ondblclick { text }? + & + ## Occurs when the pointing device button is pressed over an element. + attribute onmousedown { text }? + & + ## Occurs when the pointing device button is released over an element. + attribute onmouseup { text }? + & + ## Occurs when the pointing device is moved onto an element. + attribute onmouseover { text }? + & + ## Occurs when the pointing device is moved while it is over an element. + attribute onmousemove { text }? + & + ## Occurs when the pointing device is moved away from an element. + attribute onmouseout { text }? + & + ## Occurs when a key is pressed and released over an element. + attribute onkeypress { text }? + & + ## Occurs when a key is pressed down over an element. + attribute onkeydown { text }? + & + ## Occurs when a key is released over an element. + attribute onkeyup { text }? +db.html.attrs = + db.common.attributes + & db.html.coreattrs + & db.html.i18n + & db.html.events +db.html.cellhalign = + + ## Specifies the alignment of data and the justification of text in a cell. + attribute align { + + ## Left-flush data/Left-justify text. This is the default value for table data. + "left" + | + ## Center data/Center-justify text. This is the default value for table headers. + "center" + | + ## Right-flush data/Right-justify text. + "right" + | + ## Double-justify text. + "justify" + | + ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + "char" + }? + & + ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + attribute char { text }? + & + ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + attribute charoff { + xsd:integer >> a:documentation [ "An explicit offset." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage offset." ] + }? +db.html.cellvalign = + + ## Specifies the vertical position of data within a cell. + attribute valign { + + ## Cell data is flush with the top of the cell. + "top" + | + ## Cell data is centered vertically within the cell. This is the default value. + "middle" + | + ## Cell data is flush with the bottom of the cell. + "bottom" + | + ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + "baseline" + }? +db.html.table.attributes = + + ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + attribute summary { text }? + & + ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + attribute width { + xsd:integer >> a:documentation [ "An explicit width." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage width." ] + }? + & + ## Specifies the width (in pixels only) of the frame around a table. + attribute border { xsd:nonNegativeInteger }? + & + ## Specifies which sides of the frame surrounding a table will be visible. + attribute frame { + + ## No sides. This is the default value. + "void" + | + ## The top side only. + "above" + | + ## The bottom side only. + "below" + | + ## The top and bottom sides only. + "hsides" + | + ## The left-hand side only. + "lhs" + | + ## The right-hand side only. + "rhs" + | + ## The right and left sides only. + "vsides" + | + ## All four sides. + "box" + | + ## All four sides. + "border" + }? + & + ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + attribute rules { + + ## No rules. This is the default value. + "none" + | + ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + "groups" + | + ## Rules will appear between rows only. + "rows" + | + ## Rules will appear between columns only. + "cols" + | + ## Rules will appear between all rows and columns. + "all" + }? + & + ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + attribute cellspacing { + xsd:integer >> a:documentation [ "An explicit spacing." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage spacing." ] + }? + & + ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + attribute cellpadding { + xsd:integer >> a:documentation [ "An explicit padding." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage padding." ] + }? +db.html.tablecell.attributes = + + ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + attribute abbr { text }? + & + ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + attribute axis { text }? + & + ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + attribute headers { text }? + & + ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + attribute scope { + + ## The current cell provides header information for the rest of the row that contains it + "row" + | + ## The current cell provides header information for the rest of the column that contains it. + "col" + | + ## The header cell provides header information for the rest of the row group that contains it. + "rowgroup" + | + ## The header cell provides header information for the rest of the column group that contains it. + "colgroup" + }? + & + ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all rows from the current row to the last row of the table section (thead + ## , tbody + ## , or tfoot + ## ) in which the cell is defined. + attribute rowspan { xsd:nonNegativeInteger }? + & + ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup + ## ) in which the cell is defined. + attribute colspan { xsd:nonNegativeInteger }? +db.html.table.info = db._info.title.forbidden +db.html.table.model = + db.html.table.info?, + db.html.caption, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +db.html.informaltable.info = db._info.title.forbidden +db.html.informaltable.model = + db.html.informaltable.info?, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +div { + db.html.table.role.attribute = attribute role { text } + db.html.table.label.attribute = db.label.attribute + db.html.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.table.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.table.role.attribute? + & db.html.table.type.attribute? + & db.html.table.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.table = + + ## A formal (captioned) HTML table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { db.html.table.attlist, db.html.table.model } +} +div { + db.html.informaltable.role.attribute = attribute role { text } + db.html.informaltable.label.attribute = db.label.attribute + db.html.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.informaltable.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.informaltable.role.attribute? + & db.html.informaltable.type.attribute? + & db.html.informaltable.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.informaltable = + + ## An HTML table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.html.informaltable.attlist, db.html.informaltable.model + } +} +div { + db.html.caption.attlist = db.html.attrs + db.html.caption = + + ## An HTML table caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { db.html.caption.attlist, db.all.inlines* } +} +div { + db.html.col.attlist = + db.html.attrs + & + ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned + ## by the col + ## element; the col + ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + ## element shares its attributes with the next N-1 columns. + attribute span { xsd:nonNegativeInteger }? + & + ## Specifies a default width for each column spanned by the current col + ## element. It has the same meaning as the width + ## attribute for the colgroup + ## element and overrides it. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.col = + + ## Specifications for a column in an HTML table + element col { db.html.col.attlist, empty } +} +div { + db.html.colgroup.attlist = + db.html.attrs + & + ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + ## element contains one or more col + ## elements. + attribute span { xsd:nonNegativeInteger }? + & + ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + ## element. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.colgroup = + + ## A group of columns in an HTML table + element colgroup { db.html.colgroup.attlist, db.html.col* } +} +div { + db.html.thead.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.thead = + + ## A table header consisting of one or more rows in an HTML table + element thead { db.html.thead.attlist, db.html.tr+ } +} +div { + db.html.tfoot.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tfoot = + + ## A table footer consisting of one or more rows in an HTML table + element tfoot { db.html.tfoot.attlist, db.html.tr+ } +} +div { + db.html.tbody.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tbody = + + ## A wrapper for the rows of an HTML table or informal HTML table + element tbody { db.html.tbody.attlist, db.html.tr+ } +} +div { + db.html.tr.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tr = + + ## A row in an HTML table + element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ } +} +div { + db.html.th.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.th = + + ## A table header entry in an HTML table + element th { + db.html.th.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.html.td.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.td = + + ## A table entry in an HTML table + element td { + db.html.td.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.msgset.role.attribute = attribute role { text } + db.msgset.attlist = + db.msgset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgset.info = db._info.title.only + db.msgset = + + ## A detailed set of messages, usually error messages + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgset { + db.msgset.attlist, + db.msgset.info, + (db.msgentry+ | db.simplemsgentry+) + } +} +div { + db.msgentry.role.attribute = attribute role { text } + db.msgentry.attlist = + db.msgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgentry = + + ## A wrapper for an entry in a message set + element msgentry { + db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan* + } +} +div { + db.simplemsgentry.role.attribute = attribute role { text } + db.simplemsgentry.msgaud.attribute = + + ## The audience to which the message relevant + attribute msgaud { text } + db.simplemsgentry.msgorig.attribute = + + ## The origin of the message + attribute msgorig { text } + db.simplemsgentry.msglevel.attribute = + + ## The level of importance or severity of a message + attribute msglevel { text } + db.simplemsgentry.attlist = + db.simplemsgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplemsgentry.msgaud.attribute? + & db.simplemsgentry.msgorig.attribute? + & db.simplemsgentry.msglevel.attribute? + db.simplemsgentry = + + ## A wrapper for a simpler entry in a message set + element simplemsgentry { + db.simplemsgentry.attlist, db.msgtext, db.msgexplan+ + } +} +div { + db.msg.role.attribute = attribute role { text } + db.msg.attlist = + db.msg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msg.info = db._info.title.only + db.msg = + + ## A message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msg" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msg { + db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)* + } +} +div { + db.msgmain.role.attribute = attribute role { text } + db.msgmain.attlist = + db.msgmain.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgmain.info = db._info.title.only + db.msgmain = + + ## The primary component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgmain" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext } +} +div { + db.msgsub.role.attribute = attribute role { text } + db.msgsub.attlist = + db.msgsub.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgsub.info = db._info.title.only + db.msgsub = + + ## A subcomponent of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgsub" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext } +} +div { + db.msgrel.role.attribute = attribute role { text } + db.msgrel.attlist = + db.msgrel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgrel.info = db._info.title.only + db.msgrel = + + ## A related component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgrel" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext } +} +div { + db.msgtext.role.attribute = attribute role { text } + db.msgtext.attlist = + db.msgtext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgtext = + + ## The actual text of a message component in a message set + element msgtext { db.msgtext.attlist, db.all.blocks+ } +} +div { + db.msginfo.role.attribute = attribute role { text } + db.msginfo.attlist = + db.msginfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msginfo = + + ## Information about a message in a message set + element msginfo { + db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)* + } +} +div { + db.msglevel.role.attribute = attribute role { text } + db.msglevel.attlist = + db.msglevel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msglevel = + + ## The level of importance or severity of a message in a message set + element msglevel { db.msglevel.attlist, db._text } +} +div { + db.msgorig.role.attribute = attribute role { text } + db.msgorig.attlist = + db.msgorig.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgorig = + + ## The origin of a message in a message set + element msgorig { db.msgorig.attlist, db._text } +} +div { + db.msgaud.role.attribute = attribute role { text } + db.msgaud.attlist = + db.msgaud.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgaud = + + ## The audience to which a message in a message set is relevant + element msgaud { db.msgaud.attlist, db._text } +} +div { + db.msgexplan.role.attribute = attribute role { text } + db.msgexplan.attlist = + db.msgexplan.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgexplan.info = db._info.title.only + db.msgexplan = + + ## Explanatory material relating to a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgexplan" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgexplan { + db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+ + } +} +div { + db.qandaset.role.attribute = attribute role { text } + db.qandaset.defaultlabel.enumeration = + + ## No labels + "none" + | + ## Numeric labels + "number" + | + ## "Q:" and "A:" labels + "qanda" + db.qandaset.defaultlabel.attribute = + + ## Specifies the default labelling + attribute defaultlabel { db.qandaset.defaultlabel.enumeration } + db.qandaset.attlist = + db.qandaset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.qandaset.defaultlabel.attribute? + db.qandaset.info = db._info.title.only + db.qandaset = + + ## A question-and-answer set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaset { + db.qandaset.attlist, + db.qandaset.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandadiv.role.attribute = attribute role { text } + db.qandadiv.attlist = + db.qandadiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandadiv.info = db._info.title.only + db.qandadiv = + + ## A titled division in a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandadiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandadiv { + db.qandadiv.attlist, + db.qandadiv.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandaentry.role.attribute = attribute role { text } + db.qandaentry.attlist = + db.qandaentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandaentry.info = db._info.title.only + db.qandaentry = + + ## A question/answer set within a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaentry { + db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer* + } +} +div { + db.question.role.attribute = attribute role { text } + db.question.attlist = + db.question.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.question = + + ## A question in a qandaset + element question { db.question.attlist, db.label?, db.all.blocks+ } +} +div { + db.answer.role.attribute = attribute role { text } + db.answer.attlist = + db.answer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.answer = + + ## An answer to a question posed in a qandaset + element answer { db.answer.attlist, db.label?, db.all.blocks+ } +} +div { + db.label.role.attribute = attribute role { text } + db.label.attlist = + db.label.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.label = + + ## A label on a question or answer + element label { db.label.attlist, db._text } +} +db.math.inlines = db.inlineequation +db.equation.content = + (db.mediaobject+ | db.mathphrase+) | db._any.mml+ | db.xi.include+ +db.inlineequation.content = + (db.inlinemediaobject+ | db.mathphrase+) + | db._any.mml+ + | db.xi.include+ +div { + db.equation.role.attribute = attribute role { text } + db.equation.label.attribute = db.label.attribute + db.equation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.equation.attlist = + db.equation.role.attribute? + & db.equation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.equation.label.attribute? + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.equation.info = db._info.title.only + db.equation = + + ## A displayed mathematical equation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:equation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element equation { + db.equation.attlist, + db.equation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.informalequation.role.attribute = attribute role { text } + db.informalequation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.informalequation.attlist = + db.informalequation.role.attribute? + & db.informalequation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.informalequation.info = db._info.title.forbidden + db.informalequation = + + ## A displayed mathematical equation without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalequation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalequation { + db.informalequation.attlist, + db.informalequation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.inlineequation.role.attribute = attribute role { text } + db.inlineequation.attlist = + db.inlineequation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlineequation = + + ## A mathematical equation or expression occurring inline + element inlineequation { + db.inlineequation.attlist, db.alt?, db.inlineequation.content + } +} +div { + db.mathphrase.role.attribute = attribute role { text } + db.mathphrase.attlist = + db.mathphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mathphrase = + + ## A mathematical phrase that can be represented with ordinary text and a small amount of markup + element mathphrase { + db.mathphrase.attlist, + (db._text | db.ubiq.inlines | db._emphasis)* + } +} +db.imagedata.mathml.content = db._any.mml | db.xi.include +div { + db.imagedata.mathml.role.attribute = attribute role { text } + db.imagedata.mathml.attlist = + db.imagedata.mathml.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is MathML + attribute format { + + ## Specifies MathML. + "mathml" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.mathml.info = db._info.title.forbidden + db.imagedata.mathml = + + ## A MathML expression in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.mathml.attlist, + db.imagedata.mathml.info, + db.imagedata.mathml.content+ + } +} +div { + db._any.mml = + + ## Any element from the MathML namespace + element mml:* { (db._any.attribute | text | db._any)* } +} +db.imagedata.svg.content = db._any.svg | db.xi.include +div { + db.imagedata.svg.role.attribute = attribute role { text } + db.imagedata.svg.attlist = + db.imagedata.svg.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is SVG + attribute format { + + ## Specifies SVG. + "svg" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.svg.info = db._info.title.forbidden + db.imagedata.svg = + + ## An SVG drawing in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.svg.attlist, + db.imagedata.svg.info, + db.imagedata.svg.content+ + } +} +div { + db._any.svg = + + ## Any element from the SVG namespace + element svg:* { (db._any.attribute | text | db._any)* } +} +db.markup.inlines = + db.tag + | db.markup + | db.token + | db.symbol + | db.literal + | db.code + | db.constant + | db.email + | db.uri +div { + db.markup.role.attribute = attribute role { text } + db.markup.attlist = + db.markup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.markup = + + ## A string of formatting markup in text that is to be represented literally + element markup { db.markup.attlist, db._text } +} +div { + db.tag.role.attribute = attribute role { text } + db.tag.class.enumeration = + + ## An attribute + "attribute" + | + ## An attribute value + "attvalue" + | + ## An element + "element" + | + ## An empty element tag + "emptytag" + | + ## An end tag + "endtag" + | + ## A general entity + "genentity" + | + ## The local name part of a qualified name + "localname" + | + ## A namespace + "namespace" + | + ## A numeric character reference + "numcharref" + | + ## A parameter entity + "paramentity" + | + ## A processing instruction + "pi" + | + ## The prefix part of a qualified name + "prefix" + | + ## An SGML comment + "comment" + | + ## A start tag + "starttag" + | + ## An XML processing instruction + "xmlpi" + db.tag.class.attribute = + + ## Identifies the nature of the tag content + attribute class { db.tag.class.enumeration } + db.tag.namespace.attribute = + + ## Identifies the namespace of the tag content + attribute namespace { xsd:anyURI } + db.tag.attlist = + db.tag.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tag.class.attribute? + & db.tag.namespace.attribute? + db.tag = + + ## A component of XML (or SGML) markup + element tag { db.tag.attlist, (db._text | db.tag)* } +} +div { + db.symbol.class.attribute = + + ## Identifies the class of symbol + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.symbol.role.attribute = attribute role { text } + db.symbol.attlist = + db.symbol.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.symbol.class.attribute? + db.symbol = + + ## A name that is replaced by a value before processing + element symbol { db.symbol.attlist, db._text } +} +div { + db.token.role.attribute = attribute role { text } + db.token.attlist = + db.token.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.token = + + ## A unit of information + element token { db.token.attlist, db._text } +} +div { + db.literal.role.attribute = attribute role { text } + db.literal.attlist = + db.literal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.literal = + + ## Inline text that is some literal value + element literal { db.literal.attlist, db._text } +} +div { + code.language.attribute = + + ## Identifies the (computer) language of the code fragment + attribute language { text } + db.code.role.attribute = attribute role { text } + db.code.attlist = + db.code.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & code.language.attribute? + db.code = + + ## An inline code fragment + element code { + db.code.attlist, (db.programming.inlines | db._text)* + } +} +div { + db.constant.class.attribute = + + ## Identifies the class of constant + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.constant.role.attribute = attribute role { text } + db.constant.attlist = + db.constant.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.constant.class.attribute? + db.constant = + + ## A programming or system constant + element constant { db.constant.attlist, db._text } +} +div { + db.productname.role.attribute = attribute role { text } + db.productname.class.enumeration = + + ## A name with a copyright + "copyright" + | + ## A name with a registered copyright + "registered" + | + ## A name of a service + "service" + | + ## A name which is trademarked + "trade" + db.productname.class.attribute = + + ## Specifies the class of product name + attribute class { db.productname.class.enumeration } + db.productname.attlist = + db.productname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.productname.class.attribute? + db.productname = + + ## The formal name of a product + element productname { db.productname.attlist, db._text } +} +div { + db.productnumber.role.attribute = attribute role { text } + db.productnumber.attlist = + db.productnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productnumber = + + ## A number assigned to a product + element productnumber { db.productnumber.attlist, db._text } +} +div { + db.database.class.enumeration = + + ## An alternate or secondary key + "altkey" + | + ## A constraint + "constraint" + | + ## A data type + "datatype" + | + ## A field + "field" + | + ## A foreign key + "foreignkey" + | + ## A group + "group" + | + ## An index + "index" + | + ## The first or primary key + "key1" + | + ## An alternate or secondary key + "key2" + | + ## A name + "name" + | + ## The primary key + "primarykey" + | + ## A (stored) procedure + "procedure" + | + ## A record + "record" + | + ## A rule + "rule" + | + ## The secondary key + "secondarykey" + | + ## A table + "table" + | + ## A user + "user" + | + ## A view + "view" + db.database.class.attribute = + + ## Identifies the class of database artifact + attribute class { db.database.class.enumeration } + db.database.role.attribute = attribute role { text } + db.database.attlist = + db.database.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.database.class.attribute? + db.database = + + ## The name of a database, or part of a database + element database { db.database.attlist, db._text } +} +div { + db.application.class.enumeration = + + ## A hardware application + "hardware" + | + ## A software application + "software" + db.application.class.attribute = + + ## Identifies the class of application + attribute class { db.application.class.enumeration } + db.application.role.attribute = attribute role { text } + db.application.attlist = + db.application.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.application.class.attribute? + db.application = + + ## The name of a software program + element application { db.application.attlist, db._text } +} +div { + db.hardware.role.attribute = attribute role { text } + db.hardware.attlist = + db.hardware.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.hardware = + + ## A physical part of a computer system + element hardware { db.hardware.attlist, db._text } +} +db.gui.inlines = + db.guiicon + | db.guibutton + | db.guimenuitem + | db.guimenu + | db.guisubmenu + | db.guilabel + | db.menuchoice + | db.mousebutton +div { + db.guibutton.role.attribute = attribute role { text } + db.guibutton.attlist = + db.guibutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guibutton = + + ## The text on a button in a GUI + element guibutton { + db.guibutton.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guiicon.role.attribute = attribute role { text } + db.guiicon.attlist = + db.guiicon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guiicon = + + ## Graphic and/or text appearing as a icon in a GUI + element guiicon { + db.guiicon.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guilabel.role.attribute = attribute role { text } + db.guilabel.attlist = + db.guilabel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guilabel = + + ## The text of a label in a GUI + element guilabel { + db.guilabel.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenu.role.attribute = attribute role { text } + db.guimenu.attlist = + db.guimenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenu = + + ## The name of a menu in a GUI + element guimenu { + db.guimenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenuitem.role.attribute = attribute role { text } + db.guimenuitem.attlist = + db.guimenuitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenuitem = + + ## The name of a terminal menu item in a GUI + element guimenuitem { + db.guimenuitem.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guisubmenu.role.attribute = attribute role { text } + db.guisubmenu.attlist = + db.guisubmenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guisubmenu = + + ## The name of a submenu in a GUI + element guisubmenu { + db.guisubmenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.menuchoice.role.attribute = attribute role { text } + db.menuchoice.attlist = + db.menuchoice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.menuchoice = + + ## A selection or series of selections from a menu + element menuchoice { + db.menuchoice.attlist, + db.shortcut?, + (db.guibutton + | db.guiicon + | db.guilabel + | db.guimenu + | db.guimenuitem + | db.guisubmenu)+ + } +} +div { + db.mousebutton.role.attribute = attribute role { text } + db.mousebutton.attlist = + db.mousebutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mousebutton = + + ## The conventional name of a mouse button + element mousebutton { db.mousebutton.attlist, db._text } +} +db.keyboard.inlines = + db.keycombo + | db.keycap + | db.keycode + | db.keysym + | db.shortcut + | db.accel +div { + db.keycap.function.enumeration = + + ## The "Alt" key + "alt" + | + ## The "Alt Graph" key + "altgr" + | + ## The "Backspace" key + "backspace" + | + ## The "Command" key + "command" + | + ## The "Control" key + "control" + | + ## The "Delete" key + "delete" + | + ## The down arrow + "down" + | + ## The "End" key + "end" + | + ## The "Enter" key + "enter" + | + ## The "Escape" key + "escape" + | + ## The "Home" key + "home" + | + ## The "Insert" key + "insert" + | + ## The left arrow + "left" + | + ## The "Meta" key + "meta" + | + ## The "Option" key + "option" + | + ## The page down key + "pagedown" + | + ## The page up key + "pageup" + | + ## The right arrow + "right" + | + ## The "Return" key + "return" + | + ## The "Shift" key + "shift" + | + ## The spacebar + "space" + | + ## The "Tab" key + "tab" + | + ## The up arrow + "up" + db.keycap.function-enum.attribute = + + ## Identifies the function key + attribute function { db.keycap.function.enumeration }? + db.keycap.function-other.attributes = + + ## Identifies the function key + attribute function { + + ## Indicates a non-standard function key + "other" + }?, + + ## Specifies a keyword that identifies the non-standard key + attribute otherfunction { text } + db.keycap.function.attrib = + db.keycap.function-enum.attribute + | db.keycap.function-other.attributes + db.keycap.role.attribute = attribute role { text } + db.keycap.attlist = + db.keycap.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycap.function.attrib + db.keycap = + + ## The text printed on a key on a keyboard + element keycap { db.keycap.attlist, db._text } +} +div { + db.keycode.role.attribute = attribute role { text } + db.keycode.attlist = + db.keycode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keycode = + + ## The internal, frequently numeric, identifier for a key on a keyboard + element keycode { db.keycode.attlist, db._text } +} +db.keycombination.contentmodel = + (db.keycap | db.keycombo | db.keysym) | db.mousebutton +div { + db.keycombo.action.enumeration = + + ## A (single) mouse click. + "click" + | + ## A double mouse click. + "double-click" + | + ## A mouse or key press. + "press" + | + ## Sequential clicks or presses. + "seq" + | + ## Simultaneous clicks or presses. + "simul" + db.keycombo.action-enum.attribute = + + ## Identifies the nature of the action taken. If keycombo + ## contains more than one element, simul + ## is the default, otherwise there is no default. + attribute action { db.keycombo.action.enumeration }? + db.keycombo.action-other.attributes = + + ## Identifies the nature of the action taken + attribute action { + + ## Indicates a non-standard action + "other" + }?, + + ## Identifies the non-standard action in some unspecified way. + attribute otheraction { text } + db.keycombo.action.attrib = + db.keycombo.action-enum.attribute + | db.keycombo.action-other.attributes + db.keycombo.role.attribute = attribute role { text } + db.keycombo.attlist = + db.keycombo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycombo.action.attrib + db.keycombo = + + ## A combination of input actions + element keycombo { + db.keycombo.attlist, db.keycombination.contentmodel+ + } +} +div { + db.keysym.role.attribute = attribute role { text } + db.keysym.attlist = + db.keysym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keysym = + + ## The symbolic name of a key on a keyboard + element keysym { db.keysym.attlist, db._text } +} +div { + db.accel.role.attribute = attribute role { text } + db.accel.attlist = + db.accel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.accel = + + ## A graphical user interface (GUI) keyboard shortcut + element accel { db.accel.attlist, db._text } +} +div { + db.shortcut.action.attrib = db.keycombo.action.attrib + db.shortcut.role.attribute = attribute role { text } + db.shortcut.attlist = + db.shortcut.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.shortcut.action.attrib + db.shortcut = + + ## A key combination for an action that is also accessible through a menu + element shortcut { + db.shortcut.attlist, db.keycombination.contentmodel+ + } +} +db.os.inlines = + db.prompt + | db.envar + | db.filename + | db.command + | db.computeroutput + | db.userinput +db.computeroutput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines +db.userinput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines +db.prompt.inlines = db._text | db.co +div { + db.prompt.role.attribute = attribute role { text } + db.prompt.attlist = + db.prompt.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.prompt = + + ## A character or string indicating the start of an input field in a computer display + element prompt { db.prompt.attlist, db.prompt.inlines* } +} +div { + db.envar.role.attribute = attribute role { text } + db.envar.attlist = + db.envar.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.envar = + + ## A software environment variable + element envar { db.envar.attlist, db._text } +} +div { + db.filename.class.enumeration = + + ## A device + "devicefile" + | + ## A directory + "directory" + | + ## A filename extension + "extension" + | + ## A header file (as for a programming language) + "headerfile" + | + ## A library file + "libraryfile" + | + ## A partition (as of a hard disk) + "partition" + | + ## A symbolic link + "symlink" + db.filename.class.attribute = + + ## Identifies the class of filename + attribute class { db.filename.class.enumeration } + db.filename.path.attribute = + + ## Specifies the path of the filename + attribute path { text } + db.filename.role.attribute = attribute role { text } + db.filename.attlist = + db.filename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.filename.path.attribute? + & db.filename.class.attribute? + db.filename = + + ## The name of a file + element filename { db.filename.attlist, db._text } +} +div { + db.command.role.attribute = attribute role { text } + db.command.attlist = + db.command.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.command = + + ## The name of an executable program or other software command + element command { db.command.attlist, db._text } +} +div { + db.computeroutput.role.attribute = attribute role { text } + db.computeroutput.attlist = + db.computeroutput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.computeroutput = + + ## Data, generally text, displayed or presented by a computer + element computeroutput { + db.computeroutput.attlist, db.computeroutput.inlines* + } +} +div { + db.userinput.role.attribute = attribute role { text } + db.userinput.attlist = + db.userinput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.userinput = + + ## Data entered by the user + element userinput { db.userinput.attlist, db.userinput.inlines* } +} +div { + db.cmdsynopsis.role.attribute = attribute role { text } + db.cmdsynopsis.sepchar.attribute = + + ## Specifies the character that should separate the command and its top-level arguments + attribute sepchar { text } + db.cmdsynopsis.cmdlength.attribute = + + ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + attribute cmdlength { text } + db.cmdsynopsis.label.attribute = db.label.attribute + db.cmdsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.cmdsynopsis.attlist = + db.cmdsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.cmdsynopsis.sepchar.attribute? + & db.cmdsynopsis.cmdlength.attribute? + & db.cmdsynopsis.label.attribute? + & db.cmdsynopsis.packageref.attribute? + db.cmdsynopsis.info = db._info.title.forbidden + db.cmdsynopsis = + + ## A syntax summary for a software command + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:cmdsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element cmdsynopsis { + db.cmdsynopsis.attlist, + db.cmdsynopsis.info, + (db.command | db.arg | db.group | db.sbr)+, + db.synopfragment* + } +} +db.rep.enumeration = + + ## Can not be repeated. + "norepeat" + | + ## Can be repeated. + "repeat" +db.rep.attribute = + + ## Indicates whether or not repetition is possible. + [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration } +db.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted without indication. + "plain" + | + ## Formatted to indicate that it is required. + "req" +db.choice.opt.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration } +db.choice.req.attribute = + + ## Indicates optionality. + [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration } +div { + db.arg.role.attribute = attribute role { text } + db.arg.rep.attribute = db.rep.attribute + db.arg.choice.attribute = db.choice.opt.attribute + db.arg.attlist = + db.arg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.arg.rep.attribute? + & db.arg.choice.attribute? + db.arg = + + ## An argument in a cmdsynopsis + element arg { + db.arg.attlist, + (db._text + | db.arg + | db.group + | db.option + | db.synopfragmentref + | db.sbr)* + } +} +div { + db.group.role.attribute = attribute role { text } + db.group.rep.attribute = db.rep.attribute + db.group.choice.attribute = db.choice.opt.attribute + db.group.attlist = + db.group.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.rep.attribute? + & db.group.choice.attribute? + db.group = + + ## A group of elements in a cmdsynopsis + element group { + db.group.attlist, + (db.arg + | db.group + | db.option + | db.synopfragmentref + | db.replaceable + | db.sbr)+ + } +} +div { + db.sbr.role.attribute = attribute role { text } + db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes + db.sbr = + + ## An explicit line break in a command synopsis + element sbr { db.sbr.attlist, empty } +} +div { + db.synopfragment.role.attribute = attribute role { text } + db.synopfragment.attlist = + db.synopfragment.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.synopfragment = + + ## A portion of a cmdsynopsis broken out from the main body of the synopsis + element synopfragment { + db.synopfragment.attlist, (db.arg | db.group)+ + } +} +div { + db.synopfragmentref.role.attribute = attribute role { text } + db.synopfragmentref.attlist = + db.synopfragmentref.role.attribute? + & db.common.attributes + & db.linkend.attribute + db.synopfragmentref = + + ## A reference to a fragment of a command synopsis + [ + s:pattern [ + s:title [ "Synopsis fragment type constraint" ] + s:rule [ + context = "db:synopfragmentref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on synopfragmentref must point to a synopfragment." + ] + ] + ] + ] + element synopfragmentref { db.synopfragmentref.attlist, text } +} +db.programming.inlines = + db.function + | db.parameter + | db.varname + | db.returnvalue + | db.type + | db.classname + | db.exceptionname + | db.interfacename + | db.methodname + | db.modifier + | db.initializer + | db.buildtarget + | db.oo.inlines + | db.templatename + | db.macroname + | db.unionname + | db.enumname + | db.enumvalue + | db.enumidentifier + | db.typedefname +db.oo.inlines = db.ooclass | db.ooexception | db.oointerface +db.synopsis.blocks = + (db.funcsynopsis + | db.classsynopsis + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.enumsynopsis + | db.typedefsynopsis + | db.packagesynopsis + | db.macrosynopsis + | db.unionsynopsis) + | db.cmdsynopsis +div { + db.synopsis.role.attribute = attribute role { text } + db.synopsis.label.attribute = db.label.attribute + db.synopsis.attlist = + db.synopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.synopsis.label.attribute? + db.synopsis = + + ## A general-purpose element for representing the syntax of commands or functions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:synopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element synopsis { db.synopsis.attlist, db.verbatim.contentmodel } +} +div { + db.synopsisinfo.role.attribute = attribute role { text } + db.synopsisinfo.attlist = + db.synopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.synopsisinfo = + + ## Information supplementing synopsis + element synopsisinfo { + db.synopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcsynopsis.info = db._info.title.forbidden + db.funcsynopsis.role.attribute = attribute role { text } + db.funcsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.funcsynopsis.attlist = + db.funcsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.funcsynopsis.packageref.attribute? + db.funcsynopsis = + + ## The syntax summary for a function definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsis { + db.funcsynopsis.attlist, + db.funcsynopsis.info, + (db.funcsynopsisinfo | db.funcprototype)+ + } +} +div { + db.funcsynopsisinfo.role.attribute = attribute role { text } + db.funcsynopsisinfo.attlist = + db.funcsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.funcsynopsisinfo = + + ## Information supplementing the funcdefs of a funcsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsisinfo { + db.funcsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcprototype.role.attribute = attribute role { text } + db.funcprototype.attlist = + db.funcprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcprototype = + + ## The prototype of a function + element funcprototype { + db.funcprototype.attlist, + db.modifier*, + db.funcdef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.funcdef.role.attribute = attribute role { text } + db.funcdef.attlist = + db.funcdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcdef = + + ## A function (subroutine) name and its return type + element funcdef { + db.funcdef.attlist, + (db._text | db.type | db.templatename | db.void | db.function)* + } +} +div { + db.function.role.attribute = attribute role { text } + db.function.attlist = + db.function.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.function = + + ## The name of a function or subroutine, as in a programming language + element function { db.function.attlist, db._text } +} +div { + db.void.role.attribute = attribute role { text } + db.void.attlist = + db.void.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.void = + + ## An empty element in a function synopsis indicating that the function in question takes no arguments + element void { db.void.attlist, empty } +} +div { + db.varargs.role.attribute = attribute role { text } + db.varargs.attlist = + db.varargs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varargs = + + ## An empty element in a function synopsis indicating a variable number of arguments + element varargs { db.varargs.attlist, empty } +} +div { + db.group.paramdef.role.attribute = attribute role { text } + db.group.paramdef.choice.attribute = db.choice.opt.attribute + db.group.paramdef.attlist = + db.group.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.paramdef.choice.attribute? + db.group.paramdef = + + ## A group of parameters + element group { + db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+ + } +} +div { + db.paramdef.role.attribute = attribute role { text } + db.paramdef.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted to indicate that it is required. + "req" + db.paramdef.choice.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] + attribute choice { db.paramdef.choice.enumeration } + db.paramdef.attlist = + db.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.paramdef.choice.attribute? + db.paramdef = + + ## Information about a function parameter in a programming language + element paramdef { + db.paramdef.attlist, + (db._text + | db.initializer + | db.modifier + | db.type + | db.templatename + | db.parameter + | db.funcparams)* + } +} +div { + db.funcparams.role.attribute = attribute role { text } + db.funcparams.attlist = + db.funcparams.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcparams = + + ## Parameters for a function referenced through a function pointer in a synopsis + element funcparams { db.funcparams.attlist, db._text } +} +div { + db.classsynopsis.info = db._info.title.forbidden + db.classsynopsis.role.attribute = attribute role { text } + db.classsynopsis.class.enumeration = + + ## This is the synopsis of a class + "class" + | + ## This is the synopsis of an interface + "interface" + db.classsynopsis.class.attribute = + + ## Specifies the nature of the synopsis + attribute class { db.classsynopsis.class.enumeration } + db.classsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.classsynopsis.attlist = + db.classsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.classsynopsis.class.attribute? + & db.classsynopsis.packageref.attribute? + db.classsynopsis = + + ## The syntax summary for a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsis { + db.classsynopsis.attlist, + db.classsynopsis.info, + db.classsynopsisinfo*, + db.templatename*, + db.oo.inlines, + (db.template + | db.ooexception + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.classsynopsisinfo)* + } +} +div { + db.classsynopsisinfo.role.attribute = attribute role { text } + db.classsynopsisinfo.attlist = + db.classsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.classsynopsisinfo = + + ## Information supplementing the contents of a classsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsisinfo { + db.classsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.ooclass.role.attribute = attribute role { text } + db.ooclass.attlist = + db.ooclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooclass = + + ## A class in an object-oriented programming language + element ooclass { + db.ooclass.attlist, + (db.package | db.modifier)*, + db.classname, + db.modifier* + } +} +div { + db.oointerface.role.attribute = attribute role { text } + db.oointerface.attlist = + db.oointerface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.oointerface = + + ## An interface in an object-oriented programming language + element oointerface { + db.oointerface.attlist, + (db.package | db.modifier)*, + db.interfacename, + db.modifier* + } +} +div { + db.ooexception.role.attribute = attribute role { text } + db.ooexception.attlist = + db.ooexception.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooexception = + + ## An exception in an object-oriented programming language + element ooexception { + db.ooexception.attlist, + (db.package | db.modifier)*, + db.exceptionname, + db.modifier* + } +} +db.modifier.xml.space.attribute = + + ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + attribute xml:space { + + ## Extra whitespace and line breaks must be preserved. + [ + # Ideally the definition of xml:space used on modifier would be + # different from the definition used on the verbatim elements. The + # verbatim elements forbid the use of xml:space="default" which + # wouldn't be a problem on modifier. But doing that causes the + # generated XSD schemas to be broken so I'm just reusing the existing + # definition for now. It won't be backwards incompatible to fix this + # problem in the future. + # | ## Extra whitespace and line breaks are not preserved. + # "default" + + ] + "preserve" + } +div { + db.modifier.role.attribute = attribute role { text } + db.modifier.attlist = + db.modifier.xml.space.attribute? + & db.modifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.modifier = + + ## Modifiers in a synopsis + element modifier { db.modifier.attlist, db._text } +} +div { + db.interfacename.role.attribute = attribute role { text } + db.interfacename.attlist = + db.interfacename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.interfacename = + + ## The name of an interface + element interfacename { db.interfacename.attlist, db._text } +} +div { + db.exceptionname.role.attribute = attribute role { text } + db.exceptionname.attlist = + db.exceptionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.exceptionname = + + ## The name of an exception + element exceptionname { db.exceptionname.attlist, db._text } +} +div { + db.fieldsynopsis.info = db._info.title.forbidden + db.fieldsynopsis.role.attribute = attribute role { text } + db.fieldsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.fieldsynopsis.attlist = + db.fieldsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.fieldsynopsis.packageref.attribute? + db.fieldsynopsis = + + ## The name of a field in a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:fieldsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element fieldsynopsis { + db.fieldsynopsis.attlist, + db.fieldsynopsis.info, + db.synopsisinfo*, + db.modifier*, + (db.type | db.templatename)*, + db.varname, + db.modifier*, + db.initializer?, + db.synopsisinfo* + } +} +div { + db.initializer.role.attribute = attribute role { text } + db.initializer.attlist = + db.initializer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines + db.initializer = + + ## The initializer for a fieldsynopsis + element initializer { + db.initializer.attlist, db.initializer.inlines* + } +} +div { + db.constructorsynopsis.info = db._info.title.forbidden + db.constructorsynopsis.role.attribute = attribute role { text } + db.constructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.constructorsynopsis.attlist = + db.constructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.constructorsynopsis.packageref.attribute? + db.constructorsynopsis = + + ## A syntax summary for a constructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constructorsynopsis { + db.constructorsynopsis.attlist, + db.constructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.destructorsynopsis.info = db._info.title.forbidden + db.destructorsynopsis.role.attribute = attribute role { text } + db.destructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.destructorsynopsis.attlist = + db.destructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.destructorsynopsis.packageref.attribute? + db.destructorsynopsis = + + ## A syntax summary for a destructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:destructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element destructorsynopsis { + db.destructorsynopsis.attlist, + db.destructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.methodsynopsis.info = db._info.title.forbidden + db.methodsynopsis.role.attribute = attribute role { text } + db.methodsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.methodsynopsis.attlist = + db.methodsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.methodsynopsis.packageref.attribute? + db.methodsynopsis = + + ## A syntax summary for a method + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:methodsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element methodsynopsis { + db.methodsynopsis.attlist, + db.methodsynopsis.info, + db.synopsisinfo*, + (db.templatename | db.modifier)*, + (db.type | db.void)?, + db.methodname, + db.templatename*, + ((db.methodparam | db.group.methodparam)+ | db.void), + (db.exceptionname | db.modifier | db.templatename)*, + db.synopsisinfo* + } +} +div { + db.methodname.role.attribute = attribute role { text } + db.methodname.attlist = + db.methodname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.methodname = + + ## The name of a method + element methodname { db.methodname.attlist, db._text } +} +div { + db.methodparam.role.attribute = attribute role { text } + db.methodparam.rep.attribute = db.rep.attribute + db.methodparam.choice.attribute = db.choice.req.attribute + db.methodparam.attlist = + db.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.methodparam.rep.attribute? + & db.methodparam.choice.attribute? + db.methodparam = + + ## Parameters to a method + element methodparam { + db.methodparam.attlist, + (db.modifier | db.type | db.templatename)*, + ((db.parameter, db.initializer?) | db.funcparams), + db.modifier* + } +} +div { + db.group.methodparam.role.attribute = attribute role { text } + db.group.methodparam.choice.attribute = db.choice.opt.attribute + db.group.methodparam.attlist = + db.group.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.methodparam.choice.attribute? + db.group.methodparam = + + ## A group of method parameters + element group { + db.group.methodparam.attlist, + (db.methodparam | db.group.methodparam)+ + } +} +div { + db.varname.role.attribute = attribute role { text } + db.varname.attlist = + db.varname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varname = + + ## The name of a variable + element varname { db.varname.attlist, db._text } +} +div { + db.buildtarget.role.attribute = attribute role { text } + db.buildtarget.attlist = + db.buildtarget.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.buildtarget = + + ## Target of a build + element buildtarget { db.buildtarget.attlist, db._text } +} +div { + db.returnvalue.role.attribute = attribute role { text } + db.returnvalue.attlist = + db.returnvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.returnvalue = + + ## The value returned by a function + element returnvalue { db.returnvalue.attlist, db._text } +} +div { + db.type.role.attribute = attribute role { text } + db.type.class.enumeration = + + ## Combined type is union of nested types + "union" + | + ## Combined type is intersection of nested types + "intersection" + db.type.class.attribute = + + ## Specifies the way how are nested types combined together + attribute class { db.type.class.enumeration } + db.type.attlist = + db.type.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.type.class.attribute? + db.type = + + ## The classification of a value + element type { + db.type.attlist, (db._text | db.programming.inlines)* + } +} +div { + db.classname.role.attribute = attribute role { text } + db.classname.attlist = + db.classname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.classname = + + ## The name of a class, in the object-oriented programming sense + element classname { db.classname.attlist, db._text } +} +div { + db.templatename.role.attribute = attribute role { text } + db.templatename.attlist = + db.templatename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.templatename = + + ## The identifier for a template, in the generic programming sense + element templatename { db.templatename.attlist, db._text } +} +div { + db.template.role.attribute = attribute role { text } + db.template.attlist = + db.template.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.template = + + ## The definition of a template, in the generic programming sense + element template { + db.template.attlist, + (((db.modifier | db.type | db._text)*, + db.templatename, + (db.modifier | db.type | db._text)*) + | db.specializedtemplate) + } +} +div { + db.specializedtemplate.role.attribute = attribute role { text } + db.specializedtemplate.attlist = + db.specializedtemplate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.specializedtemplate = + + ## The specialization of a template identifier, in the generic programming sense + element specializedtemplate { + db.specializedtemplate.attlist, + (db.modifier | db.type | db._text)* + } +} +div { + db.packagesynopsis.info = db._info.title.forbidden + db.packagesynopsis.role.attribute = attribute role { text } + db.packagesynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.packagesynopsis.attlist = + db.packagesynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.packagesynopsis.packageref.attribute? + db.packagesynopsis = + + ## The syntax summary for a package definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:packagesynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element packagesynopsis { + db.packagesynopsis.attlist, + db.packagesynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.package, + db.modifier*, + (db.synopsis.blocks | db.synopsisinfo)* + } +} +div { + db.macroname.role.attribute = attribute role { text } + db.macroname.attlist = + db.macroname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroname = + + ## The name of a macro (a code-generating function) + element macroname { db.macroname.attlist, db._text } +} +div { + db.macrosynopsis.info = db._info.title.forbidden + db.macrosynopsis.role.attribute = attribute role { text } + db.macrosynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.macrosynopsis.attlist = + db.macrosynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.macrosynopsis.packageref.attribute? + db.macrosynopsis = + + ## The syntax summary for a macro definition (code-generating function) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:macrosynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element macrosynopsis { + db.macrosynopsis.attlist, + db.macrosynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.macroname, + (db.package | db.modifier)*, + db.macroprototype+, + db.synopsisinfo* + } +} +div { + db.macroprototype.role.attribute = attribute role { text } + db.macroprototype.attlist = + db.macroprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroprototype = + + ## The prototype of a macro (code-generating function) + element macroprototype { + db.macroprototype.attlist, + db.modifier*, + db.macrodef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.macrodef.role.attribute = attribute role { text } + db.macrodef.attlist = + db.macrodef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macrodef = + + ## A macro name and its return type + element macrodef { + db.macrodef.attlist, (db.type | db.templatename)*, db.macroname + } +} +div { + db.unionname.role.attribute = attribute role { text } + db.unionname.attlist = + db.unionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.unionname = + + ## The name of a union of types + element unionname { db.unionname.attlist, db._text } +} +div { + db.union.role.attribute = attribute role { text } + db.union.attlist = + db.union.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.union = + + ## The definition of a union of types, which may be more than a name + element union { db.union.attlist, db.type+ } +} +div { + db.unionsynopsis.info = db._info.title.forbidden + db.unionsynopsis.role.attribute = attribute role { text } + # N.B. the enumeration is explicitly identical to the enumeration + # on enumsynopsis by default. + db.unionsynopsis.ordered.attribute = + + ## Indicates how the value of a union is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.unionsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.unionsynopsis.attlist = + db.unionsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.unionsynopsis.ordered.attribute? + & db.unionsynopsis.packageref.attribute? + db.unionsynopsis = + + ## The syntax summary for a union-of-types definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:unionsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element unionsynopsis { + db.unionsynopsis.attlist, + db.unionsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.unionname?, + db.union, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.enumname.role.attribute = attribute role { text } + db.enumname.attlist = + db.enumname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumname = + + ## The name of an enumeration + element enumname { db.enumname.attlist, db._text } +} +div { + db.enumvalue.role.attribute = attribute role { text } + db.enumvalue.attlist = + db.enumvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumvalue = + + ## The value an enumerated type can take + element enumvalue { db.enumvalue.attlist, db._text } +} +div { + db.enumitemdescription.role.attribute = attribute role { text } + db.enumitemdescription.attlist = + db.enumitemdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitemdescription = + + ## The description of a value an enumerated type can take + element enumitemdescription { + db.enumitemdescription.attlist, db.all.inlines* + } +} +div { + db.enumidentifier.role.attribute = attribute role { text } + db.enumidentifier.attlist = + db.enumidentifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumidentifier = + + ## The identifier of a value an enumerated type can take + element enumidentifier { db.enumidentifier.attlist, db._text } +} +div { + db.enumitem.role.attribute = attribute role { text } + db.enumitem.attlist = + db.enumitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitem = + + ## A value an enumerated type can take and its description + element enumitem { + db.enumitem.attlist, + db.enumidentifier, + db.enumvalue*, + db.enumitemdescription? + } +} +div { + db.enumsynopsis.info = db._info.title.forbidden + db.enumsynopsis.role.attribute = attribute role { text } + db.enumsynopsis.ordered.enumeration = + + ## Value of enum is specified explicitly using enumvalue + "0" + | + ## Value of enum is inferred from its position + "1" + db.enumsynopsis.ordered.attribute = + + ## Indicates how the value of an enumeration is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.enumsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.enumsynopsis.attlist = + db.enumsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.enumsynopsis.ordered.attribute? + & db.enumsynopsis.packageref.attribute? + db.enumsynopsis = + + ## The syntax summary for an enumerated-type definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:enumsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element enumsynopsis { + db.enumsynopsis.attlist, + db.enumsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + (db.enumname, db.modifier*)?, + db.enumitem+, + db.synopsisinfo* + } +} +div { + db.typedefname.role.attribute = attribute role { text } + db.typedefname.attlist = + db.typedefname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.typedefname = + + ## The name of a type alias + element typedefname { db.typedefname.attlist, db._text } +} +div { + db.typedefsynopsis.info = db._info.title.forbidden + db.typedefsynopsis.role.attribute = attribute role { text } + db.typedefsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.typedefsynopsis.attlist = + db.typedefsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.typedefsynopsis.packageref.attribute? + db.typedefsynopsis = + + ## The syntax summary for a type-alias definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:typedefsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element typedefsynopsis { + db.typedefsynopsis.attlist, + db.typedefsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.typedefname, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.programlisting.role.attribute = attribute role { text } + db.programlisting.width.attribute = db.width.characters.attribute + db.programlisting.attlist = + db.programlisting.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.programlisting.width.attribute? + db.programlisting = + + ## A literal listing of all or part of a program + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlisting" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlisting { + db.programlisting.attlist, db.verbatim.contentmodel + } +} +db.admonition.blocks = + db.caution | db.danger | db.important | db.note | db.tip | db.warning +db.admonition.contentmodel = db._info.title.only, db.all.blocks+ +div { + db.caution.role.attribute = attribute role { text } + db.caution.attlist = + db.caution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caution = + + ## A note of caution + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caution" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caution { db.caution.attlist, db.admonition.contentmodel } +} +div { + db.danger.role.attribute = attribute role { text } + db.danger.attlist = + db.danger.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.danger = + + ## An admonition set off from the text indicating hazardous situation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:danger" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element danger { db.danger.attlist, db.admonition.contentmodel } +} +div { + db.important.role.attribute = attribute role { text } + db.important.attlist = + db.important.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.important = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:important" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element important { + db.important.attlist, db.admonition.contentmodel + } +} +div { + db.note.role.attribute = attribute role { text } + db.note.attlist = + db.note.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.note = + + ## A message set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:note" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element note { db.note.attlist, db.admonition.contentmodel } +} +div { + db.tip.role.attribute = attribute role { text } + db.tip.attlist = + db.tip.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tip = + + ## A suggestion to the user, set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tip" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tip { db.tip.attlist, db.admonition.contentmodel } +} +div { + db.warning.role.attribute = attribute role { text } + db.warning.attlist = + db.warning.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.warning = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:warning" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element warning { db.warning.attlist, db.admonition.contentmodel } +} +db.error.inlines = + db.errorcode | db.errortext | db.errorname | db.errortype +div { + db.errorcode.role.attribute = attribute role { text } + db.errorcode.attlist = + db.errorcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorcode = + + ## An error code + element errorcode { db.errorcode.attlist, db._text } +} +div { + db.errorname.role.attribute = attribute role { text } + db.errorname.attlist = + db.errorname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorname = + + ## An error name + element errorname { db.errorname.attlist, db._text } +} +div { + db.errortext.role.attribute = attribute role { text } + db.errortext.attlist = + db.errortext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortext = + + ## An error message. + element errortext { db.errortext.attlist, db._text } +} +div { + db.errortype.role.attribute = attribute role { text } + db.errortype.attlist = + db.errortype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortype = + + ## The classification of an error message + element errortype { db.errortype.attlist, db._text } +} +db.systemitem.inlines = db._text | db.co +div { + db.systemitem.class.enumeration = + + ## A daemon or other system process (syslogd) + "daemon" + | + ## A domain name (example.com) + "domainname" + | + ## An ethernet address (00:05:4E:49:FD:8E) + "etheraddress" + | + ## An event of some sort (SIGHUP) + "event" + | + ## An event handler of some sort (hangup) + "eventhandler" + | + ## A filesystem (ext3) + "filesystem" + | + ## A fully qualified domain name (my.example.com) + "fqdomainname" + | + ## A group name (wheel) + "groupname" + | + ## A network interface (eth0) + "interface" + | + ## An IP address (127.0.0.1) + "ipaddress" + | + ## A library (libncurses) + "library" + | + ## A macro + "macro" + | + ## A netmask (255.255.255.192) + "netmask" + | + ## A newsgroup (comp.text.xml) + "newsgroup" + | + ## An operating system name (Hurd) + "osname" + | + ## A process (gnome-cups-icon) + "process" + | + ## A protocol (ftp) + "protocol" + | + ## A resource + "resource" + | + ## A security context (a role, permission, or security token, for example) + "securitycontext" + | + ## A server (mail.example.com) + "server" + | + ## A service (ppp) + "service" + | + ## A system name (hephaistos) + "systemname" + | + ## A user name (ndw) + "username" + db.systemitem.class-enum.attribute = + + ## Identifies the nature of the system item + attribute class { db.systemitem.class.enumeration }? + db.systemitem.class-other.attribute = + + ## Identifies the nature of the non-standard system item + attribute otherclass { xsd:NMTOKEN } + db.systemitem.class-other.attributes = + + ## Identifies the kind of systemitemgraphic identifier + attribute class { + + ## Indicates that the system item is some 'other' kind. + "other" + } + & db.systemitem.class-other.attribute + db.systemitem.class.attribute = + db.systemitem.class-enum.attribute + | db.systemitem.class-other.attributes + db.systemitem.role.attribute = attribute role { text } + db.systemitem.attlist = + db.systemitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.systemitem.class.attribute? + db.systemitem = + + ## A system-related item or term + element systemitem { db.systemitem.attlist, db.systemitem.inlines* } +} +div { + db.option.role.attribute = attribute role { text } + db.option.attlist = + db.option.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.option = + + ## An option for a software command + element option { db.option.attlist, db._text } +} +div { + db.optional.role.attribute = attribute role { text } + db.optional.attlist = + db.optional.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.optional = + + ## Optional information + element optional { db.optional.attlist, (db._text | db.optional)* } +} +div { + db.property.role.attribute = attribute role { text } + db.property.attlist = + db.property.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.property = + + ## A unit of data associated with some part of a computer system + element property { db.property.attlist, db._text } +} +div { + db.topic.status.attribute = db.status.attribute + db.topic.role.attribute = attribute role { text } + db.topic.type.attribute = + + ## Identifies the topic type + attribute type { text } + db.topic.attlist = + db.topic.role.attribute? + & db.topic.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.topic.status.attribute? + db.topic.info = db._info.title.req + db.topic = + + ## A modular unit of documentation not part of any particular narrative flow + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:topic" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element topic { + db.topic.attlist, + db.topic.info, + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* + } +} +div { + db.any.other.attribute = attribute * - local:* { text } + db.xi.include.attlist = + attribute href { + xsd:anyURI { pattern = "[^#]+" } + }?, + [ a:defaultValue = "xml" ] attribute parse { "xml" | "text" }?, + attribute xpointer { text }?, + attribute fragid { text }?, + attribute set-xml-id { text }?, + attribute encoding { text }?, + attribute accept { text }?, + attribute accept-language { text }?, + db.any.other.attribute* + db.xi.include = + + ## An XInclude + element xi:include { db.xi.include.attlist, db.xi.fallback? } +} +div { + # The fallback element has no attributes + db.xi.fallback = + + ## An XInclude fallback + element xi:fallback { db.all.blocks+ | db.all.inlines+ | db._any* } +} +db._any = + element * - (db:* | its:*) { + (attribute * { text } + | text + | db._any)* + } +db._any_other.attribute = + + ## Any attribute in an other explicit namespace. + attribute * - (db:* | xml:* | xlink:* | trans:* | its:* | local:*) { + text + } +# Include base ITS schema + +## Version of ITS +its-version.type = xsd:string { pattern = "[0-9]+\.[0-9]+" } + +## The query language to be used for processing the rules +its-queryLanguage.type = "xpath" | "css" | text +its-absolute-selector.type = + + ## Absolute selector + string +its-relative-selector.type = + + ## Relative selector + string +its-xpath-expression.type = string +its-confidence.type = + xsd:double { minInclusive = "0" maxInclusive = "1" } + +## The Translate data category information to be attached to the current node +its-translate.type = + + ## The nodes need to be translated + "yes" + | + ## The nodes must not be translated + "no" +its-locNote.type = string + +## The type of localization note +its-locNoteType.type = + + ## Localization note is an alert + "alert" + | + ## Localization note is a description + "description" +its-locNoteRef.type = xsd:anyURI +its-termInfoRef.type = xsd:anyURI + +## Indicates a term locally +its-term.type = + + ## The value 'yes' means that this is a term + "yes" + | + ## The value 'no' means that this is not a term + "no" +its-termConfidence.type = its-confidence.type + +## The text direction for the context +its-dir.type = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" + +## States whether current context is regarded as "within text" +its-withinText.type = + + ## The element and its content are part of the flow of its parent element + "yes" + | + ## The element splits the text flow of its parent element and its content is an independent text flow + "no" + | + ## The element is part of the flow of its parent element, its content is an independent flow + "nested" + +## A comma separated list of mappings between values in the content +## and workflow specific values. The values may contain spaces; in +## that case they MUST be delimited by quotation marks. +its-domainMapping.type = string +its-taConfidence.type = its-confidence.type +its-taClassRefPointer.type = its-relative-selector.type +its-taClassRef.type = xsd:anyURI +its-taIdentRef.type = xsd:anyURI +its-taIdent.type = string +its-taSource.type = string +its-taIdentPointer.type = its-relative-selector.type +its-taIdentRefPointer.type = its-relative-selector.type +its-taSourcePointer.type = its-relative-selector.type +its-localeFilterList.type = string +its-localeFilterType.type = "include" | "exclude" +its-provenanceRecordsRef.type = xsd:anyURI +its-person.type = string +its-personRef.type = xsd:anyURI +its-org.type = string +its-orgRef.type = xsd:anyURI +its-tool.type = string +its-toolRef.type = xsd:anyURI +its-revPerson.type = string +its-revPersonRef.type = xsd:anyURI +its-revOrg.type = string +its-revOrgRef.type = xsd:anyURI +its-revTool.type = string +its-revToolRef.type = xsd:anyURI +its-provRef.type = list { xsd:anyURI+ } +its-locQualityIssuesRef.type = xsd:anyURI +its-locQualityIssueType.type = + "terminology" + | "mistranslation" + | "omission" + | "untranslated" + | "addition" + | "duplication" + | "inconsistency" + | "grammar" + | "legal" + | "register" + | "locale-specific-content" + | "locale-violation" + | "style" + | "characters" + | "misspelling" + | "typographical" + | "formatting" + | "inconsistent-entities" + | "numbers" + | "markup" + | "pattern-problem" + | "whitespace" + | "internationalization" + | "length" + | "non-conformance" + | "uncategorized" + | "other" +its-locQualityIssueComment.type = string +its-locQualityIssueSeverity.type = + xsd:double { minInclusive = "0" maxInclusive = "100" } +its-locQualityIssueProfileRef.type = xsd:anyURI +its-locQualityIssueEnabled.type = "yes" | "no" +its-locQualityRatingScore.type = + xsd:double { minInclusive = "0" maxInclusive = "100" } +its-locQualityRatingVote.type = xsd:integer +its-locQualityRatingScoreThreshold.type = + xsd:double { minInclusive = "0" maxInclusive = "100" } +its-locQualityRatingVoteThreshold.type = xsd:integer +its-locQualityRatingProfileRef.type = xsd:anyURI +its-mtConfidence.type = its-confidence.type +its-allowedCharacters.type = string +its-storageSize.type = xsd:nonNegativeInteger +its-storageEncoding.type = string +its-lineBreakType.type = "cr" | "lf" | "crlf" +its-annotatorsRef.type = string +its-attribute.translate = attribute its:translate { its-translate.type } +its-attribute.translate.nons = + attribute translate { its-translate.type } +its-attribute.dir.nons = attribute dir { its-dir.type } +its-attribute.locNote = attribute its:locNote { its-locNote.type } +its-attribute.locNote.nons = attribute locNote { its-locNote.type } +its-attribute.locNoteType = + attribute its:locNoteType { its-locNoteType.type } +its-attribute.locNoteType.nons = + attribute locNoteType { its-locNoteType.type } +its-attribute.locNoteRef = + attribute its:locNoteRef { its-locNoteRef.type } +its-attribute.locNoteRef.nons = + attribute locNoteRef { its-locNoteRef.type } +its-attribute.termInfoRef = + attribute its:termInfoRef { its-termInfoRef.type } +its-attribute.termInfoRef.nons = + attribute termInfoRef { its-termInfoRef.type } +its-attribute.term = attribute its:term { its-term.type } +its-attribute.term.nons = attribute term { its-term.type } +its-attribute.termConfidence = + attribute its:termConfidence { its-termConfidence.type } +its-attribute.termConfidence.nons = + attribute termConfidence { its-termConfidence.type } +its-attribute.withinText = + attribute its:withinText { its-withinText.type } +its-attribute.withinText.nons = + attribute withinText { its-withinText.type } +its-attribute.domainMapping.nons = + attribute domainMapping { its-domainMapping.type } +its-attribute.taConfidence = + attribute its:taConfidence { its-taConfidence.type } +its-attribute.taConfidence.nons = + attribute taConfidence { its-taConfidence.type } +its-attribute.taClassRef = + attribute its:taClassRef { its-taClassRef.type } +its-attribute.taClassRef.nons = + attribute taClassRef { its-taClassRef.type } +its-attribute.taIdent = attribute its:taIdent { its-taIdent.type } +its-attribute.taIdent.nons = attribute taIdent { its-taIdent.type } +its-attribute.taIdentRef = + attribute its:taIdentRef { its-taIdentRef.type } +its-attribute.taIdentRef.nons = + attribute taIdentRef { its-taIdentRef.type } +its-attribute.taSource = attribute its:taSource { its-taSource.type } +its-attribute.taSource.nons = attribute taSource { its-taSource.type } +its-attribute.localeFilterList = + attribute its:localeFilterList { its-localeFilterList.type } +its-attribute.localeFilterList.nons = + attribute localeFilterList { its-localeFilterList.type } +its-attribute.localeFilterType = + attribute its:localeFilterType { its-localeFilterType.type } +its-attribute.localeFilterType.nons = + attribute localeFilterType { its-localeFilterType.type } +its-attribute.person = attribute its:person { its-person.type } +its-attribute.person.nons = attribute person { its-person.type } +its-attribute.personRef = attribute its:personRef { its-personRef.type } +its-attribute.personRef.nons = + attribute personRef { its-personRef.type } +its-attribute.org = attribute its:org { its-org.type } +its-attribute.org.nons = attribute org { its-org.type } +its-attribute.orgRef = attribute its:orgRef { its-orgRef.type } +its-attribute.orgRef.nons = attribute orgRef { its-orgRef.type } +its-attribute.tool = attribute its:tool { its-tool.type } +its-attribute.tool.nons = attribute tool { its-tool.type } +its-attribute.toolRef = attribute its:toolRef { its-toolRef.type } +its-attribute.toolRef.nons = attribute toolRef { its-toolRef.type } +its-attribute.revPerson = attribute its:revPerson { its-revPerson.type } +its-attribute.revPerson.nons = + attribute revPerson { its-revPerson.type } +its-attribute.revPersonRef = + attribute its:revPersonRef { its-revPersonRef.type } +its-attribute.revPersonRef.nons = + attribute revPersonRef { its-revPersonRef.type } +its-attribute.revOrg = attribute its:revOrg { its-revOrg.type } +its-attribute.revOrg.nons = attribute revOrg { its-revOrg.type } +its-attribute.revOrgRef = attribute its:revOrgRef { its-revOrgRef.type } +its-attribute.revOrgRef.nons = + attribute revOrgRef { its-revOrgRef.type } +its-attribute.revTool = attribute its:revTool { its-revTool.type } +its-attribute.revTool.nons = attribute revTool { its-revTool.type } +its-attribute.revToolRef = + attribute its:revToolRef { its-revToolRef.type } +its-attribute.revToolRef.nons = + attribute revToolRef { its-revToolRef.type } +its-attribute.provRef = attribute its:provRef { its-provRef.type } +its-attribute.provRef.nons = attribute provRef { its-provRef.type } +its-attribute.provenanceRecordsRef = + attribute its:provenanceRecordsRef { its-provenanceRecordsRef.type } +its-attribute.provenanceRecordsRef.nons = + attribute provenanceRecordsRef { its-provenanceRecordsRef.type } +its-attribute.locQualityIssuesRef = + attribute its:locQualityIssuesRef { its-locQualityIssuesRef.type } +its-attribute.locQualityIssuesRef.nons = + attribute locQualityIssuesRef { its-locQualityIssuesRef.type } +its-attribute.locQualityIssueType = + attribute its:locQualityIssueType { its-locQualityIssueType.type } +its-attribute.locQualityIssueType.nons = + attribute locQualityIssueType { its-locQualityIssueType.type } +its-attribute.locQualityIssueComment = + attribute its:locQualityIssueComment { + its-locQualityIssueComment.type + } +its-attribute.locQualityIssueComment.nons = + attribute locQualityIssueComment { its-locQualityIssueComment.type } +its-attribute.locQualityIssueSeverity = + attribute its:locQualityIssueSeverity { + its-locQualityIssueSeverity.type + } +its-attribute.locQualityIssueSeverity.nons = + attribute locQualityIssueSeverity { its-locQualityIssueSeverity.type } +its-attribute.locQualityIssueProfileRef = + attribute its:locQualityIssueProfileRef { + its-locQualityIssueProfileRef.type + } +its-attribute.locQualityIssueProfileRef.nons = + attribute locQualityIssueProfileRef { + its-locQualityIssueProfileRef.type + } +its-attribute.locQualityIssueEnabled = + attribute its:locQualityIssueEnabled { + its-locQualityIssueEnabled.type + } +its-attribute.locQualityIssueEnabled.nons = + attribute locQualityIssueEnabled { its-locQualityIssueEnabled.type } +its-attribute.locQualityRatingScore = + attribute its:locQualityRatingScore { its-locQualityRatingScore.type } +its-attribute.locQualityRatingScore.nons = + attribute locQualityRatingScore { its-locQualityRatingScore.type } +its-attribute.locQualityRatingVote = + attribute its:locQualityRatingVote { its-locQualityRatingVote.type } +its-attribute.locQualityRatingVote.nons = + attribute locQualityRatingVote { its-locQualityRatingVote.type } +its-attribute.locQualityRatingScoreThreshold = + attribute its:locQualityRatingScoreThreshold { + its-locQualityRatingScoreThreshold.type + } +its-attribute.locQualityRatingScoreThreshold.nons = + attribute locQualityRatingScoreThreshold { + its-locQualityRatingScoreThreshold.type + } +its-attribute.locQualityRatingVoteThreshold = + attribute its:locQualityRatingVoteThreshold { + its-locQualityRatingVoteThreshold.type + } +its-attribute.locQualityRatingVoteThreshold.nons = + attribute locQualityRatingVoteThreshold { + its-locQualityRatingVoteThreshold.type + } +its-attribute.locQualityRatingProfileRef = + attribute its:locQualityRatingProfileRef { + its-locQualityRatingProfileRef.type + } +its-attribute.locQualityRatingProfileRef.nons = + attribute locQualityRatingProfileRef { + its-locQualityRatingProfileRef.type + } +its-attribute.mtConfidence = + attribute its:mtConfidence { its-mtConfidence.type } +its-attribute.mtConfidence.nons = + attribute mtConfidence { its-mtConfidence.type } +its-attribute.allowedCharacters = + attribute its:allowedCharacters { its-allowedCharacters.type } +its-attribute.allowedCharacters.nons = + attribute allowedCharacters { its-allowedCharacters.type } +its-attribute.storageSize = + attribute its:storageSize { its-storageSize.type } +its-attribute.storageSize.nons = + attribute storageSize { its-storageSize.type } +its-attribute.storageEncoding = + attribute its:storageEncoding { its-storageEncoding.type } +its-attribute.storageEncoding.nons = + attribute storageEncoding { its-storageEncoding.type } +its-attribute.lineBreakType = + attribute its:lineBreakType { its-lineBreakType.type } +its-attribute.lineBreakType.nons = + attribute lineBreakType { its-lineBreakType.type } +its-attribute.annotatorsRef = + attribute its:annotatorsRef { its-annotatorsRef.type } +its-attribute.annotatorsRef.nons = + attribute annotatorsRef { its-annotatorsRef.type } +its-attribute.version = + + ## Version of ITS + attribute its:version { its-version.type } +its-attribute.version.nons = + + ## Version of ITS + attribute version { its-version.type } +its-attribute.queryLanguage.nons = + attribute queryLanguage { its-queryLanguage.type } +its-attribute.xlink.href = attribute xlink:href { xsd:anyURI } +its-attribute.xlink.type = attribute xlink:type { "simple" } +its-attribute.selector = + attribute selector { its-absolute-selector.type } +its-foreign-attribute = attribute * - local:* { text } +its-foreign-no-xml-id-attribute = + attribute * - (local:* | xml:id) { text } +its-foreign-no-xlink-attribute = + attribute * - (local:* | xlink:*) { text } +its-any-attribute = attribute * { text } +its-any-element = + element * { (its-any-attribute* | text | its-any-element)* } +its-rules = + + ## Container for global rules + element its:rules { its-rules.content, its-rules.attributes } +its-rules.content = + its-param*, + (its-translateRule + | its-locNoteRule + | its-termRule + | its-dirRule + | its-langRule + | its-withinTextRule + | its-domainRule + | its-textAnalysisRule + | its-localeFilterRule + | its-provRule + | its-locQualityIssueRule + | its-mtConfidenceRule + | its-externalResourceRefRule + | its-targetPointerRule + | its-idValueRule + | its-preserveSpaceRule + | its-allowedCharactersRule + | its-storageSizeRule + | its-foreign-element)* +its-rules.attributes = + its-attribute.version.nons, + (its-attribute.xlink.href, its-attribute.xlink.type?)?, + its-attribute.queryLanguage.nons?, + its-foreign-no-xlink-attribute* +its-param = + + ## Declaration of variable used in selectors + element its:param { its-param.content, its-param.attributes } +its-param.content = text +its-param.attributes = + attribute name { xsd:string }, + its-foreign-attribute* +its-local.attributes = + its-attribute.translate? + & its-attribute.dir? + & ((its-attribute.locNote | its-attribute.locNoteRef), + its-attribute.locNoteType?)? + & (its-attribute.term, + its-attribute.termInfoRef?, + its-attribute.termConfidence?)? + & its-attribute.withinText? + & (its-attribute.taConfidence? + & (its-attribute.taClassRef? + & ((its-attribute.taSource, its-attribute.taIdent) + | its-attribute.taIdentRef)?))? + & (its-attribute.localeFilterList, its-attribute.localeFilterType?)? + & (((its-attribute.person | its-attribute.personRef)? + & (its-attribute.org | its-attribute.orgRef)? + & (its-attribute.tool | its-attribute.toolRef)? + & (its-attribute.revPerson | its-attribute.revPersonRef)? + & (its-attribute.revOrg | its-attribute.revOrgRef)? + & (its-attribute.revTool | its-attribute.revToolRef)? + & its-attribute.provRef?) + | its-attribute.provenanceRecordsRef)? + & (its-attribute.locQualityIssuesRef + | ((its-attribute.locQualityIssueType? + & its-attribute.locQualityIssueComment?) + & its-attribute.locQualityIssueSeverity? + & its-attribute.locQualityIssueProfileRef? + & its-attribute.locQualityIssueEnabled?))? + & (((its-attribute.locQualityRatingScore, + its-attribute.locQualityRatingScoreThreshold?) + | (its-attribute.locQualityRatingVote, + its-attribute.locQualityRatingVoteThreshold?)), + its-attribute.locQualityRatingProfileRef?)? + & its-attribute.mtConfidence? + & its-attribute.allowedCharacters? + & (its-attribute.storageSize, + its-attribute.storageEncoding?, + its-attribute.lineBreakType?)? + & its-attribute.annotatorsRef? +its-local.nons.attributes = + its-attribute.translate.nons? + & its-attribute.dir.nons? + & ((its-attribute.locNote.nons | its-attribute.locNoteRef.nons), + its-attribute.locNoteType.nons?)? + & (its-attribute.term.nons, + its-attribute.termInfoRef.nons?, + its-attribute.termConfidence.nons?)? + & its-attribute.withinText.nons? + & (its-attribute.taConfidence.nons? + & (its-attribute.taClassRef.nons? + & ((its-attribute.taSource.nons, its-attribute.taIdent.nons) + | its-attribute.taIdentRef.nons)?))? + & (its-attribute.localeFilterList.nons, + its-attribute.localeFilterType.nons?)? + & (((its-attribute.person.nons | its-attribute.personRef.nons)? + & (its-attribute.org.nons | its-attribute.orgRef.nons)? + & (its-attribute.tool.nons | its-attribute.toolRef.nons)? + & (its-attribute.revPerson.nons + | its-attribute.revPersonRef.nons)? + & (its-attribute.revOrg.nons | its-attribute.revOrgRef.nons)? + & (its-attribute.revTool.nons | its-attribute.revToolRef.nons)? + & its-attribute.provRef.nons?) + | its-attribute.provenanceRecordsRef.nons)? + & (its-attribute.locQualityIssuesRef.nons + | ((its-attribute.locQualityIssueType.nons? + & its-attribute.locQualityIssueComment.nons?) + & its-attribute.locQualityIssueSeverity.nons? + & its-attribute.locQualityIssueProfileRef.nons? + & its-attribute.locQualityIssueEnabled.nons?))? + & (((its-attribute.locQualityRatingScore.nons, + its-attribute.locQualityRatingScoreThreshold.nons?) + | (its-attribute.locQualityRatingVote.nons, + its-attribute.locQualityRatingVoteThreshold.nons?)), + its-attribute.locQualityRatingProfileRef.nons?)? + & its-attribute.mtConfidence.nons? + & its-attribute.allowedCharacters.nons? + & (its-attribute.storageSize.nons, + its-attribute.storageEncoding.nons?, + its-attribute.lineBreakType.nons?)? + & its-attribute.annotatorsRef.nons? +its-span = + + ## Inline element to contain ITS information + element its:span { its-span.content, its-span.attributes } +its-span.content = (text | its-span)* +its-span.attributes = its-local.nons.attributes & its-foreign-attribute* +its-translateRule = + + ## Rule about the Translate data category + element its:translateRule { + its-translateRule.content, its-translateRule.attributes + } +its-translateRule.content = empty +its-translateRule.attributes = + its-attribute.selector, + its-attribute.translate.nons, + its-foreign-attribute* +its-locNoteRule = + + ## Rule about the Localization Note data category + element its:locNoteRule { + its-attribute.selector, + its-attribute.locNoteType.nons, + (its-locNote + | its-attribute.locNotePointer.nons + | its-attribute.locNoteRef.nons + | its-attribute.locNoteRefPointer.nons), + its-foreign-attribute* + } +its-attribute.locNotePointer.nons = + attribute locNotePointer { its-relative-selector.type } +its-attribute.locNoteRefPointer.nons = + attribute locNoteRefPointer { its-relative-selector.type } +its-locNote = + + ## Localization note + element its:locNote { its-locNote.content, its-locNote.attributes } +its-locNote.content = (text | its-span)* +its-locNote.attributes = + its-local.nons.attributes, its-foreign-attribute* +its-termRule = + + ## Rule about the Terminology data category + element its:termRule { its-termRule.content, its-termRule.attributes } +its-termRule.content = empty +its-termRule.attributes = + its-attribute.selector, + its-attribute.term.nons, + (its-attribute.termInfoPointer.nons + | its-attribute.termInfoRef.nons + | its-attribute.termInfoRefPointer.nons)?, + its-foreign-attribute* +its-attribute.termInfoPointer.nons = + attribute termInfoPointer { its-relative-selector.type } +its-attribute.termInfoRefPointer.nons = + attribute termInfoRefPointer { its-relative-selector.type } +its-dirRule = + + ## Rule about the Directionality data category + element its:dirRule { its-dirRule.content, its-dirRule.attributes } +its-dirRule.content = empty +its-dirRule.attributes = + its-attribute.selector, its-attribute.dir.nons, its-foreign-attribute* +its-langRule = + + ## Rule about the Language Information data category + element its:langRule { its-langRule.content, its-langRule.attributes } +its-langRule.content = empty +its-langRule.attributes = + its-attribute.selector, + its-attribute.langPointer.nons, + its-foreign-attribute* +its-attribute.langPointer.nons = + attribute langPointer { its-relative-selector.type } +its-withinTextRule = + + ## Rule about the Elements Within Text data category + element its:withinTextRule { + its-withinTextRule.content, its-withinTextRule.attributes + } +its-withinTextRule.content = empty +its-withinTextRule.attributes = + its-attribute.selector, + its-attribute.withinText.nons, + its-foreign-attribute* +its-domainRule = + + ## Rule about the Domain data category + element its:domainRule { + its-domainRule.content, its-domainRule.attributes + } +its-domainRule.content = empty +its-domainRule.attributes = + its-attribute.selector, + its-attribute.domainPointer.nons, + its-attribute.domainMapping.nons?, + its-foreign-attribute* +its-attribute.domainPointer.nons = + attribute domainPointer { its-relative-selector.type } +its-textAnalysisRule = + + ## Rule about the Disambiguation data category + element its:textAnalysisRule { + its-textAnalysisRule.content, its-textAnalysisRule.attributes + } +its-textAnalysisRule.content = empty +its-textAnalysisRule.attributes = + its-attribute.selector, + its-attribute.taClassRefPointer.nons?, + ((its-attribute.taSourcePointer.nons, + its-attribute.taIdentPointer.nons) + | its-attribute.taIdentRefPointer.nons)?, + its-foreign-attribute* +its-attribute.taClassRefPointer.nons = + attribute taClassRefPointer { its-taClassRefPointer.type } +its-attribute.taIdentPointer.nons = + attribute taIdentPointer { its-taIdentPointer.type } +its-attribute.taSourcePointer.nons = + attribute taSourcePointer { its-taSourcePointer.type } +its-attribute.taIdentRefPointer.nons = + attribute taIdentRefPointer { its-taIdentRefPointer.type } +its-localeFilterRule = + + ## Rule about the LocaleFilter data category + element its:localeFilterRule { + its-localeFilterRule.content, its-localeFilterRule.attributes + } +its-localeFilterRule.content = empty +its-localeFilterRule.attributes = + its-attribute.selector, + its-attribute.localeFilterList.nons, + its-attribute.localeFilterType.nons?, + its-foreign-attribute* +its-provRule = + + ## Rule about the Provenance data category + element its:provRule { its-provRule.content, its-provRule.attributes } +its-provRule.content = empty +its-provRule.attributes = + its-attribute.selector, + its-attribute.provenanceRecordsRefPointer.nons, + its-foreign-attribute* +its-attribute.provenanceRecordsRefPointer.nons = + attribute provenanceRecordsRefPointer { its-relative-selector.type } +its-externalResourceRefRule = + + ## Rule about the External Resource data category + element its:externalResourceRefRule { + its-externalResourceRefRule.content, + its-externalResourceRefRule.attributes + } +its-externalResourceRefRule.content = empty +its-externalResourceRefRule.attributes = + its-attribute.selector, + its-attribute.externalResourceRefPointer.nons, + its-foreign-attribute* +its-attribute.externalResourceRefPointer.nons = + attribute externalResourceRefPointer { its-relative-selector.type } +its-targetPointerRule = + + ## Rule about the Target Pointer data category + element its:targetPointerRule { + its-targetPointerRule.content, its-targetPointerRule.attributes + } +its-targetPointerRule.content = empty +its-targetPointerRule.attributes = + its-attribute.selector, + its-attribute.targetPointer.nons, + its-foreign-attribute* +its-attribute.targetPointer.nons = + attribute targetPointer { its-relative-selector.type } +its-idValueRule = + + ## Rule about the Id Value data category + element its:idValueRule { + its-idValueRule.content, its-idValueRule.attributes + } +its-idValueRule.content = empty +its-idValueRule.attributes = + its-attribute.selector, + its-attribute.idValue.nons, + its-foreign-attribute* +its-attribute.idValue.nons = + attribute idValue { its-xpath-expression.type } +its-preserveSpaceRule = + + ## Rule about the Preserve Space data category + element its:preserveSpaceRule { + its-preserveSpaceRule.content, its-preserveSpaceRule.attributes + } +its-preserveSpaceRule.content = empty +its-preserveSpaceRule.attributes = + its-attribute.selector, + its-attribute.space.nons, + its-foreign-attribute* +its-attribute.space.nons = attribute space { "default" | "preserve" } +its-locQualityIssueRule = + + ## Rule about the Localization Quality Issue data category + element its:locQualityIssueRule { + its-locQualityIssueRule.content, its-locQualityIssueRule.attributes + } +its-locQualityIssueRule.content = empty +its-locQualityIssueRule.attributes = + its-attribute.selector, + ((its-attribute.locQualityIssuesRef.nons + | its-attribute.locQualityIssuesRefPointer.nons) + | ((its-attribute.locQualityIssueType.nons + | its-attribute.locQualityIssueComment.nons)+, + its-attribute.locQualityIssueSeverity.nons?, + its-attribute.locQualityIssueProfileRef.nons?, + its-attribute.locQualityIssueEnabled.nons?)), + its-foreign-attribute* +its-attribute.locQualityIssuesRefPointer.nons = + attribute locQualityIssuesRefPointer { its-relative-selector.type } +its-mtConfidenceRule = + + ## Rule about the MT Confidence data category + element its:mtConfidenceRule { + its-mtConfidenceRule.content, its-mtConfidenceRule.attributes + } +its-mtConfidenceRule.content = empty +its-mtConfidenceRule.attributes = + its-attribute.selector, + its-attribute.mtConfidence.nons, + its-foreign-attribute* +its-allowedCharactersRule = + + ## Rule about the Allowed Characters data category + element its:allowedCharactersRule { + its-allowedCharactersRule.content, + its-allowedCharactersRule.attributes + } +its-allowedCharactersRule.content = empty +its-allowedCharactersRule.attributes = + its-attribute.selector, + (its-attribute.allowedCharacters.nons + | its-attribute.allowedCharactersPointer.nons), + its-foreign-attribute* +its-attribute.allowedCharactersPointer.nons = + attribute allowedCharactersPointer { its-relative-selector.type } +its-storageSizeRule = + + ## Rule about the Allowed Characters data category + element its:storageSizeRule { + its-storageSizeRule.content, its-storageSizeRule.attributes + } +its-storageSizeRule.content = empty +its-storageSizeRule.attributes = + its-attribute.selector, + (its-attribute.storageSize.nons + | its-attribute.storageSizePointer.nons), + (its-attribute.storageEncoding.nons + | its-attribute.storageEncodingPointer.nons)?, + its-attribute.lineBreakType.nons?, + its-foreign-attribute* +its-attribute.storageSizePointer.nons = + attribute storageSizePointer { its-relative-selector.type } +its-attribute.storageEncodingPointer.nons = + attribute storageEncodingPointer { its-relative-selector.type } +its-standoff = its-provenanceRecords | its-locQualityIssues +its-provenanceRecords = + + ## Standoff markup for Provenance data category + element its:provenanceRecords { + its-provenanceRecord+, + attribute xml:id { xsd:ID }, + its-attribute.version.nons?, + its-foreign-no-xml-id-attribute* + } +its-provenanceRecord = + + ## Provenance record used in Provenance standoff markup + element its:provenanceRecord { its-provenanceRecord.attributes } +its-provenanceRecord.attributes = + (its-attribute.person.nons | its-attribute.personRef.nons)? + & (its-attribute.org.nons | its-attribute.orgRef.nons)? + & (its-attribute.tool.nons | its-attribute.toolRef.nons)? + & (its-attribute.revPerson.nons | its-attribute.revPersonRef.nons)? + & (its-attribute.revOrg.nons | its-attribute.revOrgRef.nons)? + & (its-attribute.revTool.nons | its-attribute.revToolRef.nons)? + & its-attribute.provRef.nons? + & its-foreign-attribute* +its-locQualityIssues = + + ## Standoff markup for Localization Quality Issue data category + element its:locQualityIssues { + its-locQualityIssue+, + attribute xml:id { xsd:ID }, + its-attribute.version.nons?, + its-foreign-no-xml-id-attribute* + } +its-locQualityIssue = + + ## Issue recorded in Localization Quality standoff markup + element its:locQualityIssue { its-locQualityIssue.attributes } +its-locQualityIssue.attributes = + its-attribute.locQualityIssueType.nons? + & its-attribute.locQualityIssueComment.nons? + & its-attribute.locQualityIssueSeverity.nons? + & its-attribute.locQualityIssueProfileRef.nons? + & its-attribute.locQualityIssueEnabled.nons? + & its-foreign-attribute* +its-attribute.dir = empty +its-foreign-element = + element * - its:* { + (its-foreign-no-xml-id-attribute* | text | its-foreign-element)* + } +# Add local ITS attributes to all DocBook elements + +# Allow its:rules inside info element diff --git a/catalog/docbook5.2/rng/dbitsxi.rng b/catalog/docbook5.2/rng/dbitsxi.rng new file mode 100755 index 0000000..709a211 --- /dev/null +++ b/catalog/docbook5.2/rng/dbitsxi.rng @@ -0,0 +1,20575 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Any attribute, including any attribute in any namespace + + + +
+ + + Designates the computer or chip architecture to which the element applies + + + + + Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + + + + + provides a standard place for application-specific effectivity + + + + + Indicates standards conformance characteristics of the element + + + + + Indicates the operating system to which the element is applicable + + + + + Indicates the editorial revision to which the element belongs + + + + + Indicates something about the security level associated with the element to which it applies + + + + + Indicates the level of user experience for which the element applies + + + + + Indicates the computer vendor to which the element applies + + + + + Indicates the word size (width in bits) of the computer architecture to which the element applies + + + + + Indicates the output format (for example, print or epub) to which the element applies + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Points to the element whose content is to be used as the text of the link + + + + + + Points to an internal link target by identifying the value of its xml:id attribute + + + + + + Points to one or more internal link targets by identifying the value of their xml:id attributes + + + + + + Identifies a link target with a URI + + + + + + Identifies the XLink link type + simple + An XLink simple link type + + + + + Identifies the XLink role of the link + + + + + + Identifies the XLink arcrole of the link + + + + + + Identifies the XLink title of the link + + + + + new + An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + replace + An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + embed + An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + other + The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink show behavior of the link + + + + + + onLoad + An application should traverse to the ending resource immediately on loading the starting resource. + onRequest + An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + other + The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink actuate behavior of the link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identifies the unique ID value of the element + + + + + + Specifies the DocBook version of the element and its descendants + + + + + Specifies the natural language of the element and its descendants + + + + + Specifies the base URI of the element and its descendants + + + + + + Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + + + + + Provides the text that is to be generated for a cross reference to the element + + + + + Specifies a keyword or keywords identifying additional style information + + + + + changed + The element has been changed. + added + The element is new (has been added to the document). + deleted + The element has been deleted. + off + Explicitly turns off revision markup for this element. + + + + + Identifies the revision status of the element + + + + + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + + Identifies the direction of text in an element + + + + + + The RDFa Lite vocab + + + + + + The RDFa Lite typeof + + + + + The RDFa Lite property + + + + + The RDFa Lite resource + + + + + The RDFa Lite prefix + + + + + + + + + + + + + + + + + + + + + + + + none + No ID fixup strategy + suffix + ID fixup by concatenating suffixes + auto + ID fixup by creating unique values + + + + + The transclusion ID fixup strategy + + + + + + The transclusion suffix to use when the suffix ID fixup strategy is employed + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + + + + user + No link scope adjustments are made + local + The link scopes are adjusted with the suffix property + near + The link scopes are adjusted based on proximity + global + The link scopes are adjusted based on document order + + + + + The transclusion link scope adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the format of the data + + + + + Indentifies the location of the data by URI + + + + Identifies the location of the data by external identifier (entity name) + + + + + + + continues + Line numbering continues from the immediately preceding element with the same name. + restarts + Line numbering restarts (begins at 1, usually). + + + + + Determines whether line numbering continues from the previous element or restarts + + + + + + numbered + Lines are numbered. + unnumbered + Lines are not numbered. + + + + + Determines whether lines are numbered + + + + + + Specifies the initial line number + + + + + + Identifies the language (i.e. programming language) of the verbatim content + + + + + Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + preserve + Whitespace must be preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies an identifying string for presentation purposes + + + + + Specifies the width (in characters) of the element + + + + + + compact + The spacing should be "compact". + normal + The spacing should be "normal". + + + + + Specifies (a hint about) the spacing of the content + + + + + + 0 + The element should be rendered in the current text flow (with the flow column width). + 1 + The element should be rendered across the full text page. + + + + + Indicates if the element is rendered across the column or the page + + + + + + Identifies the language (i.e. programming language) of the content + + + + + optional + The content describes an optional step or steps. + required + The content describes a required step or steps. + + + + + Specifies if the content is required or optional + + + + + + Specifies style information to be used when rendering the float + + + + + Specifies the width of the element + + + + + Specifies the depth of the element + + + + + Specifies the width of the content rectangle + + + + + Specifies the depth of the content rectangle + + + + + 0 + False (do not scale-to-fit; anamorphic scaling may occur) + 1 + True (scale-to-fit; anamorphic scaling is forbidden) + + + + + Specifies the scaling factor + + + + + + Specifies a classid for a media object player + + + + + Specifies the autoplay setting for a media object player + + + + + center + Centered horizontally + char + Aligned horizontally on the specified character + justify + Fully justified (left and right margins or edges) + left + Left aligned + right + Right aligned + + + + + bottom + Aligned on the bottom of the region + middle + Centered vertically + top + Aligned on the top of the region + + + + + doi + A digital object identifier. + isbn + An international standard book number. + isrn + An international standard technical report number (ISO 10444). + issn + An international standard serial number. + istc + An international standard text code. + libraryofcongress + A Library of Congress reference number. + pubsnumber + A publication number (an internal number or possibly organizational standard). + uri + A Uniform Resource Identifier + + + + + + Identifies the kind of bibliographic identifier + + + + + + + Identifies the nature of the non-standard bibliographic identifier + + + + + + + Identifies the kind of bibliographic identifier + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + article + An article + bbs + A bulletin board system + book + A book + cdrom + A CD-ROM + chapter + A chapter (as of a book) + dvd + A DVD + emailmessage + An email message + gopher + A gopher page + journal + A journal + manuscript + A manuscript + newsposting + A posting to a newsgroup + part + A part (as of a book) + refentry + A reference entry + section + A section (as of a book or article) + series + A series + set + A set (as of books) + webpage + A web page + wiki + A wiki page + other + Some other kind of work + + + + + + + + + Identifies the nature of the published work + + + + + + + Identifies the nature of some other kind of published work + + + + + + + Identifies that this is some other kind of published work + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text of the title of a section of a document or of a formal block-level element + + + + + + +
+
+ + + + + + + + + + + + + + + The abbreviation of a title + + + + + + +
+
+ + + + + + + + + + + + + + + The subtitle of a document + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + Identifies the controlled vocabulary used by this set's terms + + + + + + + + + + + + + + + + + + A set of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + Specifies a ranking for this subject relative to other subjects in the same set + + + + + + + + + + + + + + + + + One of a group of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + + + + + + + + + + A term in a group of terms describing the subject matter of a document + + + + +
+
+ + + + + + + + + + + + + + + A set of keywords describing the content of a document + + + + + + +
+
+ + + + + + + + + + + + + + + One of a set of keywords describing the content of a document + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + Identifies the type of procedure + + + + + + + + + + + + + + + + + + + + + A list of operations to be performed in a well-defined sequence + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A unit of action in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + Alternative steps in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for steps that occur within steps in a procedure + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for identifying the results of a procedure or step + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + A portion of a document that is isolated from the main narrative flow + + Element exclusion + + sidebar must not occur among the children or descendants of sidebar + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short description or note about a person + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A quotation set off from the main text + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The source of a block quote or epigraph + + + + + + + + + + + + +
+
+ + + sect1 + Render as a first-level section + sect2 + Render as a second-level section + sect3 + Render as a third-level section + sect4 + Render as a fourth-level section + sect5 + Render as a fifth-level section + + + + + + Indicates how the bridge head should be rendered + + + + + + + Identifies the nature of the non-standard rendering + + + + + + + Indicates how the bridge head should be rendered + other + Identifies a non-standard rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + A free-floating heading + + + + + + +
+
+ + + + + + + + + + + + + + + A remark (or comment) intended for presentation in a draft manuscript + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short inscription at the beginning of a document or component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + Identifies the desired footnote mark + + + + + + + + + + + + + + + + + + A footnote + + Element exclusion + + footnote must not occur among the children or descendants of footnote + + + + Element exclusion + + example must not occur among the children or descendants of footnote + + + + Element exclusion + + figure must not occur among the children or descendants of footnote + + + + Element exclusion + + table must not occur among the children or descendants of footnote + + + + Element exclusion + + equation must not occur among the children or descendants of footnote + + + + Element exclusion + + sidebar must not occur among the children or descendants of footnote + + + + Element exclusion + + task must not occur among the children or descendants of footnote + + + + Element exclusion + + epigraph must not occur among the children or descendants of footnote + + + + Element exclusion + + caution must not occur among the children or descendants of footnote + + + + Element exclusion + + danger must not occur among the children or descendants of footnote + + + + Element exclusion + + important must not occur among the children or descendants of footnote + + + + Element exclusion + + note must not occur among the children or descendants of footnote + + + + Element exclusion + + tip must not occur among the children or descendants of footnote + + + + Element exclusion + + warning must not occur among the children or descendants of footnote + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph with a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph that contains only text and inline markup, no block elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the type of mark to be used on items in this list + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a bullet or other dingbat + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + continues + Specifies that numbering should begin where the preceding list left off + restarts + Specifies that numbering should begin again at 1 + + + + + Indicates how list numbering should begin relative to the immediately preceding list + + + + + + Specifies the initial line number + + + + + + ignore + Specifies that numbering should ignore list nesting + inherit + Specifies that numbering should inherit from outer-level lists + + + + + Indicates whether or not item numbering should be influenced by list nesting + + + + + + arabic + Specifies Arabic numeration (1, 2, 3, …) + upperalpha + Specifies upper-case alphabetic numeration (A, B, C, …) + loweralpha + Specifies lower-case alphabetic numeration (a, b, c, …) + upperroman + Specifies upper-case Roman numeration (I, II, III, …) + lowerroman + Specifies lower-case Roman numeration (i, ii, iii …) + + + + + Indicates the desired numeration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a sequentially incremented label + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Specifies the keyword for the type of mark that should be used on this + item, instead of the mark that would be used by default + + + + + + + + + + + + + + + + + + + + + A wrapper for the elements of a list item + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A segmented list, a list of sets of elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of an element of a list item in a segmented list + + + + + + +
+
+ + + + + + + + + + + + + + + A list item in a segmented list + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a list item in a segmented list + + + + + + +
+
+ + + + + + horiz + A tabular presentation in row-major order. + vert + A tabular presentation in column-major order. + inline + An inline presentation, usually a comma-delimited list. + + + + + Specifies the type of list presentation + + + + + + Specifies the number of columns for horizontal or vertical presentation + + + + + + + + + + + + + + + + + + + + + An undecorated list of single words or short phrases + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a simple list + + + + + + +
+
+ + + + + + Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is composed of a set of one or more terms and an associated description + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for a set of terms and the associated description in a variable list + + + + + + + +
+
+ + + + + + + + + + + + + + + The word or phrase being defined or described in a variable list + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal example, with a title + + Element exclusion + + example must not occur among the children or descendants of example + + + + Element exclusion + + figure must not occur among the children or descendants of example + + + + Element exclusion + + table must not occur among the children or descendants of example + + + + Element exclusion + + equation must not occur among the children or descendants of example + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed example without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + monospaced + The literal layout should be formatted with a monospaced font + normal + The literal layout should be formatted with the current font + + + + + Specifies the class of literal layout + + + + + + + + + + + + + + + + + + + A block of text in which line breaks and white space are to be reproduced faithfully + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + Text that a user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A representation of what the user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal figure, generally an illustration, with a title + + Element exclusion + + example must not occur among the children or descendants of figure + + + + Element exclusion + + figure must not occur among the children or descendants of figure + + + + Element exclusion + + table must not occur among the children or descendants of figure + + + + Element exclusion + + equation must not occur among the children or descendants of figure + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A untitled figure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A displayed media object (video, audio, image, etc.) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + An inline media object (video, audio, image, and so on) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for video data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for audio data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for image data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a text description of an object and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external video data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external audio data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the image data + + + + + + + + + Specifies the vertical alignment of the image data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external image data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the encoding of the text in the external file + + + + + + + + + + + + + + + + + + + + Pointer to external text data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + Specifies the name of the parameter + + + + + Specifies the value of the parameter + + + + + Specifies the type of the value of the parameter + + + + + + + + + + + + + + + + + + Application specific parameters for a media player + + + + +
+
+ + + + + + + + + + + + + + + + + + A caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A real-world address, generally a postal address + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A street address in an address + + + + +
+
+ + + + + + + + + + + + + + + A post office box in an address + + + + +
+
+ + + + + + + + + + + + + + + A postal code in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a city in an address + + + + +
+
+ + + + + + + + + + + + + + + A state or province in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a country + + + + +
+
+ + + + + + + + + + + + + + + A telephone number + + + + +
+
+ + + + + + + + + + + + + + + A fax number + + + + +
+
+ + + + + + + + + + + + + + + Uncategorized information in address + + + + +
+
+ + + + + + + + + + + + + + + The institutional affiliation of an individual + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A brief description of an affiliation + + + + +
+
+ + + + + + + + + + + + + + + The title of an individual in an organization + + + + +
+
+ + + consortium + A consortium + corporation + A corporation + informal + An informal organization + nonprofit + A non-profit organization + + + + + Specifies the nature of the organization + + + + + + Specifies the nature of the organization + other + Indicates a non-standard organization class + + + Identifies the non-standard nature of the organization + + + + + + + + + + + + + + + + + + + + + + + + + + The name of an organization + + + + +
+
+ + + + + + + + + + + + + + + A division of an organization + + + + + + +
+
+ + + + + + + + + + + + + + + The page numbers of an article as published + + + + +
+
+ + + + + + + + + + + + + + + The personal name of an individual + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The name of an individual author + + + + +
+
+ + + + + + + + + + + + + + + Wrapper for author information when a document has multiple authors or collaborators + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Identifies a collaborator + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The initials or other short identifier for an author + + + + +
+
+ + + + + + + + + + + + + + + A person and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An organization and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for document meta-information about a conference + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The dates of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The title of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + An identifier, frequently numerical, associated with a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The contract number of a document + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a contract + + + + +
+
+ + + + + + + + + + + + + + + Copyright information about a document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The year of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the individual or organization that holds a copyright + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + Additional content for the cover of a publication + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + The date of publication or revision of a document + + + + +
+
+ + + + + + + + + + + + + + + The name or number of an edition of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the editor of a document + + + + +
+
+ + + + + + + + + + + + + + + + An identifier for a document + + + + +
+
+ + + + + + + + + + + + + + + + A citation of a bibliographic identifier + + + + +
+
+ + + + + + + + + + + + + + + + The source of a document + + + + +
+
+ + + hasformat + The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + haspart + The described resource includes the referenced resource either physically or logically + hasversion + The described resource has a version, edition, or adaptation, namely, the referenced resource + isformatof + The described resource is the same intellectual content of the referenced resource, but presented in another format + ispartof + The described resource is a physical or logical part of the referenced resource + isreferencedby + The described resource is referenced, cited, or otherwise pointed to by the referenced resource + isreplacedby + The described resource is supplanted, displaced, or superceded by the referenced resource + isrequiredby + The described resource is required by the referenced resource, either physically or logically + isversionof + The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + references + The described resource references, cites, or otherwise points to the referenced resource + replaces + The described resource supplants, displaces, or supersedes the referenced resource + requires + The described resource requires the referenced resource to support its function, delivery, or coherence of content + + + + + + Identifies the type of relationship + + + + + + + + Identifies the type of relationship + othertype + The described resource has a non-standard relationship with the referenced resource + + + + A keyword that identififes the type of the non-standard relationship + + + + + + + + + + + + + + + + + + + + + + + + + + The relationship of a document to another + + + + +
+
+ + + dcmipoint + The DCMI Point identifies a point in space using its geographic coordinates + iso3166 + ISO 3166 Codes for the representation of names of countries + dcmibox + The DCMI Box identifies a region of space using its geographic limits + tgn + The Getty Thesaurus of Geographic Names + + + + + + Specifies the type of spatial coverage + + + + + + + + Specifies the type of spatial coverage + otherspatial + Identifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + dcmiperiod + A specification of the limits of a time interval + w3c-dtf + W3C Encoding rules for dates and times—a profile based on ISO 8601 + + + + + + Specifies the type of temporal coverage + + + + + + + + Specifies the type of temporal coverage + othertemporal + Specifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The spatial or temporal coverage of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A statement of legal obligations or requirements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + copyeditor + A copy editor + graphicdesigner + A graphic designer + productioneditor + A production editor + technicaleditor + A technical editor + translator + A translator + indexer + An indexer + proofreader + A proof-reader + coverdesigner + A cover designer + interiordesigner + An interior designer + illustrator + An illustrator + reviewer + A reviewer + typesetter + A typesetter + conversion + A converter (a persons responsible for conversion, not an application) + + + + + + Identifies the nature of the contributor + + + + + + + Identifies the nature of the non-standard contribution + + + + + + + Identifies the nature of the contributor + other + Identifies a non-standard contribution + + + + + + + + + + + + + + + + + + + + + + + + + + A person or entity, other than an author or editor, credited in a document + + + + +
+
+ + + + + + + + + + + + + + + The numbers of the pages in a book, for use in a bibliographic entry + + + + +
+
+ + + + + + + + + + + + + + + A summary of the contributions made to a document by a credited source + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a person + + + + +
+
+ + + + + + + + + + + + + + + A given name of a person + + + + +
+
+ + + + + + + + + + + + + + + The given name of a person + + + + +
+
+ + + + + + + + + + + + + + + An inherited or family name; in western cultures the last name + + + + +
+
+ + + + + + + + + + + + + + + The portion of a person's name indicating a relationship to ancestors + + + + +
+
+ + + + + + + + + + + + + + + A component of a person's name that is not a first name, surname, or lineage + + + + +
+
+ + + + + + + + + + + + + + + The printing history of a document + + + + + + +
+
+ + + + + + + + + + + + + + + The date of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The publisher of a document + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of the publisher of a document + + + + +
+
+ + + + + + + + + + + + + + + Information about a particular release of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A history of the revisions to a document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry describing a single revision in the history of the revisions to a document + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A document revision number + + + + +
+
+ + + + + + + + + + + + + + + A description of a revision to a document + + + + +
+
+ + + + + + + + + + + + + + + A extended description of a revision to a document + + + + + + +
+
+ + + + + + + + + + + + + + + Numbers of the volumes in a series of books + + + + +
+
+ + + + + + + + + + + + + + + The volume number of a document in a set (as of books in a set or articles in a journal) + + + + +
+
+ + + + + + + + + + + + + + + The number of an issue of a journal + + + + +
+
+ + + + + + A name for the metadata element + + + + + The metadata content + + + + + + + + + + + + + + + + + A generic metadata element + + + + + + + + A generic metadata element + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A software or application package + + + + +
+
+ + + + + + + + + + + + + + + An email address + + + + +
+
+ + + + + + + + + + + + + + + A comment on a line in a verbatim listing + + + + +
+
+ + + command + A command + function + A function + option + An option + + + + + Identifies the class of parameter + + + + + + + + + + + + + + + + + + + + + A value or a symbolic reference to a value + + + + +
+ + + + + + +
+ + + command + A command + function + A function + option + An option + parameter + A parameter + + + + + Identifies the nature of the replaceable text + + + + + + + + + + + + + + + + + + + + + Content that may or must be replaced by the user + + + + + + +
+
+ + + + Identifies the type of URI specified + + + + + + + + + + + + + + + + + + + A Uniform Resource Identifier + + + + +
+
+ + + + + + + + + + + + + + + An abbreviation, especially one followed by a period + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An often pronounceable word made from the initial (or selected) letters of a name or phrase + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An inline bibliographic reference to another published work + + + + + + +
+
+ + + + + + + + + + + + + + + A citation to a reference page + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A reference volume number + + + + +
+
+ + + + + + Identifies the nature of the publication being cited + + + + + + Identifies the nature of some other kind of publication being cited + + + + + + + Identifies that this is some other kind of publication being cited + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The title of a cited work + + + + + + +
+
+ + + + + + + + + + + + + + + Emphasized text + + + + + + +
+
+ + + A limited span of emphasized text + + + + +
+
+ + + + + + + + + + + + + + + A word or phrase in a language other than the primary language of the document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A limited word or phrase in a language other than the primary language of the document + + + + +
+
+ + + + + + + + + + + + + + + A span of text + + + + + + +
+
+ + + A limited span of text + + + + +
+
+ + + + + + + + + + + + + + + An inline quotation + + + + + + +
+
+ + + + + + + + + + + + + + + A limited inline quotation + + + + +
+
+ + + + + + + + + + + + + + + A subscript (as in Hâ‚‚O, the molecular formula for water) + + + + +
+
+ + + + + + + + + + + + + + + A superscript (as in x², the mathematical notation for x multiplied by itself) + + + + +
+
+ + + copyright + A copyright + registered + A registered copyright + service + A service + trade + A trademark + + + + + Identifies the class of trade mark + + + + + + + + + + + + + + + + + + + + + A trademark + + + + +
+
+ + + + + + + + + + + + + + + A word meant specifically as a word and not representing anything else + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a footnote (a footnote mark) + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A cross reference to another part of the document + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A hypertext link + + + + + + +
+
+ + + + + + + + + Holds additional information that may be used by the application when resolving the link + + + + + Specifies the URI of the document in which the link target appears + + + + + + Specifies the location of the link target in the document + + + + + Identifies application-specific customization of the link behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + A link that addresses its target indirectly + + + + + + +
+
+ + + + + + + + + + + + + + A spot in the document + + + + +
+
+ + + + + + + + + + + + + + A text-only annotation, often used for accessibility + + + + + + + + + +
+
+ + + Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A group of formal objects, for example subfigures + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies the editorial or publication status of the element on which it occurs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + The dedication of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Acknowledgements of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Text at the back of a book describing facts about its production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An appendix in a book or article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A chapter, as of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Introductory matter preceding the first chapter of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An introduction to the contents of a part + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + legal + A section of legal obligations or requirements + + + + Identifies the nature of the section + + + + + + Identifies a non-standard section class + + + + + + + Indicates that a non-standard section class is applied + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a document with no subdivisions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + faq + A collection of frequently asked questions. + journalarticle + An article in a journal or other periodical. + productsheet + A description of a product. + specification + A specification. + techreport + A technical report. + whitepaper + A white paper. + + + + + Identifies the nature of the article + + + + + + Identifies the nature of the non-standard article + + + + + + + Identifies the nature of the article + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies one or more annotations that apply to this element + + +
+ + + + + + Identifies one or more elements to which this annotation applies + + + + + + + + + + + + + + + + + + + An annotation + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Identifies the XLink extended link type + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + extended + An XLink extended link type + + + + + Identifies the XLink locator link type + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + locator + An XLink locator link type + + + + + Identifies the XLink arc link type + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + arc + An XLink arc link type + + + + + Identifies the XLink resource link type + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + resource + An XLink resource link type + + + + + Identifies the XLink title link type + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + title + An XLink title link type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the XLink traversal-from + + + + + + Specifies the XLink label + + + + + + Specifies the XLink traversal-to + + + +
+ + + + + + + + + + + + Identifies the XLink link type + extended + An XLink extended link + + + + + + + + + + + + + An XLink extended link + + + + + + + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + locator + An XLink locator link + + + + + + + + + + + + + + + + + An XLink locator in an extendedlink + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + arc + An XLink arc link + + + + + + + + + + + + + + + + + + + + + + + + + An XLink arc in an extendedlink + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A top-level section of document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect3 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect4 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of reference entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A reference page (originally a UNIX man-style reference page) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Meta-information for a reference entry + + + + + + + + + + + + + + + + +
+ + + source + The name of the software product or component to which this topic applies + version + The version of the software product or component to which this topic applies + manual + The section title of the reference page (e.g., User Commands) + sectdesc + The section title of the reference page (believed synonymous with "manual" but in wide use) + software + The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + + + + + + Identifies the kind of miscellaneous information + + + + + + + Identifies the nature of non-standard miscellaneous information + + + + + + Identifies the kind of miscellaneious information + other + Indicates that the information is some 'other' kind. + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + Meta-information for a reference entry other than the title and volume number + + + + +
+
+ + + + + + + + + + + + + + + The name, purpose, and classification of a reference page + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A description of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The name of (one of) the subject(s) of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A short (one sentence) synopsis of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The scope or other indication of applicability of a reference entry + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A syntactic synopsis of the subject of the reference page + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section in a refentry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A major subsection of a reference entry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for a list of glossary entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + + + + + + + + + + + + + + + + + An entry in a glossary or glosslist + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies a list of keywords for the definition + + + + + + + + + + + + + + + + + A definition in a glossentry + + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry + to another + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry to another + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term, with limited content + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + An inline definition of a term + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + + + + + +
+ + + Identifies the relationship between the bibliographic elemnts + + +
+ + + + + + + + + + + + + + + + + + + + + A raw entry in a bibliography + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked entry in a bibliography + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A raw container for related bibliographic information + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked container for related bibliographic information + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Untyped bibliographic information + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a list of bibliography entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + The units (for example, pages) used to identify the beginning and ending of a reference. + + + + + + Identifies the beginning of a reference; the location within the work that is being referenced. + + + + + + Identifies the end of a reference. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cross-reference to a bibliographic entry + + + + +
+ + + normal + Normal + preferred + Preferred + + + + + Specifies the significance of the term + + + + + + Specifies the IDs of the elements to which this term applies + + + + + + Indicates the page on which this index term occurs in some version of the printed document + + + + + all + All indexes + global + The global index (as for a combined index of a set of books) + local + The local index (the index for this document only) + + + + + Specifies the scope of the index term + + + + + + Specifies the string by which the term is to be sorted; if unspecified, the term content is used + + + + + Specifies the target index for this term + + +
+ + + + + + + + + + + + + + + A set of index terms in the meta-information of a document + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Identifies the class of index term + singular + A singular index term + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term + + + + +
+
+ + + + + + Identifies the class of index term + startofrange + The start of a range + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term that covers a range + + + + +
+
+ + + + + + Identifies the class of index term + endofrange + The end of a range + + + + + Points to the start of the range + + + + + + + + + + + + + + + + + Identifies the end of a range associated with an indexed term + + Indexterm 'startref' type constraint + + @startref on indexterm must point to an indexterm. + @startref on indexterm must point to a startofrange indexterm. + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary word or phrase under which an index term should be sorted + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A secondary word or phrase in an index term + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A tertiary word or phrase in an index term + + + + + + +
+
+ + + + + + Identifies the class of 'see' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader instead to another entry in the index + + + + + + +
+
+ + + + + + Identifies the class of 'seealso' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader also to another entry in the index + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a book or part of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a set of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in an index + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry in an index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + A primary term in an index entry, not in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A secondary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A tertiary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See +entry in an index, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See also + entry in an index, rather than in the text + + + + + + +
+ + + Indicates the page on which this element occurs in some version of the printed document + + +
+ + + + + + + + + + + + + + + + + + A table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + A division in a table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A component title in a table of contents + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + A task to be completed + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary of a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The prerequisites for a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + Information related to a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + calspair + Coordinates expressed as a pair of CALS graphic coordinates. + linecolumn + Coordinates expressed as a line and column. + linecolumnpair + Coordinates expressed as a pair of lines and columns. + linerange + Coordinates expressed as a line range. + + + + + + Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + for graphics and linecolumn + for line-oriented elements. + + + + + + + + Indicates that non-standard units are used for this area +. In this case otherunits + must be specified. + other + Coordinates expressed in some non-standard units. + + + + Identifies the units used in the coords + attribute when the units + attribute is other +. This attribute is forbidden otherwise. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A list of callout +s + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Identifies the areas described by this callout. + + + + + + + + + + + + + + + + A called out + description of a marked area + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A program listing with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A collection of regions in a graphic or code example + + + + + + + + + +
+
+ + + + + + Point to the callout +s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + + + + + + Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + + + + + Provides the coordinates of the area. The coordinates must be interpreted using the units + specified. + + + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A set of related areas in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A screen with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for an image object with callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + The location of a callout embedded in text + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a co + + + + +
+
+ + + + + + + + + + + + + + + + + + A set of EBNF productions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A production in a set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The left-hand side of an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + The right-hand side of an EBNF production + + + + + + + + + + + +
+
+ + + + + + Specifies a URI that points to a production +where the nonterminal + is defined + + + + + + + + + + + + + + + + A non-terminal in an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + A constraint in an EBNF production + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + + + +
+
+ + + + + + + + + + + + + + + A cross-reference to an EBNF production + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The definition of a constraint in an EBNF production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Specifies the alignment character when align + is set to char +. + + + + + Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + when align + is set to char +. + + 0 + 100 + + + + + + Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + + all + Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + bottom + Frame only the bottom of the table. + none + Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + sides + Frame the left and right sides of the table. + top + Frame the top of the table. + topbot + Frame the top and bottom of the table. + + + + + + Specifies the presence or absence of the column separator + + 0 + No column separator rule. + 1 + Provide a column separator rule on the right + + + + + + Specifies the presence or absence of the row separator + + 0 + No row separator rule. + 1 + Provide a row separator rule below + + + + + + Specifies the orientation of the table + + land + 90 degrees counter-clockwise from the rest of the text flow. + port + The same orientation as the rest of the text flow. + + + + + + Specifies the table style + + + + + Indicates whether or not the entries in the first column should be considered row headers + + firstcol + Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + headers + Indicates that row headers are identified by use of the headers attribute on entries in the table. + norowheader + Indicates that entries in the first column have no special significance with respect to column headers. + + + + + + Specifies the horizontal alignment of text in an entry. + + center + Centered. + char + Aligned on a particular character. + justify + Left and right justified. + left + Left justified. + right + Right justified. + + + + + + Specifies the vertical alignment of text in an entry. + + bottom + Aligned on the bottom of the entry. + middle + Aligned in the middle. + top + Aligned at the top of the entry. + + + + + + Specifies a column specification by name. + + + + + Specifies a starting column by name. + + + + + Specifies a span by name. + + + + + + Specifies a starting column by name. + + + Specifies an ending column by name. + + + + + + + + + + + + + + Provides a name for a column specification. + + + + + Provides a name for a span specification. + + +
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for the main content of a table, or part of a table + + + + + + + + + + + + + + + + +
+
+ + + + + + The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + + + + + + Specifies the width of the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications for a column in a table + + + + +
+
+ + + + + + Specifies a starting column by name. + + + + + Specifies an ending column by name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formatting information for a spanned column in a table + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table footer consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + + + + +
+
+ + + + + + Specifies the number of additional rows which this entry occupies. Defaults to zero. + + + + + + Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + + 0 + Do not rotate the cell. + 1 + Rotate the cell 90 degrees counter-clockwise. + + + + + + Specifies the scope of a header. + + row + Applies to the row + col + Applies to the column + rowgroup + Applies to the row group + colgroup + Applies to the column group + + + + + + Specifies the entry or entries which serve as headers for this element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cell in a table + + Element exclusion + + table must not occur among the children or descendants of entry + + + + Element exclusion + + informaltable must not occur among the children or descendants of entry + + + + + + + + + + + + + +
+
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the entry table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subtable appearing in place of an entry in a table + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the short or long title should be used in a List of Tables + + 0 + Indicates that the full title should be used. + 1 + Indicates that the short short title (titleabbrev) should be used. + + + + + + Indicates if the table should appear in a List of Tables + + 0 + Indicates that the table should not occur in the List of Tables. + 1 + Indicates that the table should appear in the List of Tables. + + + + + + + + + + + + + + A formal table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + + + + + This attribute specifies style information for the current element. + + + + + This attribute offers advisory information about the element for which it is set. + + + + + + + + This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + + + + + + + + Occurs when the pointing device button is clicked over an element. + + + + + Occurs when the pointing device button is double clicked over an element. + + + + + Occurs when the pointing device button is pressed over an element. + + + + + Occurs when the pointing device button is released over an element. + + + + + Occurs when the pointing device is moved onto an element. + + + + + Occurs when the pointing device is moved while it is over an element. + + + + + Occurs when the pointing device is moved away from an element. + + + + + Occurs when a key is pressed and released over an element. + + + + + Occurs when a key is pressed down over an element. + + + + + Occurs when a key is released over an element. + + + + + + + + + + + + + + + + + Specifies the alignment of data and the justification of text in a cell. + + left + Left-flush data/Left-justify text. This is the default value for table data. + center + Center data/Center-justify text. This is the default value for table headers. + right + Right-flush data/Right-justify text. + justify + Double-justify text. + char + Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + + + + + + This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + + + + + When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + + + An explicit offset. + + [0-9]+% + + A percentage offset. + + + + + + + + + Specifies the vertical position of data within a cell. + + top + Cell data is flush with the top of the cell. + middle + Cell data is centered vertically within the cell. This is the default value. + bottom + Cell data is flush with the bottom of the cell. + baseline + All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + + + + + + + + + Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + + + + + Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + + + An explicit width. + + [0-9]+% + + A percentage width. + + + + + + Specifies the width (in pixels only) of the frame around a table. + + + + + + Specifies which sides of the frame surrounding a table will be visible. + + void + No sides. This is the default value. + above + The top side only. + below + The bottom side only. + hsides + The top and bottom sides only. + lhs + The left-hand side only. + rhs + The right-hand side only. + vsides + The right and left sides only. + box + All four sides. + border + All four sides. + + + + + + Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + + none + No rules. This is the default value. + groups + Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + rows + Rules will appear between rows only. + cols + Rules will appear between columns only. + all + Rules will appear between all rows and columns. + + + + + + Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + + + An explicit spacing. + + [0-9]+% + + A percentage spacing. + + + + + + Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + + + An explicit padding. + + [0-9]+% + + A percentage padding. + + + + + + + + + + Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + + + + + This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + + + + + Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + + + + + Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + + row + The current cell provides header information for the rest of the row that contains it + col + The current cell provides header information for the rest of the column that contains it. + rowgroup + The header cell provides header information for the rest of the row group that contains it. + colgroup + The header cell provides header information for the rest of the column group that contains it. + + + + + + Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all rows from the current row to the last row of the table section (thead +, tbody +, or tfoot +) in which the cell is defined. + + + + + + Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all columns from the current column to the last column of the column group (colgroup +) in which the cell is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal (captioned) HTML table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An HTML table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + An HTML table caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + This attribute, whose value must be an integer > 0, specifies the number of columns spanned + by the col + element; the col + element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + element shares its attributes with the next N-1 columns. + + + + + + Specifies a default width for each column spanned by the current col + element. It has the same meaning as the width + attribute for the colgroup + element and overrides it. + + + + + + + + + Specifications for a column in an HTML table + + + + +
+
+ + + + + + This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + element contains one or more col + elements. + + + + + + This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + element. + + + + + + + + + A group of columns in an HTML table + + + + + + +
+
+ + + + + + + + + + A table header consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A table footer consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A wrapper for the rows of an HTML table or informal HTML table + + + + + + +
+
+ + + + + + + + + + A row in an HTML table + + + + + + + + + +
+
+ + + + + + + + + + + A table header entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + A table entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A detailed set of messages, usually error messages + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for an entry in a message set + + + + + + + + + + + + +
+
+ + + + + + The audience to which the message relevant + + + + + The origin of the message + + + + + The level of importance or severity of a message + + + + + + + + + + + + + + + + + + + + + + + A wrapper for a simpler entry in a message set + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A subcomponent of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A related component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + The actual text of a message component in a message set + + + + + + +
+
+ + + + + + + + + + + + + + + Information about a message in a message set + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The level of importance or severity of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The origin of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The audience to which a message in a message set is relevant + + + + +
+
+ + + + + + + + + + + + + + + + + + Explanatory material relating to a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + none + No labels + number + Numeric labels + qanda + "Q:" and "A:" labels + + + + + Specifies the default labelling + + + + + + + + + + + + + + + + + + + + + A question-and-answer set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A titled division in a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A question/answer set within a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A question in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An answer to a question posed in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A label on a question or answer + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation + + Element exclusion + + example must not occur among the children or descendants of equation + + + + Element exclusion + + figure must not occur among the children or descendants of equation + + + + Element exclusion + + table must not occur among the children or descendants of equation + + + + Element exclusion + + equation must not occur among the children or descendants of equation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical equation or expression occurring inline + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical phrase that can be represented with ordinary text and a small amount of markup + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + Specifies that the format of the data is MathML + mathml + Specifies MathML. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A MathML expression in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the MathML namespace + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + Specifies that the format of the data is SVG + svg + Specifies SVG. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SVG drawing in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the SVG namespace + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A string of formatting markup in text that is to be represented literally + + + + +
+
+ + + + + + attribute + An attribute + attvalue + An attribute value + element + An element + emptytag + An empty element tag + endtag + An end tag + genentity + A general entity + localname + The local name part of a qualified name + namespace + A namespace + numcharref + A numeric character reference + paramentity + A parameter entity + pi + A processing instruction + prefix + The prefix part of a qualified name + comment + An SGML comment + starttag + A start tag + xmlpi + An XML processing instruction + + + + + Identifies the nature of the tag content + + + + + + Identifies the namespace of the tag content + + + + + + + + + + + + + + + + + + + + + A component of XML (or SGML) markup + + + + + + + + + +
+
+ + + Identifies the class of symbol + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A name that is replaced by a value before processing + + + + +
+
+ + + + + + + + + + + + + + + A unit of information + + + + +
+
+ + + + + + + + + + + + + + + Inline text that is some literal value + + + + +
+
+ + + Identifies the (computer) language of the code fragment + + + + + + + + + + + + + + + + + + + + An inline code fragment + + + + + + + + + +
+
+ + + Identifies the class of constant + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A programming or system constant + + + + +
+
+ + + + + + copyright + A name with a copyright + registered + A name with a registered copyright + service + A name of a service + trade + A name which is trademarked + + + + + Specifies the class of product name + + + + + + + + + + + + + + + + + + The formal name of a product + + + + +
+
+ + + + + + + + + + + + + + + A number assigned to a product + + + + +
+
+ + + altkey + An alternate or secondary key + constraint + A constraint + datatype + A data type + field + A field + foreignkey + A foreign key + group + A group + index + An index + key1 + The first or primary key + key2 + An alternate or secondary key + name + A name + primarykey + The primary key + procedure + A (stored) procedure + record + A record + rule + A rule + secondarykey + The secondary key + table + A table + user + A user + view + A view + + + + + Identifies the class of database artifact + + + + + + + + + + + + + + + + + + + + + The name of a database, or part of a database + + + + +
+
+ + + hardware + A hardware application + software + A software application + + + + + Identifies the class of application + + + + + + + + + + + + + + + + + + + + + The name of a software program + + + + +
+
+ + + + + + + + + + + + + + + A physical part of a computer system + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text on a button in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Graphic and/or text appearing as a icon in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The text of a label in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a menu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a terminal menu item in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a submenu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A selection or series of selections from a menu + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The conventional name of a mouse button + + + + +
+ + + + + + + + + + +
+ + + alt + The "Alt" key + altgr + The "Alt Graph" key + backspace + The "Backspace" key + command + The "Command" key + control + The "Control" key + delete + The "Delete" key + down + The down arrow + end + The "End" key + enter + The "Enter" key + escape + The "Escape" key + home + The "Home" key + insert + The "Insert" key + left + The left arrow + meta + The "Meta" key + option + The "Option" key + pagedown + The page down key + pageup + The page up key + right + The right arrow + return + The "Return" key + shift + The "Shift" key + space + The spacebar + tab + The "Tab" key + up + The up arrow + + + + + + Identifies the function key + + + + + + + + Identifies the function key + other + Indicates a non-standard function key + + + + Specifies a keyword that identifies the non-standard key + + + + + + + + + + + + + + + + + + + + + + + + The text printed on a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + The internal, frequently numeric, identifier for a key on a keyboard + + + + +
+ + + + + + + + + + +
+ + + click + A (single) mouse click. + double-click + A double mouse click. + press + A mouse or key press. + seq + Sequential clicks or presses. + simul + Simultaneous clicks or presses. + + + + + + Identifies the nature of the action taken. If keycombo + contains more than one element, simul + is the default, otherwise there is no default. + + + + + + + + Identifies the nature of the action taken + other + Indicates a non-standard action + + + + Identifies the non-standard action in some unspecified way. + + + + + + + + + + + + + + + + + + + + + + + + A combination of input actions + + + + + + +
+
+ + + + + + + + + + + + + + + The symbolic name of a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + A graphical user interface (GUI) keyboard shortcut + + + + +
+
+ + + + + + + + + + + + + + + + + + + A key combination for an action that is also accessible through a menu + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A character or string indicating the start of an input field in a computer display + + + + + + +
+
+ + + + + + + + + + + + + + + A software environment variable + + + + +
+
+ + + devicefile + A device + directory + A directory + extension + A filename extension + headerfile + A header file (as for a programming language) + libraryfile + A library file + partition + A partition (as of a hard disk) + symlink + A symbolic link + + + + + Identifies the class of filename + + + + + + Specifies the path of the filename + + + + + + + + + + + + + + + + + + + + + + + The name of a file + + + + +
+
+ + + + + + + + + + + + + + + The name of an executable program or other software command + + + + +
+
+ + + + + + + + + + + + + + + Data, generally text, displayed or presented by a computer + + + + + + +
+
+ + + + + + + + + + + + + + + Data entered by the user + + + + + + +
+
+ + + + + + Specifies the character that should separate the command and its top-level arguments + + + + + Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A syntax summary for a software command + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + norepeat + Can not be repeated. + repeat + Can be repeated. + + + + + Indicates whether or not repetition is possible. + + + + + + opt + Formatted to indicate that it is optional. + plain + Formatted without indication. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + Indicates optionality. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An argument in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A group of elements in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + An explicit line break in a command synopsis + + + + +
+
+ + + + + + + + + + + + + + + A portion of a cmdsynopsis broken out from the main body of the synopsis + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A reference to a fragment of a command synopsis + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + A general-purpose element for representing the syntax of commands or functions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing synopsis + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a function definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the funcdefs of a funcsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a function + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A function (subroutine) name and its return type + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a function or subroutine, as in a programming language + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating that the function in question takes no arguments + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating a variable number of arguments + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of parameters + + + + + + + + + +
+
+ + + + + + opt + Formatted to indicate that it is optional. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + + + + + + + + + + + + + Information about a function parameter in a programming language + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Parameters for a function referenced through a function pointer in a synopsis + + + + +
+
+ + + + + + + + + class + This is the synopsis of a class + interface + This is the synopsis of an interface + + + + + Specifies the nature of the synopsis + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the contents of a classsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A class in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An interface in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An exception in an object-oriented programming language + + + + + + + + + + + + + +
+ + + Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + preserve + Extra whitespace and line breaks must be preserved. + + + +
+ + + + + + + + + + + + + + + + + + Modifiers in a synopsis + + + + +
+
+ + + + + + + + + + + + + + + The name of an interface + + + + +
+
+ + + + + + + + + + + + + + + The name of an exception + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The name of a field in a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + The initializer for a fieldsynopsis + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a constructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a destructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a method + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a method + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters to a method + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of method parameters + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a variable + + + + +
+
+ + + + + + + + + + + + + + + Target of a build + + + + +
+
+ + + + + + + + + + + + + + + The value returned by a function + + + + +
+
+ + + + + + union + Combined type is union of nested types + intersection + Combined type is intersection of nested types + + + + + Specifies the way how are nested types combined together + + + + + + + + + + + + + + + + + + The classification of a value + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a class, in the object-oriented programming sense + + + + +
+
+ + + + + + + + + + + + + + + The identifier for a template, in the generic programming sense + + + + +
+
+ + + + + + + + + + + + + + + The definition of a template, in the generic programming sense + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The specialization of a template identifier, in the generic programming sense + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a package definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a macro (a code-generating function) + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a macro definition (code-generating function) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a macro (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A macro name and its return type + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a union of types + + + + +
+
+ + + + + + + + + + + + + + + The definition of a union of types, which may be more than a name + + + + + + +
+
+ + + + + + + + + + Indicates how the value of a union is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a union-of-types definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of an enumeration + + + + +
+
+ + + + + + + + + + + + + + + The value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + The description of a value an enumerated type can take + + + + + + +
+
+ + + + + + + + + + + + + + + The identifier of a value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + A value an enumerated type can take and its description + + + + + + + + + + +
+
+ + + + + + + + + 0 + Value of enum is specified explicitly using enumvalue + 1 + Value of enum is inferred from its position + + + + + Indicates how the value of an enumeration is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for an enumerated-type definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a type alias + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a type-alias definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A literal listing of all or part of a program + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A note of caution + + Element exclusion + + caution must not occur among the children or descendants of caution + + + + Element exclusion + + danger must not occur among the children or descendants of caution + + + + Element exclusion + + important must not occur among the children or descendants of caution + + + + Element exclusion + + note must not occur among the children or descendants of caution + + + + Element exclusion + + tip must not occur among the children or descendants of caution + + + + Element exclusion + + warning must not occur among the children or descendants of caution + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text indicating hazardous situation + + Element exclusion + + caution must not occur among the children or descendants of danger + + + + Element exclusion + + danger must not occur among the children or descendants of danger + + + + Element exclusion + + important must not occur among the children or descendants of danger + + + + Element exclusion + + note must not occur among the children or descendants of danger + + + + Element exclusion + + tip must not occur among the children or descendants of danger + + + + Element exclusion + + warning must not occur among the children or descendants of danger + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of important + + + + Element exclusion + + danger must not occur among the children or descendants of important + + + + Element exclusion + + important must not occur among the children or descendants of important + + + + Element exclusion + + note must not occur among the children or descendants of important + + + + Element exclusion + + tip must not occur among the children or descendants of important + + + + Element exclusion + + warning must not occur among the children or descendants of important + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A message set off from the text + + Element exclusion + + caution must not occur among the children or descendants of note + + + + Element exclusion + + danger must not occur among the children or descendants of note + + + + Element exclusion + + important must not occur among the children or descendants of note + + + + Element exclusion + + note must not occur among the children or descendants of note + + + + Element exclusion + + tip must not occur among the children or descendants of note + + + + Element exclusion + + warning must not occur among the children or descendants of note + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A suggestion to the user, set off from the text + + Element exclusion + + caution must not occur among the children or descendants of tip + + + + Element exclusion + + danger must not occur among the children or descendants of tip + + + + Element exclusion + + important must not occur among the children or descendants of tip + + + + Element exclusion + + note must not occur among the children or descendants of tip + + + + Element exclusion + + tip must not occur among the children or descendants of tip + + + + Element exclusion + + warning must not occur among the children or descendants of tip + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of warning + + + + Element exclusion + + danger must not occur among the children or descendants of warning + + + + Element exclusion + + important must not occur among the children or descendants of warning + + + + Element exclusion + + note must not occur among the children or descendants of warning + + + + Element exclusion + + tip must not occur among the children or descendants of warning + + + + Element exclusion + + warning must not occur among the children or descendants of warning + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + An error code + + + + +
+
+ + + + + + + + + + + + + + + An error name + + + + +
+
+ + + + + + + + + + + + + + + An error message. + + + + +
+
+ + + + + + + + + + + + + + + The classification of an error message + + + + +
+ + + + + + +
+ + + daemon + A daemon or other system process (syslogd) + domainname + A domain name (example.com) + etheraddress + An ethernet address (00:05:4E:49:FD:8E) + event + An event of some sort (SIGHUP) + eventhandler + An event handler of some sort (hangup) + filesystem + A filesystem (ext3) + fqdomainname + A fully qualified domain name (my.example.com) + groupname + A group name (wheel) + interface + A network interface (eth0) + ipaddress + An IP address (127.0.0.1) + library + A library (libncurses) + macro + A macro + netmask + A netmask (255.255.255.192) + newsgroup + A newsgroup (comp.text.xml) + osname + An operating system name (Hurd) + process + A process (gnome-cups-icon) + protocol + A protocol (ftp) + resource + A resource + securitycontext + A security context (a role, permission, or security token, for example) + server + A server (mail.example.com) + service + A service (ppp) + systemname + A system name (hephaistos) + username + A user name (ndw) + + + + + + Identifies the nature of the system item + + + + + + + Identifies the nature of the non-standard system item + + + + + + + Identifies the kind of systemitemgraphic identifier + other + Indicates that the system item is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + A system-related item or term + + + + + + +
+
+ + + + + + + + + + + + + + + An option for a software command + + + + +
+
+ + + + + + + + + + + + + + + Optional information + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A unit of data associated with some part of a computer system + + + + +
+
+ + + + + + + + + Identifies the topic type + + + + + + + + + + + + + + + + + + + + + + + + + + A modular unit of documentation not part of any particular narrative flow + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + [^#]+ + + + + + + + xml + text + + + + + + + + + + + + + + + + + + + + + + + + + + + + An XInclude + + + + + + +
+
+ + + + An XInclude fallback + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + Any attribute in an other explicit namespace. + + + + + + + + + + + + + + + Version of ITS + + [0-9]+\.[0-9]+ + + + + The query language to be used for processing the rules + + xpath + css + + + + + + Absolute selector + + + + + Relative selector + + + + + + + + 0 + 1 + + + + The Translate data category information to be attached to the current node + + yes + The nodes need to be translated + no + The nodes must not be translated + + + + + + + The type of localization note + + alert + Localization note is an alert + description + Localization note is a description + + + + + + + + + + Indicates a term locally + + yes + The value 'yes' means that this is a term + no + The value 'no' means that this is not a term + + + + + + + The text direction for the context + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + States whether current context is regarded as "within text" + + yes + The element and its content are part of the flow of its parent element + no + The element splits the text flow of its parent element and its content is an independent text flow + nested + The element is part of the flow of its parent element, its content is an independent flow + + + + A comma separated list of mappings between values in the content +and workflow specific values. The values may contain spaces; in +that case they MUST be delimited by quotation marks. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + include + exclude + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + terminology + mistranslation + omission + untranslated + addition + duplication + inconsistency + grammar + legal + register + locale-specific-content + locale-violation + style + characters + misspelling + typographical + formatting + inconsistent-entities + numbers + markup + pattern-problem + whitespace + internationalization + length + non-conformance + uncategorized + other + + + + + + + + 0 + 100 + + + + + + + + yes + no + + + + + 0 + 100 + + + + + + + + 0 + 100 + + + + + + + + + + + + + + + + + + + + + + + cr + lf + crlf + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version of ITS + + + + + + Version of ITS + + + + + + + + + + + + + + + + simple + + + + + + + + + + + + + + + + + + + + + + xml:id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Container for global rules + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Declaration of variable used in selectors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Inline element to contain ITS information + + + + + + + + + + + + + + + + + + + + + + + Rule about the Translate data category + + + + + + + + + + + + + + + + + Rule about the Localization Note data category + + + + + + + + + + + + + + + + + + + + + + + + + + Localization note + + + + + + + + + + + + + + + + + + + + + Rule about the Terminology data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the Directionality data category + + + + + + + + + + + + + + + + + Rule about the Language Information data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Elements Within Text data category + + + + + + + + + + + + + + + + + Rule about the Domain data category + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the Disambiguation data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the LocaleFilter data category + + + + + + + + + + + + + + + + + + + + Rule about the Provenance data category + + + + + + + + + + + + + + + + + + + + + + Rule about the External Resource data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Target Pointer data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Id Value data category + + + + + + + + + + + + + + + + + + + + + + Rule about the Preserve Space data category + + + + + + + + + + + + + + + + + + default + preserve + + + + + + Rule about the Localization Quality Issue data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the MT Confidence data category + + + + + + + + + + + + + + + + + Rule about the Allowed Characters data category + + + + + + + + + + + + + + + + + + + + + + + + + Rule about the Allowed Characters data category + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Standoff markup for Provenance data category + + + + + + + + + + + + + + + + + Provenance record used in Provenance standoff markup + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Standoff markup for Localization Quality Issue data category + + + + + + + + + + + + + + + + + Issue recorded in Localization Quality standoff markup + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/catalog/docbook5.2/rng/docbook.rnc b/catalog/docbook5.2/rng/docbook.rnc new file mode 100755 index 0000000..f81c88d --- /dev/null +++ b/catalog/docbook5.2/rng/docbook.rnc @@ -0,0 +1,11999 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ctrl = "http://nwalsh.com/xmlns/schema-control/" +default namespace db = "http://docbook.org/ns/docbook" +namespace html = "http://www.w3.org/1999/xhtml" +namespace local = "" +namespace mml = "http://www.w3.org/1998/Math/MathML" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace s = "http://purl.oclc.org/dsdl/schematron" +namespace svg = "http://www.w3.org/2000/svg" +namespace trans = "http://docbook.org/ns/transclusion" +namespace xlink = "http://www.w3.org/1999/xlink" + +# This file is part of DocBook V5.2CR5 +# +# Copyright 1992-2015 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-comment@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. +# +# ====================================================================== + +s:ns [ + prefix = "a" + uri = "http://relaxng.org/ns/compatibility/annotations/1.0" +] +s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ] +s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ] +s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ] +s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ] +s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ] +s:ns [ prefix = "s" uri = "http://purl.oclc.org/dsdl/schematron" ] +s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ] +s:ns [ prefix = "trans" uri = "http://docbook.org/ns/transclusion" ] +s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ] +start = + (db.set + | db.book + | db.divisions + | db.components + | db.navigation.components + | db.section + | db.para) + | (db.abstract + | db.mediaobject.content + | db.audiodata + | db.imagedata + | db.textdata + | db.videodata + | db.caption + | db.publishing.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.formalpara + | db.inlinemediaobject + | db.list.blocks + | db.legalnotice + | db.verbatim.blocks + | db.graphic.blocks + | db.personblurb + | db.revhistory + | db.simpara + | db.step + | db.stepalternatives + | db.info) + | (db.partintro | db.simplesect) + | db.annotation + | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5) + | (db.refentry | db.refsection | db.refsynopsisdiv) + | (db.refsect1 | db.refsect2 | db.refsect3) + | (db.glossary | db.glossdiv | db.glosslist) + | (db.bibliodiv | db.bibliolist) + | (db.setindex | db.index | db.indexdiv) + | (db.toc | db.tocdiv) + | (db.task | db.taskprerequisites | db.taskrelated | db.tasksummary) + | (db.calloutlist + | db.programlistingco + | db.screenco + | db.imageobjectco) + | (db.productionset | db.constraintdef) + | (db.msg + | db.msgexplan + | db.msgmain + | db.msgrel + | db.msgset + | db.msgsub) + | (db.qandadiv | db.qandaentry | db.qandaset) + | (db.equation | db.informalequation) + | db.cmdsynopsis + | (db.synopsis.blocks | db.funcsynopsisinfo | db.classsynopsisinfo) + | db.admonition.blocks + | db.topic +div { + db._any.attribute = + + ## Any attribute, including any attribute in any namespace + attribute * { text } + db._any_other.attribute = + + ## Any attribute in any other explicit namespace + attribute * - (db:* | xml:* | xlink:* | trans:* | local:*) { text } + db._any = + + ## Any element from almost any namespace + element * - db:* { (db._any.attribute | text | db._any)* } +} +db.arch.attribute = + + ## Designates the computer or chip architecture to which the element applies + attribute arch { text } +db.audience.attribute = + + ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + attribute audience { text } +db.condition.attribute = + + ## provides a standard place for application-specific effectivity + attribute condition { text } +db.conformance.attribute = + + ## Indicates standards conformance characteristics of the element + attribute conformance { text } +db.os.attribute = + + ## Indicates the operating system to which the element is applicable + attribute os { text } +db.revision.attribute = + + ## Indicates the editorial revision to which the element belongs + attribute revision { text } +db.security.attribute = + + ## Indicates something about the security level associated with the element to which it applies + attribute security { text } +db.userlevel.attribute = + + ## Indicates the level of user experience for which the element applies + attribute userlevel { text } +db.vendor.attribute = + + ## Indicates the computer vendor to which the element applies + attribute vendor { text } +db.wordsize.attribute = + + ## Indicates the word size (width in bits) of the computer architecture to which the element applies + attribute wordsize { text } +db.outputformat.attribute = + + ## Indicates the output format (for example, print or epub) to which the element applies + attribute outputformat { text } +db.effectivity.attributes = + db.arch.attribute? + & db.audience.attribute? + & db.condition.attribute? + & db.conformance.attribute? + & db.os.attribute? + & db.revision.attribute? + & db.security.attribute? + & db.userlevel.attribute? + & db.vendor.attribute? + & db.wordsize.attribute? + & db.outputformat.attribute? +db.endterm.attribute = + + ## Points to the element whose content is to be used as the text of the link + attribute endterm { xsd:IDREF } +db.linkend.attribute = + + ## Points to an internal link target by identifying the value of its xml:id attribute + attribute linkend { xsd:IDREF } +db.linkends.attribute = + + ## Points to one or more internal link targets by identifying the value of their xml:id attributes + attribute linkends { xsd:IDREFS } +db.xlink.href.attribute = + + ## Identifies a link target with a URI + attribute xlink:href { xsd:anyURI } +db.xlink.simple.type.attribute = + + ## Identifies the XLink link type + attribute xlink:type { + + ## An XLink simple link type + "simple" + } +db.xlink.role.attribute = + + ## Identifies the XLink role of the link + attribute xlink:role { xsd:anyURI } +db.xlink.arcrole.attribute = + + ## Identifies the XLink arcrole of the link + attribute xlink:arcrole { xsd:anyURI } +db.xlink.title.attribute = + + ## Identifies the XLink title of the link + attribute xlink:title { text } +db.xlink.show.enumeration = + + ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + "new" + | + ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + "replace" + | + ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + "embed" + | + ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.show.attribute = + + ## Identifies the XLink show behavior of the link + attribute xlink:show { db.xlink.show.enumeration } +db.xlink.actuate.enumeration = + + ## An application should traverse to the ending resource immediately on loading the starting resource. + "onLoad" + | + ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + "onRequest" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.actuate.attribute = + + ## Identifies the XLink actuate behavior of the link + attribute xlink:actuate { db.xlink.actuate.enumeration } +db.xlink.simple.link.attributes = + db.xlink.simple.type.attribute? + & db.xlink.href.attribute? + & db.xlink.role.attribute? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? +db.xlink.attributes = + db.xlink.simple.link.attributes + | (db.xlink.extended.link.attributes + | db.xlink.locator.link.attributes + | db.xlink.arc.link.attributes + | db.xlink.resource.link.attributes + | db.xlink.title.link.attributes) +db.xml.id.attribute = + + ## Identifies the unique ID value of the element + attribute xml:id { xsd:ID } +db.version.attribute = + + ## Specifies the DocBook version of the element and its descendants + attribute version { text } +db.xml.lang.attribute = + + ## Specifies the natural language of the element and its descendants + attribute xml:lang { text } +db.xml.base.attribute = + + ## Specifies the base URI of the element and its descendants + attribute xml:base { xsd:anyURI } +db.remap.attribute = + + ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + attribute remap { text } +db.xreflabel.attribute = + + ## Provides the text that is to be generated for a cross reference to the element + attribute xreflabel { text } +db.xrefstyle.attribute = + + ## Specifies a keyword or keywords identifying additional style information + attribute xrefstyle { text } +db.revisionflag.enumeration = + + ## The element has been changed. + "changed" + | + ## The element is new (has been added to the document). + "added" + | + ## The element has been deleted. + "deleted" + | + ## Explicitly turns off revision markup for this element. + "off" +db.revisionflag.attribute = + + ## Identifies the revision status of the element + attribute revisionflag { db.revisionflag.enumeration } +db.dir.enumeration = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" +db.dir.attribute = + + ## Identifies the direction of text in an element + attribute dir { db.dir.enumeration } +db.rdfalite.vocab = + + ## The RDFa Lite vocab + attribute vocab { xsd:anyURI } +db.rdfalite.typeof = + + ## The RDFa Lite typeof + attribute typeof { text } +db.rdfalite.property = + + ## The RDFa Lite property + attribute property { text } +db.rdfalite.resource = + + ## The RDFa Lite resource + attribute resource { text } +db.rdfalite.prefix = + + ## The RDFa Lite prefix + attribute prefix { text } +db.rdfalite.attributes = + db.rdfalite.vocab? + & db.rdfalite.typeof? + & db.rdfalite.property? + & db.rdfalite.resource? + & db.rdfalite.prefix? +db.trans.idfixup.enumeration = + + ## No ID fixup strategy + "none" + | + ## ID fixup by concatenating suffixes + "suffix" + | + ## ID fixup by creating unique values + "auto" +db.trans.idfixup.attribute = + + ## The transclusion ID fixup strategy + attribute trans:idfixup { db.trans.idfixup.enumeration } +db.trans.suffix.attribute = + + ## The transclusion suffix to use when the suffix ID fixup strategy is employed + [ + s:pattern [ + s:title [ "Suffix fixup must be specified" ] + s:rule [ + context = "db:*[@trans:suffix]" + s:assert [ + test = "@trans:idfixup = 'suffix'" + "If a suffix is specified, suffix ID fixup must also be specified." + ] + ] + ] + ] + attribute trans:suffix { text } +db.trans.linkscope.enumeration = + + ## No link scope adjustments are made + "user" + | + ## The link scopes are adjusted with the suffix property + "local" + | + ## The link scopes are adjusted based on proximity + "near" + | + ## The link scopes are adjusted based on document order + "global" +db.trans.linkscope.attribute = + + ## The transclusion link scope adjustment + attribute trans:linkscope { db.trans.linkscope.enumeration } +db.common.transclusion.attributes = + db.trans.idfixup.attribute? + & db.trans.suffix.attribute? + & db.trans.linkscope.attribute? +db.common.base.attributes = + db.version.attribute? + & db.xml.lang.attribute? + & db.xml.base.attribute? + & db.remap.attribute? + & db.xreflabel.attribute? + & db.revisionflag.attribute? + & db.dir.attribute? + & db.effectivity.attributes + & db.rdfalite.attributes + & db.common.transclusion.attributes + & db._any_other.attribute* +db.common.attributes = + db.xml.id.attribute? + & db.common.base.attributes + & db.annotations.attribute? +db.common.idreq.attributes = + db.xml.id.attribute + & db.common.base.attributes + & db.annotations.attribute? +db.common.linking.attributes = + (db.linkend.attribute | db.xlink.attributes)? +db.common.req.linking.attributes = + db.linkend.attribute | db.xlink.attributes +db.common.data.attributes = + + ## Specifies the format of the data + attribute format { text }?, + ( + ## Indentifies the location of the data by URI + attribute fileref { xsd:anyURI } + | + ## Identifies the location of the data by external identifier (entity name) + attribute entityref { xsd:ENTITY }) +db.verbatim.continuation.enumeration = + + ## Line numbering continues from the immediately preceding element with the same name. + "continues" + | + ## Line numbering restarts (begins at 1, usually). + "restarts" +db.verbatim.continuation.attribute = + + ## Determines whether line numbering continues from the previous element or restarts + attribute continuation { db.verbatim.continuation.enumeration } +db.verbatim.linenumbering.enumeration = + + ## Lines are numbered. + "numbered" + | + ## Lines are not numbered. + "unnumbered" +db.verbatim.linenumbering.attribute = + + ## Determines whether lines are numbered + attribute linenumbering { db.verbatim.linenumbering.enumeration } +db.verbatim.startinglinenumber.attribute = + + ## Specifies the initial line number + attribute startinglinenumber { xsd:integer } +db.verbatim.language.attribute = + + ## Identifies the language (i.e. programming language) of the verbatim content + attribute language { text } +db.verbatim.xml.space.attribute = + + ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + attribute xml:space { + + ## Whitespace must be preserved. + "preserve" + } +db.verbatim.common.attributes = + db.verbatim.continuation.attribute? + & db.verbatim.linenumbering.attribute? + & db.verbatim.startinglinenumber.attribute? + & db.verbatim.xml.space.attribute? +db.verbatim.attributes = + db.verbatim.common.attributes & db.verbatim.language.attribute? +db.label.attribute = + + ## Specifies an identifying string for presentation purposes + attribute label { text } +db.width.characters.attribute = + + ## Specifies the width (in characters) of the element + attribute width { xsd:nonNegativeInteger } +db.spacing.enumeration = + + ## The spacing should be "compact". + "compact" + | + ## The spacing should be "normal". + "normal" +db.spacing.attribute = + + ## Specifies (a hint about) the spacing of the content + attribute spacing { db.spacing.enumeration } +db.pgwide.enumeration = + + ## The element should be rendered in the current text flow (with the flow column width). + "0" + | + ## The element should be rendered across the full text page. + "1" +db.pgwide.attribute = + + ## Indicates if the element is rendered across the column or the page + attribute pgwide { db.pgwide.enumeration } +db.language.attribute = + + ## Identifies the language (i.e. programming language) of the content + attribute language { text } +db.performance.enumeration = + + ## The content describes an optional step or steps. + "optional" + | + ## The content describes a required step or steps. + "required" +db.performance.attribute = + + ## Specifies if the content is required or optional + attribute performance { db.performance.enumeration } +db.floatstyle.attribute = + + ## Specifies style information to be used when rendering the float + attribute floatstyle { text } +db.width.attribute = + + ## Specifies the width of the element + attribute width { text } +db.depth.attribute = + + ## Specifies the depth of the element + attribute depth { text } +db.contentwidth.attribute = + + ## Specifies the width of the content rectangle + attribute contentwidth { text } +db.contentdepth.attribute = + + ## Specifies the depth of the content rectangle + attribute contentdepth { text } +db.scalefit.enumeration = + + ## False (do not scale-to-fit; anamorphic scaling may occur) + "0" + | + ## True (scale-to-fit; anamorphic scaling is forbidden) + "1" +db.scale.attribute = + + ## Specifies the scaling factor + attribute scale { xsd:positiveInteger } +db.classid.attribute = + + ## Specifies a classid for a media object player + attribute classid { text } +db.autoplay.attribute = + + ## Specifies the autoplay setting for a media object player + attribute autoplay { text } +db.halign.enumeration = + + ## Centered horizontally + "center" + | + ## Aligned horizontally on the specified character + "char" + | + ## Fully justified (left and right margins or edges) + "justify" + | + ## Left aligned + "left" + | + ## Right aligned + "right" +db.valign.enumeration = + + ## Aligned on the bottom of the region + "bottom" + | + ## Centered vertically + "middle" + | + ## Aligned on the top of the region + "top" +db.biblio.class.enumeration = + + ## A digital object identifier. + "doi" + | + ## An international standard book number. + "isbn" + | + ## An international standard technical report number (ISO 10444). + "isrn" + | + ## An international standard serial number. + "issn" + | + ## An international standard text code. + "istc" + | + ## A Library of Congress reference number. + "libraryofcongress" + | + ## A publication number (an internal number or possibly organizational standard). + "pubsnumber" + | + ## A Uniform Resource Identifier + "uri" +db.biblio.class-enum.attribute = + + ## Identifies the kind of bibliographic identifier + attribute class { db.biblio.class.enumeration }? +db.biblio.class-other.attribute = + + ## Identifies the nature of the non-standard bibliographic identifier + attribute otherclass { xsd:NMTOKEN } +db.biblio.class-other.attributes = + + ## Identifies the kind of bibliographic identifier + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.biblio.class-other.attribute +db.biblio.class.attribute = + db.biblio.class-enum.attribute | db.biblio.class-other.attributes +db.pubwork.enumeration = + + ## An article + "article" + | + ## A bulletin board system + "bbs" + | + ## A book + "book" + | + ## A CD-ROM + "cdrom" + | + ## A chapter (as of a book) + "chapter" + | + ## A DVD + "dvd" + | + ## An email message + "emailmessage" + | + ## A gopher page + "gopher" + | + ## A journal + "journal" + | + ## A manuscript + "manuscript" + | + ## A posting to a newsgroup + "newsposting" + | + ## A part (as of a book) + "part" + | + ## A reference entry + "refentry" + | + ## A section (as of a book or article) + "section" + | + ## A series + "series" + | + ## A set (as of books) + "set" + | + ## A web page + "webpage" + | + ## A wiki page + "wiki" + | + ## Some other kind of work + "other" +db.biblio.pubwork.enumeration = db.pubwork.enumeration +db.biblio.pubwork-enum.attribute = + + ## Identifies the nature of the published work + attribute pubwork { db.biblio.pubwork.enumeration }? +db.biblio.pubwork-other.attribute = + + ## Identifies the nature of some other kind of published work + attribute otherpubwork { xsd:NMTOKEN } +db.biblio.pubwork-other.attributes = + + ## Identifies that this is some other kind of published work + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.biblio.pubwork-other.attribute +db.biblio.pubwork.attribute = + db.biblio.pubwork-enum.attribute | db.biblio.pubwork-other.attributes +db.ubiq.inlines = + (db.inlinemediaobject + | db.remark + | db.link.inlines + | db.alt + | db.trademark + | # below, effectively the publishing inlines (as of 5.0) + db.abbrev + | db.acronym + | db.date + | db._emphasis + | db.footnote + | db.footnoteref + | db._foreignphrase + | db._phrase + | db._quote + | db.subscript + | db.superscript + | db.wordasword) + | db.annotation + | (db._firstterm | db._glossterm) + | db.indexterm + | db.coref +db._text = (text | db.ubiq.inlines | db._phrase | db.replaceable)* +db._title = db.title? & db.titleabbrev? & db.subtitle? +db._title.req = db.title & db.titleabbrev? & db.subtitle? +db._title.only = db.title? & db.titleabbrev? +db._title.onlyreq = db.title & db.titleabbrev? +db._info = (db._title, db.titleforbidden.info?) | db.info? +db._info.title.req = + (db._title.req, db.titleforbidden.info?) | db.titlereq.info +db._info.title.only = + (db._title.only, db.titleforbidden.info?) | db.titleonly.info +db._info.title.onlyreq = + (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info +db._info.title.forbidden = db.titleforbidden.info? +db.all.inlines = + text + | db.ubiq.inlines + | db.general.inlines + | db.domain.inlines + | db.extension.inlines +db.general.inlines = + db.publishing.inlines + | db.product.inlines + | db.bibliography.inlines + | db.graphic.inlines + | db.indexing.inlines + | db.link.inlines +db.domain.inlines = + db.technical.inlines + | db.math.inlines + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines + | db.os.inlines + | db.programming.inlines + | db.error.inlines +db.technical.inlines = + (db.replaceable | db.package | db.parameter) + | db.termdef + | db.nonterminal + | (db.systemitem | db.option | db.optional | db.property) +db.product.inlines = + db.trademark + | (db.productnumber + | db.productname + | db.database + | db.application + | db.hardware) +db.bibliography.inlines = + db.citation + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.author + | db.person + | db.personname + | db.org + | db.orgname + | db.editor + | db.jobtitle +db.publishing.inlines = + (db.abbrev + | db.acronym + | db.date + | db.emphasis + | db.footnote + | db.footnoteref + | db.foreignphrase + | db.phrase + | db.quote + | db.revnumber + | db.subscript + | db.superscript + | db.wordasword) + | db.glossary.inlines + | db.coref +db.graphic.inlines = db.inlinemediaobject +db.indexing.inlines = notAllowed | db.indexterm +db.link.inlines = + (db.xref | db.link | db.olink | db.anchor) | db.biblioref +db.extension.inlines = notAllowed +db.nopara.blocks = + (db.list.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.indexterm + | db.synopsis.blocks + | db.admonition.blocks +db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara +db.all.blocks = + (db.nopara.blocks | db.para.blocks | db.extension.blocks) + | db.annotation +db.wrapper.blocks = db.formalgroup +db.formal.blocks = (db.example | db.figure | db.table) | db.equation +db.informal.blocks = + (db.informalexample | db.informalfigure | db.informaltable) + | db.informalequation +db.publishing.blocks = + db.sidebar | db.blockquote | db.address | db.epigraph +db.graphic.blocks = db.mediaobject | db.screenshot +db.technical.blocks = + db.procedure + | db.task + | (db.productionset | db.constraintdef) + | db.msgset +db.list.blocks = + (db.itemizedlist + | db.orderedlist + | db.procedure + | db.simplelist + | db.variablelist + | db.segmentedlist) + | db.glosslist + | db.bibliolist + | db.calloutlist + | db.qandaset +db.verbatim.blocks = + (db.screen | db.literallayout) + | (db.programlistingco | db.screenco) + | (db.programlisting | db.synopsis) +db.extension.blocks = notAllowed +db.info.extension = db._any +db.info.elements = + (db.abstract + | db.address + | db.artpagenums + | db.author + | db.authorgroup + | db.authorinitials + | db.bibliocoverage + | db.biblioid + | db.bibliosource + | db.collab + | db.confgroup + | db.contractsponsor + | db.contractnum + | db.copyright + | db.cover + | db.date + | db.edition + | db.editor + | db.issuenum + | 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.meta + | db.info.extension) + | db.annotation + | db.extendedlink + | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset) + | db.itermset + | (db.productname | db.productnumber) +db.bibliographic.elements = + db.info.elements + | db.publishing.inlines + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.person + | db.personblurb + | db.personname + | db.subtitle + | db.title + | db.titleabbrev +div { + db.title.role.attribute = attribute role { text } + db.title.attlist = + db.title.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.title = + + ## The text of the title of a section of a document or of a formal block-level element + element title { db.title.attlist, db.all.inlines* } +} +div { + db.titleabbrev.role.attribute = attribute role { text } + db.titleabbrev.attlist = + db.titleabbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.titleabbrev = + + ## The abbreviation of a title + element titleabbrev { db.titleabbrev.attlist, db.all.inlines* } +} +div { + db.subtitle.role.attribute = attribute role { text } + db.subtitle.attlist = + db.subtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subtitle = + + ## The subtitle of a document + element subtitle { db.subtitle.attlist, db.all.inlines* } +} +div { + db.info.role.attribute = attribute role { text } + db.info.attlist = db.info.role.attribute? & db.common.attributes + db.info = + + ## A wrapper for information about a component or other block + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.info.attlist, (db._title & db.info.elements*) } +} +div { + db.titlereq.info.role.attribute = attribute role { text } + db.titlereq.info.attlist = + db.titlereq.info.role.attribute? & db.common.attributes + db.titlereq.info = + + ## A wrapper for information about a component or other block with a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titlereq.info.attlist, (db._title.req & db.info.elements*) + } +} +div { + db.titleonly.info.role.attribute = attribute role { text } + db.titleonly.info.attlist = + db.titleonly.info.role.attribute? & db.common.attributes + db.titleonly.info = + + ## A wrapper for information about a component or other block with only a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonly.info.attlist, (db._title.only & db.info.elements*) + } +} +div { + db.titleonlyreq.info.role.attribute = attribute role { text } + db.titleonlyreq.info.attlist = + db.titleonlyreq.info.role.attribute? & db.common.attributes + db.titleonlyreq.info = + + ## A wrapper for information about a component or other block with only a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonlyreq.info.attlist, + (db._title.onlyreq & db.info.elements*) + } +} +div { + db.titleforbidden.info.role.attribute = attribute role { text } + db.titleforbidden.info.attlist = + db.titleforbidden.info.role.attribute? & db.common.attributes + db.titleforbidden.info = + + ## A wrapper for information about a component or other block without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.titleforbidden.info.attlist, db.info.elements* } +} +div { + db.subjectset.role.attribute = attribute role { text } + db.subjectset.scheme.attribute = + + ## Identifies the controlled vocabulary used by this set's terms + attribute scheme { xsd:NMTOKEN } + db.subjectset.attlist = + db.subjectset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subjectset.scheme.attribute? + db.subjectset = + + ## A set of terms describing the subject matter of a document + element subjectset { db.subjectset.attlist, db.subject+ } +} +div { + db.subject.role.attribute = attribute role { text } + db.subject.weight.attribute = + + ## Specifies a ranking for this subject relative to other subjects in the same set + attribute weight { text } + db.subject.attlist = + db.subject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subject.weight.attribute? + db.subject = + + ## One of a group of terms describing the subject matter of a document + element subject { db.subject.attlist, db.subjectterm+ } +} +div { + db.subjectterm.role.attribute = attribute role { text } + db.subjectterm.attlist = + db.subjectterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subjectterm = + + ## A term in a group of terms describing the subject matter of a document + element subjectterm { db.subjectterm.attlist, text } +} +div { + db.keywordset.role.attribute = attribute role { text } + db.keywordset.attlist = + db.keywordset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keywordset = + + ## A set of keywords describing the content of a document + element keywordset { db.keywordset.attlist, db.keyword+ } +} +div { + db.keyword.role.attribute = attribute role { text } + db.keyword.attlist = + db.keyword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keyword = + + ## One of a set of keywords describing the content of a document + element keyword { db.keyword.attlist, text } +} +db.table.choice = notAllowed | db.cals.table | db.html.table +db.informaltable.choice = + notAllowed | db.cals.informaltable | db.html.informaltable +db.table = db.table.choice +db.informaltable = db.informaltable.choice +div { + db.procedure.role.attribute = attribute role { text } + db.procedure.type.attribute = + + ## Identifies the type of procedure + attribute type { text }? + db.procedure.attlist = + db.procedure.role.attribute? + & db.procedure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + db.procedure.info = db._info.title.only + db.procedure = + + ## A list of operations to be performed in a well-defined sequence + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:procedure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element procedure { + db.procedure.attlist, + db.procedure.info, + db.all.blocks*, + db.step+, + db.result? + } +} +div { + db.step.role.attribute = attribute role { text } + db.step.attlist = + db.step.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.step.info = db._info.title.only + # This content model is blocks*, step|stepalternatives, blocks* but + # expressed this way it avoids UPA issues in XSD and DTD versions + db.step = + + ## A unit of action in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:step" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element step { + db.step.attlist, + db.step.info, + ((db.all.blocks+, + ((db.substeps | db.stepalternatives), db.all.blocks*)?, + db.result?) + | ((db.substeps | db.stepalternatives), + db.all.blocks*, + db.result?)) + } +} +div { + db.stepalternatives.role.attribute = attribute role { text } + db.stepalternatives.attlist = + db.stepalternatives.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.stepalternatives.info = db._info.title.forbidden + db.stepalternatives = + + ## Alternative steps in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:stepalternatives" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element stepalternatives { + db.stepalternatives.attlist, db.stepalternatives.info, db.step+ + } +} +div { + db.substeps.role.attribute = attribute role { text } + db.substeps.attlist = + db.substeps.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.substeps = + + ## A wrapper for steps that occur within steps in a procedure + element substeps { db.substeps.attlist, db.step+ } +} +div { + db.result.role.attribute = attribute role { text } + db.result.attlist = + db.result.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.result = + + ## A wrapper for identifying the results of a procedure or step + element result { db.result.attlist, db.all.blocks+ } +} +div { + db.sidebar.floatstyle.attribute = db.floatstyle.attribute + db.sidebar.role.attribute = attribute role { text } + db.sidebar.attlist = + db.sidebar.role.attribute? + & db.sidebar.floatstyle.attribute? + & db.common.attributes + & db.common.linking.attributes + db.sidebar.info = db._info + db.sidebar = + + ## A portion of a document that is isolated from the main narrative flow + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:sidebar" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of sidebar" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sidebar" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sidebar { + db.sidebar.attlist, db.sidebar.info, db.all.blocks+ + } +} +div { + db.abstract.role.attribute = attribute role { text } + db.abstract.attlist = + db.abstract.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abstract.info = db._info.title.only + db.abstract = + + ## A summary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:abstract" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element abstract { + db.abstract.attlist, db.abstract.info, db.all.blocks+ + } +} +div { + db.personblurb.role.attribute = attribute role { text } + db.personblurb.attlist = + db.personblurb.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personblurb.info = db._info.title.only + db.personblurb = + + ## A short description or note about a person + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:personblurb" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element personblurb { + db.personblurb.attlist, db.personblurb.info, db.para.blocks+ + } +} +div { + db.blockquote.role.attribute = attribute role { text } + db.blockquote.attlist = + db.blockquote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.blockquote.info = db._info.title.only + db.blockquote = + + ## A quotation set off from the main text + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:blockquote" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element blockquote { + db.blockquote.attlist, + db.blockquote.info, + db.attribution?, + db.all.blocks+ + } +} +div { + db.attribution.role.attribute = attribute role { text } + db.attribution.attlist = + db.attribution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.attribution = + + ## The source of a block quote or epigraph + element attribution { + db.attribution.attlist, + (db._text + | db.person + | db.personname + | db.citetitle + | db.citation)* + } +} +div { + db.bridgehead.renderas.enumeration = + + ## Render as a first-level section + "sect1" + | + ## Render as a second-level section + "sect2" + | + ## Render as a third-level section + "sect3" + | + ## Render as a fourth-level section + "sect4" + | + ## Render as a fifth-level section + "sect5" + db.bridgehead.renderas-enum.attribute = + + ## Indicates how the bridge head should be rendered + attribute renderas { db.bridgehead.renderas.enumeration }? + db.bridgehead.renderas-other.attribute = + + ## Identifies the nature of the non-standard rendering + attribute otherrenderas { xsd:NMTOKEN } + db.bridgehead.renderas-other.attributes = + + ## Indicates how the bridge head should be rendered + attribute renderas { + + ## Identifies a non-standard rendering + "other" + } + & db.bridgehead.renderas-other.attribute + db.bridgehead.renderas.attribute = + db.bridgehead.renderas-enum.attribute + | db.bridgehead.renderas-other.attributes + db.bridgehead.role.attribute = attribute role { text } + db.bridgehead.attlist = + db.bridgehead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bridgehead.renderas.attribute? + db.bridgehead = + + ## A free-floating heading + element bridgehead { db.bridgehead.attlist, db.all.inlines* } +} +div { + db.remark.role.attribute = attribute role { text } + db.remark.attlist = + db.remark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.remark = + + ## A remark (or comment) intended for presentation in a draft manuscript + element remark { db.remark.attlist, db.all.inlines* } +} +div { + db.epigraph.role.attribute = attribute role { text } + db.epigraph.attlist = + db.epigraph.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.epigraph.info = db._info.title.forbidden + db.epigraph = + + ## A short inscription at the beginning of a document or component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:epigraph" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element epigraph { + db.epigraph.attlist, + db.epigraph.info, + db.attribution?, + (db.para.blocks | db.literallayout)+ + } +} +div { + db.footnote.role.attribute = attribute role { text } + db.footnote.label.attribute = + + ## Identifies the desired footnote mark + attribute label { xsd:NMTOKEN } + db.footnote.attlist = + db.footnote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.footnote.label.attribute? + db.footnote = + + ## A footnote + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:footnote)" + "footnote must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:epigraph)" + "epigraph must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of footnote" + ] + ] + ] + ] + element footnote { db.footnote.attlist, db.all.blocks+ } +} +div { + db.formalpara.role.attribute = attribute role { text } + db.formalpara.attlist = + db.formalpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.formalpara.info = db._info.title.onlyreq + db.formalpara = + + ## A paragraph with a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalpara { + db.formalpara.attlist, + db.formalpara.info, + db.indexing.inlines*, + db.para + } +} +div { + db.para.role.attribute = attribute role { text } + db.para.attlist = + db.para.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.para.info = db._info.title.forbidden + db.para = + + ## A paragraph + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:para" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element para { + db.para.attlist, + db.para.info, + (db.all.inlines | db.nopara.blocks)* + } +} +div { + db.simpara.role.attribute = attribute role { text } + db.simpara.attlist = + db.simpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.simpara.info = db._info.title.forbidden + db.simpara = + + ## A paragraph that contains only text and inline markup, no block elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simpara { + db.simpara.attlist, db.simpara.info, db.all.inlines* + } +} +div { + db.itemizedlist.role.attribute = attribute role { text } + db.itemizedlist.mark.attribute = + + ## Identifies the type of mark to be used on items in this list + attribute mark { xsd:NMTOKEN } + db.itemizedlist.attlist = + db.itemizedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.itemizedlist.mark.attribute? + db.itemizedlist.info = db._info.title.only + db.itemizedlist = + + ## A list in which each entry is marked with a bullet or other dingbat + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:itemizedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element itemizedlist { + db.itemizedlist.attlist, + db.itemizedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.orderedlist.role.attribute = attribute role { text } + db.orderedlist.continuation.enumeration = + + ## Specifies that numbering should begin where the preceding list left off + "continues" + | + ## Specifies that numbering should begin again at 1 + "restarts" + db.orderedlist.continuation.attribute = + + ## Indicates how list numbering should begin relative to the immediately preceding list + attribute continuation { db.orderedlist.continuation.enumeration } + db.orderedlist.startingnumber.attribute = + + ## Specifies the initial line number + attribute startingnumber { xsd:integer } + db.orderedlist.inheritnum.enumeration = + + ## Specifies that numbering should ignore list nesting + "ignore" + | + ## Specifies that numbering should inherit from outer-level lists + "inherit" + db.orderedlist.inheritnum.attribute = + + ## Indicates whether or not item numbering should be influenced by list nesting + attribute inheritnum { db.orderedlist.inheritnum.enumeration } + db.orderedlist.numeration.enumeration = + + ## Specifies Arabic numeration (1, 2, 3, …) + "arabic" + | + ## Specifies upper-case alphabetic numeration (A, B, C, …) + "upperalpha" + | + ## Specifies lower-case alphabetic numeration (a, b, c, …) + "loweralpha" + | + ## Specifies upper-case Roman numeration (I, II, III, …) + "upperroman" + | + ## Specifies lower-case Roman numeration (i, ii, iii …) + "lowerroman" + db.orderedlist.numeration.attribute = + + ## Indicates the desired numeration + attribute numeration { db.orderedlist.numeration.enumeration } + db.orderedlist.attlist = + db.orderedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & (db.orderedlist.continuation.attribute + | db.orderedlist.startingnumber.attribute)? + & db.orderedlist.inheritnum.attribute? + & db.orderedlist.numeration.attribute? + db.orderedlist.info = db._info.title.only + db.orderedlist = + + ## A list in which each entry is marked with a sequentially incremented label + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:orderedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element orderedlist { + db.orderedlist.attlist, + db.orderedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.listitem.role.attribute = attribute role { text } + db.listitem.override.attribute = + + ## Specifies the keyword for the type of mark that should be used on this + ## item, instead of the mark that would be used by default + attribute override { xsd:NMTOKEN } + db.listitem.attlist = + db.listitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.listitem.override.attribute? + db.listitem.info = db._info.title.forbidden + db.listitem = + + ## A wrapper for the elements of a list item + element listitem { + db.listitem.attlist, db.listitem.info, db.all.blocks+ + } +} +div { + db.segmentedlist.role.attribute = attribute role { text } + db.segmentedlist.attlist = + db.segmentedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segmentedlist.info = db._info.title.only + db.segmentedlist = + + ## A segmented list, a list of sets of elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:segmentedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element segmentedlist { + db.segmentedlist.attlist, + db.segmentedlist.info, + db.segtitle+, + db.seglistitem+ + } +} +div { + db.segtitle.role.attribute = attribute role { text } + db.segtitle.attlist = + db.segtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segtitle = + + ## The title of an element of a list item in a segmented list + element segtitle { db.segtitle.attlist, db.all.inlines* } +} +div { + db.seglistitem.role.attribute = attribute role { text } + db.seglistitem.attlist = + db.seglistitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seglistitem = + + ## A list item in a segmented list + [ + s:pattern [ + s:title [ "Cardinality of segments and titles" ] + s:rule [ + context = "db:seglistitem" + s:assert [ + test = "count(db:seg) = count(../db:segtitle)" + "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist" + ] + ] + ] + ] + element seglistitem { db.seglistitem.attlist, db.seg+ } +} +div { + db.seg.role.attribute = attribute role { text } + db.seg.attlist = + db.seg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seg = + + ## An element of a list item in a segmented list + element seg { db.seg.attlist, db.all.inlines* } +} +div { + db.simplelist.role.attribute = attribute role { text } + db.simplelist.type.enumeration = + + ## A tabular presentation in row-major order. + "horiz" + | + ## A tabular presentation in column-major order. + "vert" + | + ## An inline presentation, usually a comma-delimited list. + "inline" + db.simplelist.type.attribute = + + ## Specifies the type of list presentation + [ a:defaultValue = "vert" ] + attribute type { db.simplelist.type.enumeration } + db.simplelist.columns.attribute = + + ## Specifies the number of columns for horizontal or vertical presentation + attribute columns { xsd:integer } + db.simplelist.attlist = + db.simplelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplelist.type.attribute? + & db.simplelist.columns.attribute? + db.simplelist = + + ## An undecorated list of single words or short phrases + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplelist { db.simplelist.attlist, db.member+ } +} +div { + db.member.role.attribute = attribute role { text } + db.member.attlist = + db.member.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.member = + + ## An element of a simple list + element member { db.member.attlist, db.all.inlines* } +} +div { + db.variablelist.role.attribute = attribute role { text } + db.variablelist.termlength.attribute = + + ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + attribute termlength { text } + db.variablelist.attlist = + db.variablelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.variablelist.termlength.attribute? + db.variablelist.info = db._info.title.only + db.variablelist = + + ## A list in which each entry is composed of a set of one or more terms and an associated description + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:variablelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element variablelist { + db.variablelist.attlist, + db.variablelist.info, + db.all.blocks*, + db.varlistentry+ + } +} +div { + db.varlistentry.role.attribute = attribute role { text } + db.varlistentry.attlist = + db.varlistentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varlistentry = + + ## A wrapper for a set of terms and the associated description in a variable list + element varlistentry { + db.varlistentry.attlist, db.term+, db.listitem + } +} +div { + db.term.role.attribute = attribute role { text } + db.term.attlist = + db.term.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.term = + + ## The word or phrase being defined or described in a variable list + element term { db.term.attlist, db.all.inlines* } +} +div { + db.example.role.attribute = attribute role { text } + db.example.label.attribute = db.label.attribute + db.example.width.attribute = db.width.characters.attribute + db.example.pgwide.attribute = db.pgwide.attribute + db.example.floatstyle.attribute = db.floatstyle.attribute + db.example.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.example.attlist = + db.example.role.attribute? + & db.example.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.example.label.attribute? + & db.example.floatstyle.attribute? + & (db.example.width.attribute | db.example.pgwide.attribute)? + db.example.info = db._info.title.onlyreq + db.example = + + ## A formal example, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:example" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element example { + db.example.attlist, db.example.info, db.all.blocks+, db.caption? + } +} +div { + db.informalexample.role.attribute = attribute role { text } + db.informalexample.width.attribute = db.width.characters.attribute + db.informalexample.pgwide.attribute = db.pgwide.attribute + db.informalexample.floatstyle.attribute = db.floatstyle.attribute + db.informalexample.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.informalexample.attlist = + db.informalexample.role.attribute? + & db.informalexample.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalexample.floatstyle.attribute? + & (db.informalexample.width.attribute + | db.informalexample.pgwide.attribute)? + db.informalexample.info = db._info.title.forbidden + db.informalexample = + + ## A displayed example without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalexample" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalexample { + db.informalexample.attlist, + db.informalexample.info, + db.all.blocks+, + db.caption? + } +} +db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co +db.verbatim.contentmodel = + db._info.title.forbidden, (db.textobject | db.verbatim.inlines*) +div { + db.literallayout.role.attribute = attribute role { text } + db.literallayout.class.enumeration = + + ## The literal layout should be formatted with a monospaced font + "monospaced" + | + ## The literal layout should be formatted with the current font + "normal" + db.literallayout.class.attribute = + + ## Specifies the class of literal layout + attribute class { db.literallayout.class.enumeration } + db.literallayout.attlist = + db.literallayout.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.literallayout.class.attribute? + db.literallayout = + + ## A block of text in which line breaks and white space are to be reproduced faithfully + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:literallayout" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element literallayout { + db.literallayout.attlist, db.verbatim.contentmodel + } +} +div { + db.screen.role.attribute = attribute role { text } + db.screen.width.attribute = db.width.characters.attribute + db.screen.attlist = + db.screen.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.screen.width.attribute? + db.screen = + + ## Text that a user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screen" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screen { db.screen.attlist, db.verbatim.contentmodel } +} +div { + db.screenshot.role.attribute = attribute role { text } + db.screenshot.attlist = + db.screenshot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenshot.info = db._info + db.screenshot = + + ## A representation of what the user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenshot" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenshot { + db.screenshot.attlist, db.screenshot.info, db.mediaobject + } +} +div { + db.figure.role.attribute = attribute role { text } + db.figure.label.attribute = db.label.attribute + db.figure.pgwide.attribute = db.pgwide.attribute + db.figure.floatstyle.attribute = db.floatstyle.attribute + db.figure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.figure.attlist = + db.figure.role.attribute? + & db.figure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.figure.label.attribute? + & db.figure.pgwide.attribute? + & db.figure.floatstyle.attribute? + db.figure.info = db._info.title.onlyreq + db.figure = + + ## A formal figure, generally an illustration, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:figure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element figure { + db.figure.attlist, db.figure.info, db.all.blocks+, db.caption? + } +} +div { + db.informalfigure.role.attribute = attribute role { text } + db.informalfigure.label.attribute = db.label.attribute + db.informalfigure.pgwide.attribute = db.pgwide.attribute + db.informalfigure.floatstyle.attribute = db.floatstyle.attribute + db.informalfigure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.informalfigure.attlist = + db.informalfigure.role.attribute? + & db.informalfigure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalfigure.label.attribute? + & db.informalfigure.pgwide.attribute? + & db.informalfigure.floatstyle.attribute? + db.informalfigure.info = db._info.title.forbidden + db.informalfigure = + + ## A untitled figure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalfigure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalfigure { + db.informalfigure.attlist, + db.informalfigure.info, + db.all.blocks+, + db.caption? + } +} +db.mediaobject.content = + (db.videoobject | db.audioobject | db.imageobject | db.textobject) + | db.imageobjectco +div { + db.mediaobject.role.attribute = attribute role { text } + db.mediaobject.attlist = + db.mediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mediaobject.info = db._info.title.forbidden + db.mediaobject = + + ## A displayed media object (video, audio, image, etc.) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:mediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element mediaobject { + db.mediaobject.attlist, + db.mediaobject.info, + db.alt?, + db.mediaobject.content+, + db.caption? + } +} +div { + db.inlinemediaobject.role.attribute = attribute role { text } + db.inlinemediaobject.attlist = + db.inlinemediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlinemediaobject.info = db._info.title.forbidden + db.inlinemediaobject = + + ## An inline media object (video, audio, image, and so on) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:inlinemediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element inlinemediaobject { + db.inlinemediaobject.attlist, + db.inlinemediaobject.info, + db.alt?, + db.mediaobject.content+ + } +} +div { + db.videoobject.role.attribute = attribute role { text } + db.videoobject.attlist = + db.videoobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.videoobject.info = db._info.title.forbidden + db.videoobject = + + ## A wrapper for video data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videoobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videoobject { + db.videoobject.attlist, db.videoobject.info, db.videodata+ + } +} +div { + db.audioobject.role.attribute = attribute role { text } + db.audioobject.attlist = + db.audioobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.audioobject.info = db._info.title.forbidden + db.audioobject = + + ## A wrapper for audio data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audioobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audioobject { + db.audioobject.attlist, db.audioobject.info, db.audiodata+ + } +} +db.imageobject.content = + db.imagedata+ | db.imagedata.mathml | db.imagedata.svg+ +div { + db.imageobject.role.attribute = attribute role { text } + db.imageobject.attlist = + db.imageobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobject.info = db._info.title.forbidden + db.imageobject = + + ## A wrapper for image data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobject { + db.imageobject.attlist, + db.imageobject.info, + db.imageobject.content + } +} +div { + db.textobject.role.attribute = attribute role { text } + db.textobject.attlist = + db.textobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.textobject.info = db._info.title.forbidden + db.textobject = + + ## A wrapper for a text description of an object and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textobject { + db.textobject.attlist, + db.textobject.info, + (db.phrase | db.textdata | db.all.blocks+) + } +} +div { + db.videodata.role.attribute = attribute role { text } + db.videodata.align.enumeration = db.halign.enumeration + db.videodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.videodata.align.enumeration } + db.videodata.autoplay.attribute = db.autoplay.attribute + db.videodata.classid.attribute = db.classid.attribute + db.videodata.valign.enumeration = db.valign.enumeration + db.videodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.videodata.valign.enumeration } + db.videodata.width.attribute = db.width.attribute + db.videodata.depth.attribute = db.depth.attribute + db.videodata.contentwidth.attribute = db.contentwidth.attribute + db.videodata.contentdepth.attribute = db.contentdepth.attribute + db.videodata.scalefit.enumeration = db.scalefit.enumeration + db.videodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.videodata.scalefit.enumeration } + db.videodata.scale.attribute = db.scale.attribute + db.videodata.attlist = + db.videodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.videodata.align.attribute? + & db.videodata.valign.attribute? + & db.videodata.width.attribute? + & db.videodata.contentwidth.attribute? + & db.videodata.scalefit.attribute? + & db.videodata.scale.attribute? + & db.videodata.depth.attribute? + & db.videodata.contentdepth.attribute? + & db.videodata.autoplay.attribute? + & db.videodata.classid.attribute? + db.videodata.info = db._info.title.forbidden + db.videodata = + + ## Pointer to external video data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videodata { + db.videodata.attlist, db.videodata.info, db.multimediaparam* + } +} +div { + db.audiodata.role.attribute = attribute role { text } + db.audiodata.align.enumeration = db.halign.enumeration + db.audiodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.audiodata.align.enumeration } + db.audiodata.autoplay.attribute = db.autoplay.attribute + db.audiodata.classid.attribute = db.classid.attribute + db.audiodata.contentwidth.attribute = db.contentwidth.attribute + db.audiodata.contentdepth.attribute = db.contentdepth.attribute + db.audiodata.depth.attribute = db.depth.attribute + db.audiodata.scale.attribute = db.scale.attribute + db.audiodata.scalefit.enumeration = db.scalefit.enumeration + db.audiodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.audiodata.scalefit.enumeration } + db.audiodata.valign.enumeration = db.valign.enumeration + db.audiodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.audiodata.valign.enumeration } + db.audiodata.width.attribute = db.width.attribute + db.audiodata.attlist = + db.audiodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.audiodata.align.attribute? + & db.audiodata.autoplay.attribute? + & db.audiodata.classid.attribute? + & db.audiodata.contentdepth.attribute? + & db.audiodata.contentwidth.attribute? + & db.audiodata.depth.attribute? + & db.audiodata.scale.attribute? + & db.audiodata.scalefit.attribute? + & db.audiodata.valign.attribute? + & db.audiodata.width.attribute? + db.audiodata.info = db._info.title.forbidden + db.audiodata = + + ## Pointer to external audio data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audiodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audiodata { + db.audiodata.attlist, db.audiodata.info, db.multimediaparam* + } +} +div { + db.imagedata.role.attribute = attribute role { text } + db.imagedata.align.enumeration = db.halign.enumeration + db.imagedata.align.attribute = + + ## Specifies the (horizontal) alignment of the image data + attribute align { db.imagedata.align.enumeration } + db.imagedata.valign.enumeration = db.valign.enumeration + db.imagedata.valign.attribute = + + ## Specifies the vertical alignment of the image data + attribute valign { db.imagedata.valign.enumeration } + db.imagedata.width.attribute = db.width.attribute + db.imagedata.depth.attribute = db.depth.attribute + db.imagedata.contentwidth.attribute = db.contentwidth.attribute + db.imagedata.contentdepth.attribute = db.contentdepth.attribute + db.imagedata.scalefit.enumeration = db.scalefit.enumeration + db.imagedata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.imagedata.scalefit.enumeration } + db.imagedata.scale.attribute = db.scale.attribute + db.imagedata.attlist = + db.imagedata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.info = db._info.title.forbidden + db.imagedata = + + ## Pointer to external image data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.attlist, db.imagedata.info, db.multimediaparam* + } +} +div { + db.textdata.role.attribute = attribute role { text } + db.textdata.encoding.attribute = + + ## Identifies the encoding of the text in the external file + attribute encoding { text } + db.textdata.attlist = + db.textdata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.textdata.encoding.attribute? + db.textdata.info = db._info.title.forbidden + db.textdata = + + ## Pointer to external text data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textdata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textdata { db.textdata.attlist, db.textdata.info } +} +div { + db.multimediaparam.role.attribute = attribute role { text } + db.multimediaparam.name.attribute = + + ## Specifies the name of the parameter + attribute name { text } + db.multimediaparam.value.attribute = + + ## Specifies the value of the parameter + attribute value { text } + db.multimediaparam.valuetype.attribute = + + ## Specifies the type of the value of the parameter + attribute valuetype { text } + db.multimediaparam.attlist = + db.multimediaparam.role.attribute? + & db.common.attributes + & db.multimediaparam.name.attribute + & db.multimediaparam.value.attribute + & db.multimediaparam.valuetype.attribute? + db.multimediaparam = + + ## Application specific parameters for a media player + element multimediaparam { db.multimediaparam.attlist, empty } +} +div { + db.caption.role.attribute = attribute role { text } + db.caption.attlist = + db.caption.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caption.info = db._info.title.forbidden + db.caption = + + ## A caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { + db.caption.attlist, db.caption.info, db.all.blocks+ + } +} +div { + db.address.role.attribute = attribute role { text } + db.address.attlist = + db.address.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.address = + + ## A real-world address, generally a postal address + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:address" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element address { + db.address.attlist, + (db._text + | db.personname + | db.orgname + | db.pob + | db.street + | db.city + | db.state + | db.postcode + | db.country + | db.phone + | db.fax + | db.email + | db.uri + | db.otheraddr)* + } +} +div { + db.street.role.attribute = attribute role { text } + db.street.attlist = + db.street.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.street = + + ## A street address in an address + element street { db.street.attlist, db._text } +} +div { + db.pob.role.attribute = attribute role { text } + db.pob.attlist = + db.pob.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pob = + + ## A post office box in an address + element pob { db.pob.attlist, db._text } +} +div { + db.postcode.role.attribute = attribute role { text } + db.postcode.attlist = + db.postcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.postcode = + + ## A postal code in an address + element postcode { db.postcode.attlist, db._text } +} +div { + db.city.role.attribute = attribute role { text } + db.city.attlist = + db.city.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.city = + + ## The name of a city in an address + element city { db.city.attlist, db._text } +} +div { + db.state.role.attribute = attribute role { text } + db.state.attlist = + db.state.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.state = + + ## A state or province in an address + element state { db.state.attlist, db._text } +} +div { + db.country.role.attribute = attribute role { text } + db.country.attlist = + db.country.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.country = + + ## The name of a country + element country { db.country.attlist, db._text } +} +div { + db.phone.role.attribute = attribute role { text } + db.phone.attlist = + db.phone.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.phone = + + ## A telephone number + element phone { db.phone.attlist, db._text } +} +div { + db.fax.role.attribute = attribute role { text } + db.fax.attlist = + db.fax.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.fax = + + ## A fax number + element fax { db.fax.attlist, db._text } +} +div { + db.otheraddr.role.attribute = attribute role { text } + db.otheraddr.attlist = + db.otheraddr.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.otheraddr = + + ## Uncategorized information in address + element otheraddr { db.otheraddr.attlist, db._text } +} +div { + db.affiliation.role.attribute = attribute role { text } + db.affiliation.attlist = + db.affiliation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.affiliation = + + ## The institutional affiliation of an individual + element affiliation { + db.affiliation.attlist, + db.shortaffil?, + db.jobtitle*, + (db.org? | (db.orgname?, db.orgdiv*, db.address*)) + } +} +div { + db.shortaffil.role.attribute = attribute role { text } + db.shortaffil.attlist = + db.shortaffil.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.shortaffil = + + ## A brief description of an affiliation + element shortaffil { db.shortaffil.attlist, db._text } +} +div { + db.jobtitle.role.attribute = attribute role { text } + db.jobtitle.attlist = + db.jobtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.jobtitle = + + ## The title of an individual in an organization + element jobtitle { db.jobtitle.attlist, db._text } +} +div { + db.orgname.class.enumeration = + + ## A consortium + "consortium" + | + ## A corporation + "corporation" + | + ## An informal organization + "informal" + | + ## A non-profit organization + "nonprofit" + db.orgname.class-enum.attribute = + + ## Specifies the nature of the organization + attribute class { db.orgname.class.enumeration } + db.orgname.class-other.attributes = + + ## Specifies the nature of the organization + attribute class { + + ## Indicates a non-standard organization class + "other" + }, + + ## Identifies the non-standard nature of the organization + attribute otherclass { text } + db.orgname.class.attribute = + db.orgname.class-enum.attribute | db.orgname.class-other.attributes + db.orgname.role.attribute = attribute role { text } + db.orgname.attlist = + db.orgname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.orgname.class.attribute? + db.orgname = + + ## The name of an organization + element orgname { db.orgname.attlist, db._text } +} +div { + db.orgdiv.role.attribute = attribute role { text } + db.orgdiv.attlist = + db.orgdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.orgdiv = + + ## A division of an organization + element orgdiv { db.orgdiv.attlist, db.all.inlines* } +} +div { + db.artpagenums.role.attribute = attribute role { text } + db.artpagenums.attlist = + db.artpagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.artpagenums = + + ## The page numbers of an article as published + element artpagenums { db.artpagenums.attlist, db._text } +} +div { + db.personname.role.attribute = attribute role { text } + db.personname.attlist = + db.personname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personname = + + ## The personal name of an individual + element personname { + db.personname.attlist, + (db._text + | (db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername)+ + | (db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername)+) + } +} +db.person.author.contentmodel = + db.personname, + (db.personblurb + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.org.author.contentmodel = + db.orgname, + (db.orgdiv + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.credit.contentmodel = + db.person.author.contentmodel | db.org.author.contentmodel +div { + db.author.role.attribute = attribute role { text } + db.author.attlist = + db.author.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.author = + + ## The name of an individual author + element author { db.author.attlist, db.credit.contentmodel } +} +div { + db.authorgroup.role.attribute = attribute role { text } + db.authorgroup.attlist = + db.authorgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorgroup = + + ## Wrapper for author information when a document has multiple authors or collaborators + element authorgroup { + db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+ + } +} +div { + db.collab.role.attribute = attribute role { text } + db.collab.attlist = + db.collab.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.collab = + + ## Identifies a collaborator + element collab { + db.collab.attlist, + (db.person | db.personname | db.org | db.orgname)+, + db.affiliation* + } +} +div { + db.authorinitials.role.attribute = attribute role { text } + db.authorinitials.attlist = + db.authorinitials.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorinitials = + + ## The initials or other short identifier for an author + element authorinitials { db.authorinitials.attlist, db._text } +} +div { + db.person.role.attribute = attribute role { text } + db.person.attlist = + db.person.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.person = + + ## A person and associated metadata + element person { + db.person.attlist, + db.personname, + (db.address + | db.affiliation + | db.email + | db.uri + | db.personblurb)* + } +} +div { + db.org.role.attribute = attribute role { text } + db.org.attlist = + db.org.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.org = + + ## An organization and associated metadata + element org { + db.org.attlist, + db.orgname, + (db.address | db.affiliation | db.email | db.uri | db.orgdiv)* + } +} +div { + db.confgroup.role.attribute = attribute role { text } + db.confgroup.attlist = + db.confgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confgroup = + + ## A wrapper for document meta-information about a conference + element confgroup { + db.confgroup.attlist, + (db.confdates + | db.conftitle + | db.confnum + | db.confsponsor + | db.address)* + } +} +div { + db.confdates.role.attribute = attribute role { text } + db.confdates.attlist = + db.confdates.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confdates = + + ## The dates of a conference for which a document was written + element confdates { db.confdates.attlist, db._text } +} +div { + db.conftitle.role.attribute = attribute role { text } + db.conftitle.attlist = + db.conftitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.conftitle = + + ## The title of a conference for which a document was written + element conftitle { db.conftitle.attlist, db._text } +} +div { + db.confnum.role.attribute = attribute role { text } + db.confnum.attlist = + db.confnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confnum = + + ## An identifier, frequently numerical, associated with a conference for which a document was written + element confnum { db.confnum.attlist, db._text } +} +div { + db.confsponsor.role.attribute = attribute role { text } + db.confsponsor.attlist = + db.confsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confsponsor = + + ## The sponsor of a conference for which a document was written + element confsponsor { db.confsponsor.attlist, db._text } +} +div { + db.contractnum.role.attribute = attribute role { text } + db.contractnum.attlist = + db.contractnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractnum = + + ## The contract number of a document + element contractnum { db.contractnum.attlist, db._text } +} +div { + db.contractsponsor.role.attribute = attribute role { text } + db.contractsponsor.attlist = + db.contractsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractsponsor = + + ## The sponsor of a contract + element contractsponsor { db.contractsponsor.attlist, db._text } +} +div { + db.copyright.role.attribute = attribute role { text } + db.copyright.attlist = + db.copyright.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.copyright = + + ## Copyright information about a document + element copyright { db.copyright.attlist, db.year+, db.holder* } +} +div { + db.year.role.attribute = attribute role { text } + db.year.attlist = + db.year.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.year = + + ## The year of publication of a document + element year { db.year.attlist, db._text } +} +div { + db.holder.role.attribute = attribute role { text } + db.holder.attlist = + db.holder.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.holder = + + ## The name of the individual or organization that holds a copyright + element holder { db.holder.attlist, db._text } +} +db.cover.contentmodel = + (db.para.blocks + | db.extension.blocks + | db.list.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.synopsis.blocks +div { + db.cover.role.attribute = attribute role { text } + db.cover.attlist = + db.cover.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.cover = + + ## Additional content for the cover of a publication + element cover { db.cover.attlist, db.cover.contentmodel+ } +} +db.date.contentmodel = + xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text +div { + db.date.role.attribute = attribute role { text } + db.date.attlist = + db.date.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.date = + + ## The date of publication or revision of a document + element date { db.date.attlist, db.date.contentmodel } +} +div { + db.edition.role.attribute = attribute role { text } + db.edition.attlist = + db.edition.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.edition = + + ## The name or number of an edition of a document + element edition { db.edition.attlist, db._text } +} +div { + db.editor.role.attribute = attribute role { text } + db.editor.attlist = + db.editor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.editor = + + ## The name of the editor of a document + element editor { db.editor.attlist, db.credit.contentmodel } +} +div { + db.biblioid.role.attribute = attribute role { text } + db.biblioid.attlist = + db.biblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.biblioid = + + ## An identifier for a document + element biblioid { db.biblioid.attlist, db._text } +} +div { + db.citebiblioid.role.attribute = attribute role { text } + db.citebiblioid.attlist = + db.citebiblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.citebiblioid = + + ## A citation of a bibliographic identifier + element citebiblioid { db.citebiblioid.attlist, db._text } +} +div { + db.bibliosource.role.attribute = attribute role { text } + db.bibliosource.attlist = + db.bibliosource.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.bibliosource = + + ## The source of a document + element bibliosource { db.bibliosource.attlist, db._text } +} +div { + db.bibliorelation.type.enumeration = + + ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + "hasformat" + | + ## The described resource includes the referenced resource either physically or logically + "haspart" + | + ## The described resource has a version, edition, or adaptation, namely, the referenced resource + "hasversion" + | + ## The described resource is the same intellectual content of the referenced resource, but presented in another format + "isformatof" + | + ## The described resource is a physical or logical part of the referenced resource + "ispartof" + | + ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource + "isreferencedby" + | + ## The described resource is supplanted, displaced, or superceded by the referenced resource + "isreplacedby" + | + ## The described resource is required by the referenced resource, either physically or logically + "isrequiredby" + | + ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + "isversionof" + | + ## The described resource references, cites, or otherwise points to the referenced resource + "references" + | + ## The described resource supplants, displaces, or supersedes the referenced resource + "replaces" + | + ## The described resource requires the referenced resource to support its function, delivery, or coherence of content + "requires" + db.bibliorelation.type-enum.attribute = + + ## Identifies the type of relationship + attribute type { db.bibliorelation.type.enumeration }? + db.bibliorelation.type-other.attributes = + + ## Identifies the type of relationship + attribute type { + + ## The described resource has a non-standard relationship with the referenced resource + "othertype" + }?, + + ## A keyword that identififes the type of the non-standard relationship + attribute othertype { xsd:NMTOKEN } + db.bibliorelation.type.attribute = + db.bibliorelation.type-enum.attribute + | db.bibliorelation.type-other.attributes + db.bibliorelation.role.attribute = attribute role { text } + db.bibliorelation.attlist = + db.bibliorelation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + & db.bibliorelation.type.attribute + db.bibliorelation = + + ## The relationship of a document to another + element bibliorelation { db.bibliorelation.attlist, db._text } +} +div { + db.bibliocoverage.spacial.enumeration = + + ## The DCMI Point identifies a point in space using its geographic coordinates + "dcmipoint" + | + ## ISO 3166 Codes for the representation of names of countries + "iso3166" + | + ## The DCMI Box identifies a region of space using its geographic limits + "dcmibox" + | + ## The Getty Thesaurus of Geographic Names + "tgn" + db.bibliocoverage.spatial-enum.attribute = + + ## Specifies the type of spatial coverage + attribute spatial { db.bibliocoverage.spacial.enumeration }? + db.bibliocoverage.spatial-other.attributes = + + ## Specifies the type of spatial coverage + attribute spatial { + + ## Identifies a non-standard type of coverage + "otherspatial" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute otherspatial { xsd:NMTOKEN } + db.bibliocoverage.spatial.attribute = + db.bibliocoverage.spatial-enum.attribute + | db.bibliocoverage.spatial-other.attributes + db.bibliocoverage.temporal.enumeration = + + ## A specification of the limits of a time interval + "dcmiperiod" + | + ## W3C Encoding rules for dates and times—a profile based on ISO 8601 + "w3c-dtf" + db.bibliocoverage.temporal-enum.attribute = + + ## Specifies the type of temporal coverage + attribute temporal { db.bibliocoverage.temporal.enumeration }? + db.bibliocoverage.temporal-other.attributes = + + ## Specifies the type of temporal coverage + attribute temporal { + + ## Specifies a non-standard type of coverage + "othertemporal" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute othertemporal { xsd:NMTOKEN } + db.bibliocoverage.temporal.attribute = + db.bibliocoverage.temporal-enum.attribute + | db.bibliocoverage.temporal-other.attributes + db.bibliocoverage.coverage.attrib = + db.bibliocoverage.spatial.attribute + & db.bibliocoverage.temporal.attribute + db.bibliocoverage.role.attribute = attribute role { text } + db.bibliocoverage.attlist = + db.bibliocoverage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bibliocoverage.coverage.attrib + db.bibliocoverage = + + ## The spatial or temporal coverage of a document + element bibliocoverage { db.bibliocoverage.attlist, db._text } +} +div { + db.legalnotice.role.attribute = attribute role { text } + db.legalnotice.attlist = + db.legalnotice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.legalnotice.info = db._info.title.only + db.legalnotice = + + ## A statement of legal obligations or requirements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:legalnotice" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element legalnotice { + db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+ + } +} +div { + db.othercredit.class.enumeration = + + ## A copy editor + "copyeditor" + | + ## A graphic designer + "graphicdesigner" + | + ## A production editor + "productioneditor" + | + ## A technical editor + "technicaleditor" + | + ## A translator + "translator" + | + ## An indexer + "indexer" + | + ## A proof-reader + "proofreader" + | + ## A cover designer + "coverdesigner" + | + ## An interior designer + "interiordesigner" + | + ## An illustrator + "illustrator" + | + ## A reviewer + "reviewer" + | + ## A typesetter + "typesetter" + | + ## A converter (a persons responsible for conversion, not an application) + "conversion" + db.othercredit.class-enum.attribute = + + ## Identifies the nature of the contributor + attribute class { db.othercredit.class.enumeration }? + db.othercredit.class-other.attribute = + + ## Identifies the nature of the non-standard contribution + attribute otherclass { xsd:NMTOKEN } + db.othercredit.class-other.attributes = + + ## Identifies the nature of the contributor + attribute class { + + ## Identifies a non-standard contribution + "other" + } + & db.othercredit.class-other.attribute + db.othercredit.class.attribute = + db.othercredit.class-enum.attribute + | db.othercredit.class-other.attributes + db.othercredit.role.attribute = attribute role { text } + db.othercredit.attlist = + db.othercredit.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.othercredit.class.attribute + db.othercredit = + + ## A person or entity, other than an author or editor, credited in a document + element othercredit { + db.othercredit.attlist, db.credit.contentmodel + } +} +div { + db.pagenums.role.attribute = attribute role { text } + db.pagenums.attlist = + db.pagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pagenums = + + ## The numbers of the pages in a book, for use in a bibliographic entry + element pagenums { db.pagenums.attlist, db._text } +} +div { + db.contrib.role.attribute = attribute role { text } + db.contrib.attlist = + db.contrib.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contrib = + + ## A summary of the contributions made to a document by a credited source + element contrib { db.contrib.attlist, db.all.inlines* } +} +div { + db.honorific.role.attribute = attribute role { text } + db.honorific.attlist = + db.honorific.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.honorific = + + ## The title of a person + element honorific { db.honorific.attlist, db._text } +} +div { + db.firstname.role.attribute = attribute role { text } + db.firstname.attlist = + db.firstname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.firstname = + + ## A given name of a person + element firstname { db.firstname.attlist, db._text } +} +div { + db.givenname.role.attribute = attribute role { text } + db.givenname.attlist = + db.givenname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.givenname = + + ## The given name of a person + element givenname { db.givenname.attlist, db._text } +} +div { + db.surname.role.attribute = attribute role { text } + db.surname.attlist = + db.surname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.surname = + + ## An inherited or family name; in western cultures the last name + element surname { db.surname.attlist, db._text } +} +div { + db.lineage.role.attribute = attribute role { text } + db.lineage.attlist = + db.lineage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineage = + + ## The portion of a person's name indicating a relationship to ancestors + element lineage { db.lineage.attlist, db._text } +} +div { + db.othername.role.attribute = attribute role { text } + db.othername.attlist = + db.othername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.othername = + + ## A component of a person's name that is not a first name, surname, or lineage + element othername { db.othername.attlist, db._text } +} +div { + db.printhistory.role.attribute = attribute role { text } + db.printhistory.attlist = + db.printhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.printhistory = + + ## The printing history of a document + element printhistory { db.printhistory.attlist, db.para.blocks+ } +} +div { + db.pubdate.role.attribute = attribute role { text } + db.pubdate.attlist = + db.pubdate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pubdate = + + ## The date of publication of a document + element pubdate { db.pubdate.attlist, db.date.contentmodel } +} +div { + db.publisher.role.attribute = attribute role { text } + db.publisher.attlist = + db.publisher.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publisher = + + ## The publisher of a document + element publisher { + db.publisher.attlist, db.publishername, db.address* + } +} +div { + db.publishername.role.attribute = attribute role { text } + db.publishername.attlist = + db.publishername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publishername = + + ## The name of the publisher of a document + element publishername { db.publishername.attlist, db._text } +} +div { + db.releaseinfo.role.attribute = attribute role { text } + db.releaseinfo.attlist = + db.releaseinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.releaseinfo = + + ## Information about a particular release of a document + element releaseinfo { db.releaseinfo.attlist, db._text } +} +div { + db.revhistory.role.attribute = attribute role { text } + db.revhistory.attlist = + db.revhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revhistory.info = db._info.title.only + db.revhistory = + + ## A history of the revisions to a document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:revhistory" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element revhistory { + db.revhistory.attlist, db.revhistory.info, db.revision+ + } +} +div { + db.revision.role.attribute = attribute role { text } + db.revision.attlist = + db.revision.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revision = + + ## An entry describing a single revision in the history of the revisions to a document + element revision { + db.revision.attlist, + db.revnumber?, + db.date, + (db.authorinitials | db.author)*, + (db.revremark | db.revdescription)? + } +} +div { + db.revnumber.role.attribute = attribute role { text } + db.revnumber.attlist = + db.revnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revnumber = + + ## A document revision number + element revnumber { db.revnumber.attlist, db._text } +} +div { + db.revremark.role.attribute = attribute role { text } + db.revremark.attlist = + db.revremark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revremark = + + ## A description of a revision to a document + element revremark { db.revremark.attlist, db._text } +} +div { + db.revdescription.role.attribute = attribute role { text } + db.revdescription.attlist = + db.revdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revdescription = + + ## A extended description of a revision to a document + element revdescription { db.revdescription.attlist, db.all.blocks* } +} +div { + db.seriesvolnums.role.attribute = attribute role { text } + db.seriesvolnums.attlist = + db.seriesvolnums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seriesvolnums = + + ## Numbers of the volumes in a series of books + element seriesvolnums { db.seriesvolnums.attlist, db._text } +} +div { + db.volumenum.role.attribute = attribute role { text } + db.volumenum.attlist = + db.volumenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.volumenum = + + ## The volume number of a document in a set (as of books in a set or articles in a journal) + element volumenum { db.volumenum.attlist, db._text } +} +div { + db.issuenum.role.attribute = attribute role { text } + db.issuenum.attlist = + db.issuenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.issuenum = + + ## The number of an issue of a journal + element issuenum { db.issuenum.attlist, db._text } +} +div { + db.meta.role.attribute = attribute role { text } + db.meta.name.attribute = + + ## A name for the metadata element + attribute name { text } + db.meta.content.attribute = + + ## The metadata content + attribute content { text } + db.meta.attlist = + db.meta.name.attribute? + & db.meta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.meta.empty = + + ## A generic metadata element + element meta { db.meta.attlist, db.meta.content.attribute, empty } + db.meta.content = + + ## A generic metadata element + element meta { + db.meta.attlist, + (text | db._any | db.all.inlines | db.all.blocks)* + } + db.meta = db.meta.empty | db.meta.content +} +div { + db.package.role.attribute = attribute role { text } + db.package.attlist = + db.package.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.package = + + ## A software or application package + element package { db.package.attlist, db._text } +} +div { + db.email.role.attribute = attribute role { text } + db.email.attlist = + db.email.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.email = + + ## An email address + element email { db.email.attlist, db._text } +} +div { + db.lineannotation.role.attribute = attribute role { text } + db.lineannotation.attlist = + db.lineannotation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineannotation = + + ## A comment on a line in a verbatim listing + element lineannotation { db.lineannotation.attlist, db._text } +} +div { + db.parameter.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + db.parameter.class.attribute = + + ## Identifies the class of parameter + attribute class { db.parameter.class.enumeration } + db.parameter.role.attribute = attribute role { text } + db.parameter.attlist = + db.parameter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.parameter.class.attribute? + db.parameter = + + ## A value or a symbolic reference to a value + element parameter { db.parameter.attlist, db._text } +} +db.replaceable.inlines = db._text | db.co +div { + db.replaceable.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + | + ## A parameter + "parameter" + db.replaceable.class.attribute = + + ## Identifies the nature of the replaceable text + attribute class { db.replaceable.class.enumeration } + db.replaceable.role.attribute = attribute role { text } + db.replaceable.attlist = + db.replaceable.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.replaceable.class.attribute? + db.replaceable = + + ## Content that may or must be replaced by the user + element replaceable { + db.replaceable.attlist, db.replaceable.inlines* + } +} +div { + db.uri.type.attribute = + + ## Identifies the type of URI specified + attribute type { text }? + db.uri.role.attribute = attribute role { text } + db.uri.attlist = + db.uri.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.uri.type.attribute + db.uri = + + ## A Uniform Resource Identifier + element uri { db.uri.attlist, db._text } +} +div { + db.abbrev.role.attribute = attribute role { text } + db.abbrev.attlist = + db.abbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abbrev = + + ## An abbreviation, especially one followed by a period + element abbrev { + db.abbrev.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.acronym.role.attribute = attribute role { text } + db.acronym.attlist = + db.acronym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.acronym = + + ## An often pronounceable word made from the initial (or selected) letters of a name or phrase + element acronym { + db.acronym.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.citation.role.attribute = attribute role { text } + db.citation.attlist = + db.citation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citation = + + ## An inline bibliographic reference to another published work + element citation { db.citation.attlist, db.all.inlines* } +} +div { + db.citerefentry.role.attribute = attribute role { text } + db.citerefentry.attlist = + db.citerefentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citerefentry = + + ## A citation to a reference page + element citerefentry { + db.citerefentry.attlist, db.refentrytitle, db.manvolnum? + } +} +div { + db.refentrytitle.role.attribute = attribute role { text } + db.refentrytitle.attlist = + db.refentrytitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refentrytitle = + + ## The title of a reference page + element refentrytitle { db.refentrytitle.attlist, db.all.inlines* } +} +div { + db.manvolnum.role.attribute = attribute role { text } + db.manvolnum.attlist = + db.manvolnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.manvolnum = + + ## A reference volume number + element manvolnum { db.manvolnum.attlist, db._text } +} +div { + db.citetitle.pubwork.enumeration = db.pubwork.enumeration + db.citetitle.pubwork-enum.attribute = + + ## Identifies the nature of the publication being cited + attribute pubwork { db.citetitle.pubwork.enumeration } + db.citetitle.pubwork-other.attribute = + + ## Identifies the nature of some other kind of publication being cited + attribute otherpubwork { xsd:NMTOKEN } + db.citetitle.pubwork-other.attributes = + + ## Identifies that this is some other kind of publication being cited + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.citetitle.pubwork-other.attribute + db.citetitle.pubwork.attribute = + db.citetitle.pubwork-enum.attribute + | db.citetitle.pubwork-other.attributes + db.citetitle.role.attribute = attribute role { text } + db.citetitle.attlist = + db.citetitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.citetitle.pubwork.attribute? + db.citetitle = + + ## The title of a cited work + element citetitle { db.citetitle.attlist, db.all.inlines* } +} +div { + db.emphasis.role.attribute = attribute role { text } + db.emphasis.attlist = + db.emphasis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.emphasis = + + ## Emphasized text + element emphasis { db.emphasis.attlist, db.all.inlines* } +} +div { + db._emphasis = + + ## A limited span of emphasized text + element emphasis { db.emphasis.attlist, db._text } +} +div { + db.foreignphrase.role.attribute = attribute role { text } + db.foreignphrase.attlist = + db.foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.foreignphrase = + + ## A word or phrase in a language other than the primary language of the document + element foreignphrase { + db.foreignphrase.attlist, (text | db.general.inlines)* + } +} +div { + db._foreignphrase.role.attribute = attribute role { text } + db._foreignphrase.attlist = + db._foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._foreignphrase = + + ## A limited word or phrase in a language other than the primary language of the document + element foreignphrase { db._foreignphrase.attlist, db._text } +} +div { + db.phrase.role.attribute = attribute role { text } + 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* } +} +div { + db._phrase = + + ## A limited span of text + element phrase { db.phrase.attlist, db._text } +} +div { + db.quote.role.attribute = attribute role { text } + db.quote.attlist = + db.quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.quote = + + ## An inline quotation + element quote { db.quote.attlist, db.all.inlines* } +} +div { + db._quote.role.attribute = attribute role { text } + db._quote.attlist = + db._quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._quote = + + ## A limited inline quotation + element quote { db._quote.attlist, db._text } +} +div { + db.subscript.role.attribute = attribute role { text } + db.subscript.attlist = + db.subscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subscript = + + ## A subscript (as in H₂O, the molecular formula for water) + element subscript { db.subscript.attlist, db._text } +} +div { + db.superscript.role.attribute = attribute role { text } + db.superscript.attlist = + db.superscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.superscript = + + ## A superscript (as in x², the mathematical notation for x multiplied by itself) + element superscript { db.superscript.attlist, db._text } +} +div { + db.trademark.class.enumeration = + + ## A copyright + "copyright" + | + ## A registered copyright + "registered" + | + ## A service + "service" + | + ## A trademark + "trade" + db.trademark.class.attribute = + + ## Identifies the class of trade mark + attribute class { db.trademark.class.enumeration } + db.trademark.role.attribute = attribute role { text } + db.trademark.attlist = + db.trademark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.trademark.class.attribute? + db.trademark = + + ## A trademark + element trademark { db.trademark.attlist, db._text } +} +div { + db.wordasword.role.attribute = attribute role { text } + db.wordasword.attlist = + db.wordasword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.wordasword = + + ## A word meant specifically as a word and not representing anything else + element wordasword { db.wordasword.attlist, db._text } +} +div { + db.footnoteref.role.attribute = attribute role { text } + db.footnoteref.label.attribute = db.label.attribute + db.footnoteref.attlist = + db.footnoteref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.footnoteref.label.attribute? + db.footnoteref = + + ## A cross reference to a footnote (a footnote mark) + [ + s:pattern [ + s:title [ "Footnote reference type constraint" ] + s:rule [ + context = "db:footnoteref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on footnoteref must point to a footnote." + ] + ] + ] + ] + element footnoteref { db.footnoteref.attlist, empty } +} +div { + db.xref.role.attribute = attribute role { text } + db.xref.xrefstyle.attribute = db.xrefstyle.attribute + db.xref.endterm.attribute = db.endterm.attribute + db.xref.attlist = + db.xref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.xref.xrefstyle.attribute? + & db.xref.endterm.attribute? + db.xref = + + ## A cross reference to another part of the document + element xref { db.xref.attlist, empty } +} +div { + db.link.role.attribute = attribute role { text } + db.link.xrefstyle.attribute = db.xrefstyle.attribute + db.link.endterm.attribute = db.endterm.attribute + db.link.attlist = + db.link.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.link.xrefstyle.attribute? + & db.link.endterm.attribute? + db.link = + + ## A hypertext link + element link { db.link.attlist, db.all.inlines* } +} +div { + db.olink.role.attribute = attribute role { text } + db.olink.xrefstyle.attribute = db.xrefstyle.attribute + db.olink.localinfo.attribute = + + ## Holds additional information that may be used by the application when resolving the link + attribute localinfo { text } + db.olink.targetdoc.attribute = + + ## Specifies the URI of the document in which the link target appears + attribute targetdoc { xsd:anyURI } + db.olink.targetptr.attribute = + + ## Specifies the location of the link target in the document + attribute targetptr { text } + db.olink.type.attribute = + + ## Identifies application-specific customization of the link behavior + attribute type { text } + db.olink.attlist = + db.common.attributes + & db.olink.targetdoc.attribute? + & db.olink.role.attribute? + & db.olink.xrefstyle.attribute? + & db.olink.localinfo.attribute? + & db.olink.targetptr.attribute? + & db.olink.type.attribute? + db.olink = + + ## A link that addresses its target indirectly + element olink { db.olink.attlist, db.all.inlines* } +} +div { + db.anchor.role.attribute = attribute role { text } + db.anchor.attlist = + db.anchor.role.attribute? & db.common.idreq.attributes + db.anchor = + + ## A spot in the document + element anchor { db.anchor.attlist, empty } +} +div { + db.alt.role.attribute = attribute role { text } + db.alt.attlist = db.alt.role.attribute? & db.common.attributes + db.alt = + + ## A text-only annotation, often used for accessibility + element alt { db.alt.attlist, (text | db.inlinemediaobject)* } +} +div { + db.formalgroup.fgstyle.attribute = + + ## Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + attribute fgstyle { text } + db.formalgroup.role.attribute = attribute role { text } + db.formalgroup.pgwide.attribute = db.pgwide.attribute + db.formalgroup.floatstyle.attribute = db.floatstyle.attribute + db.formalgroup.attlist = + db.formalgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.formalgroup.floatstyle.attribute? + & db.formalgroup.pgwide.attribute? + & db.formalgroup.fgstyle.attribute? + db.formalgroup.info = db._info.title.onlyreq + db.formalgroup = + + ## A group of formal objects, for example subfigures + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalgroup" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalgroup { + db.formalgroup.attlist, + db.formalgroup.info, + (db.figure+ | db.table+ | db.example+ | db.equation+) + } +} +db.status.attribute = + + ## Identifies the editorial or publication status of the element on which it occurs + attribute status { text } +db.toplevel.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | (db.sect1+, db.simplesect*) + | db.refentry+ +db.toplevel.blocks.or.sections = + (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections +db.recursive.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | db.refentry+ +db.recursive.blocks.or.sections = + (db.all.blocks+, db.recursive.sections?) | db.recursive.sections +db.divisions = db.part | db.reference +db.components = + db.dedication + | db.acknowledgements + | db.preface + | db.chapter + | db.appendix + | db.article + | db.colophon +db.navigation.components = + notAllowed | db.glossary | db.bibliography | db.index | db.toc +db.component.contentmodel = + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* +db.setindex.components = notAllowed | db.setindex +db.toc.components = notAllowed | db.toc +db.set.components = db.set | db.book | db.article +div { + db.set.status.attribute = db.status.attribute + db.set.role.attribute = attribute role { text } + db.set.attlist = + db.set.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.set.status.attribute? + db.set.info = db._info.title.req + db.set = + + ## A collection of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:set" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element set { + db.set.attlist, + db.set.info, + db.toc.components?, + db.set.components+, + db.setindex.components? + } +} +db.book.components = + (db.navigation.components | db.components | db.divisions)* | db.topic* +div { + db.book.status.attribute = db.status.attribute + db.book.role.attribute = attribute role { text } + db.book.attlist = + db.book.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.book.status.attribute? + db.book.info = db._info + db.book = + + ## A book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:book" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element book { db.book.attlist, db.book.info, db.book.components } +} +div { + db.dedication.status.attribute = db.status.attribute + db.dedication.role.attribute = attribute role { text } + db.dedication.attlist = + db.dedication.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.dedication.status.attribute? + db.dedication.info = db._info + db.dedication = + + ## The dedication of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:dedication" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element dedication { + db.dedication.attlist, db.dedication.info, db.all.blocks+ + } +} +div { + db.acknowledgements.status.attribute = db.status.attribute + db.acknowledgements.role.attribute = attribute role { text } + db.acknowledgements.attlist = + db.acknowledgements.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.acknowledgements.status.attribute? + db.acknowledgements.info = db._info + db.acknowledgements = + + ## Acknowledgements of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:acknowledgements" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element acknowledgements { + db.acknowledgements.attlist, + db.acknowledgements.info, + db.all.blocks+ + } +} +div { + db.colophon.status.attribute = db.status.attribute + db.colophon.role.attribute = attribute role { text } + db.colophon.attlist = + db.colophon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.colophon.status.attribute? + db.colophon.info = db._info + db.colophon = + + ## Text at the back of a book describing facts about its production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:colophon" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element colophon { + db.colophon.attlist, + db.colophon.info, + ((db.all.blocks+, db.simplesect*) + | (db.all.blocks*, db.simplesect+)) + } +} +db.appendix.contentmodel = db.component.contentmodel | db.topic+ +div { + db.appendix.status.attribute = db.status.attribute + db.appendix.role.attribute = attribute role { text } + db.appendix.attlist = + db.appendix.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.appendix.status.attribute? + db.appendix.info = db._info.title.req + db.appendix = + + ## An appendix in a book or article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:appendix" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element appendix { + db.appendix.attlist, db.appendix.info, db.appendix.contentmodel? + } +} +db.chapter.contentmodel = db.component.contentmodel | db.topic+ +div { + db.chapter.status.attribute = db.status.attribute + db.chapter.role.attribute = attribute role { text } + db.chapter.attlist = + db.chapter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.chapter.status.attribute? + db.chapter.info = db._info.title.req + db.chapter = + + ## A chapter, as of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:chapter" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element chapter { + db.chapter.attlist, db.chapter.info, db.chapter.contentmodel? + } +} +db.part.components = + (db.navigation.components | db.components) + | (db.refentry | db.reference) +db.part.contentmodel = db.part.components+ | db.topic+ +div { + db.part.status.attribute = db.status.attribute + db.part.role.attribute = attribute role { text } + db.part.attlist = + db.part.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.part.status.attribute? + db.part.info = db._info.title.req + db.part = + + ## A division in a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:part" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element part { + db.part.attlist, + db.part.info, + db.partintro?, + db.part.contentmodel? + } +} +div { + db.preface.status.attribute = db.status.attribute + db.preface.role.attribute = attribute role { text } + db.preface.attlist = + db.preface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.preface.status.attribute? + db.preface.info = db._info.title.req + db.preface = + + ## Introductory matter preceding the first chapter of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:preface" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element preface { + db.preface.attlist, db.preface.info, db.component.contentmodel? + } +} +div { + db.partintro.status.attribute = db.status.attribute + db.partintro.role.attribute = attribute role { text } + db.partintro.attlist = + db.partintro.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.partintro.status.attribute? + db.partintro.info = db._info + db.partintro = + + ## An introduction to the contents of a part + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:partintro" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element partintro { + db.partintro.attlist, + db.partintro.info, + db.toplevel.blocks.or.sections? + } +} +div { + db.section.status.attribute = db.status.attribute + db.section.class.enumeration = + + ## A section of legal obligations or requirements + "legal" + db.section.class-enum.attribute = + + ## Identifies the nature of the section + attribute class { db.section.class.enumeration } + db.section.class-other.attribute = + + ## Identifies a non-standard section class + attribute otherclass { xsd:NMTOKEN } + db.section.class-other.attributes = + + ## Indicates that a non-standard section class is applied + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.section.class-other.attribute + db.section.class.attribute = + db.section.class-enum.attribute | db.section.class-other.attributes + db.section.role.attribute = attribute role { text } + db.section.attlist = + db.section.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.section.status.attribute? + & db.section.class.attribute? + db.section.info = db._info.title.req + db.section = + + ## A recursive section + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:section" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element section { + db.section.attlist, + db.section.info, + db.navigation.components*, + db.recursive.blocks.or.sections?, + db.navigation.components* + } +} +div { + db.simplesect.status.attribute = db.status.attribute + db.simplesect.role.attribute = attribute role { text } + db.simplesect.attlist = + db.simplesect.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.simplesect.status.attribute? + db.simplesect.info = db._info.title.req + db.simplesect = + + ## A section of a document with no subdivisions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplesect" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplesect { + db.simplesect.attlist, db.simplesect.info, db.all.blocks* + } +} +db.article.components = db.toplevel.sections +db.article.navcomponents = + db.navigation.components + | db.acknowledgements + | db.dedication + | db.appendix + | db.colophon +div { + db.article.status.attribute = db.status.attribute + db.article.class.enumeration = + + ## A collection of frequently asked questions. + "faq" + | + ## An article in a journal or other periodical. + "journalarticle" + | + ## A description of a product. + "productsheet" + | + ## A specification. + "specification" + | + ## A technical report. + "techreport" + | + ## A white paper. + "whitepaper" + db.article.class-enum.attribute = + + ## Identifies the nature of the article + attribute class { db.article.class.enumeration } + db.article.class-other.attribute = + + ## Identifies the nature of the non-standard article + attribute otherclass { xsd:NMTOKEN } + db.article.class-other.attributes = + + ## Identifies the nature of the article + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.article.class-other.attribute + db.article.class.attribute = + db.article.class-enum.attribute | db.article.class-other.attributes + db.article.role.attribute = attribute role { text } + db.article.attlist = + db.article.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.article.status.attribute? + & db.article.class.attribute? + db.article.info = db._info.title.req + db.article = + + ## An article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:article" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element article { + db.article.attlist, + db.article.info, + db.article.navcomponents*, + ((db.all.blocks+, db.article.components?) + | db.article.components), + db.article.navcomponents* + } +} +db.annotations.attribute = + + ## Identifies one or more annotations that apply to this element + attribute annotations { text } +div { + db.annotation.role.attribute = attribute role { text } + db.annotation.annotates.attribute = + + ## Identifies one or more elements to which this annotation applies + attribute annotates { text } + db.annotation.attlist = + db.annotation.role.attribute? + & db.annotation.annotates.attribute? + & db.common.attributes + db.annotation.info = db._info.title.only + db.annotation = + + ## An annotation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:annotation" + s:assert [ + test = "not(.//db:annotation)" + "annotation must not occur among the children or descendants of annotation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:annotation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element annotation { + db.annotation.attlist, db.annotation.info, db.all.blocks+ + } +} +db.xlink.extended.type.attribute = + + ## Identifies the XLink extended link type + [ + s:pattern [ + s:title [ "XLink extended placement" ] + s:rule [ + context = "*[@xlink:type='extended']" + s:assert [ + test = "not(parent::*[@xlink:type='extended'])" + "An XLink extended type element may not occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink extended link type + "extended" + } +db.xlink.locator.type.attribute = + + ## Identifies the XLink locator link type + [ + s:pattern [ + s:title [ "XLink locator placement" ] + s:rule [ + context = "*[@xlink:type='locator']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink locator type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink locator link type + "locator" + } +db.xlink.arc.type.attribute = + + ## Identifies the XLink arc link type + [ + s:pattern [ + s:title [ "XLink arc placement" ] + s:rule [ + context = "*[@xlink:type='arc']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink arc type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink arc link type + "arc" + } +db.xlink.resource.type.attribute = + + ## Identifies the XLink resource link type + [ + s:pattern [ + s:title [ "XLink resource placement" ] + s:rule [ + context = "*[@xlink:type='resource']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink resource type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink resource link type + "resource" + } +db.xlink.title.type.attribute = + + ## Identifies the XLink title link type + [ + s:pattern [ + s:title [ "XLink title placement" ] + s:rule [ + context = "*[@xlink:type='title']" + s:assert [ + test = + "parent::*[@xlink:type='extended'] or parent::*[@xlink:type='locator'] or parent::*[@xlink:type='arc']" + "An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink title link type + "title" + } +db.xlink.extended.link.attributes = + db.xlink.extended.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? +db.xlink.locator.link.attributes = + db.xlink.locator.type.attribute + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.arc.link.attributes = + db.xlink.arc.type.attribute + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? +db.xlink.resource.link.attributes = + db.xlink.resource.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.title.link.attributes = db.xlink.title.type.attribute +db.xlink.from.attribute = + + ## Specifies the XLink traversal-from + attribute xlink:from { xsd:NMTOKEN } +db.xlink.label.attribute = + + ## Specifies the XLink label + attribute xlink:label { xsd:NMTOKEN } +db.xlink.to.attribute = + + ## Specifies the XLink traversal-to + attribute xlink:to { xsd:NMTOKEN } +div { + db.extendedlink.role.attribute = attribute role { text } + db.extendedlink.attlist = + db.extendedlink.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "extended" ] + attribute xlink:type { + + ## An XLink extended link + "extended" + }? + & db.xlink.role.attribute? + & db.xlink.title.attribute? + db.extendedlink = + + ## An XLink extended link + element extendedlink { + db.extendedlink.attlist, (db.locator | db.arc | db.link)+ + } +} +div { + db.locator.role.attribute = attribute role { text } + db.locator.attlist = + db.locator.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "locator" ] + attribute xlink:type { + + ## An XLink locator link + "locator" + }? + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? + db.locator = + + ## An XLink locator in an extendedlink + element locator { db.locator.attlist, empty } +} +div { + db.arc.role.attribute = attribute role { text } + db.arc.attlist = + db.arc.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "arc" ] + attribute xlink:type { + + ## An XLink arc link + "arc" + }? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? + db.arc = + + ## An XLink arc in an extendedlink + element arc { db.arc.attlist, empty } +} +db.sect1.sections = + ((db.sect2+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect1.status.attribute = db.status.attribute + db.sect1.class.attribute = db.section.class.attribute + db.sect1.role.attribute = attribute role { text } + db.sect1.attlist = + db.sect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect1.status.attribute? + & db.sect1.class.attribute? + db.sect1.info = db._info.title.req + db.sect1 = + + ## A top-level section of document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect1 { + db.sect1.attlist, + db.sect1.info, + db.navigation.components*, + ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections)?, + db.navigation.components* + } +} +db.sect2.sections = + ((db.sect3+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect2.status.attribute = db.status.attribute + db.sect2.class.attribute = db.section.class.attribute + db.sect2.role.attribute = attribute role { text } + db.sect2.attlist = + db.sect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect2.status.attribute? + & db.sect2.class.attribute? + db.sect2.info = db._info.title.req + db.sect2 = + + ## A subsection within a sect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect2 { + db.sect2.attlist, + db.sect2.info, + db.navigation.components*, + ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections)?, + db.navigation.components* + } +} +db.sect3.sections = + ((db.sect4+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect3.status.attribute = db.status.attribute + db.sect3.class.attribute = db.section.class.attribute + db.sect3.role.attribute = attribute role { text } + db.sect3.attlist = + db.sect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect3.status.attribute? + & db.sect3.class.attribute? + db.sect3.info = db._info.title.req + db.sect3 = + + ## A subsection within a sect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect3 { + db.sect3.attlist, + db.sect3.info, + db.navigation.components*, + ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections)?, + db.navigation.components* + } +} +db.sect4.sections = + ((db.sect5+, db.simplesect*) | db.simplesect+) + | db.refentry+ +div { + db.sect4.status.attribute = db.status.attribute + db.sect4.class.attribute = db.section.class.attribute + db.sect4.role.attribute = attribute role { text } + db.sect4.attlist = + db.sect4.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect4.status.attribute? + & db.sect4.class.attribute? + db.sect4.info = db._info.title.req + db.sect4 = + + ## A subsection within a sect3 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect4" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect4 { + db.sect4.attlist, + db.sect4.info, + db.navigation.components*, + ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections)?, + db.navigation.components* + } +} +db.sect5.sections = db.simplesect+ | db.refentry+ +div { + db.sect5.status.attribute = db.status.attribute + db.sect5.class.attribute = db.section.class.attribute + db.sect5.role.attribute = attribute role { text } + db.sect5.attlist = + db.sect5.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect5.status.attribute? + & db.sect5.class.attribute? + db.sect5.info = db._info.title.req + db.sect5 = + + ## A subsection within a sect4 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect5" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect5 { + db.sect5.attlist, + db.sect5.info, + db.navigation.components*, + ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections)?, + db.navigation.components* + } +} +db.toplevel.refsection = db.refsection+ | db.refsect1+ +db.secondlevel.refsection = db.refsection+ | db.refsect2+ +db.reference.components = db.refentry +div { + db.reference.status.attribute = db.status.attribute + db.reference.role.attribute = attribute role { text } + db.reference.attlist = + db.reference.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.reference.status.attribute? + & db.label.attribute? + db.reference.info = db._info.title.req + db.reference = + + ## A collection of reference entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:reference" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element reference { + db.reference.attlist, + db.reference.info, + db.partintro?, + db.reference.components* + } +} +div { + db.refentry.status.attribute = db.status.attribute + db.refentry.role.attribute = attribute role { text } + db.refentry.attlist = + db.refentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refentry.status.attribute? + & db.label.attribute? + db.refentry.info = db._info.title.forbidden + db.refentry = + + ## A reference page (originally a UNIX man-style reference page) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refentry { + db.refentry.attlist, + db.indexterm*, + db.refentry.info, + db.refmeta?, + db.refnamediv+, + db.refsynopsisdiv?, + db.toplevel.refsection + } +} +div { + db.refmeta.role.attribute = attribute role { text } + db.refmeta.attlist = + db.refmeta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refmeta = + + ## Meta-information for a reference entry + element refmeta { + db.refmeta.attlist, + db.indexterm*, + db.refentrytitle, + db.manvolnum?, + db.refmiscinfo*, + db.indexterm* + } +} +db.refmiscinfo.class.enumeration = + + ## The name of the software product or component to which this topic applies + "source" + | + ## The version of the software product or component to which this topic applies + "version" + | + ## The section title of the reference page (e.g., User Commands) + "manual" + | + ## The section title of the reference page (believed synonymous with "manual" but in wide use) + "sectdesc" + | + ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + "software" +db.refmiscinfo.class-enum.attribute = + + ## Identifies the kind of miscellaneous information + attribute class { db.refmiscinfo.class.enumeration }? +db.refmiscinfo.class-other.attribute = + + ## Identifies the nature of non-standard miscellaneous information + attribute otherclass { text } +db.refmiscinfo.class-other.attributes = + + ## Identifies the kind of miscellaneious information + attribute class { + + ## Indicates that the information is some 'other' kind. + "other" + } + & db.refmiscinfo.class-other.attribute +db.refmiscinfo.class.attribute = + db.refmiscinfo.class-enum.attribute + | db.refmiscinfo.class-other.attributes +div { + db.refmiscinfo.role.attribute = attribute role { text } + db.refmiscinfo.attlist = + db.refmiscinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refmiscinfo.class.attribute? + db.refmiscinfo = + + ## Meta-information for a reference entry other than the title and volume number + element refmiscinfo { db.refmiscinfo.attlist, db._text } +} +div { + db.refnamediv.role.attribute = attribute role { text } + db.refnamediv.attlist = + db.refnamediv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refnamediv = + + ## The name, purpose, and classification of a reference page + element refnamediv { + db.refnamediv.attlist, + db.refdescriptor?, + db.refname+, + db.refpurpose, + db.refclass* + } +} +div { + db.refdescriptor.role.attribute = attribute role { text } + db.refdescriptor.attlist = + db.refdescriptor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refdescriptor = + + ## A description of the topic of a reference page + element refdescriptor { db.refdescriptor.attlist, db.all.inlines* } +} +div { + db.refname.role.attribute = attribute role { text } + db.refname.attlist = + db.refname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refname = + + ## The name of (one of) the subject(s) of a reference page + element refname { db.refname.attlist, db.all.inlines* } +} +div { + db.refpurpose.role.attribute = attribute role { text } + db.refpurpose.attlist = + db.refpurpose.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refpurpose = + + ## A short (one sentence) synopsis of the topic of a reference page + element refpurpose { db.refpurpose.attlist, db.all.inlines* } +} +div { + db.refclass.role.attribute = attribute role { text } + db.refclass.attlist = + db.refclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refclass = + + ## The scope or other indication of applicability of a reference entry + element refclass { db.refclass.attlist, (text | db.application)* } +} +div { + db.refsynopsisdiv.role.attribute = attribute role { text } + db.refsynopsisdiv.attlist = + db.refsynopsisdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refsynopsisdiv.info = db._info + db.refsynopsisdiv = + + ## A syntactic synopsis of the subject of the reference page + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsynopsisdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsynopsisdiv { + db.refsynopsisdiv.attlist, + db.refsynopsisdiv.info, + ((db.all.blocks+, db.secondlevel.refsection?) + | db.secondlevel.refsection) + } +} +div { + db.refsection.status.attribute = db.status.attribute + db.refsection.role.attribute = attribute role { text } + db.refsection.attlist = + db.refsection.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refsection.status.attribute? + & db.label.attribute? + db.refsection.info = db._info.title.req + db.refsection = + + ## A recursive section in a refentry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsection" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsection { + db.refsection.attlist, + db.refsection.info, + ((db.all.blocks+, db.refsection*) | db.refsection+) + } +} +db.refsect1.sections = db.refsect2+ +div { + db.refsect1.status.attribute = db.status.attribute + db.refsect1.role.attribute = attribute role { text } + db.refsect1.attlist = + db.refsect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect1.status.attribute? + db.refsect1.info = db._info.title.req + db.refsect1 = + + ## A major subsection of a reference entry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect1 { + db.refsect1.attlist, + db.refsect1.info, + ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections) + } +} +db.refsect2.sections = db.refsect3+ +div { + db.refsect2.status.attribute = db.status.attribute + db.refsect2.role.attribute = attribute role { text } + db.refsect2.attlist = + db.refsect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect2.status.attribute? + db.refsect2.info = db._info.title.req + db.refsect2 = + + ## A subsection of a refsect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect2 { + db.refsect2.attlist, + db.refsect2.info, + ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections) + } +} +div { + db.refsect3.status.attribute = db.status.attribute + db.refsect3.role.attribute = attribute role { text } + db.refsect3.attlist = + db.refsect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect3.status.attribute? + db.refsect3.info = db._info.title.req + db.refsect3 = + + ## A subsection of a refsect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect3 { + db.refsect3.attlist, db.refsect3.info, db.all.blocks+ + } +} +db.glossary.inlines = + db.firstterm | db.glossterm | db._firstterm | db._glossterm +db.baseform.attribute = + + ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + attribute baseform { text }? +div { + db.glosslist.role.attribute = attribute role { text } + db.glosslist.attlist = + db.glosslist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.glosslist.info = db._info.title.only + db.glosslist = + + ## A wrapper for a list of glossary entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glosslist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glosslist { + db.glosslist.attlist, + db.glosslist.info?, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.glossentry.role.attribute = attribute role { text } + db.glossentry.sortas.attribute = + + ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + attribute sortas { text } + db.glossentry.attlist = + db.glossentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossentry.sortas.attribute? + db.glossentry = + + ## An entry in a glossary or glosslist + element glossentry { + db.glossentry.attlist, + db.glossterm, + db.acronym?, + db.abbrev?, + db.indexterm*, + (db.glosssee | db.glossdef+) + } +} +div { + db.glossdef.role.attribute = attribute role { text } + db.glossdef.subject.attribute = + + ## Specifies a list of keywords for the definition + attribute subject { text } + db.glossdef.attlist = + db.glossdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossdef.subject.attribute? + db.glossdef = + + ## A definition in a glossentry + element glossdef { + db.glossdef.attlist, db.all.blocks+, db.glossseealso* + } +} +div { + db.glosssee.role.attribute = attribute role { text } + db.glosssee.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glosssee.attlist = + db.glosssee.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glosssee.otherterm.attribute? + db.glosssee = + + ## A cross-reference from one glossentry + ## to another + [ + s:pattern [ + s:title [ "Glosssary 'see' type constraint" ] + s:rule [ + context = "db:glosssee[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glosssee must point to a glossentry." + ] + ] + ] + ] + element glosssee { db.glosssee.attlist, db.all.inlines* } +} +div { + db.glossseealso.role.attribute = attribute role { text } + db.glossseealso.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glossseealso.attlist = + db.glossseealso.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossseealso.otherterm.attribute? + db.glossseealso = + + ## A cross-reference from one glossentry to another + [ + s:pattern [ + s:title [ "Glossary 'seealso' type constraint" ] + s:rule [ + context = "db:glossseealso[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glossseealso must point to a glossentry." + ] + ] + ] + ] + element glossseealso { db.glossseealso.attlist, db.all.inlines* } +} +div { + db.firstterm.role.attribute = attribute role { text } + db.firstterm.attlist = + db.firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.firstterm = + + ## The first occurrence of a term + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db.firstterm.attlist, db.all.inlines* } +} +div { + db._firstterm.role.attribute = attribute role { text } + db._firstterm.attlist = + db._firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._firstterm = + + ## The first occurrence of a term, with limited content + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db._firstterm.attlist, db._text } +} +div { + db.glossterm.role.attribute = attribute role { text } + db.glossterm.attlist = + db.glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db.glossterm.attlist, db.all.inlines* } +} +div { + db._glossterm.role.attribute = attribute role { text } + db._glossterm.attlist = + db._glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db._glossterm.attlist, db._text } +} +div { + db.glossary.status.attribute = db.status.attribute + db.glossary.role.attribute = attribute role { text } + db.glossary.attlist = + db.glossary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossary.status.attribute? + db.glossary.info = db._info + db.glossary = + + ## A glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossary { + db.glossary.attlist, + db.glossary.info, + db.all.blocks*, + (db.glossdiv* | db.glossentry*), + db.bibliography? + } +} +div { + db.glossdiv.status.attribute = db.status.attribute + db.glossdiv.role.attribute = attribute role { text } + db.glossdiv.attlist = + db.glossdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossdiv.status.attribute? + db.glossdiv.info = db._info.title.req + db.glossdiv = + + ## A division in a glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossdiv { + db.glossdiv.attlist, + db.glossdiv.info, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.termdef.role.attribute = attribute role { text } + db.termdef.attlist = + db.termdef.role.attribute? + & db.glossentry.sortas.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.termdef = + + ## An inline definition of a term + [ + s:pattern [ + s:title [ "Glossary term definition constraint" ] + s:rule [ + context = "db:termdef" + s:assert [ + test = "count(db:firstterm) = 1" + "A termdef must contain exactly one firstterm" + ] + ] + ] + ] + element termdef { db.termdef.attlist, db.all.inlines* } +} +db.relation.attribute = + + ## Identifies the relationship between the bibliographic elemnts + attribute relation { text } +div { + db.biblioentry.role.attribute = attribute role { text } + db.biblioentry.pubwork.attribute = db.biblio.pubwork.attribute + db.biblioentry.attlist = + db.biblioentry.role.attribute? + & db.biblioentry.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.biblioentry = + + ## A raw entry in a bibliography + element biblioentry { + db.biblioentry.attlist, db.bibliographic.elements+ + } +} +div { + db.bibliomixed.role.attribute = attribute role { text } + db.bibliomixed.pubwork.attribute = db.biblio.pubwork.attribute + db.bibliomixed.attlist = + db.bibliomixed.role.attribute? + & db.bibliomixed.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomixed = + + ## A cooked entry in a bibliography + element bibliomixed { + db.bibliomixed.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.biblioset.relation.attribute = db.relation.attribute + db.biblioset.role.attribute = attribute role { text } + db.biblioset.attlist = + db.biblioset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblioset.relation.attribute? + db.biblioset = + + ## A raw container for related bibliographic information + element biblioset { + db.biblioset.attlist, db.bibliographic.elements+ + } +} +div { + 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.bibliomset = + + ## A cooked container for related bibliographic information + element bibliomset { + db.bibliomset.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.bibliomisc.role.attribute = attribute role { text } + db.bibliomisc.attlist = + db.bibliomisc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomisc = + + ## Untyped bibliographic information + element bibliomisc { db.bibliomisc.attlist, db._text } +} +div { + db.bibliography.status.attrib = db.status.attribute + db.bibliography.role.attribute = attribute role { text } + db.bibliography.attlist = + db.bibliography.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliography.status.attrib? + db.bibliography.info = db._info + db.bibliography = + + ## A bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliography" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliography { + db.bibliography.attlist, + db.bibliography.info, + db.all.blocks*, + (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+) + } +} +div { + db.bibliodiv.status.attrib = db.status.attribute + db.bibliodiv.role.attribute = attribute role { text } + db.bibliodiv.attlist = + db.bibliodiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliodiv.status.attrib? + db.bibliodiv.info = db._info.title.req + db.bibliodiv = + + ## A section of a bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliodiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliodiv { + db.bibliodiv.attlist, + db.bibliodiv.info, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.bibliolist.role.attribute = attribute role { text } + db.bibliolist.attlist = + db.bibliolist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliolist.info = db._info.title.only + db.bibliolist = + + ## A wrapper for a list of bibliography entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliolist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliolist { + db.bibliolist.attlist, + db.bibliolist.info?, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.biblioref.role.attribute = attribute role { text } + db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute + db.biblioref.endterm.attribute = db.endterm.attribute + db.biblioref.units.attribute = + + ## The units (for example, pages) used to identify the beginning and ending of a reference. + attribute units { xsd:token } + db.biblioref.begin.attribute = + + ## Identifies the beginning of a reference; the location within the work that is being referenced. + attribute begin { xsd:token } + db.biblioref.end.attribute = + + ## Identifies the end of a reference. + attribute end { xsd:token } + db.biblioref.attlist = + db.biblioref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.biblioref.xrefstyle.attribute? + & db.biblioref.endterm.attribute? + & db.biblioref.units.attribute? + & db.biblioref.begin.attribute? + & db.biblioref.end.attribute? + db.biblioref = + + ## A cross-reference to a bibliographic entry + element biblioref { db.biblioref.attlist, empty } +} +db.significance.enumeration = + + ## Normal + "normal" + | + ## Preferred + "preferred" +db.significance.attribute = + + ## Specifies the significance of the term + attribute significance { db.significance.enumeration } +db.zone.attribute = + + ## Specifies the IDs of the elements to which this term applies + attribute zone { xsd:IDREFS } +db.indexterm.pagenum.attribute = + + ## Indicates the page on which this index term occurs in some version of the printed document + attribute pagenum { text } +db.scope.enumeration = + + ## All indexes + "all" + | + ## The global index (as for a combined index of a set of books) + "global" + | + ## The local index (the index for this document only) + "local" +db.scope.attribute = + + ## Specifies the scope of the index term + attribute scope { db.scope.enumeration } +db.sortas.attribute = + + ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used + attribute sortas { text } +db.index.type.attribute = + + ## Specifies the target index for this term + attribute type { text } +div { + db.itermset.role.attribute = attribute role { text } + db.itermset.attlist = + db.itermset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.itermset = + + ## A set of index terms in the meta-information of a document + element itermset { db.itermset.attlist, db.indexterm.singular+ } +} +db.indexterm.contentmodel = + (db.primary, + (db.secondary, + ((db.tertiary, (db.see | db.seealso+)?)? + | (db.see | db.seealso+)?)?)?)?, + (db.see | db.seealso+)? +div { + db.indexterm.singular.role.attribute = attribute role { text } + db.indexterm.singular.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## A singular index term + "singular" + } + db.indexterm.singular.attlist = + db.indexterm.singular.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.singular.class.attribute? + db.indexterm.singular = + + ## A wrapper for an indexed term + element indexterm { + db.indexterm.singular.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.startofrange.role.attribute = attribute role { text } + db.indexterm.startofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The start of a range + "startofrange" + } + db.indexterm.startofrange.attlist = + db.indexterm.startofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.startofrange.class.attribute + db.indexterm.startofrange = + + ## A wrapper for an indexed term that covers a range + element indexterm { + db.indexterm.startofrange.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.endofrange.role.attribute = attribute role { text } + db.indexterm.endofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The end of a range + "endofrange" + } + db.indexterm.endofrange.startref.attribute = + + ## Points to the start of the range + attribute startref { xsd:IDREF } + db.indexterm.endofrange.attlist = + db.indexterm.endofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.indexterm.endofrange.class.attribute + & db.indexterm.endofrange.startref.attribute + db.indexterm.endofrange = + + ## Identifies the end of a range associated with an indexed term + [ + s:pattern [ + s:title [ "Indexterm 'startref' type constraint" ] + s:rule [ + context = "db:indexterm[@startref]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@startref]) = 'indexterm' and namespace-uri(//*[@xml:id=current()/@startref]) = 'http://docbook.org/ns/docbook'" + "@startref on indexterm must point to an indexterm." + ] + s:assert [ + test = + "//*[@xml:id=current()/@startref]/@class='startofrange'" + "@startref on indexterm must point to a startofrange indexterm." + ] + ] + ] + ] + element indexterm { db.indexterm.endofrange.attlist, empty } +} +div { + db.indexterm = + db.indexterm.singular + | db.indexterm.startofrange + | db.indexterm.endofrange +} +div { + db.primary.role.attribute = attribute role { text } + db.primary.attlist = + db.primary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.primary = + + ## The primary word or phrase under which an index term should be sorted + element primary { db.primary.attlist, db.all.inlines* } +} +div { + db.secondary.role.attribute = attribute role { text } + db.secondary.attlist = + db.secondary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.secondary = + + ## A secondary word or phrase in an index term + element secondary { db.secondary.attlist, db.all.inlines* } +} +div { + db.tertiary.role.attribute = attribute role { text } + db.tertiary.attlist = + db.tertiary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.tertiary = + + ## A tertiary word or phrase in an index term + element tertiary { db.tertiary.attlist, db.all.inlines* } +} +div { + db.see.role.attribute = attribute role { text } + db.see.class.attribute = + + ## Identifies the class of 'see' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.see.attlist = + db.see.role.attribute? + & db.see.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.see = + + ## Part of an index term directing the reader instead to another entry in the index + element see { db.see.attlist, db.all.inlines* } +} +div { + db.seealso.role.attribute = attribute role { text } + db.seealso.class.attribute = + + ## Identifies the class of 'seealso' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.seealso.attlist = + db.seealso.role.attribute? + & db.seealso.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seealso = + + ## Part of an index term directing the reader also to another entry in the index + element seealso { db.seealso.attlist, db.all.inlines* } +} +div { + db.index.status.attribute = db.status.attribute + db.index.role.attribute = attribute role { text } + db.index.attlist = + db.index.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.index.status.attribute? + & db.index.type.attribute? + db.index.info = db._info + # Yes, db.indexdiv* and db.indexentry*; that way an is valid. + # Authors can use an empty index to indicate where a generated index should + # appear. + db.index = + + ## An index to a book or part of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:index" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element index { + db.index.attlist, + db.index.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry* | db.segmentedlist) + } +} +div { + db.setindex.status.attribute = db.status.attribute + db.setindex.role.attribute = attribute role { text } + db.setindex.attlist = + db.setindex.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.setindex.status.attribute? + & db.index.type.attribute? + db.setindex.info = db._info + db.setindex = + + ## An index to a set of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:setindex" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element setindex { + db.setindex.attlist, + db.setindex.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry*) + } +} +div { + db.indexdiv.status.attribute = db.status.attribute + db.indexdiv.role.attribute = attribute role { text } + db.indexdiv.attlist = + db.indexdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.indexdiv.status.attribute? + db.indexdiv.info = db._info.title.req + db.indexdiv = + + ## A division in an index + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:indexdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element indexdiv { + db.indexdiv.attlist, + db.indexdiv.info, + db.all.blocks*, + (db.indexentry+ | db.segmentedlist) + } +} +div { + db.indexentry.role.attribute = attribute role { text } + db.indexentry.attlist = + db.indexentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.indexentry = + + ## An entry in an index + element indexentry { + db.indexentry.attlist, + db.primaryie, + (db.seeie | db.seealsoie)*, + (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)* + } +} +div { + db.primaryie.role.attribute = attribute role { text } + db.primaryie.attlist = + db.primaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.primaryie = + + ## A primary term in an index entry, not in the text + element primaryie { db.primaryie.attlist, db.all.inlines* } +} +div { + db.secondaryie.role.attribute = attribute role { text } + db.secondaryie.attlist = + db.secondaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.secondaryie = + + ## A secondary term in an index entry, rather than in the text + element secondaryie { db.secondaryie.attlist, db.all.inlines* } +} +div { + db.tertiaryie.role.attribute = attribute role { text } + db.tertiaryie.attlist = + db.tertiaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.tertiaryie = + + ## A tertiary term in an index entry, rather than in the text + element tertiaryie { db.tertiaryie.attlist, db.all.inlines* } +} +div { + db.seeie.role.attribute = attribute role { text } + db.seeie.attlist = + db.seeie.role.attribute? + & db.common.attributes + & db.linkend.attribute? + db.seeie = + + ## A See + ## entry in an index, rather than in the text + element seeie { db.seeie.attlist, db.all.inlines* } +} +div { + db.seealsoie.role.attribute = attribute role { text } + db.seealsoie.attlist = + db.seealsoie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.seealsoie = + + ## A See also + ## entry in an index, rather than in the text + element seealsoie { db.seealsoie.attlist, db.all.inlines* } +} +db.toc.pagenum.attribute = + + ## Indicates the page on which this element occurs in some version of the printed document + attribute pagenum { text } +div { + db.toc.role.attribute = attribute role { text } + db.toc.attlist = + db.toc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.toc.info = db._info.title.only + db.toc = + + ## A table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:toc" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element toc { + db.toc.attlist, + db.toc.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)* + } +} +div { + db.tocdiv.role.attribute = attribute role { text } + 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 + db.tocdiv = + + ## A division in a table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tocdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tocdiv { + db.tocdiv.attlist, + db.tocdiv.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)+ + } +} +div { + db.tocentry.role.attribute = attribute role { text } + db.tocentry.pagenum.attribute = db.toc.pagenum.attribute + db.tocentry.attlist = + db.tocentry.role.attribute? + & db.common.attributes + & db.tocentry.pagenum.attribute? + & db.linkend.attribute? + db.tocentry = + + ## A component title in a table of contents + element tocentry { db.tocentry.attlist, db.all.inlines* } +} +db.task.info = db._info.title.req +div { + db.task.role.attribute = attribute role { text } + db.task.attlist = + db.task.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.task = + + ## A task to be completed + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:task" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element task { + db.task.attlist, + db.task.info, + db.tasksummary?, + db.taskprerequisites?, + db.procedure+, + db.example*, + db.taskrelated? + } +} +div { + db.tasksummary.role.attribute = attribute role { text } + db.tasksummary.attlist = + db.tasksummary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tasksummary.info = db._info.title.only + db.tasksummary = + + ## A summary of a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tasksummary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tasksummary { + db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+ + } +} +div { + db.taskprerequisites.role.attribute = attribute role { text } + db.taskprerequisites.attlist = + db.taskprerequisites.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskprerequisites.info = db._info.title.only + db.taskprerequisites = + + ## The prerequisites for a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskprerequisites" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskprerequisites { + db.taskprerequisites.attlist, + db.taskprerequisites.info, + db.all.blocks+ + } +} +div { + db.taskrelated.role.attribute = attribute role { text } + db.taskrelated.attlist = + db.taskrelated.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskrelated.info = db._info.title.only + db.taskrelated = + + ## Information related to a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskrelated" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskrelated { + db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+ + } +} +db.area.units.enumeration = + + ## Coordinates expressed as a pair of CALS graphic coordinates. + "calspair" + | + ## Coordinates expressed as a line and column. + "linecolumn" + | + ## Coordinates expressed as a pair of lines and columns. + "linecolumnpair" + | + ## Coordinates expressed as a line range. + "linerange" +db.area.units-enum.attribute = + + ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + ## for graphics and linecolumn + ## for line-oriented elements. + attribute units { db.area.units.enumeration }? +db.area.units-other.attributes = + + ## Indicates that non-standard units are used for this area + ## . In this case otherunits + ## must be specified. + attribute units { + + ## Coordinates expressed in some non-standard units. + "other" + }?, + + ## Identifies the units used in the coords + ## attribute when the units + ## attribute is other + ## . This attribute is forbidden otherwise. + attribute otherunits { xsd:NMTOKEN } +db.area.units.attribute = + db.area.units-enum.attribute | db.area.units-other.attributes +div { + db.calloutlist.role.attribute = attribute role { text } + db.calloutlist.attlist = + db.calloutlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.calloutlist.info = db._info.title.only + db.calloutlist = + + ## A list of callout + ## s + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:calloutlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element calloutlist { + db.calloutlist.attlist, + db.calloutlist.info, + db.all.blocks*, + db.callout+ + } +} +div { + db.callout.role.attribute = attribute role { text } + db.callout.arearefs.attribute = + + ## Identifies the areas described by this callout. + attribute arearefs { xsd:IDREFS } + db.callout.attlist = + db.callout.role.attribute? + & db.common.attributes + & db.callout.arearefs.attribute + # This requires an XPath 2.0 compatible Schematron processor + db.callout = + + ## A called out + ## description of a marked area + [ + s:pattern [ + s:title [ "Callout cross reference constraint" ] + s:rule [ + context = "db:callout[@arearefs]" + s:assert [ + test = + "every $id in tokenize(current()/@arearefs) satisfies (every $ar in //*[@xml:id = $id] satisfies (local-name($ar) = ('areaset', 'area', 'co') and namespace-uri($ar) = 'http://docbook.org/ns/docbook'))" + "@arearefs on callout must point to a areaset, area, or co." + ] + ] + ] + ] + element callout { db.callout.attlist, db.all.blocks+ } +} +div { + db.programlistingco.role.attribute = attribute role { text } + db.programlistingco.attlist = + db.programlistingco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.programlistingco.info = db._info.title.forbidden + db.programlistingco = + + ## A program listing with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlistingco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlistingco { + db.programlistingco.attlist, + db.programlistingco.info, + db.areaspec, + db.programlisting, + db.calloutlist* + } +} +div { + db.areaspec.role.attribute = attribute role { text } + db.areaspec.attlist = + db.areaspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.area.units.attribute + db.areaspec = + + ## A collection of regions in a graphic or code example + element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ } +} +div { + db.area.role.attribute = attribute role { text } + db.area.linkends.attribute = + + ## Point to the callout + ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + attribute linkends { xsd:IDREFS } + db.area.label.attribute = + + ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + attribute label { text } + db.area.coords.attribute = + + ## Provides the coordinates of the area. The coordinates must be interpreted using the units + ## specified. + attribute coords { text } + db.area.attlist = + db.area.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area = + + ## A region defined for a callout in a graphic or code example + element area { db.area.attlist, db.alt? } +} +div { + # The only difference is that xml:id is optional + db.area.inareaset.attlist = + db.area.role.attribute? + & db.common.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area.inareaset = + + ## A region defined for a callout in a graphic or code example + element area { db.area.inareaset.attlist, db.alt? } +} +div { + db.areaset.role.attribute = attribute role { text } + db.areaset.linkends.attribute = db.linkends.attribute + db.areaset.label.attribute = db.label.attribute + db.areaset.attlist = + db.areaset.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.areaset.linkends.attribute | db.xlink.simple.link.attributes)? + & db.areaset.label.attribute? + db.areaset = + + ## A set of related areas in a graphic or code example + element areaset { db.areaset.attlist, db.area.inareaset+ } +} +div { + db.screenco.role.attribute = attribute role { text } + db.screenco.attlist = + db.screenco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenco.info = db._info.title.forbidden + db.screenco = + + ## A screen with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenco { + db.screenco.attlist, + db.screenco.info, + db.areaspec, + db.screen, + db.calloutlist* + } +} +div { + db.imageobjectco.role.attribute = attribute role { text } + db.imageobjectco.attlist = + db.imageobjectco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobjectco.info = db._info.title.forbidden + db.imageobjectco = + + ## A wrapper for an image object with callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobjectco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobjectco { + db.imageobjectco.attlist, + db.imageobjectco.info, + db.areaspec, + db.imageobject+, + db.calloutlist* + } +} +div { + db.co.role.attribute = attribute role { text } + db.co.linkends.attribute = db.linkends.attribute + db.co.label.attribute = db.label.attribute + db.co.attlist = + db.co.role.attribute? + & db.common.idreq.attributes + & db.co.linkends.attribute? + & db.co.label.attribute? + db.co = + + ## The location of a callout embedded in text + element co { db.co.attlist, empty } +} +div { + db.coref.role.attribute = attribute role { text } + db.coref.label.attribute = db.label.attribute + db.coref.attlist = + db.coref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.coref.label.attribute? + db.coref = + + ## A cross reference to a co + element coref { db.coref.attlist, empty } +} +div { + db.productionset.role.attribute = attribute role { text } + db.productionset.attlist = + db.productionset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productionset.info = db._info.title.only + db.productionset = + + ## A set of EBNF productions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:productionset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element productionset { + db.productionset.attlist, + db.productionset.info, + (db.production | db.productionrecap)+ + } +} +div { + db.production.role.attribute = attribute role { text } + db.production.attlist = + db.production.role.attribute? + & db.common.idreq.attributes + & db.common.linking.attributes + db.production = + + ## A production in a set of EBNF productions + element production { + db.production.attlist, db.lhs, db.rhs+, db.constraint* + } +} +div { + db.lhs.role.attribute = attribute role { text } + db.lhs.attlist = + db.lhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lhs = + + ## The left-hand side of an EBNF production + element lhs { db.lhs.attlist, text } +} +div { + db.rhs.role.attribute = attribute role { text } + db.rhs.attlist = + db.rhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.rhs = + + ## The right-hand side of an EBNF production + element rhs { + db.rhs.attlist, + (text | db.nonterminal | db.lineannotation | db.sbr)* + } +} +div { + db.nonterminal.role.attribute = attribute role { text } + db.nonterminal.def.attribute = + + ## Specifies a URI that points to a production + ## where the nonterminal + ## is defined + attribute def { xsd:anyURI } + db.nonterminal.attlist = + db.nonterminal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.nonterminal.def.attribute + db.nonterminal = + + ## A non-terminal in an EBNF production + element nonterminal { db.nonterminal.attlist, text } +} +div { + db.constraint.role.attribute = attribute role { text } + db.constraint.attlist = + db.constraint.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.constraint = + + ## A constraint in an EBNF production + [ + s:pattern [ + s:title [ "Constraint cross reference constraint" ] + s:rule [ + context = "db:constraint[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'constraintdef' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on constraint must point to a constraintdef." + ] + ] + ] + ] + element constraint { db.constraint.attlist, empty } +} +div { + db.productionrecap.role.attribute = attribute role { text } + db.productionrecap.attlist = + db.productionrecap.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.productionrecap = + + ## A cross-reference to an EBNF production + [ + s:pattern [ + s:title [ "Production recap cross reference constraint" ] + s:rule [ + context = "db:productionrecap[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'production' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on productionrecap must point to a production." + ] + ] + ] + ] + element productionrecap { db.productionrecap.attlist, empty } +} +div { + db.constraintdef.role.attribute = attribute role { text } + db.constraintdef.attlist = + db.constraintdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.constraintdef.info = db._info.title.only + db.constraintdef = + + ## The definition of a constraint in an EBNF production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constraintdef" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constraintdef { + db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+ + } +} +db.char.attribute = + + ## Specifies the alignment character when align + ## is set to char + ## . + attribute char { text } +db.charoff.attribute = + + ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + ## when align + ## is set to char + ## . + attribute charoff { + xsd:decimal { minExclusive = "0" maxExclusive = "100" } + } +db.frame.attribute = + + ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + attribute frame { + + ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + "all" + | + ## Frame only the bottom of the table. + "bottom" + | + ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + "none" + | + ## Frame the left and right sides of the table. + "sides" + | + ## Frame the top of the table. + "top" + | + ## Frame the top and bottom of the table. + "topbot" + } +db.colsep.attribute = + + ## Specifies the presence or absence of the column separator + attribute colsep { + + ## No column separator rule. + "0" + | + ## Provide a column separator rule on the right + "1" + } +db.rowsep.attribute = + + ## Specifies the presence or absence of the row separator + attribute rowsep { + + ## No row separator rule. + "0" + | + ## Provide a row separator rule below + "1" + } +db.orient.attribute = + + ## Specifies the orientation of the table + attribute orient { + + ## 90 degrees counter-clockwise from the rest of the text flow. + "land" + | + ## The same orientation as the rest of the text flow. + "port" + } +db.tabstyle.attribute = + + ## Specifies the table style + attribute tabstyle { text } +db.rowheader.attribute = + + ## Indicates whether or not the entries in the first column should be considered row headers + attribute rowheader { + + ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + "firstcol" + | + ## Indicates that row headers are identified by use of the headers attribute on entries in the table. + "headers" + | + ## Indicates that entries in the first column have no special significance with respect to column headers. + "norowheader" + } +db.align.attribute = + + ## Specifies the horizontal alignment of text in an entry. + attribute align { + + ## Centered. + "center" + | + ## Aligned on a particular character. + "char" + | + ## Left and right justified. + "justify" + | + ## Left justified. + "left" + | + ## Right justified. + "right" + } +db.valign.attribute = + + ## Specifies the vertical alignment of text in an entry. + attribute valign { + + ## Aligned on the bottom of the entry. + "bottom" + | + ## Aligned in the middle. + "middle" + | + ## Aligned at the top of the entry. + "top" + } +db.specify-col-by-colname.attributes = + + ## Specifies a column specification by name. + attribute colname { text } +db.specify-col-by-namest.attributes = + + ## Specifies a starting column by name. + attribute namest { text } +db.specify-span-by-spanspec.attributes = + + ## Specifies a span by name. + attribute spanname { text } +db.specify-span-directly.attributes = + + ## Specifies a starting column by name. + attribute namest { text } + & + ## Specifies an ending column by name. + attribute nameend { text } +db.column-spec.attributes = + db.specify-col-by-colname.attributes + | db.specify-col-by-namest.attributes + | db.specify-span-by-spanspec.attributes + | db.specify-span-directly.attributes +db.colname.attribute = + + ## Provides a name for a column specification. + attribute colname { text } +db.spanname.attribute = + + ## Provides a name for a span specification. + attribute spanname { text } +div { + db.tgroup.role.attribute = attribute role { text } + db.tgroup.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.tgroup.cols.attribute = + + ## The number of columns in the table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.tgroup.attlist = + db.tgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.tgroup.tgroupstyle.attribute? + & db.tgroup.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.tgroup = + + ## A wrapper for the main content of a table, or part of a table + element tgroup { + db.tgroup.attlist, + db.colspec*, + db.spanspec*, + db.cals.thead?, + db.cals.tfoot?, + db.cals.tbody + } +} +div { + db.colspec.role.attribute = attribute role { text } + db.colspec.colnum.attribute = + + ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + attribute colnum { xsd:positiveInteger } + db.colspec.colwidth.attribute = + + ## Specifies the width of the column. + attribute colwidth { text } + db.colspec.attlist = + db.colspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.colspec.colnum.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.colspec.colwidth.attribute? + & db.charoff.attribute? + & db.colname.attribute? + & db.rowsep.attribute? + & db.align.attribute? + & db.rowheader.attribute? + db.colspec = + + ## Specifications for a column in a table + element colspec { db.colspec.attlist, empty } +} +div { + db.spanspec.role.attribute = attribute role { text } + db.spanspec.namest.attribute = + + ## Specifies a starting column by name. + attribute namest { text } + db.spanspec.nameend.attribute = + + ## Specifies an ending column by name. + attribute nameend { text } + db.spanspec.attlist = + db.spanspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spanname.attribute + & db.spanspec.namest.attribute + & db.spanspec.nameend.attribute + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.spanspec = + + ## Formatting information for a spanned column in a table + element spanspec { db.spanspec.attlist, empty } +} +div { + db.cals.thead.role.attribute = attribute role { text } + db.cals.thead.attlist = + db.cals.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.thead = + + ## A table header consisting of one or more rows + element thead { db.cals.thead.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tfoot.role.attribute = attribute role { text } + db.cals.tfoot.attlist = + db.cals.tfoot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tfoot = + + ## A table footer consisting of one or more rows + element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tbody.role.attribute = attribute role { text } + db.cals.tbody.attlist = + db.cals.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.tbody.attlist, db.row+ } +} +div { + db.row.role.attribute = attribute role { text } + db.row.attlist = + db.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.row = + + ## A row in a table + element row { db.row.attlist, (db.entry | db.entrytbl)+ } +} +div { + db.entry.role.attribute = attribute role { text } + db.entry.morerows.attribute = + + ## Specifies the number of additional rows which this entry occupies. Defaults to zero. + attribute morerows { xsd:integer } + db.entry.rotate.attribute = + + ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + attribute rotate { + + ## Do not rotate the cell. + "0" + | + ## Rotate the cell 90 degrees counter-clockwise. + "1" + } + db.entry.scope.attribute = + + ## Specifies the scope of a header. + attribute scope { + + ## Applies to the row + "row" + | + ## Applies to the column + "col" + | + ## Applies to the row group + "rowgroup" + | + ## Applies to the column group + "colgroup" + } + db.entry.headers.attribute = + + ## Specifies the entry or entries which serve as headers for this element. + attribute headers { xsd:IDREFS } + db.entry.attlist = + db.entry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.entry.morerows.attribute? + & db.column-spec.attributes? + & db.rowsep.attribute? + & db.entry.rotate.attribute? + & db.align.attribute? + & db.entry.scope.attribute? + & db.entry.headers.attribute? + db.entry = + + ## A cell in a table + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of entry" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:informaltable)" + "informaltable must not occur among the children or descendants of entry" + ] + ] + ] + ] + element entry { + db.entry.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.entrytbl.role.attribute = attribute role { text } + db.entrytbl.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.entrytbl.cols.attribute = + + ## The number of columns in the entry table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.entrytbl.attlist = + db.entrytbl.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.column-spec.attributes? + & db.entrytbl.tgroupstyle.attribute? + & db.entrytbl.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.entrytbl = + + ## A subtable appearing in place of an entry in a table + element entrytbl { + db.entrytbl.attlist, + db.colspec*, + db.spanspec*, + db.cals.entrytbl.thead?, + db.cals.entrytbl.tbody + } +} +div { + db.cals.entrytbl.thead.role.attribute = attribute role { text } + db.cals.entrytbl.thead.attlist = + db.cals.entrytbl.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.thead = + + ## A table header consisting of one or more rows + element thead { + db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+ + } +} +div { + db.cals.entrytbl.tbody.role.attribute = attribute role { text } + db.cals.entrytbl.tbody.attlist = + db.cals.entrytbl.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ } +} +div { + db.entrytbl.row.role.attribute = attribute role { text } + db.entrytbl.row.attlist = + db.entrytbl.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.entrytbl.row = + + ## A row in a table + element row { db.entrytbl.row.attlist, db.entry+ } +} +div { + db.cals.table.role.attribute = attribute role { text } + db.cals.table.label.attribute = db.label.attribute + db.cals.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.table.attlist = + db.cals.table.role.attribute? + & db.cals.table.type.attribute? + & db.cals.table.label.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & + ## Indicates if the short or long title should be used in a List of Tables + attribute shortentry { + + ## Indicates that the full title should be used. + "0" + | + ## Indicates that the short short title (titleabbrev) should be used. + "1" + }? + & + ## Indicates if the table should appear in a List of Tables + attribute tocentry { + + ## Indicates that the table should not occur in the List of Tables. + "0" + | + ## Indicates that the table should appear in the List of Tables. + "1" + }? + & db.rowheader.attribute? + db.cals.table.info = db._info.title.onlyreq + db.cals.table = + + ## A formal table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { + db.cals.table.attlist, + db.cals.table.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +div { + db.cals.informaltable.role.attribute = attribute role { text } + db.cals.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.informaltable.attlist = + db.cals.informaltable.role.attribute? + & db.cals.informaltable.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & db.rowheader.attribute? + db.cals.informaltable.info = db._info.title.forbidden + db.cals.informaltable = + + ## A table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.cals.informaltable.attlist, + db.cals.informaltable.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +db.html.coreattrs = + + ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + attribute class { text }? + & + ## This attribute specifies style information for the current element. + attribute style { text }? + & + ## This attribute offers advisory information about the element for which it is set. + attribute title { text }? +db.html.i18n = + + ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + attribute lang { text }? +db.html.events = + + ## Occurs when the pointing device button is clicked over an element. + attribute onclick { text }? + & + ## Occurs when the pointing device button is double clicked over an element. + attribute ondblclick { text }? + & + ## Occurs when the pointing device button is pressed over an element. + attribute onmousedown { text }? + & + ## Occurs when the pointing device button is released over an element. + attribute onmouseup { text }? + & + ## Occurs when the pointing device is moved onto an element. + attribute onmouseover { text }? + & + ## Occurs when the pointing device is moved while it is over an element. + attribute onmousemove { text }? + & + ## Occurs when the pointing device is moved away from an element. + attribute onmouseout { text }? + & + ## Occurs when a key is pressed and released over an element. + attribute onkeypress { text }? + & + ## Occurs when a key is pressed down over an element. + attribute onkeydown { text }? + & + ## Occurs when a key is released over an element. + attribute onkeyup { text }? +db.html.attrs = + db.common.attributes + & db.html.coreattrs + & db.html.i18n + & db.html.events +db.html.cellhalign = + + ## Specifies the alignment of data and the justification of text in a cell. + attribute align { + + ## Left-flush data/Left-justify text. This is the default value for table data. + "left" + | + ## Center data/Center-justify text. This is the default value for table headers. + "center" + | + ## Right-flush data/Right-justify text. + "right" + | + ## Double-justify text. + "justify" + | + ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + "char" + }? + & + ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + attribute char { text }? + & + ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + attribute charoff { + xsd:integer >> a:documentation [ "An explicit offset." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage offset." ] + }? +db.html.cellvalign = + + ## Specifies the vertical position of data within a cell. + attribute valign { + + ## Cell data is flush with the top of the cell. + "top" + | + ## Cell data is centered vertically within the cell. This is the default value. + "middle" + | + ## Cell data is flush with the bottom of the cell. + "bottom" + | + ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + "baseline" + }? +db.html.table.attributes = + + ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + attribute summary { text }? + & + ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + attribute width { + xsd:integer >> a:documentation [ "An explicit width." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage width." ] + }? + & + ## Specifies the width (in pixels only) of the frame around a table. + attribute border { xsd:nonNegativeInteger }? + & + ## Specifies which sides of the frame surrounding a table will be visible. + attribute frame { + + ## No sides. This is the default value. + "void" + | + ## The top side only. + "above" + | + ## The bottom side only. + "below" + | + ## The top and bottom sides only. + "hsides" + | + ## The left-hand side only. + "lhs" + | + ## The right-hand side only. + "rhs" + | + ## The right and left sides only. + "vsides" + | + ## All four sides. + "box" + | + ## All four sides. + "border" + }? + & + ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + attribute rules { + + ## No rules. This is the default value. + "none" + | + ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + "groups" + | + ## Rules will appear between rows only. + "rows" + | + ## Rules will appear between columns only. + "cols" + | + ## Rules will appear between all rows and columns. + "all" + }? + & + ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + attribute cellspacing { + xsd:integer >> a:documentation [ "An explicit spacing." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage spacing." ] + }? + & + ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + attribute cellpadding { + xsd:integer >> a:documentation [ "An explicit padding." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage padding." ] + }? +db.html.tablecell.attributes = + + ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + attribute abbr { text }? + & + ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + attribute axis { text }? + & + ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + attribute headers { text }? + & + ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + attribute scope { + + ## The current cell provides header information for the rest of the row that contains it + "row" + | + ## The current cell provides header information for the rest of the column that contains it. + "col" + | + ## The header cell provides header information for the rest of the row group that contains it. + "rowgroup" + | + ## The header cell provides header information for the rest of the column group that contains it. + "colgroup" + }? + & + ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all rows from the current row to the last row of the table section (thead + ## , tbody + ## , or tfoot + ## ) in which the cell is defined. + attribute rowspan { xsd:nonNegativeInteger }? + & + ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup + ## ) in which the cell is defined. + attribute colspan { xsd:nonNegativeInteger }? +db.html.table.info = db._info.title.forbidden +db.html.table.model = + db.html.table.info?, + db.html.caption, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +db.html.informaltable.info = db._info.title.forbidden +db.html.informaltable.model = + db.html.informaltable.info?, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +div { + db.html.table.role.attribute = attribute role { text } + db.html.table.label.attribute = db.label.attribute + db.html.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.table.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.table.role.attribute? + & db.html.table.type.attribute? + & db.html.table.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.table = + + ## A formal (captioned) HTML table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { db.html.table.attlist, db.html.table.model } +} +div { + db.html.informaltable.role.attribute = attribute role { text } + db.html.informaltable.label.attribute = db.label.attribute + db.html.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.informaltable.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.informaltable.role.attribute? + & db.html.informaltable.type.attribute? + & db.html.informaltable.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.informaltable = + + ## An HTML table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.html.informaltable.attlist, db.html.informaltable.model + } +} +div { + db.html.caption.attlist = db.html.attrs + db.html.caption = + + ## An HTML table caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { db.html.caption.attlist, db.all.inlines* } +} +div { + db.html.col.attlist = + db.html.attrs + & + ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned + ## by the col + ## element; the col + ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + ## element shares its attributes with the next N-1 columns. + attribute span { xsd:nonNegativeInteger }? + & + ## Specifies a default width for each column spanned by the current col + ## element. It has the same meaning as the width + ## attribute for the colgroup + ## element and overrides it. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.col = + + ## Specifications for a column in an HTML table + element col { db.html.col.attlist, empty } +} +div { + db.html.colgroup.attlist = + db.html.attrs + & + ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + ## element contains one or more col + ## elements. + attribute span { xsd:nonNegativeInteger }? + & + ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + ## element. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.colgroup = + + ## A group of columns in an HTML table + element colgroup { db.html.colgroup.attlist, db.html.col* } +} +div { + db.html.thead.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.thead = + + ## A table header consisting of one or more rows in an HTML table + element thead { db.html.thead.attlist, db.html.tr+ } +} +div { + db.html.tfoot.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tfoot = + + ## A table footer consisting of one or more rows in an HTML table + element tfoot { db.html.tfoot.attlist, db.html.tr+ } +} +div { + db.html.tbody.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tbody = + + ## A wrapper for the rows of an HTML table or informal HTML table + element tbody { db.html.tbody.attlist, db.html.tr+ } +} +div { + db.html.tr.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tr = + + ## A row in an HTML table + element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ } +} +div { + db.html.th.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.th = + + ## A table header entry in an HTML table + element th { + db.html.th.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.html.td.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.td = + + ## A table entry in an HTML table + element td { + db.html.td.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.msgset.role.attribute = attribute role { text } + db.msgset.attlist = + db.msgset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgset.info = db._info.title.only + db.msgset = + + ## A detailed set of messages, usually error messages + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgset { + db.msgset.attlist, + db.msgset.info, + (db.msgentry+ | db.simplemsgentry+) + } +} +div { + db.msgentry.role.attribute = attribute role { text } + db.msgentry.attlist = + db.msgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgentry = + + ## A wrapper for an entry in a message set + element msgentry { + db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan* + } +} +div { + db.simplemsgentry.role.attribute = attribute role { text } + db.simplemsgentry.msgaud.attribute = + + ## The audience to which the message relevant + attribute msgaud { text } + db.simplemsgentry.msgorig.attribute = + + ## The origin of the message + attribute msgorig { text } + db.simplemsgentry.msglevel.attribute = + + ## The level of importance or severity of a message + attribute msglevel { text } + db.simplemsgentry.attlist = + db.simplemsgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplemsgentry.msgaud.attribute? + & db.simplemsgentry.msgorig.attribute? + & db.simplemsgentry.msglevel.attribute? + db.simplemsgentry = + + ## A wrapper for a simpler entry in a message set + element simplemsgentry { + db.simplemsgentry.attlist, db.msgtext, db.msgexplan+ + } +} +div { + db.msg.role.attribute = attribute role { text } + db.msg.attlist = + db.msg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msg.info = db._info.title.only + db.msg = + + ## A message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msg" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msg { + db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)* + } +} +div { + db.msgmain.role.attribute = attribute role { text } + db.msgmain.attlist = + db.msgmain.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgmain.info = db._info.title.only + db.msgmain = + + ## The primary component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgmain" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext } +} +div { + db.msgsub.role.attribute = attribute role { text } + db.msgsub.attlist = + db.msgsub.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgsub.info = db._info.title.only + db.msgsub = + + ## A subcomponent of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgsub" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext } +} +div { + db.msgrel.role.attribute = attribute role { text } + db.msgrel.attlist = + db.msgrel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgrel.info = db._info.title.only + db.msgrel = + + ## A related component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgrel" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext } +} +div { + db.msgtext.role.attribute = attribute role { text } + db.msgtext.attlist = + db.msgtext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgtext = + + ## The actual text of a message component in a message set + element msgtext { db.msgtext.attlist, db.all.blocks+ } +} +div { + db.msginfo.role.attribute = attribute role { text } + db.msginfo.attlist = + db.msginfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msginfo = + + ## Information about a message in a message set + element msginfo { + db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)* + } +} +div { + db.msglevel.role.attribute = attribute role { text } + db.msglevel.attlist = + db.msglevel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msglevel = + + ## The level of importance or severity of a message in a message set + element msglevel { db.msglevel.attlist, db._text } +} +div { + db.msgorig.role.attribute = attribute role { text } + db.msgorig.attlist = + db.msgorig.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgorig = + + ## The origin of a message in a message set + element msgorig { db.msgorig.attlist, db._text } +} +div { + db.msgaud.role.attribute = attribute role { text } + db.msgaud.attlist = + db.msgaud.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgaud = + + ## The audience to which a message in a message set is relevant + element msgaud { db.msgaud.attlist, db._text } +} +div { + db.msgexplan.role.attribute = attribute role { text } + db.msgexplan.attlist = + db.msgexplan.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgexplan.info = db._info.title.only + db.msgexplan = + + ## Explanatory material relating to a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgexplan" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgexplan { + db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+ + } +} +div { + db.qandaset.role.attribute = attribute role { text } + db.qandaset.defaultlabel.enumeration = + + ## No labels + "none" + | + ## Numeric labels + "number" + | + ## "Q:" and "A:" labels + "qanda" + db.qandaset.defaultlabel.attribute = + + ## Specifies the default labelling + attribute defaultlabel { db.qandaset.defaultlabel.enumeration } + db.qandaset.attlist = + db.qandaset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.qandaset.defaultlabel.attribute? + db.qandaset.info = db._info.title.only + db.qandaset = + + ## A question-and-answer set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaset { + db.qandaset.attlist, + db.qandaset.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandadiv.role.attribute = attribute role { text } + db.qandadiv.attlist = + db.qandadiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandadiv.info = db._info.title.only + db.qandadiv = + + ## A titled division in a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandadiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandadiv { + db.qandadiv.attlist, + db.qandadiv.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandaentry.role.attribute = attribute role { text } + db.qandaentry.attlist = + db.qandaentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandaentry.info = db._info.title.only + db.qandaentry = + + ## A question/answer set within a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaentry { + db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer* + } +} +div { + db.question.role.attribute = attribute role { text } + db.question.attlist = + db.question.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.question = + + ## A question in a qandaset + element question { db.question.attlist, db.label?, db.all.blocks+ } +} +div { + db.answer.role.attribute = attribute role { text } + db.answer.attlist = + db.answer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.answer = + + ## An answer to a question posed in a qandaset + element answer { db.answer.attlist, db.label?, db.all.blocks+ } +} +div { + db.label.role.attribute = attribute role { text } + db.label.attlist = + db.label.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.label = + + ## A label on a question or answer + element label { db.label.attlist, db._text } +} +db.math.inlines = db.inlineequation +db.equation.content = (db.mediaobject+ | db.mathphrase+) | db._any.mml+ +db.inlineequation.content = + (db.inlinemediaobject+ | db.mathphrase+) | db._any.mml+ +div { + db.equation.role.attribute = attribute role { text } + db.equation.label.attribute = db.label.attribute + db.equation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.equation.attlist = + db.equation.role.attribute? + & db.equation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.equation.label.attribute? + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.equation.info = db._info.title.only + db.equation = + + ## A displayed mathematical equation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:equation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element equation { + db.equation.attlist, + db.equation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.informalequation.role.attribute = attribute role { text } + db.informalequation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.informalequation.attlist = + db.informalequation.role.attribute? + & db.informalequation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.informalequation.info = db._info.title.forbidden + db.informalequation = + + ## A displayed mathematical equation without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalequation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalequation { + db.informalequation.attlist, + db.informalequation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.inlineequation.role.attribute = attribute role { text } + db.inlineequation.attlist = + db.inlineequation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlineequation = + + ## A mathematical equation or expression occurring inline + element inlineequation { + db.inlineequation.attlist, db.alt?, db.inlineequation.content + } +} +div { + db.mathphrase.role.attribute = attribute role { text } + db.mathphrase.attlist = + db.mathphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mathphrase = + + ## A mathematical phrase that can be represented with ordinary text and a small amount of markup + element mathphrase { + db.mathphrase.attlist, + (db._text | db.ubiq.inlines | db._emphasis)* + } +} +db.imagedata.mathml.content = db._any.mml +div { + db.imagedata.mathml.role.attribute = attribute role { text } + db.imagedata.mathml.attlist = + db.imagedata.mathml.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is MathML + attribute format { + + ## Specifies MathML. + "mathml" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.mathml.info = db._info.title.forbidden + db.imagedata.mathml = + + ## A MathML expression in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.mathml.attlist, + db.imagedata.mathml.info, + db.imagedata.mathml.content+ + } +} +div { + db._any.mml = + + ## Any element from the MathML namespace + element mml:* { (db._any.attribute | text | db._any)* } +} +db.imagedata.svg.content = db._any.svg +div { + db.imagedata.svg.role.attribute = attribute role { text } + db.imagedata.svg.attlist = + db.imagedata.svg.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is SVG + attribute format { + + ## Specifies SVG. + "svg" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.svg.info = db._info.title.forbidden + db.imagedata.svg = + + ## An SVG drawing in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.svg.attlist, + db.imagedata.svg.info, + db.imagedata.svg.content+ + } +} +div { + db._any.svg = + + ## Any element from the SVG namespace + element svg:* { (db._any.attribute | text | db._any)* } +} +db.markup.inlines = + db.tag + | db.markup + | db.token + | db.symbol + | db.literal + | db.code + | db.constant + | db.email + | db.uri +div { + db.markup.role.attribute = attribute role { text } + db.markup.attlist = + db.markup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.markup = + + ## A string of formatting markup in text that is to be represented literally + element markup { db.markup.attlist, db._text } +} +div { + db.tag.role.attribute = attribute role { text } + db.tag.class.enumeration = + + ## An attribute + "attribute" + | + ## An attribute value + "attvalue" + | + ## An element + "element" + | + ## An empty element tag + "emptytag" + | + ## An end tag + "endtag" + | + ## A general entity + "genentity" + | + ## The local name part of a qualified name + "localname" + | + ## A namespace + "namespace" + | + ## A numeric character reference + "numcharref" + | + ## A parameter entity + "paramentity" + | + ## A processing instruction + "pi" + | + ## The prefix part of a qualified name + "prefix" + | + ## An SGML comment + "comment" + | + ## A start tag + "starttag" + | + ## An XML processing instruction + "xmlpi" + db.tag.class.attribute = + + ## Identifies the nature of the tag content + attribute class { db.tag.class.enumeration } + db.tag.namespace.attribute = + + ## Identifies the namespace of the tag content + attribute namespace { xsd:anyURI } + db.tag.attlist = + db.tag.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tag.class.attribute? + & db.tag.namespace.attribute? + db.tag = + + ## A component of XML (or SGML) markup + element tag { db.tag.attlist, (db._text | db.tag)* } +} +div { + db.symbol.class.attribute = + + ## Identifies the class of symbol + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.symbol.role.attribute = attribute role { text } + db.symbol.attlist = + db.symbol.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.symbol.class.attribute? + db.symbol = + + ## A name that is replaced by a value before processing + element symbol { db.symbol.attlist, db._text } +} +div { + db.token.role.attribute = attribute role { text } + db.token.attlist = + db.token.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.token = + + ## A unit of information + element token { db.token.attlist, db._text } +} +div { + db.literal.role.attribute = attribute role { text } + db.literal.attlist = + db.literal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.literal = + + ## Inline text that is some literal value + element literal { db.literal.attlist, db._text } +} +div { + code.language.attribute = + + ## Identifies the (computer) language of the code fragment + attribute language { text } + db.code.role.attribute = attribute role { text } + db.code.attlist = + db.code.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & code.language.attribute? + db.code = + + ## An inline code fragment + element code { + db.code.attlist, (db.programming.inlines | db._text)* + } +} +div { + db.constant.class.attribute = + + ## Identifies the class of constant + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.constant.role.attribute = attribute role { text } + db.constant.attlist = + db.constant.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.constant.class.attribute? + db.constant = + + ## A programming or system constant + element constant { db.constant.attlist, db._text } +} +div { + db.productname.role.attribute = attribute role { text } + db.productname.class.enumeration = + + ## A name with a copyright + "copyright" + | + ## A name with a registered copyright + "registered" + | + ## A name of a service + "service" + | + ## A name which is trademarked + "trade" + db.productname.class.attribute = + + ## Specifies the class of product name + attribute class { db.productname.class.enumeration } + db.productname.attlist = + db.productname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.productname.class.attribute? + db.productname = + + ## The formal name of a product + element productname { db.productname.attlist, db._text } +} +div { + db.productnumber.role.attribute = attribute role { text } + db.productnumber.attlist = + db.productnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productnumber = + + ## A number assigned to a product + element productnumber { db.productnumber.attlist, db._text } +} +div { + db.database.class.enumeration = + + ## An alternate or secondary key + "altkey" + | + ## A constraint + "constraint" + | + ## A data type + "datatype" + | + ## A field + "field" + | + ## A foreign key + "foreignkey" + | + ## A group + "group" + | + ## An index + "index" + | + ## The first or primary key + "key1" + | + ## An alternate or secondary key + "key2" + | + ## A name + "name" + | + ## The primary key + "primarykey" + | + ## A (stored) procedure + "procedure" + | + ## A record + "record" + | + ## A rule + "rule" + | + ## The secondary key + "secondarykey" + | + ## A table + "table" + | + ## A user + "user" + | + ## A view + "view" + db.database.class.attribute = + + ## Identifies the class of database artifact + attribute class { db.database.class.enumeration } + db.database.role.attribute = attribute role { text } + db.database.attlist = + db.database.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.database.class.attribute? + db.database = + + ## The name of a database, or part of a database + element database { db.database.attlist, db._text } +} +div { + db.application.class.enumeration = + + ## A hardware application + "hardware" + | + ## A software application + "software" + db.application.class.attribute = + + ## Identifies the class of application + attribute class { db.application.class.enumeration } + db.application.role.attribute = attribute role { text } + db.application.attlist = + db.application.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.application.class.attribute? + db.application = + + ## The name of a software program + element application { db.application.attlist, db._text } +} +div { + db.hardware.role.attribute = attribute role { text } + db.hardware.attlist = + db.hardware.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.hardware = + + ## A physical part of a computer system + element hardware { db.hardware.attlist, db._text } +} +db.gui.inlines = + db.guiicon + | db.guibutton + | db.guimenuitem + | db.guimenu + | db.guisubmenu + | db.guilabel + | db.menuchoice + | db.mousebutton +div { + db.guibutton.role.attribute = attribute role { text } + db.guibutton.attlist = + db.guibutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guibutton = + + ## The text on a button in a GUI + element guibutton { + db.guibutton.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guiicon.role.attribute = attribute role { text } + db.guiicon.attlist = + db.guiicon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guiicon = + + ## Graphic and/or text appearing as a icon in a GUI + element guiicon { + db.guiicon.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guilabel.role.attribute = attribute role { text } + db.guilabel.attlist = + db.guilabel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guilabel = + + ## The text of a label in a GUI + element guilabel { + db.guilabel.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenu.role.attribute = attribute role { text } + db.guimenu.attlist = + db.guimenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenu = + + ## The name of a menu in a GUI + element guimenu { + db.guimenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenuitem.role.attribute = attribute role { text } + db.guimenuitem.attlist = + db.guimenuitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenuitem = + + ## The name of a terminal menu item in a GUI + element guimenuitem { + db.guimenuitem.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guisubmenu.role.attribute = attribute role { text } + db.guisubmenu.attlist = + db.guisubmenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guisubmenu = + + ## The name of a submenu in a GUI + element guisubmenu { + db.guisubmenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.menuchoice.role.attribute = attribute role { text } + db.menuchoice.attlist = + db.menuchoice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.menuchoice = + + ## A selection or series of selections from a menu + element menuchoice { + db.menuchoice.attlist, + db.shortcut?, + (db.guibutton + | db.guiicon + | db.guilabel + | db.guimenu + | db.guimenuitem + | db.guisubmenu)+ + } +} +div { + db.mousebutton.role.attribute = attribute role { text } + db.mousebutton.attlist = + db.mousebutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mousebutton = + + ## The conventional name of a mouse button + element mousebutton { db.mousebutton.attlist, db._text } +} +db.keyboard.inlines = + db.keycombo + | db.keycap + | db.keycode + | db.keysym + | db.shortcut + | db.accel +div { + db.keycap.function.enumeration = + + ## The "Alt" key + "alt" + | + ## The "Alt Graph" key + "altgr" + | + ## The "Backspace" key + "backspace" + | + ## The "Command" key + "command" + | + ## The "Control" key + "control" + | + ## The "Delete" key + "delete" + | + ## The down arrow + "down" + | + ## The "End" key + "end" + | + ## The "Enter" key + "enter" + | + ## The "Escape" key + "escape" + | + ## The "Home" key + "home" + | + ## The "Insert" key + "insert" + | + ## The left arrow + "left" + | + ## The "Meta" key + "meta" + | + ## The "Option" key + "option" + | + ## The page down key + "pagedown" + | + ## The page up key + "pageup" + | + ## The right arrow + "right" + | + ## The "Return" key + "return" + | + ## The "Shift" key + "shift" + | + ## The spacebar + "space" + | + ## The "Tab" key + "tab" + | + ## The up arrow + "up" + db.keycap.function-enum.attribute = + + ## Identifies the function key + attribute function { db.keycap.function.enumeration }? + db.keycap.function-other.attributes = + + ## Identifies the function key + attribute function { + + ## Indicates a non-standard function key + "other" + }?, + + ## Specifies a keyword that identifies the non-standard key + attribute otherfunction { text } + db.keycap.function.attrib = + db.keycap.function-enum.attribute + | db.keycap.function-other.attributes + db.keycap.role.attribute = attribute role { text } + db.keycap.attlist = + db.keycap.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycap.function.attrib + db.keycap = + + ## The text printed on a key on a keyboard + element keycap { db.keycap.attlist, db._text } +} +div { + db.keycode.role.attribute = attribute role { text } + db.keycode.attlist = + db.keycode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keycode = + + ## The internal, frequently numeric, identifier for a key on a keyboard + element keycode { db.keycode.attlist, db._text } +} +db.keycombination.contentmodel = + (db.keycap | db.keycombo | db.keysym) | db.mousebutton +div { + db.keycombo.action.enumeration = + + ## A (single) mouse click. + "click" + | + ## A double mouse click. + "double-click" + | + ## A mouse or key press. + "press" + | + ## Sequential clicks or presses. + "seq" + | + ## Simultaneous clicks or presses. + "simul" + db.keycombo.action-enum.attribute = + + ## Identifies the nature of the action taken. If keycombo + ## contains more than one element, simul + ## is the default, otherwise there is no default. + attribute action { db.keycombo.action.enumeration }? + db.keycombo.action-other.attributes = + + ## Identifies the nature of the action taken + attribute action { + + ## Indicates a non-standard action + "other" + }?, + + ## Identifies the non-standard action in some unspecified way. + attribute otheraction { text } + db.keycombo.action.attrib = + db.keycombo.action-enum.attribute + | db.keycombo.action-other.attributes + db.keycombo.role.attribute = attribute role { text } + db.keycombo.attlist = + db.keycombo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycombo.action.attrib + db.keycombo = + + ## A combination of input actions + element keycombo { + db.keycombo.attlist, db.keycombination.contentmodel+ + } +} +div { + db.keysym.role.attribute = attribute role { text } + db.keysym.attlist = + db.keysym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keysym = + + ## The symbolic name of a key on a keyboard + element keysym { db.keysym.attlist, db._text } +} +div { + db.accel.role.attribute = attribute role { text } + db.accel.attlist = + db.accel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.accel = + + ## A graphical user interface (GUI) keyboard shortcut + element accel { db.accel.attlist, db._text } +} +div { + db.shortcut.action.attrib = db.keycombo.action.attrib + db.shortcut.role.attribute = attribute role { text } + db.shortcut.attlist = + db.shortcut.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.shortcut.action.attrib + db.shortcut = + + ## A key combination for an action that is also accessible through a menu + element shortcut { + db.shortcut.attlist, db.keycombination.contentmodel+ + } +} +db.os.inlines = + db.prompt + | db.envar + | db.filename + | db.command + | db.computeroutput + | db.userinput +db.computeroutput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines +db.userinput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines +db.prompt.inlines = db._text | db.co +div { + db.prompt.role.attribute = attribute role { text } + db.prompt.attlist = + db.prompt.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.prompt = + + ## A character or string indicating the start of an input field in a computer display + element prompt { db.prompt.attlist, db.prompt.inlines* } +} +div { + db.envar.role.attribute = attribute role { text } + db.envar.attlist = + db.envar.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.envar = + + ## A software environment variable + element envar { db.envar.attlist, db._text } +} +div { + db.filename.class.enumeration = + + ## A device + "devicefile" + | + ## A directory + "directory" + | + ## A filename extension + "extension" + | + ## A header file (as for a programming language) + "headerfile" + | + ## A library file + "libraryfile" + | + ## A partition (as of a hard disk) + "partition" + | + ## A symbolic link + "symlink" + db.filename.class.attribute = + + ## Identifies the class of filename + attribute class { db.filename.class.enumeration } + db.filename.path.attribute = + + ## Specifies the path of the filename + attribute path { text } + db.filename.role.attribute = attribute role { text } + db.filename.attlist = + db.filename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.filename.path.attribute? + & db.filename.class.attribute? + db.filename = + + ## The name of a file + element filename { db.filename.attlist, db._text } +} +div { + db.command.role.attribute = attribute role { text } + db.command.attlist = + db.command.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.command = + + ## The name of an executable program or other software command + element command { db.command.attlist, db._text } +} +div { + db.computeroutput.role.attribute = attribute role { text } + db.computeroutput.attlist = + db.computeroutput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.computeroutput = + + ## Data, generally text, displayed or presented by a computer + element computeroutput { + db.computeroutput.attlist, db.computeroutput.inlines* + } +} +div { + db.userinput.role.attribute = attribute role { text } + db.userinput.attlist = + db.userinput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.userinput = + + ## Data entered by the user + element userinput { db.userinput.attlist, db.userinput.inlines* } +} +div { + db.cmdsynopsis.role.attribute = attribute role { text } + db.cmdsynopsis.sepchar.attribute = + + ## Specifies the character that should separate the command and its top-level arguments + attribute sepchar { text } + db.cmdsynopsis.cmdlength.attribute = + + ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + attribute cmdlength { text } + db.cmdsynopsis.label.attribute = db.label.attribute + db.cmdsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.cmdsynopsis.attlist = + db.cmdsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.cmdsynopsis.sepchar.attribute? + & db.cmdsynopsis.cmdlength.attribute? + & db.cmdsynopsis.label.attribute? + & db.cmdsynopsis.packageref.attribute? + db.cmdsynopsis.info = db._info.title.forbidden + db.cmdsynopsis = + + ## A syntax summary for a software command + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:cmdsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element cmdsynopsis { + db.cmdsynopsis.attlist, + db.cmdsynopsis.info, + (db.command | db.arg | db.group | db.sbr)+, + db.synopfragment* + } +} +db.rep.enumeration = + + ## Can not be repeated. + "norepeat" + | + ## Can be repeated. + "repeat" +db.rep.attribute = + + ## Indicates whether or not repetition is possible. + [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration } +db.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted without indication. + "plain" + | + ## Formatted to indicate that it is required. + "req" +db.choice.opt.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration } +db.choice.req.attribute = + + ## Indicates optionality. + [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration } +div { + db.arg.role.attribute = attribute role { text } + db.arg.rep.attribute = db.rep.attribute + db.arg.choice.attribute = db.choice.opt.attribute + db.arg.attlist = + db.arg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.arg.rep.attribute? + & db.arg.choice.attribute? + db.arg = + + ## An argument in a cmdsynopsis + element arg { + db.arg.attlist, + (db._text + | db.arg + | db.group + | db.option + | db.synopfragmentref + | db.sbr)* + } +} +div { + db.group.role.attribute = attribute role { text } + db.group.rep.attribute = db.rep.attribute + db.group.choice.attribute = db.choice.opt.attribute + db.group.attlist = + db.group.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.rep.attribute? + & db.group.choice.attribute? + db.group = + + ## A group of elements in a cmdsynopsis + element group { + db.group.attlist, + (db.arg + | db.group + | db.option + | db.synopfragmentref + | db.replaceable + | db.sbr)+ + } +} +div { + db.sbr.role.attribute = attribute role { text } + db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes + db.sbr = + + ## An explicit line break in a command synopsis + element sbr { db.sbr.attlist, empty } +} +div { + db.synopfragment.role.attribute = attribute role { text } + db.synopfragment.attlist = + db.synopfragment.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.synopfragment = + + ## A portion of a cmdsynopsis broken out from the main body of the synopsis + element synopfragment { + db.synopfragment.attlist, (db.arg | db.group)+ + } +} +div { + db.synopfragmentref.role.attribute = attribute role { text } + db.synopfragmentref.attlist = + db.synopfragmentref.role.attribute? + & db.common.attributes + & db.linkend.attribute + db.synopfragmentref = + + ## A reference to a fragment of a command synopsis + [ + s:pattern [ + s:title [ "Synopsis fragment type constraint" ] + s:rule [ + context = "db:synopfragmentref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on synopfragmentref must point to a synopfragment." + ] + ] + ] + ] + element synopfragmentref { db.synopfragmentref.attlist, text } +} +db.programming.inlines = + db.function + | db.parameter + | db.varname + | db.returnvalue + | db.type + | db.classname + | db.exceptionname + | db.interfacename + | db.methodname + | db.modifier + | db.initializer + | db.buildtarget + | db.oo.inlines + | db.templatename + | db.macroname + | db.unionname + | db.enumname + | db.enumvalue + | db.enumidentifier + | db.typedefname +db.oo.inlines = db.ooclass | db.ooexception | db.oointerface +db.synopsis.blocks = + (db.funcsynopsis + | db.classsynopsis + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.enumsynopsis + | db.typedefsynopsis + | db.packagesynopsis + | db.macrosynopsis + | db.unionsynopsis) + | db.cmdsynopsis +div { + db.synopsis.role.attribute = attribute role { text } + db.synopsis.label.attribute = db.label.attribute + db.synopsis.attlist = + db.synopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.synopsis.label.attribute? + db.synopsis = + + ## A general-purpose element for representing the syntax of commands or functions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:synopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element synopsis { db.synopsis.attlist, db.verbatim.contentmodel } +} +div { + db.synopsisinfo.role.attribute = attribute role { text } + db.synopsisinfo.attlist = + db.synopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.synopsisinfo = + + ## Information supplementing synopsis + element synopsisinfo { + db.synopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcsynopsis.info = db._info.title.forbidden + db.funcsynopsis.role.attribute = attribute role { text } + db.funcsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.funcsynopsis.attlist = + db.funcsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.funcsynopsis.packageref.attribute? + db.funcsynopsis = + + ## The syntax summary for a function definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsis { + db.funcsynopsis.attlist, + db.funcsynopsis.info, + (db.funcsynopsisinfo | db.funcprototype)+ + } +} +div { + db.funcsynopsisinfo.role.attribute = attribute role { text } + db.funcsynopsisinfo.attlist = + db.funcsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.funcsynopsisinfo = + + ## Information supplementing the funcdefs of a funcsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsisinfo { + db.funcsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcprototype.role.attribute = attribute role { text } + db.funcprototype.attlist = + db.funcprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcprototype = + + ## The prototype of a function + element funcprototype { + db.funcprototype.attlist, + db.modifier*, + db.funcdef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.funcdef.role.attribute = attribute role { text } + db.funcdef.attlist = + db.funcdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcdef = + + ## A function (subroutine) name and its return type + element funcdef { + db.funcdef.attlist, + (db._text | db.type | db.templatename | db.void | db.function)* + } +} +div { + db.function.role.attribute = attribute role { text } + db.function.attlist = + db.function.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.function = + + ## The name of a function or subroutine, as in a programming language + element function { db.function.attlist, db._text } +} +div { + db.void.role.attribute = attribute role { text } + db.void.attlist = + db.void.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.void = + + ## An empty element in a function synopsis indicating that the function in question takes no arguments + element void { db.void.attlist, empty } +} +div { + db.varargs.role.attribute = attribute role { text } + db.varargs.attlist = + db.varargs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varargs = + + ## An empty element in a function synopsis indicating a variable number of arguments + element varargs { db.varargs.attlist, empty } +} +div { + db.group.paramdef.role.attribute = attribute role { text } + db.group.paramdef.choice.attribute = db.choice.opt.attribute + db.group.paramdef.attlist = + db.group.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.paramdef.choice.attribute? + db.group.paramdef = + + ## A group of parameters + element group { + db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+ + } +} +div { + db.paramdef.role.attribute = attribute role { text } + db.paramdef.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted to indicate that it is required. + "req" + db.paramdef.choice.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] + attribute choice { db.paramdef.choice.enumeration } + db.paramdef.attlist = + db.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.paramdef.choice.attribute? + db.paramdef = + + ## Information about a function parameter in a programming language + element paramdef { + db.paramdef.attlist, + (db._text + | db.initializer + | db.modifier + | db.type + | db.templatename + | db.parameter + | db.funcparams)* + } +} +div { + db.funcparams.role.attribute = attribute role { text } + db.funcparams.attlist = + db.funcparams.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcparams = + + ## Parameters for a function referenced through a function pointer in a synopsis + element funcparams { db.funcparams.attlist, db._text } +} +div { + db.classsynopsis.info = db._info.title.forbidden + db.classsynopsis.role.attribute = attribute role { text } + db.classsynopsis.class.enumeration = + + ## This is the synopsis of a class + "class" + | + ## This is the synopsis of an interface + "interface" + db.classsynopsis.class.attribute = + + ## Specifies the nature of the synopsis + attribute class { db.classsynopsis.class.enumeration } + db.classsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.classsynopsis.attlist = + db.classsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.classsynopsis.class.attribute? + & db.classsynopsis.packageref.attribute? + db.classsynopsis = + + ## The syntax summary for a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsis { + db.classsynopsis.attlist, + db.classsynopsis.info, + db.classsynopsisinfo*, + db.templatename*, + db.oo.inlines, + (db.template + | db.ooexception + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.classsynopsisinfo)* + } +} +div { + db.classsynopsisinfo.role.attribute = attribute role { text } + db.classsynopsisinfo.attlist = + db.classsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.classsynopsisinfo = + + ## Information supplementing the contents of a classsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsisinfo { + db.classsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.ooclass.role.attribute = attribute role { text } + db.ooclass.attlist = + db.ooclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooclass = + + ## A class in an object-oriented programming language + element ooclass { + db.ooclass.attlist, + (db.package | db.modifier)*, + db.classname, + db.modifier* + } +} +div { + db.oointerface.role.attribute = attribute role { text } + db.oointerface.attlist = + db.oointerface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.oointerface = + + ## An interface in an object-oriented programming language + element oointerface { + db.oointerface.attlist, + (db.package | db.modifier)*, + db.interfacename, + db.modifier* + } +} +div { + db.ooexception.role.attribute = attribute role { text } + db.ooexception.attlist = + db.ooexception.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooexception = + + ## An exception in an object-oriented programming language + element ooexception { + db.ooexception.attlist, + (db.package | db.modifier)*, + db.exceptionname, + db.modifier* + } +} +db.modifier.xml.space.attribute = + + ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + attribute xml:space { + + ## Extra whitespace and line breaks must be preserved. + [ + # Ideally the definition of xml:space used on modifier would be + # different from the definition used on the verbatim elements. The + # verbatim elements forbid the use of xml:space="default" which + # wouldn't be a problem on modifier. But doing that causes the + # generated XSD schemas to be broken so I'm just reusing the existing + # definition for now. It won't be backwards incompatible to fix this + # problem in the future. + # | ## Extra whitespace and line breaks are not preserved. + # "default" + + ] + "preserve" + } +div { + db.modifier.role.attribute = attribute role { text } + db.modifier.attlist = + db.modifier.xml.space.attribute? + & db.modifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.modifier = + + ## Modifiers in a synopsis + element modifier { db.modifier.attlist, db._text } +} +div { + db.interfacename.role.attribute = attribute role { text } + db.interfacename.attlist = + db.interfacename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.interfacename = + + ## The name of an interface + element interfacename { db.interfacename.attlist, db._text } +} +div { + db.exceptionname.role.attribute = attribute role { text } + db.exceptionname.attlist = + db.exceptionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.exceptionname = + + ## The name of an exception + element exceptionname { db.exceptionname.attlist, db._text } +} +div { + db.fieldsynopsis.info = db._info.title.forbidden + db.fieldsynopsis.role.attribute = attribute role { text } + db.fieldsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.fieldsynopsis.attlist = + db.fieldsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.fieldsynopsis.packageref.attribute? + db.fieldsynopsis = + + ## The name of a field in a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:fieldsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element fieldsynopsis { + db.fieldsynopsis.attlist, + db.fieldsynopsis.info, + db.synopsisinfo*, + db.modifier*, + (db.type | db.templatename)*, + db.varname, + db.modifier*, + db.initializer?, + db.synopsisinfo* + } +} +div { + db.initializer.role.attribute = attribute role { text } + db.initializer.attlist = + db.initializer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines + db.initializer = + + ## The initializer for a fieldsynopsis + element initializer { + db.initializer.attlist, db.initializer.inlines* + } +} +div { + db.constructorsynopsis.info = db._info.title.forbidden + db.constructorsynopsis.role.attribute = attribute role { text } + db.constructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.constructorsynopsis.attlist = + db.constructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.constructorsynopsis.packageref.attribute? + db.constructorsynopsis = + + ## A syntax summary for a constructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constructorsynopsis { + db.constructorsynopsis.attlist, + db.constructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.destructorsynopsis.info = db._info.title.forbidden + db.destructorsynopsis.role.attribute = attribute role { text } + db.destructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.destructorsynopsis.attlist = + db.destructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.destructorsynopsis.packageref.attribute? + db.destructorsynopsis = + + ## A syntax summary for a destructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:destructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element destructorsynopsis { + db.destructorsynopsis.attlist, + db.destructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.methodsynopsis.info = db._info.title.forbidden + db.methodsynopsis.role.attribute = attribute role { text } + db.methodsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.methodsynopsis.attlist = + db.methodsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.methodsynopsis.packageref.attribute? + db.methodsynopsis = + + ## A syntax summary for a method + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:methodsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element methodsynopsis { + db.methodsynopsis.attlist, + db.methodsynopsis.info, + db.synopsisinfo*, + (db.templatename | db.modifier)*, + (db.type | db.void)?, + db.methodname, + db.templatename*, + ((db.methodparam | db.group.methodparam)+ | db.void), + (db.exceptionname | db.modifier | db.templatename)*, + db.synopsisinfo* + } +} +div { + db.methodname.role.attribute = attribute role { text } + db.methodname.attlist = + db.methodname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.methodname = + + ## The name of a method + element methodname { db.methodname.attlist, db._text } +} +div { + db.methodparam.role.attribute = attribute role { text } + db.methodparam.rep.attribute = db.rep.attribute + db.methodparam.choice.attribute = db.choice.req.attribute + db.methodparam.attlist = + db.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.methodparam.rep.attribute? + & db.methodparam.choice.attribute? + db.methodparam = + + ## Parameters to a method + element methodparam { + db.methodparam.attlist, + (db.modifier | db.type | db.templatename)*, + ((db.parameter, db.initializer?) | db.funcparams), + db.modifier* + } +} +div { + db.group.methodparam.role.attribute = attribute role { text } + db.group.methodparam.choice.attribute = db.choice.opt.attribute + db.group.methodparam.attlist = + db.group.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.methodparam.choice.attribute? + db.group.methodparam = + + ## A group of method parameters + element group { + db.group.methodparam.attlist, + (db.methodparam | db.group.methodparam)+ + } +} +div { + db.varname.role.attribute = attribute role { text } + db.varname.attlist = + db.varname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varname = + + ## The name of a variable + element varname { db.varname.attlist, db._text } +} +div { + db.buildtarget.role.attribute = attribute role { text } + db.buildtarget.attlist = + db.buildtarget.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.buildtarget = + + ## Target of a build + element buildtarget { db.buildtarget.attlist, db._text } +} +div { + db.returnvalue.role.attribute = attribute role { text } + db.returnvalue.attlist = + db.returnvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.returnvalue = + + ## The value returned by a function + element returnvalue { db.returnvalue.attlist, db._text } +} +div { + db.type.role.attribute = attribute role { text } + db.type.class.enumeration = + + ## Combined type is union of nested types + "union" + | + ## Combined type is intersection of nested types + "intersection" + db.type.class.attribute = + + ## Specifies the way how are nested types combined together + attribute class { db.type.class.enumeration } + db.type.attlist = + db.type.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.type.class.attribute? + db.type = + + ## The classification of a value + element type { + db.type.attlist, (db._text | db.programming.inlines)* + } +} +div { + db.classname.role.attribute = attribute role { text } + db.classname.attlist = + db.classname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.classname = + + ## The name of a class, in the object-oriented programming sense + element classname { db.classname.attlist, db._text } +} +div { + db.templatename.role.attribute = attribute role { text } + db.templatename.attlist = + db.templatename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.templatename = + + ## The identifier for a template, in the generic programming sense + element templatename { db.templatename.attlist, db._text } +} +div { + db.template.role.attribute = attribute role { text } + db.template.attlist = + db.template.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.template = + + ## The definition of a template, in the generic programming sense + element template { + db.template.attlist, + (((db.modifier | db.type | db._text)*, + db.templatename, + (db.modifier | db.type | db._text)*) + | db.specializedtemplate) + } +} +div { + db.specializedtemplate.role.attribute = attribute role { text } + db.specializedtemplate.attlist = + db.specializedtemplate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.specializedtemplate = + + ## The specialization of a template identifier, in the generic programming sense + element specializedtemplate { + db.specializedtemplate.attlist, + (db.modifier | db.type | db._text)* + } +} +div { + db.packagesynopsis.info = db._info.title.forbidden + db.packagesynopsis.role.attribute = attribute role { text } + db.packagesynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.packagesynopsis.attlist = + db.packagesynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.packagesynopsis.packageref.attribute? + db.packagesynopsis = + + ## The syntax summary for a package definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:packagesynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element packagesynopsis { + db.packagesynopsis.attlist, + db.packagesynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.package, + db.modifier*, + (db.synopsis.blocks | db.synopsisinfo)* + } +} +div { + db.macroname.role.attribute = attribute role { text } + db.macroname.attlist = + db.macroname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroname = + + ## The name of a macro (a code-generating function) + element macroname { db.macroname.attlist, db._text } +} +div { + db.macrosynopsis.info = db._info.title.forbidden + db.macrosynopsis.role.attribute = attribute role { text } + db.macrosynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.macrosynopsis.attlist = + db.macrosynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.macrosynopsis.packageref.attribute? + db.macrosynopsis = + + ## The syntax summary for a macro definition (code-generating function) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:macrosynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element macrosynopsis { + db.macrosynopsis.attlist, + db.macrosynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.macroname, + (db.package | db.modifier)*, + db.macroprototype+, + db.synopsisinfo* + } +} +div { + db.macroprototype.role.attribute = attribute role { text } + db.macroprototype.attlist = + db.macroprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroprototype = + + ## The prototype of a macro (code-generating function) + element macroprototype { + db.macroprototype.attlist, + db.modifier*, + db.macrodef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.macrodef.role.attribute = attribute role { text } + db.macrodef.attlist = + db.macrodef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macrodef = + + ## A macro name and its return type + element macrodef { + db.macrodef.attlist, (db.type | db.templatename)*, db.macroname + } +} +div { + db.unionname.role.attribute = attribute role { text } + db.unionname.attlist = + db.unionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.unionname = + + ## The name of a union of types + element unionname { db.unionname.attlist, db._text } +} +div { + db.union.role.attribute = attribute role { text } + db.union.attlist = + db.union.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.union = + + ## The definition of a union of types, which may be more than a name + element union { db.union.attlist, db.type+ } +} +div { + db.unionsynopsis.info = db._info.title.forbidden + db.unionsynopsis.role.attribute = attribute role { text } + # N.B. the enumeration is explicitly identical to the enumeration + # on enumsynopsis by default. + db.unionsynopsis.ordered.attribute = + + ## Indicates how the value of a union is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.unionsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.unionsynopsis.attlist = + db.unionsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.unionsynopsis.ordered.attribute? + & db.unionsynopsis.packageref.attribute? + db.unionsynopsis = + + ## The syntax summary for a union-of-types definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:unionsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element unionsynopsis { + db.unionsynopsis.attlist, + db.unionsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.unionname?, + db.union, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.enumname.role.attribute = attribute role { text } + db.enumname.attlist = + db.enumname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumname = + + ## The name of an enumeration + element enumname { db.enumname.attlist, db._text } +} +div { + db.enumvalue.role.attribute = attribute role { text } + db.enumvalue.attlist = + db.enumvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumvalue = + + ## The value an enumerated type can take + element enumvalue { db.enumvalue.attlist, db._text } +} +div { + db.enumitemdescription.role.attribute = attribute role { text } + db.enumitemdescription.attlist = + db.enumitemdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitemdescription = + + ## The description of a value an enumerated type can take + element enumitemdescription { + db.enumitemdescription.attlist, db.all.inlines* + } +} +div { + db.enumidentifier.role.attribute = attribute role { text } + db.enumidentifier.attlist = + db.enumidentifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumidentifier = + + ## The identifier of a value an enumerated type can take + element enumidentifier { db.enumidentifier.attlist, db._text } +} +div { + db.enumitem.role.attribute = attribute role { text } + db.enumitem.attlist = + db.enumitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitem = + + ## A value an enumerated type can take and its description + element enumitem { + db.enumitem.attlist, + db.enumidentifier, + db.enumvalue*, + db.enumitemdescription? + } +} +div { + db.enumsynopsis.info = db._info.title.forbidden + db.enumsynopsis.role.attribute = attribute role { text } + db.enumsynopsis.ordered.enumeration = + + ## Value of enum is specified explicitly using enumvalue + "0" + | + ## Value of enum is inferred from its position + "1" + db.enumsynopsis.ordered.attribute = + + ## Indicates how the value of an enumeration is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.enumsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.enumsynopsis.attlist = + db.enumsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.enumsynopsis.ordered.attribute? + & db.enumsynopsis.packageref.attribute? + db.enumsynopsis = + + ## The syntax summary for an enumerated-type definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:enumsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element enumsynopsis { + db.enumsynopsis.attlist, + db.enumsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + (db.enumname, db.modifier*)?, + db.enumitem+, + db.synopsisinfo* + } +} +div { + db.typedefname.role.attribute = attribute role { text } + db.typedefname.attlist = + db.typedefname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.typedefname = + + ## The name of a type alias + element typedefname { db.typedefname.attlist, db._text } +} +div { + db.typedefsynopsis.info = db._info.title.forbidden + db.typedefsynopsis.role.attribute = attribute role { text } + db.typedefsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.typedefsynopsis.attlist = + db.typedefsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.typedefsynopsis.packageref.attribute? + db.typedefsynopsis = + + ## The syntax summary for a type-alias definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:typedefsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element typedefsynopsis { + db.typedefsynopsis.attlist, + db.typedefsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.typedefname, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.programlisting.role.attribute = attribute role { text } + db.programlisting.width.attribute = db.width.characters.attribute + db.programlisting.attlist = + db.programlisting.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.programlisting.width.attribute? + db.programlisting = + + ## A literal listing of all or part of a program + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlisting" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlisting { + db.programlisting.attlist, db.verbatim.contentmodel + } +} +db.admonition.blocks = + db.caution | db.danger | db.important | db.note | db.tip | db.warning +db.admonition.contentmodel = db._info.title.only, db.all.blocks+ +div { + db.caution.role.attribute = attribute role { text } + db.caution.attlist = + db.caution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caution = + + ## A note of caution + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caution" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caution { db.caution.attlist, db.admonition.contentmodel } +} +div { + db.danger.role.attribute = attribute role { text } + db.danger.attlist = + db.danger.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.danger = + + ## An admonition set off from the text indicating hazardous situation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:danger" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element danger { db.danger.attlist, db.admonition.contentmodel } +} +div { + db.important.role.attribute = attribute role { text } + db.important.attlist = + db.important.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.important = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:important" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element important { + db.important.attlist, db.admonition.contentmodel + } +} +div { + db.note.role.attribute = attribute role { text } + db.note.attlist = + db.note.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.note = + + ## A message set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:note" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element note { db.note.attlist, db.admonition.contentmodel } +} +div { + db.tip.role.attribute = attribute role { text } + db.tip.attlist = + db.tip.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tip = + + ## A suggestion to the user, set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tip" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tip { db.tip.attlist, db.admonition.contentmodel } +} +div { + db.warning.role.attribute = attribute role { text } + db.warning.attlist = + db.warning.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.warning = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:warning" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element warning { db.warning.attlist, db.admonition.contentmodel } +} +db.error.inlines = + db.errorcode | db.errortext | db.errorname | db.errortype +div { + db.errorcode.role.attribute = attribute role { text } + db.errorcode.attlist = + db.errorcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorcode = + + ## An error code + element errorcode { db.errorcode.attlist, db._text } +} +div { + db.errorname.role.attribute = attribute role { text } + db.errorname.attlist = + db.errorname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorname = + + ## An error name + element errorname { db.errorname.attlist, db._text } +} +div { + db.errortext.role.attribute = attribute role { text } + db.errortext.attlist = + db.errortext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortext = + + ## An error message. + element errortext { db.errortext.attlist, db._text } +} +div { + db.errortype.role.attribute = attribute role { text } + db.errortype.attlist = + db.errortype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortype = + + ## The classification of an error message + element errortype { db.errortype.attlist, db._text } +} +db.systemitem.inlines = db._text | db.co +div { + db.systemitem.class.enumeration = + + ## A daemon or other system process (syslogd) + "daemon" + | + ## A domain name (example.com) + "domainname" + | + ## An ethernet address (00:05:4E:49:FD:8E) + "etheraddress" + | + ## An event of some sort (SIGHUP) + "event" + | + ## An event handler of some sort (hangup) + "eventhandler" + | + ## A filesystem (ext3) + "filesystem" + | + ## A fully qualified domain name (my.example.com) + "fqdomainname" + | + ## A group name (wheel) + "groupname" + | + ## A network interface (eth0) + "interface" + | + ## An IP address (127.0.0.1) + "ipaddress" + | + ## A library (libncurses) + "library" + | + ## A macro + "macro" + | + ## A netmask (255.255.255.192) + "netmask" + | + ## A newsgroup (comp.text.xml) + "newsgroup" + | + ## An operating system name (Hurd) + "osname" + | + ## A process (gnome-cups-icon) + "process" + | + ## A protocol (ftp) + "protocol" + | + ## A resource + "resource" + | + ## A security context (a role, permission, or security token, for example) + "securitycontext" + | + ## A server (mail.example.com) + "server" + | + ## A service (ppp) + "service" + | + ## A system name (hephaistos) + "systemname" + | + ## A user name (ndw) + "username" + db.systemitem.class-enum.attribute = + + ## Identifies the nature of the system item + attribute class { db.systemitem.class.enumeration }? + db.systemitem.class-other.attribute = + + ## Identifies the nature of the non-standard system item + attribute otherclass { xsd:NMTOKEN } + db.systemitem.class-other.attributes = + + ## Identifies the kind of systemitemgraphic identifier + attribute class { + + ## Indicates that the system item is some 'other' kind. + "other" + } + & db.systemitem.class-other.attribute + db.systemitem.class.attribute = + db.systemitem.class-enum.attribute + | db.systemitem.class-other.attributes + db.systemitem.role.attribute = attribute role { text } + db.systemitem.attlist = + db.systemitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.systemitem.class.attribute? + db.systemitem = + + ## A system-related item or term + element systemitem { db.systemitem.attlist, db.systemitem.inlines* } +} +div { + db.option.role.attribute = attribute role { text } + db.option.attlist = + db.option.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.option = + + ## An option for a software command + element option { db.option.attlist, db._text } +} +div { + db.optional.role.attribute = attribute role { text } + db.optional.attlist = + db.optional.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.optional = + + ## Optional information + element optional { db.optional.attlist, (db._text | db.optional)* } +} +div { + db.property.role.attribute = attribute role { text } + db.property.attlist = + db.property.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.property = + + ## A unit of data associated with some part of a computer system + element property { db.property.attlist, db._text } +} +div { + db.topic.status.attribute = db.status.attribute + db.topic.role.attribute = attribute role { text } + db.topic.type.attribute = + + ## Identifies the topic type + attribute type { text } + db.topic.attlist = + db.topic.role.attribute? + & db.topic.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.topic.status.attribute? + db.topic.info = db._info.title.req + db.topic = + + ## A modular unit of documentation not part of any particular narrative flow + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:topic" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element topic { + db.topic.attlist, + db.topic.info, + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* + } +} diff --git a/catalog/docbook5.2/rng/docbook.rng b/catalog/docbook5.2/rng/docbook.rng new file mode 100755 index 0000000..61606a5 --- /dev/null +++ b/catalog/docbook5.2/rng/docbook.rng @@ -0,0 +1,18457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Any attribute, including any attribute in any namespace + + + + + + Any attribute in any other explicit namespace + + + + + + + + + + + + + + Any element from almost any namespace + + + + + + + + + + + + + + +
+ + + Designates the computer or chip architecture to which the element applies + + + + + Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + + + + + provides a standard place for application-specific effectivity + + + + + Indicates standards conformance characteristics of the element + + + + + Indicates the operating system to which the element is applicable + + + + + Indicates the editorial revision to which the element belongs + + + + + Indicates something about the security level associated with the element to which it applies + + + + + Indicates the level of user experience for which the element applies + + + + + Indicates the computer vendor to which the element applies + + + + + Indicates the word size (width in bits) of the computer architecture to which the element applies + + + + + Indicates the output format (for example, print or epub) to which the element applies + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Points to the element whose content is to be used as the text of the link + + + + + + Points to an internal link target by identifying the value of its xml:id attribute + + + + + + Points to one or more internal link targets by identifying the value of their xml:id attributes + + + + + + Identifies a link target with a URI + + + + + + Identifies the XLink link type + simple + An XLink simple link type + + + + + Identifies the XLink role of the link + + + + + + Identifies the XLink arcrole of the link + + + + + + Identifies the XLink title of the link + + + + + new + An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + replace + An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + embed + An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + other + The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink show behavior of the link + + + + + + onLoad + An application should traverse to the ending resource immediately on loading the starting resource. + onRequest + An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + other + The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink actuate behavior of the link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identifies the unique ID value of the element + + + + + + Specifies the DocBook version of the element and its descendants + + + + + Specifies the natural language of the element and its descendants + + + + + Specifies the base URI of the element and its descendants + + + + + + Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + + + + + Provides the text that is to be generated for a cross reference to the element + + + + + Specifies a keyword or keywords identifying additional style information + + + + + changed + The element has been changed. + added + The element is new (has been added to the document). + deleted + The element has been deleted. + off + Explicitly turns off revision markup for this element. + + + + + Identifies the revision status of the element + + + + + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + + Identifies the direction of text in an element + + + + + + The RDFa Lite vocab + + + + + + The RDFa Lite typeof + + + + + The RDFa Lite property + + + + + The RDFa Lite resource + + + + + The RDFa Lite prefix + + + + + + + + + + + + + + + + + + + + + + + + none + No ID fixup strategy + suffix + ID fixup by concatenating suffixes + auto + ID fixup by creating unique values + + + + + The transclusion ID fixup strategy + + + + + + The transclusion suffix to use when the suffix ID fixup strategy is employed + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + + + + user + No link scope adjustments are made + local + The link scopes are adjusted with the suffix property + near + The link scopes are adjusted based on proximity + global + The link scopes are adjusted based on document order + + + + + The transclusion link scope adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the format of the data + + + + + Indentifies the location of the data by URI + + + + Identifies the location of the data by external identifier (entity name) + + + + + + + continues + Line numbering continues from the immediately preceding element with the same name. + restarts + Line numbering restarts (begins at 1, usually). + + + + + Determines whether line numbering continues from the previous element or restarts + + + + + + numbered + Lines are numbered. + unnumbered + Lines are not numbered. + + + + + Determines whether lines are numbered + + + + + + Specifies the initial line number + + + + + + Identifies the language (i.e. programming language) of the verbatim content + + + + + Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + preserve + Whitespace must be preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies an identifying string for presentation purposes + + + + + Specifies the width (in characters) of the element + + + + + + compact + The spacing should be "compact". + normal + The spacing should be "normal". + + + + + Specifies (a hint about) the spacing of the content + + + + + + 0 + The element should be rendered in the current text flow (with the flow column width). + 1 + The element should be rendered across the full text page. + + + + + Indicates if the element is rendered across the column or the page + + + + + + Identifies the language (i.e. programming language) of the content + + + + + optional + The content describes an optional step or steps. + required + The content describes a required step or steps. + + + + + Specifies if the content is required or optional + + + + + + Specifies style information to be used when rendering the float + + + + + Specifies the width of the element + + + + + Specifies the depth of the element + + + + + Specifies the width of the content rectangle + + + + + Specifies the depth of the content rectangle + + + + + 0 + False (do not scale-to-fit; anamorphic scaling may occur) + 1 + True (scale-to-fit; anamorphic scaling is forbidden) + + + + + Specifies the scaling factor + + + + + + Specifies a classid for a media object player + + + + + Specifies the autoplay setting for a media object player + + + + + center + Centered horizontally + char + Aligned horizontally on the specified character + justify + Fully justified (left and right margins or edges) + left + Left aligned + right + Right aligned + + + + + bottom + Aligned on the bottom of the region + middle + Centered vertically + top + Aligned on the top of the region + + + + + doi + A digital object identifier. + isbn + An international standard book number. + isrn + An international standard technical report number (ISO 10444). + issn + An international standard serial number. + istc + An international standard text code. + libraryofcongress + A Library of Congress reference number. + pubsnumber + A publication number (an internal number or possibly organizational standard). + uri + A Uniform Resource Identifier + + + + + + Identifies the kind of bibliographic identifier + + + + + + + Identifies the nature of the non-standard bibliographic identifier + + + + + + + Identifies the kind of bibliographic identifier + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + article + An article + bbs + A bulletin board system + book + A book + cdrom + A CD-ROM + chapter + A chapter (as of a book) + dvd + A DVD + emailmessage + An email message + gopher + A gopher page + journal + A journal + manuscript + A manuscript + newsposting + A posting to a newsgroup + part + A part (as of a book) + refentry + A reference entry + section + A section (as of a book or article) + series + A series + set + A set (as of books) + webpage + A web page + wiki + A wiki page + other + Some other kind of work + + + + + + + + + Identifies the nature of the published work + + + + + + + Identifies the nature of some other kind of published work + + + + + + + Identifies that this is some other kind of published work + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text of the title of a section of a document or of a formal block-level element + + + + + + +
+
+ + + + + + + + + + + + + + + The abbreviation of a title + + + + + + +
+
+ + + + + + + + + + + + + + + The subtitle of a document + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + Identifies the controlled vocabulary used by this set's terms + + + + + + + + + + + + + + + + + + A set of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + Specifies a ranking for this subject relative to other subjects in the same set + + + + + + + + + + + + + + + + + One of a group of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + + + + + + + + + + A term in a group of terms describing the subject matter of a document + + + + +
+
+ + + + + + + + + + + + + + + A set of keywords describing the content of a document + + + + + + +
+
+ + + + + + + + + + + + + + + One of a set of keywords describing the content of a document + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + Identifies the type of procedure + + + + + + + + + + + + + + + + + + + + + A list of operations to be performed in a well-defined sequence + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A unit of action in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + Alternative steps in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for steps that occur within steps in a procedure + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for identifying the results of a procedure or step + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + A portion of a document that is isolated from the main narrative flow + + Element exclusion + + sidebar must not occur among the children or descendants of sidebar + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short description or note about a person + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A quotation set off from the main text + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The source of a block quote or epigraph + + + + + + + + + + + + +
+
+ + + sect1 + Render as a first-level section + sect2 + Render as a second-level section + sect3 + Render as a third-level section + sect4 + Render as a fourth-level section + sect5 + Render as a fifth-level section + + + + + + Indicates how the bridge head should be rendered + + + + + + + Identifies the nature of the non-standard rendering + + + + + + + Indicates how the bridge head should be rendered + other + Identifies a non-standard rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + A free-floating heading + + + + + + +
+
+ + + + + + + + + + + + + + + A remark (or comment) intended for presentation in a draft manuscript + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short inscription at the beginning of a document or component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + Identifies the desired footnote mark + + + + + + + + + + + + + + + + + + A footnote + + Element exclusion + + footnote must not occur among the children or descendants of footnote + + + + Element exclusion + + example must not occur among the children or descendants of footnote + + + + Element exclusion + + figure must not occur among the children or descendants of footnote + + + + Element exclusion + + table must not occur among the children or descendants of footnote + + + + Element exclusion + + equation must not occur among the children or descendants of footnote + + + + Element exclusion + + sidebar must not occur among the children or descendants of footnote + + + + Element exclusion + + task must not occur among the children or descendants of footnote + + + + Element exclusion + + epigraph must not occur among the children or descendants of footnote + + + + Element exclusion + + caution must not occur among the children or descendants of footnote + + + + Element exclusion + + danger must not occur among the children or descendants of footnote + + + + Element exclusion + + important must not occur among the children or descendants of footnote + + + + Element exclusion + + note must not occur among the children or descendants of footnote + + + + Element exclusion + + tip must not occur among the children or descendants of footnote + + + + Element exclusion + + warning must not occur among the children or descendants of footnote + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph with a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph that contains only text and inline markup, no block elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the type of mark to be used on items in this list + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a bullet or other dingbat + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + continues + Specifies that numbering should begin where the preceding list left off + restarts + Specifies that numbering should begin again at 1 + + + + + Indicates how list numbering should begin relative to the immediately preceding list + + + + + + Specifies the initial line number + + + + + + ignore + Specifies that numbering should ignore list nesting + inherit + Specifies that numbering should inherit from outer-level lists + + + + + Indicates whether or not item numbering should be influenced by list nesting + + + + + + arabic + Specifies Arabic numeration (1, 2, 3, …) + upperalpha + Specifies upper-case alphabetic numeration (A, B, C, …) + loweralpha + Specifies lower-case alphabetic numeration (a, b, c, …) + upperroman + Specifies upper-case Roman numeration (I, II, III, …) + lowerroman + Specifies lower-case Roman numeration (i, ii, iii …) + + + + + Indicates the desired numeration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a sequentially incremented label + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Specifies the keyword for the type of mark that should be used on this + item, instead of the mark that would be used by default + + + + + + + + + + + + + + + + + + + + + A wrapper for the elements of a list item + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A segmented list, a list of sets of elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of an element of a list item in a segmented list + + + + + + +
+
+ + + + + + + + + + + + + + + A list item in a segmented list + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a list item in a segmented list + + + + + + +
+
+ + + + + + horiz + A tabular presentation in row-major order. + vert + A tabular presentation in column-major order. + inline + An inline presentation, usually a comma-delimited list. + + + + + Specifies the type of list presentation + + + + + + Specifies the number of columns for horizontal or vertical presentation + + + + + + + + + + + + + + + + + + + + + An undecorated list of single words or short phrases + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a simple list + + + + + + +
+
+ + + + + + Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is composed of a set of one or more terms and an associated description + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for a set of terms and the associated description in a variable list + + + + + + + +
+
+ + + + + + + + + + + + + + + The word or phrase being defined or described in a variable list + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal example, with a title + + Element exclusion + + example must not occur among the children or descendants of example + + + + Element exclusion + + figure must not occur among the children or descendants of example + + + + Element exclusion + + table must not occur among the children or descendants of example + + + + Element exclusion + + equation must not occur among the children or descendants of example + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed example without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + monospaced + The literal layout should be formatted with a monospaced font + normal + The literal layout should be formatted with the current font + + + + + Specifies the class of literal layout + + + + + + + + + + + + + + + + + + + A block of text in which line breaks and white space are to be reproduced faithfully + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + Text that a user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A representation of what the user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal figure, generally an illustration, with a title + + Element exclusion + + example must not occur among the children or descendants of figure + + + + Element exclusion + + figure must not occur among the children or descendants of figure + + + + Element exclusion + + table must not occur among the children or descendants of figure + + + + Element exclusion + + equation must not occur among the children or descendants of figure + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A untitled figure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A displayed media object (video, audio, image, etc.) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + An inline media object (video, audio, image, and so on) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for video data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for audio data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for image data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a text description of an object and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external video data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external audio data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the image data + + + + + + + + + Specifies the vertical alignment of the image data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external image data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the encoding of the text in the external file + + + + + + + + + + + + + + + + + + + + Pointer to external text data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + Specifies the name of the parameter + + + + + Specifies the value of the parameter + + + + + Specifies the type of the value of the parameter + + + + + + + + + + + + + + + + + + Application specific parameters for a media player + + + + +
+
+ + + + + + + + + + + + + + + + + + A caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A real-world address, generally a postal address + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A street address in an address + + + + +
+
+ + + + + + + + + + + + + + + A post office box in an address + + + + +
+
+ + + + + + + + + + + + + + + A postal code in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a city in an address + + + + +
+
+ + + + + + + + + + + + + + + A state or province in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a country + + + + +
+
+ + + + + + + + + + + + + + + A telephone number + + + + +
+
+ + + + + + + + + + + + + + + A fax number + + + + +
+
+ + + + + + + + + + + + + + + Uncategorized information in address + + + + +
+
+ + + + + + + + + + + + + + + The institutional affiliation of an individual + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A brief description of an affiliation + + + + +
+
+ + + + + + + + + + + + + + + The title of an individual in an organization + + + + +
+
+ + + consortium + A consortium + corporation + A corporation + informal + An informal organization + nonprofit + A non-profit organization + + + + + Specifies the nature of the organization + + + + + + Specifies the nature of the organization + other + Indicates a non-standard organization class + + + Identifies the non-standard nature of the organization + + + + + + + + + + + + + + + + + + + + + + + + + + The name of an organization + + + + +
+
+ + + + + + + + + + + + + + + A division of an organization + + + + + + +
+
+ + + + + + + + + + + + + + + The page numbers of an article as published + + + + +
+
+ + + + + + + + + + + + + + + The personal name of an individual + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The name of an individual author + + + + +
+
+ + + + + + + + + + + + + + + Wrapper for author information when a document has multiple authors or collaborators + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Identifies a collaborator + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The initials or other short identifier for an author + + + + +
+
+ + + + + + + + + + + + + + + A person and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An organization and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for document meta-information about a conference + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The dates of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The title of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + An identifier, frequently numerical, associated with a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The contract number of a document + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a contract + + + + +
+
+ + + + + + + + + + + + + + + Copyright information about a document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The year of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the individual or organization that holds a copyright + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + Additional content for the cover of a publication + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + The date of publication or revision of a document + + + + +
+
+ + + + + + + + + + + + + + + The name or number of an edition of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the editor of a document + + + + +
+
+ + + + + + + + + + + + + + + + An identifier for a document + + + + +
+
+ + + + + + + + + + + + + + + + A citation of a bibliographic identifier + + + + +
+
+ + + + + + + + + + + + + + + + The source of a document + + + + +
+
+ + + hasformat + The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + haspart + The described resource includes the referenced resource either physically or logically + hasversion + The described resource has a version, edition, or adaptation, namely, the referenced resource + isformatof + The described resource is the same intellectual content of the referenced resource, but presented in another format + ispartof + The described resource is a physical or logical part of the referenced resource + isreferencedby + The described resource is referenced, cited, or otherwise pointed to by the referenced resource + isreplacedby + The described resource is supplanted, displaced, or superceded by the referenced resource + isrequiredby + The described resource is required by the referenced resource, either physically or logically + isversionof + The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + references + The described resource references, cites, or otherwise points to the referenced resource + replaces + The described resource supplants, displaces, or supersedes the referenced resource + requires + The described resource requires the referenced resource to support its function, delivery, or coherence of content + + + + + + Identifies the type of relationship + + + + + + + + Identifies the type of relationship + othertype + The described resource has a non-standard relationship with the referenced resource + + + + A keyword that identififes the type of the non-standard relationship + + + + + + + + + + + + + + + + + + + + + + + + + + The relationship of a document to another + + + + +
+
+ + + dcmipoint + The DCMI Point identifies a point in space using its geographic coordinates + iso3166 + ISO 3166 Codes for the representation of names of countries + dcmibox + The DCMI Box identifies a region of space using its geographic limits + tgn + The Getty Thesaurus of Geographic Names + + + + + + Specifies the type of spatial coverage + + + + + + + + Specifies the type of spatial coverage + otherspatial + Identifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + dcmiperiod + A specification of the limits of a time interval + w3c-dtf + W3C Encoding rules for dates and times—a profile based on ISO 8601 + + + + + + Specifies the type of temporal coverage + + + + + + + + Specifies the type of temporal coverage + othertemporal + Specifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The spatial or temporal coverage of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A statement of legal obligations or requirements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + copyeditor + A copy editor + graphicdesigner + A graphic designer + productioneditor + A production editor + technicaleditor + A technical editor + translator + A translator + indexer + An indexer + proofreader + A proof-reader + coverdesigner + A cover designer + interiordesigner + An interior designer + illustrator + An illustrator + reviewer + A reviewer + typesetter + A typesetter + conversion + A converter (a persons responsible for conversion, not an application) + + + + + + Identifies the nature of the contributor + + + + + + + Identifies the nature of the non-standard contribution + + + + + + + Identifies the nature of the contributor + other + Identifies a non-standard contribution + + + + + + + + + + + + + + + + + + + + + + + + + + A person or entity, other than an author or editor, credited in a document + + + + +
+
+ + + + + + + + + + + + + + + The numbers of the pages in a book, for use in a bibliographic entry + + + + +
+
+ + + + + + + + + + + + + + + A summary of the contributions made to a document by a credited source + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a person + + + + +
+
+ + + + + + + + + + + + + + + A given name of a person + + + + +
+
+ + + + + + + + + + + + + + + The given name of a person + + + + +
+
+ + + + + + + + + + + + + + + An inherited or family name; in western cultures the last name + + + + +
+
+ + + + + + + + + + + + + + + The portion of a person's name indicating a relationship to ancestors + + + + +
+
+ + + + + + + + + + + + + + + A component of a person's name that is not a first name, surname, or lineage + + + + +
+
+ + + + + + + + + + + + + + + The printing history of a document + + + + + + +
+
+ + + + + + + + + + + + + + + The date of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The publisher of a document + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of the publisher of a document + + + + +
+
+ + + + + + + + + + + + + + + Information about a particular release of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A history of the revisions to a document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry describing a single revision in the history of the revisions to a document + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A document revision number + + + + +
+
+ + + + + + + + + + + + + + + A description of a revision to a document + + + + +
+
+ + + + + + + + + + + + + + + A extended description of a revision to a document + + + + + + +
+
+ + + + + + + + + + + + + + + Numbers of the volumes in a series of books + + + + +
+
+ + + + + + + + + + + + + + + The volume number of a document in a set (as of books in a set or articles in a journal) + + + + +
+
+ + + + + + + + + + + + + + + The number of an issue of a journal + + + + +
+
+ + + + + + A name for the metadata element + + + + + The metadata content + + + + + + + + + + + + + + + + + A generic metadata element + + + + + + + + A generic metadata element + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A software or application package + + + + +
+
+ + + + + + + + + + + + + + + An email address + + + + +
+
+ + + + + + + + + + + + + + + A comment on a line in a verbatim listing + + + + +
+
+ + + command + A command + function + A function + option + An option + + + + + Identifies the class of parameter + + + + + + + + + + + + + + + + + + + + + A value or a symbolic reference to a value + + + + +
+ + + + + + +
+ + + command + A command + function + A function + option + An option + parameter + A parameter + + + + + Identifies the nature of the replaceable text + + + + + + + + + + + + + + + + + + + + + Content that may or must be replaced by the user + + + + + + +
+
+ + + + Identifies the type of URI specified + + + + + + + + + + + + + + + + + + + A Uniform Resource Identifier + + + + +
+
+ + + + + + + + + + + + + + + An abbreviation, especially one followed by a period + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An often pronounceable word made from the initial (or selected) letters of a name or phrase + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An inline bibliographic reference to another published work + + + + + + +
+
+ + + + + + + + + + + + + + + A citation to a reference page + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A reference volume number + + + + +
+
+ + + + + + Identifies the nature of the publication being cited + + + + + + Identifies the nature of some other kind of publication being cited + + + + + + + Identifies that this is some other kind of publication being cited + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The title of a cited work + + + + + + +
+
+ + + + + + + + + + + + + + + Emphasized text + + + + + + +
+
+ + + A limited span of emphasized text + + + + +
+
+ + + + + + + + + + + + + + + A word or phrase in a language other than the primary language of the document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A limited word or phrase in a language other than the primary language of the document + + + + +
+
+ + + + + + + + + + + + + + + A span of text + + + + + + +
+
+ + + A limited span of text + + + + +
+
+ + + + + + + + + + + + + + + An inline quotation + + + + + + +
+
+ + + + + + + + + + + + + + + A limited inline quotation + + + + +
+
+ + + + + + + + + + + + + + + A subscript (as in Hâ‚‚O, the molecular formula for water) + + + + +
+
+ + + + + + + + + + + + + + + A superscript (as in x², the mathematical notation for x multiplied by itself) + + + + +
+
+ + + copyright + A copyright + registered + A registered copyright + service + A service + trade + A trademark + + + + + Identifies the class of trade mark + + + + + + + + + + + + + + + + + + + + + A trademark + + + + +
+
+ + + + + + + + + + + + + + + A word meant specifically as a word and not representing anything else + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a footnote (a footnote mark) + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A cross reference to another part of the document + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A hypertext link + + + + + + +
+
+ + + + + + + + + Holds additional information that may be used by the application when resolving the link + + + + + Specifies the URI of the document in which the link target appears + + + + + + Specifies the location of the link target in the document + + + + + Identifies application-specific customization of the link behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + A link that addresses its target indirectly + + + + + + +
+
+ + + + + + + + + + + + + + A spot in the document + + + + +
+
+ + + + + + + + + + + + + + A text-only annotation, often used for accessibility + + + + + + + + + +
+
+ + + Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A group of formal objects, for example subfigures + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies the editorial or publication status of the element on which it occurs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + The dedication of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Acknowledgements of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Text at the back of a book describing facts about its production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An appendix in a book or article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A chapter, as of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Introductory matter preceding the first chapter of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An introduction to the contents of a part + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + legal + A section of legal obligations or requirements + + + + Identifies the nature of the section + + + + + + Identifies a non-standard section class + + + + + + + Indicates that a non-standard section class is applied + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a document with no subdivisions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + faq + A collection of frequently asked questions. + journalarticle + An article in a journal or other periodical. + productsheet + A description of a product. + specification + A specification. + techreport + A technical report. + whitepaper + A white paper. + + + + + Identifies the nature of the article + + + + + + Identifies the nature of the non-standard article + + + + + + + Identifies the nature of the article + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies one or more annotations that apply to this element + + +
+ + + + + + Identifies one or more elements to which this annotation applies + + + + + + + + + + + + + + + + + + + An annotation + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Identifies the XLink extended link type + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + extended + An XLink extended link type + + + + + Identifies the XLink locator link type + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + locator + An XLink locator link type + + + + + Identifies the XLink arc link type + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + arc + An XLink arc link type + + + + + Identifies the XLink resource link type + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + resource + An XLink resource link type + + + + + Identifies the XLink title link type + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + title + An XLink title link type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the XLink traversal-from + + + + + + Specifies the XLink label + + + + + + Specifies the XLink traversal-to + + + +
+ + + + + + + + + + + + Identifies the XLink link type + extended + An XLink extended link + + + + + + + + + + + + + An XLink extended link + + + + + + + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + locator + An XLink locator link + + + + + + + + + + + + + + + + + An XLink locator in an extendedlink + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + arc + An XLink arc link + + + + + + + + + + + + + + + + + + + + + + + + + An XLink arc in an extendedlink + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A top-level section of document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect3 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect4 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of reference entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A reference page (originally a UNIX man-style reference page) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Meta-information for a reference entry + + + + + + + + + + + + + + + + +
+ + + source + The name of the software product or component to which this topic applies + version + The version of the software product or component to which this topic applies + manual + The section title of the reference page (e.g., User Commands) + sectdesc + The section title of the reference page (believed synonymous with "manual" but in wide use) + software + The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + + + + + + Identifies the kind of miscellaneous information + + + + + + + Identifies the nature of non-standard miscellaneous information + + + + + + Identifies the kind of miscellaneious information + other + Indicates that the information is some 'other' kind. + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + Meta-information for a reference entry other than the title and volume number + + + + +
+
+ + + + + + + + + + + + + + + The name, purpose, and classification of a reference page + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A description of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The name of (one of) the subject(s) of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A short (one sentence) synopsis of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The scope or other indication of applicability of a reference entry + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A syntactic synopsis of the subject of the reference page + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section in a refentry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A major subsection of a reference entry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for a list of glossary entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + + + + + + + + + + + + + + + + + An entry in a glossary or glosslist + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies a list of keywords for the definition + + + + + + + + + + + + + + + + + A definition in a glossentry + + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry + to another + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry to another + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term, with limited content + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + An inline definition of a term + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + + + + + +
+ + + Identifies the relationship between the bibliographic elemnts + + +
+ + + + + + + + + + + + + + + + + + + + + A raw entry in a bibliography + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked entry in a bibliography + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A raw container for related bibliographic information + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked container for related bibliographic information + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Untyped bibliographic information + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a list of bibliography entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + The units (for example, pages) used to identify the beginning and ending of a reference. + + + + + + Identifies the beginning of a reference; the location within the work that is being referenced. + + + + + + Identifies the end of a reference. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cross-reference to a bibliographic entry + + + + +
+ + + normal + Normal + preferred + Preferred + + + + + Specifies the significance of the term + + + + + + Specifies the IDs of the elements to which this term applies + + + + + + Indicates the page on which this index term occurs in some version of the printed document + + + + + all + All indexes + global + The global index (as for a combined index of a set of books) + local + The local index (the index for this document only) + + + + + Specifies the scope of the index term + + + + + + Specifies the string by which the term is to be sorted; if unspecified, the term content is used + + + + + Specifies the target index for this term + + +
+ + + + + + + + + + + + + + + A set of index terms in the meta-information of a document + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Identifies the class of index term + singular + A singular index term + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term + + + + +
+
+ + + + + + Identifies the class of index term + startofrange + The start of a range + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term that covers a range + + + + +
+
+ + + + + + Identifies the class of index term + endofrange + The end of a range + + + + + Points to the start of the range + + + + + + + + + + + + + + + + + Identifies the end of a range associated with an indexed term + + Indexterm 'startref' type constraint + + @startref on indexterm must point to an indexterm. + @startref on indexterm must point to a startofrange indexterm. + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary word or phrase under which an index term should be sorted + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A secondary word or phrase in an index term + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A tertiary word or phrase in an index term + + + + + + +
+
+ + + + + + Identifies the class of 'see' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader instead to another entry in the index + + + + + + +
+
+ + + + + + Identifies the class of 'seealso' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader also to another entry in the index + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a book or part of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a set of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in an index + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry in an index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + A primary term in an index entry, not in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A secondary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A tertiary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See +entry in an index, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See also + entry in an index, rather than in the text + + + + + + +
+ + + Indicates the page on which this element occurs in some version of the printed document + + +
+ + + + + + + + + + + + + + + + + + A table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + A division in a table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A component title in a table of contents + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + A task to be completed + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary of a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The prerequisites for a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + Information related to a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + calspair + Coordinates expressed as a pair of CALS graphic coordinates. + linecolumn + Coordinates expressed as a line and column. + linecolumnpair + Coordinates expressed as a pair of lines and columns. + linerange + Coordinates expressed as a line range. + + + + + + Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + for graphics and linecolumn + for line-oriented elements. + + + + + + + + Indicates that non-standard units are used for this area +. In this case otherunits + must be specified. + other + Coordinates expressed in some non-standard units. + + + + Identifies the units used in the coords + attribute when the units + attribute is other +. This attribute is forbidden otherwise. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A list of callout +s + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Identifies the areas described by this callout. + + + + + + + + + + + + + + + + A called out + description of a marked area + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A program listing with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A collection of regions in a graphic or code example + + + + + + + + + +
+
+ + + + + + Point to the callout +s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + + + + + + Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + + + + + Provides the coordinates of the area. The coordinates must be interpreted using the units + specified. + + + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A set of related areas in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A screen with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for an image object with callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + The location of a callout embedded in text + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a co + + + + +
+
+ + + + + + + + + + + + + + + + + + A set of EBNF productions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A production in a set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The left-hand side of an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + The right-hand side of an EBNF production + + + + + + + + + + + +
+
+ + + + + + Specifies a URI that points to a production +where the nonterminal + is defined + + + + + + + + + + + + + + + + A non-terminal in an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + A constraint in an EBNF production + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + + + +
+
+ + + + + + + + + + + + + + + A cross-reference to an EBNF production + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The definition of a constraint in an EBNF production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Specifies the alignment character when align + is set to char +. + + + + + Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + when align + is set to char +. + + 0 + 100 + + + + + + Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + + all + Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + bottom + Frame only the bottom of the table. + none + Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + sides + Frame the left and right sides of the table. + top + Frame the top of the table. + topbot + Frame the top and bottom of the table. + + + + + + Specifies the presence or absence of the column separator + + 0 + No column separator rule. + 1 + Provide a column separator rule on the right + + + + + + Specifies the presence or absence of the row separator + + 0 + No row separator rule. + 1 + Provide a row separator rule below + + + + + + Specifies the orientation of the table + + land + 90 degrees counter-clockwise from the rest of the text flow. + port + The same orientation as the rest of the text flow. + + + + + + Specifies the table style + + + + + Indicates whether or not the entries in the first column should be considered row headers + + firstcol + Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + headers + Indicates that row headers are identified by use of the headers attribute on entries in the table. + norowheader + Indicates that entries in the first column have no special significance with respect to column headers. + + + + + + Specifies the horizontal alignment of text in an entry. + + center + Centered. + char + Aligned on a particular character. + justify + Left and right justified. + left + Left justified. + right + Right justified. + + + + + + Specifies the vertical alignment of text in an entry. + + bottom + Aligned on the bottom of the entry. + middle + Aligned in the middle. + top + Aligned at the top of the entry. + + + + + + Specifies a column specification by name. + + + + + Specifies a starting column by name. + + + + + Specifies a span by name. + + + + + + Specifies a starting column by name. + + + Specifies an ending column by name. + + + + + + + + + + + + + + Provides a name for a column specification. + + + + + Provides a name for a span specification. + + +
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for the main content of a table, or part of a table + + + + + + + + + + + + + + + + +
+
+ + + + + + The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + + + + + + Specifies the width of the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications for a column in a table + + + + +
+
+ + + + + + Specifies a starting column by name. + + + + + Specifies an ending column by name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formatting information for a spanned column in a table + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table footer consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + + + + +
+
+ + + + + + Specifies the number of additional rows which this entry occupies. Defaults to zero. + + + + + + Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + + 0 + Do not rotate the cell. + 1 + Rotate the cell 90 degrees counter-clockwise. + + + + + + Specifies the scope of a header. + + row + Applies to the row + col + Applies to the column + rowgroup + Applies to the row group + colgroup + Applies to the column group + + + + + + Specifies the entry or entries which serve as headers for this element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cell in a table + + Element exclusion + + table must not occur among the children or descendants of entry + + + + Element exclusion + + informaltable must not occur among the children or descendants of entry + + + + + + + + + + + + + +
+
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the entry table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subtable appearing in place of an entry in a table + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the short or long title should be used in a List of Tables + + 0 + Indicates that the full title should be used. + 1 + Indicates that the short short title (titleabbrev) should be used. + + + + + + Indicates if the table should appear in a List of Tables + + 0 + Indicates that the table should not occur in the List of Tables. + 1 + Indicates that the table should appear in the List of Tables. + + + + + + + + + + + + + + A formal table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + + + + + This attribute specifies style information for the current element. + + + + + This attribute offers advisory information about the element for which it is set. + + + + + + + + This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + + + + + + + + Occurs when the pointing device button is clicked over an element. + + + + + Occurs when the pointing device button is double clicked over an element. + + + + + Occurs when the pointing device button is pressed over an element. + + + + + Occurs when the pointing device button is released over an element. + + + + + Occurs when the pointing device is moved onto an element. + + + + + Occurs when the pointing device is moved while it is over an element. + + + + + Occurs when the pointing device is moved away from an element. + + + + + Occurs when a key is pressed and released over an element. + + + + + Occurs when a key is pressed down over an element. + + + + + Occurs when a key is released over an element. + + + + + + + + + + + + + + + + + Specifies the alignment of data and the justification of text in a cell. + + left + Left-flush data/Left-justify text. This is the default value for table data. + center + Center data/Center-justify text. This is the default value for table headers. + right + Right-flush data/Right-justify text. + justify + Double-justify text. + char + Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + + + + + + This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + + + + + When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + + + An explicit offset. + + [0-9]+% + + A percentage offset. + + + + + + + + + Specifies the vertical position of data within a cell. + + top + Cell data is flush with the top of the cell. + middle + Cell data is centered vertically within the cell. This is the default value. + bottom + Cell data is flush with the bottom of the cell. + baseline + All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + + + + + + + + + Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + + + + + Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + + + An explicit width. + + [0-9]+% + + A percentage width. + + + + + + Specifies the width (in pixels only) of the frame around a table. + + + + + + Specifies which sides of the frame surrounding a table will be visible. + + void + No sides. This is the default value. + above + The top side only. + below + The bottom side only. + hsides + The top and bottom sides only. + lhs + The left-hand side only. + rhs + The right-hand side only. + vsides + The right and left sides only. + box + All four sides. + border + All four sides. + + + + + + Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + + none + No rules. This is the default value. + groups + Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + rows + Rules will appear between rows only. + cols + Rules will appear between columns only. + all + Rules will appear between all rows and columns. + + + + + + Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + + + An explicit spacing. + + [0-9]+% + + A percentage spacing. + + + + + + Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + + + An explicit padding. + + [0-9]+% + + A percentage padding. + + + + + + + + + + Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + + + + + This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + + + + + Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + + + + + Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + + row + The current cell provides header information for the rest of the row that contains it + col + The current cell provides header information for the rest of the column that contains it. + rowgroup + The header cell provides header information for the rest of the row group that contains it. + colgroup + The header cell provides header information for the rest of the column group that contains it. + + + + + + Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all rows from the current row to the last row of the table section (thead +, tbody +, or tfoot +) in which the cell is defined. + + + + + + Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all columns from the current column to the last column of the column group (colgroup +) in which the cell is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal (captioned) HTML table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An HTML table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + An HTML table caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + This attribute, whose value must be an integer > 0, specifies the number of columns spanned + by the col + element; the col + element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + element shares its attributes with the next N-1 columns. + + + + + + Specifies a default width for each column spanned by the current col + element. It has the same meaning as the width + attribute for the colgroup + element and overrides it. + + + + + + + + + Specifications for a column in an HTML table + + + + +
+
+ + + + + + This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + element contains one or more col + elements. + + + + + + This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + element. + + + + + + + + + A group of columns in an HTML table + + + + + + +
+
+ + + + + + + + + + A table header consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A table footer consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A wrapper for the rows of an HTML table or informal HTML table + + + + + + +
+
+ + + + + + + + + + A row in an HTML table + + + + + + + + + +
+
+ + + + + + + + + + + A table header entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + A table entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A detailed set of messages, usually error messages + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for an entry in a message set + + + + + + + + + + + + +
+
+ + + + + + The audience to which the message relevant + + + + + The origin of the message + + + + + The level of importance or severity of a message + + + + + + + + + + + + + + + + + + + + + + + A wrapper for a simpler entry in a message set + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A subcomponent of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A related component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + The actual text of a message component in a message set + + + + + + +
+
+ + + + + + + + + + + + + + + Information about a message in a message set + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The level of importance or severity of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The origin of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The audience to which a message in a message set is relevant + + + + +
+
+ + + + + + + + + + + + + + + + + + Explanatory material relating to a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + none + No labels + number + Numeric labels + qanda + "Q:" and "A:" labels + + + + + Specifies the default labelling + + + + + + + + + + + + + + + + + + + + + A question-and-answer set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A titled division in a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A question/answer set within a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A question in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An answer to a question posed in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A label on a question or answer + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation + + Element exclusion + + example must not occur among the children or descendants of equation + + + + Element exclusion + + figure must not occur among the children or descendants of equation + + + + Element exclusion + + table must not occur among the children or descendants of equation + + + + Element exclusion + + equation must not occur among the children or descendants of equation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical equation or expression occurring inline + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical phrase that can be represented with ordinary text and a small amount of markup + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is MathML + mathml + Specifies MathML. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A MathML expression in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the MathML namespace + + + + + + + + + + +
+ + + +
+ + + + + + + + + + + + Specifies that the format of the data is SVG + svg + Specifies SVG. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SVG drawing in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the SVG namespace + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A string of formatting markup in text that is to be represented literally + + + + +
+
+ + + + + + attribute + An attribute + attvalue + An attribute value + element + An element + emptytag + An empty element tag + endtag + An end tag + genentity + A general entity + localname + The local name part of a qualified name + namespace + A namespace + numcharref + A numeric character reference + paramentity + A parameter entity + pi + A processing instruction + prefix + The prefix part of a qualified name + comment + An SGML comment + starttag + A start tag + xmlpi + An XML processing instruction + + + + + Identifies the nature of the tag content + + + + + + Identifies the namespace of the tag content + + + + + + + + + + + + + + + + + + + + + A component of XML (or SGML) markup + + + + + + + + + +
+
+ + + Identifies the class of symbol + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A name that is replaced by a value before processing + + + + +
+
+ + + + + + + + + + + + + + + A unit of information + + + + +
+
+ + + + + + + + + + + + + + + Inline text that is some literal value + + + + +
+
+ + + Identifies the (computer) language of the code fragment + + + + + + + + + + + + + + + + + + + + An inline code fragment + + + + + + + + + +
+
+ + + Identifies the class of constant + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A programming or system constant + + + + +
+
+ + + + + + copyright + A name with a copyright + registered + A name with a registered copyright + service + A name of a service + trade + A name which is trademarked + + + + + Specifies the class of product name + + + + + + + + + + + + + + + + + + The formal name of a product + + + + +
+
+ + + + + + + + + + + + + + + A number assigned to a product + + + + +
+
+ + + altkey + An alternate or secondary key + constraint + A constraint + datatype + A data type + field + A field + foreignkey + A foreign key + group + A group + index + An index + key1 + The first or primary key + key2 + An alternate or secondary key + name + A name + primarykey + The primary key + procedure + A (stored) procedure + record + A record + rule + A rule + secondarykey + The secondary key + table + A table + user + A user + view + A view + + + + + Identifies the class of database artifact + + + + + + + + + + + + + + + + + + + + + The name of a database, or part of a database + + + + +
+
+ + + hardware + A hardware application + software + A software application + + + + + Identifies the class of application + + + + + + + + + + + + + + + + + + + + + The name of a software program + + + + +
+
+ + + + + + + + + + + + + + + A physical part of a computer system + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text on a button in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Graphic and/or text appearing as a icon in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The text of a label in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a menu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a terminal menu item in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a submenu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A selection or series of selections from a menu + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The conventional name of a mouse button + + + + +
+ + + + + + + + + + +
+ + + alt + The "Alt" key + altgr + The "Alt Graph" key + backspace + The "Backspace" key + command + The "Command" key + control + The "Control" key + delete + The "Delete" key + down + The down arrow + end + The "End" key + enter + The "Enter" key + escape + The "Escape" key + home + The "Home" key + insert + The "Insert" key + left + The left arrow + meta + The "Meta" key + option + The "Option" key + pagedown + The page down key + pageup + The page up key + right + The right arrow + return + The "Return" key + shift + The "Shift" key + space + The spacebar + tab + The "Tab" key + up + The up arrow + + + + + + Identifies the function key + + + + + + + + Identifies the function key + other + Indicates a non-standard function key + + + + Specifies a keyword that identifies the non-standard key + + + + + + + + + + + + + + + + + + + + + + + + The text printed on a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + The internal, frequently numeric, identifier for a key on a keyboard + + + + +
+ + + + + + + + + + +
+ + + click + A (single) mouse click. + double-click + A double mouse click. + press + A mouse or key press. + seq + Sequential clicks or presses. + simul + Simultaneous clicks or presses. + + + + + + Identifies the nature of the action taken. If keycombo + contains more than one element, simul + is the default, otherwise there is no default. + + + + + + + + Identifies the nature of the action taken + other + Indicates a non-standard action + + + + Identifies the non-standard action in some unspecified way. + + + + + + + + + + + + + + + + + + + + + + + + A combination of input actions + + + + + + +
+
+ + + + + + + + + + + + + + + The symbolic name of a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + A graphical user interface (GUI) keyboard shortcut + + + + +
+
+ + + + + + + + + + + + + + + + + + + A key combination for an action that is also accessible through a menu + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A character or string indicating the start of an input field in a computer display + + + + + + +
+
+ + + + + + + + + + + + + + + A software environment variable + + + + +
+
+ + + devicefile + A device + directory + A directory + extension + A filename extension + headerfile + A header file (as for a programming language) + libraryfile + A library file + partition + A partition (as of a hard disk) + symlink + A symbolic link + + + + + Identifies the class of filename + + + + + + Specifies the path of the filename + + + + + + + + + + + + + + + + + + + + + + + The name of a file + + + + +
+
+ + + + + + + + + + + + + + + The name of an executable program or other software command + + + + +
+
+ + + + + + + + + + + + + + + Data, generally text, displayed or presented by a computer + + + + + + +
+
+ + + + + + + + + + + + + + + Data entered by the user + + + + + + +
+
+ + + + + + Specifies the character that should separate the command and its top-level arguments + + + + + Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A syntax summary for a software command + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + norepeat + Can not be repeated. + repeat + Can be repeated. + + + + + Indicates whether or not repetition is possible. + + + + + + opt + Formatted to indicate that it is optional. + plain + Formatted without indication. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + Indicates optionality. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An argument in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A group of elements in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + An explicit line break in a command synopsis + + + + +
+
+ + + + + + + + + + + + + + + A portion of a cmdsynopsis broken out from the main body of the synopsis + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A reference to a fragment of a command synopsis + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + A general-purpose element for representing the syntax of commands or functions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing synopsis + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a function definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the funcdefs of a funcsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a function + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A function (subroutine) name and its return type + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a function or subroutine, as in a programming language + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating that the function in question takes no arguments + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating a variable number of arguments + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of parameters + + + + + + + + + +
+
+ + + + + + opt + Formatted to indicate that it is optional. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + + + + + + + + + + + + + Information about a function parameter in a programming language + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Parameters for a function referenced through a function pointer in a synopsis + + + + +
+
+ + + + + + + + + class + This is the synopsis of a class + interface + This is the synopsis of an interface + + + + + Specifies the nature of the synopsis + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the contents of a classsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A class in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An interface in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An exception in an object-oriented programming language + + + + + + + + + + + + + +
+ + + Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + preserve + Extra whitespace and line breaks must be preserved. + + + +
+ + + + + + + + + + + + + + + + + + Modifiers in a synopsis + + + + +
+
+ + + + + + + + + + + + + + + The name of an interface + + + + +
+
+ + + + + + + + + + + + + + + The name of an exception + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The name of a field in a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + The initializer for a fieldsynopsis + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a constructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a destructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a method + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a method + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters to a method + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of method parameters + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a variable + + + + +
+
+ + + + + + + + + + + + + + + Target of a build + + + + +
+
+ + + + + + + + + + + + + + + The value returned by a function + + + + +
+
+ + + + + + union + Combined type is union of nested types + intersection + Combined type is intersection of nested types + + + + + Specifies the way how are nested types combined together + + + + + + + + + + + + + + + + + + The classification of a value + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a class, in the object-oriented programming sense + + + + +
+
+ + + + + + + + + + + + + + + The identifier for a template, in the generic programming sense + + + + +
+
+ + + + + + + + + + + + + + + The definition of a template, in the generic programming sense + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The specialization of a template identifier, in the generic programming sense + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a package definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a macro (a code-generating function) + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a macro definition (code-generating function) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a macro (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A macro name and its return type + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a union of types + + + + +
+
+ + + + + + + + + + + + + + + The definition of a union of types, which may be more than a name + + + + + + +
+
+ + + + + + + + + + Indicates how the value of a union is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a union-of-types definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of an enumeration + + + + +
+
+ + + + + + + + + + + + + + + The value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + The description of a value an enumerated type can take + + + + + + +
+
+ + + + + + + + + + + + + + + The identifier of a value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + A value an enumerated type can take and its description + + + + + + + + + + +
+
+ + + + + + + + + 0 + Value of enum is specified explicitly using enumvalue + 1 + Value of enum is inferred from its position + + + + + Indicates how the value of an enumeration is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for an enumerated-type definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a type alias + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a type-alias definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A literal listing of all or part of a program + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A note of caution + + Element exclusion + + caution must not occur among the children or descendants of caution + + + + Element exclusion + + danger must not occur among the children or descendants of caution + + + + Element exclusion + + important must not occur among the children or descendants of caution + + + + Element exclusion + + note must not occur among the children or descendants of caution + + + + Element exclusion + + tip must not occur among the children or descendants of caution + + + + Element exclusion + + warning must not occur among the children or descendants of caution + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text indicating hazardous situation + + Element exclusion + + caution must not occur among the children or descendants of danger + + + + Element exclusion + + danger must not occur among the children or descendants of danger + + + + Element exclusion + + important must not occur among the children or descendants of danger + + + + Element exclusion + + note must not occur among the children or descendants of danger + + + + Element exclusion + + tip must not occur among the children or descendants of danger + + + + Element exclusion + + warning must not occur among the children or descendants of danger + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of important + + + + Element exclusion + + danger must not occur among the children or descendants of important + + + + Element exclusion + + important must not occur among the children or descendants of important + + + + Element exclusion + + note must not occur among the children or descendants of important + + + + Element exclusion + + tip must not occur among the children or descendants of important + + + + Element exclusion + + warning must not occur among the children or descendants of important + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A message set off from the text + + Element exclusion + + caution must not occur among the children or descendants of note + + + + Element exclusion + + danger must not occur among the children or descendants of note + + + + Element exclusion + + important must not occur among the children or descendants of note + + + + Element exclusion + + note must not occur among the children or descendants of note + + + + Element exclusion + + tip must not occur among the children or descendants of note + + + + Element exclusion + + warning must not occur among the children or descendants of note + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A suggestion to the user, set off from the text + + Element exclusion + + caution must not occur among the children or descendants of tip + + + + Element exclusion + + danger must not occur among the children or descendants of tip + + + + Element exclusion + + important must not occur among the children or descendants of tip + + + + Element exclusion + + note must not occur among the children or descendants of tip + + + + Element exclusion + + tip must not occur among the children or descendants of tip + + + + Element exclusion + + warning must not occur among the children or descendants of tip + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of warning + + + + Element exclusion + + danger must not occur among the children or descendants of warning + + + + Element exclusion + + important must not occur among the children or descendants of warning + + + + Element exclusion + + note must not occur among the children or descendants of warning + + + + Element exclusion + + tip must not occur among the children or descendants of warning + + + + Element exclusion + + warning must not occur among the children or descendants of warning + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + An error code + + + + +
+
+ + + + + + + + + + + + + + + An error name + + + + +
+
+ + + + + + + + + + + + + + + An error message. + + + + +
+
+ + + + + + + + + + + + + + + The classification of an error message + + + + +
+ + + + + + +
+ + + daemon + A daemon or other system process (syslogd) + domainname + A domain name (example.com) + etheraddress + An ethernet address (00:05:4E:49:FD:8E) + event + An event of some sort (SIGHUP) + eventhandler + An event handler of some sort (hangup) + filesystem + A filesystem (ext3) + fqdomainname + A fully qualified domain name (my.example.com) + groupname + A group name (wheel) + interface + A network interface (eth0) + ipaddress + An IP address (127.0.0.1) + library + A library (libncurses) + macro + A macro + netmask + A netmask (255.255.255.192) + newsgroup + A newsgroup (comp.text.xml) + osname + An operating system name (Hurd) + process + A process (gnome-cups-icon) + protocol + A protocol (ftp) + resource + A resource + securitycontext + A security context (a role, permission, or security token, for example) + server + A server (mail.example.com) + service + A service (ppp) + systemname + A system name (hephaistos) + username + A user name (ndw) + + + + + + Identifies the nature of the system item + + + + + + + Identifies the nature of the non-standard system item + + + + + + + Identifies the kind of systemitemgraphic identifier + other + Indicates that the system item is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + A system-related item or term + + + + + + +
+
+ + + + + + + + + + + + + + + An option for a software command + + + + +
+
+ + + + + + + + + + + + + + + Optional information + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A unit of data associated with some part of a computer system + + + + +
+
+ + + + + + + + + Identifies the topic type + + + + + + + + + + + + + + + + + + + + + + + + + + A modular unit of documentation not part of any particular narrative flow + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
diff --git a/catalog/docbook5.2/rng/docbookxi.rnc b/catalog/docbook5.2/rng/docbookxi.rnc new file mode 100755 index 0000000..6be7bba --- /dev/null +++ b/catalog/docbook5.2/rng/docbookxi.rnc @@ -0,0 +1,12060 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ctrl = "http://nwalsh.com/xmlns/schema-control/" +default namespace db = "http://docbook.org/ns/docbook" +namespace html = "http://www.w3.org/1999/xhtml" +namespace local = "" +namespace mml = "http://www.w3.org/1998/Math/MathML" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace s = "http://purl.oclc.org/dsdl/schematron" +namespace svg = "http://www.w3.org/2000/svg" +namespace trans = "http://docbook.org/ns/transclusion" +namespace xi = "http://www.w3.org/2001/XInclude" +namespace xlink = "http://www.w3.org/1999/xlink" + +# This file is part of DocBook XInclude V5.2CR5 +# +# Copyright 1992-2015 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-comment@lists.oasis-open.org mailing list. For more +# information, see http://www.oasis-open.org/docbook/. +# +# ====================================================================== + +s:ns [ + prefix = "a" + uri = "http://relaxng.org/ns/compatibility/annotations/1.0" +] +s:ns [ prefix = "ctrl" uri = "http://nwalsh.com/xmlns/schema-control/" ] +s:ns [ prefix = "db" uri = "http://docbook.org/ns/docbook" ] +s:ns [ prefix = "html" uri = "http://www.w3.org/1999/xhtml" ] +s:ns [ prefix = "mml" uri = "http://www.w3.org/1998/Math/MathML" ] +s:ns [ prefix = "rng" uri = "http://relaxng.org/ns/structure/1.0" ] +s:ns [ prefix = "s" uri = "http://purl.oclc.org/dsdl/schematron" ] +s:ns [ prefix = "svg" uri = "http://www.w3.org/2000/svg" ] +s:ns [ prefix = "trans" uri = "http://docbook.org/ns/transclusion" ] +s:ns [ prefix = "xi" uri = "http://www.w3.org/2001/XInclude" ] +s:ns [ prefix = "xlink" uri = "http://www.w3.org/1999/xlink" ] +start = + (db.set + | db.book + | db.divisions + | db.components + | db.navigation.components + | db.section + | db.para) + | (db.abstract + | db.mediaobject.content + | db.audiodata + | db.imagedata + | db.textdata + | db.videodata + | db.caption + | db.publishing.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.formalpara + | db.inlinemediaobject + | db.list.blocks + | db.legalnotice + | db.verbatim.blocks + | db.graphic.blocks + | db.personblurb + | db.revhistory + | db.simpara + | db.step + | db.stepalternatives + | db.info) + | (db.partintro | db.simplesect) + | db.annotation + | (db.sect1 | db.sect2 | db.sect3 | db.sect4 | db.sect5) + | (db.refentry | db.refsection | db.refsynopsisdiv) + | (db.refsect1 | db.refsect2 | db.refsect3) + | (db.glossary | db.glossdiv | db.glosslist) + | (db.bibliodiv | db.bibliolist) + | (db.setindex | db.index | db.indexdiv) + | (db.toc | db.tocdiv) + | (db.task | db.taskprerequisites | db.taskrelated | db.tasksummary) + | (db.calloutlist + | db.programlistingco + | db.screenco + | db.imageobjectco) + | (db.productionset | db.constraintdef) + | (db.msg + | db.msgexplan + | db.msgmain + | db.msgrel + | db.msgset + | db.msgsub) + | (db.qandadiv | db.qandaentry | db.qandaset) + | (db.equation | db.informalequation) + | db.cmdsynopsis + | (db.synopsis.blocks | db.funcsynopsisinfo | db.classsynopsisinfo) + | db.admonition.blocks + | db.topic +div { + db._any.attribute = + + ## Any attribute, including any attribute in any namespace + attribute * { text } + db._any_other.attribute = + + ## Any attribute in any other explicit namespace + attribute * - (db:* | xml:* | xlink:* | trans:* | local:*) { text } + db._any = + + ## Any element from almost any namespace + element * - db:* { (db._any.attribute | text | db._any)* } +} +db.arch.attribute = + + ## Designates the computer or chip architecture to which the element applies + attribute arch { text } +db.audience.attribute = + + ## Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + attribute audience { text } +db.condition.attribute = + + ## provides a standard place for application-specific effectivity + attribute condition { text } +db.conformance.attribute = + + ## Indicates standards conformance characteristics of the element + attribute conformance { text } +db.os.attribute = + + ## Indicates the operating system to which the element is applicable + attribute os { text } +db.revision.attribute = + + ## Indicates the editorial revision to which the element belongs + attribute revision { text } +db.security.attribute = + + ## Indicates something about the security level associated with the element to which it applies + attribute security { text } +db.userlevel.attribute = + + ## Indicates the level of user experience for which the element applies + attribute userlevel { text } +db.vendor.attribute = + + ## Indicates the computer vendor to which the element applies + attribute vendor { text } +db.wordsize.attribute = + + ## Indicates the word size (width in bits) of the computer architecture to which the element applies + attribute wordsize { text } +db.outputformat.attribute = + + ## Indicates the output format (for example, print or epub) to which the element applies + attribute outputformat { text } +db.effectivity.attributes = + db.arch.attribute? + & db.audience.attribute? + & db.condition.attribute? + & db.conformance.attribute? + & db.os.attribute? + & db.revision.attribute? + & db.security.attribute? + & db.userlevel.attribute? + & db.vendor.attribute? + & db.wordsize.attribute? + & db.outputformat.attribute? +db.endterm.attribute = + + ## Points to the element whose content is to be used as the text of the link + attribute endterm { xsd:IDREF } +db.linkend.attribute = + + ## Points to an internal link target by identifying the value of its xml:id attribute + attribute linkend { xsd:IDREF } +db.linkends.attribute = + + ## Points to one or more internal link targets by identifying the value of their xml:id attributes + attribute linkends { xsd:IDREFS } +db.xlink.href.attribute = + + ## Identifies a link target with a URI + attribute xlink:href { xsd:anyURI } +db.xlink.simple.type.attribute = + + ## Identifies the XLink link type + attribute xlink:type { + + ## An XLink simple link type + "simple" + } +db.xlink.role.attribute = + + ## Identifies the XLink role of the link + attribute xlink:role { xsd:anyURI } +db.xlink.arcrole.attribute = + + ## Identifies the XLink arcrole of the link + attribute xlink:arcrole { xsd:anyURI } +db.xlink.title.attribute = + + ## Identifies the XLink title of the link + attribute xlink:title { text } +db.xlink.show.enumeration = + + ## An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + "new" + | + ## An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + "replace" + | + ## An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + "embed" + | + ## The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.show.attribute = + + ## Identifies the XLink show behavior of the link + attribute xlink:show { db.xlink.show.enumeration } +db.xlink.actuate.enumeration = + + ## An application should traverse to the ending resource immediately on loading the starting resource. + "onLoad" + | + ## An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + "onRequest" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + "other" + | + ## The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + "none" +db.xlink.actuate.attribute = + + ## Identifies the XLink actuate behavior of the link + attribute xlink:actuate { db.xlink.actuate.enumeration } +db.xlink.simple.link.attributes = + db.xlink.simple.type.attribute? + & db.xlink.href.attribute? + & db.xlink.role.attribute? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? +db.xlink.attributes = + db.xlink.simple.link.attributes + | (db.xlink.extended.link.attributes + | db.xlink.locator.link.attributes + | db.xlink.arc.link.attributes + | db.xlink.resource.link.attributes + | db.xlink.title.link.attributes) +db.xml.id.attribute = + + ## Identifies the unique ID value of the element + attribute xml:id { xsd:ID } +db.version.attribute = + + ## Specifies the DocBook version of the element and its descendants + attribute version { text } +db.xml.lang.attribute = + + ## Specifies the natural language of the element and its descendants + attribute xml:lang { text } +db.xml.base.attribute = + + ## Specifies the base URI of the element and its descendants + attribute xml:base { xsd:anyURI } +db.remap.attribute = + + ## Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + attribute remap { text } +db.xreflabel.attribute = + + ## Provides the text that is to be generated for a cross reference to the element + attribute xreflabel { text } +db.xrefstyle.attribute = + + ## Specifies a keyword or keywords identifying additional style information + attribute xrefstyle { text } +db.revisionflag.enumeration = + + ## The element has been changed. + "changed" + | + ## The element is new (has been added to the document). + "added" + | + ## The element has been deleted. + "deleted" + | + ## Explicitly turns off revision markup for this element. + "off" +db.revisionflag.attribute = + + ## Identifies the revision status of the element + attribute revisionflag { db.revisionflag.enumeration } +db.dir.enumeration = + + ## Left-to-right text + "ltr" + | + ## Right-to-left text + "rtl" + | + ## Left-to-right override + "lro" + | + ## Right-to-left override + "rlo" +db.dir.attribute = + + ## Identifies the direction of text in an element + attribute dir { db.dir.enumeration } +db.rdfalite.vocab = + + ## The RDFa Lite vocab + attribute vocab { xsd:anyURI } +db.rdfalite.typeof = + + ## The RDFa Lite typeof + attribute typeof { text } +db.rdfalite.property = + + ## The RDFa Lite property + attribute property { text } +db.rdfalite.resource = + + ## The RDFa Lite resource + attribute resource { text } +db.rdfalite.prefix = + + ## The RDFa Lite prefix + attribute prefix { text } +db.rdfalite.attributes = + db.rdfalite.vocab? + & db.rdfalite.typeof? + & db.rdfalite.property? + & db.rdfalite.resource? + & db.rdfalite.prefix? +db.trans.idfixup.enumeration = + + ## No ID fixup strategy + "none" + | + ## ID fixup by concatenating suffixes + "suffix" + | + ## ID fixup by creating unique values + "auto" +db.trans.idfixup.attribute = + + ## The transclusion ID fixup strategy + attribute trans:idfixup { db.trans.idfixup.enumeration } +db.trans.suffix.attribute = + + ## The transclusion suffix to use when the suffix ID fixup strategy is employed + [ + s:pattern [ + s:title [ "Suffix fixup must be specified" ] + s:rule [ + context = "db:*[@trans:suffix]" + s:assert [ + test = "@trans:idfixup = 'suffix'" + "If a suffix is specified, suffix ID fixup must also be specified." + ] + ] + ] + ] + attribute trans:suffix { text } +db.trans.linkscope.enumeration = + + ## No link scope adjustments are made + "user" + | + ## The link scopes are adjusted with the suffix property + "local" + | + ## The link scopes are adjusted based on proximity + "near" + | + ## The link scopes are adjusted based on document order + "global" +db.trans.linkscope.attribute = + + ## The transclusion link scope adjustment + attribute trans:linkscope { db.trans.linkscope.enumeration } +db.common.transclusion.attributes = + db.trans.idfixup.attribute? + & db.trans.suffix.attribute? + & db.trans.linkscope.attribute? +db.common.base.attributes = + db.version.attribute? + & db.xml.lang.attribute? + & db.xml.base.attribute? + & db.remap.attribute? + & db.xreflabel.attribute? + & db.revisionflag.attribute? + & db.dir.attribute? + & db.effectivity.attributes + & db.rdfalite.attributes + & db.common.transclusion.attributes + & db._any_other.attribute* +db.common.attributes = + db.xml.id.attribute? + & db.common.base.attributes + & db.annotations.attribute? +db.common.idreq.attributes = + db.xml.id.attribute + & db.common.base.attributes + & db.annotations.attribute? +db.common.linking.attributes = + (db.linkend.attribute | db.xlink.attributes)? +db.common.req.linking.attributes = + db.linkend.attribute | db.xlink.attributes +db.common.data.attributes = + + ## Specifies the format of the data + attribute format { text }?, + ( + ## Indentifies the location of the data by URI + attribute fileref { xsd:anyURI } + | + ## Identifies the location of the data by external identifier (entity name) + attribute entityref { xsd:ENTITY }) +db.verbatim.continuation.enumeration = + + ## Line numbering continues from the immediately preceding element with the same name. + "continues" + | + ## Line numbering restarts (begins at 1, usually). + "restarts" +db.verbatim.continuation.attribute = + + ## Determines whether line numbering continues from the previous element or restarts + attribute continuation { db.verbatim.continuation.enumeration } +db.verbatim.linenumbering.enumeration = + + ## Lines are numbered. + "numbered" + | + ## Lines are not numbered. + "unnumbered" +db.verbatim.linenumbering.attribute = + + ## Determines whether lines are numbered + attribute linenumbering { db.verbatim.linenumbering.enumeration } +db.verbatim.startinglinenumber.attribute = + + ## Specifies the initial line number + attribute startinglinenumber { xsd:integer } +db.verbatim.language.attribute = + + ## Identifies the language (i.e. programming language) of the verbatim content + attribute language { text } +db.verbatim.xml.space.attribute = + + ## Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + attribute xml:space { + + ## Whitespace must be preserved. + "preserve" + } +db.verbatim.common.attributes = + db.verbatim.continuation.attribute? + & db.verbatim.linenumbering.attribute? + & db.verbatim.startinglinenumber.attribute? + & db.verbatim.xml.space.attribute? +db.verbatim.attributes = + db.verbatim.common.attributes & db.verbatim.language.attribute? +db.label.attribute = + + ## Specifies an identifying string for presentation purposes + attribute label { text } +db.width.characters.attribute = + + ## Specifies the width (in characters) of the element + attribute width { xsd:nonNegativeInteger } +db.spacing.enumeration = + + ## The spacing should be "compact". + "compact" + | + ## The spacing should be "normal". + "normal" +db.spacing.attribute = + + ## Specifies (a hint about) the spacing of the content + attribute spacing { db.spacing.enumeration } +db.pgwide.enumeration = + + ## The element should be rendered in the current text flow (with the flow column width). + "0" + | + ## The element should be rendered across the full text page. + "1" +db.pgwide.attribute = + + ## Indicates if the element is rendered across the column or the page + attribute pgwide { db.pgwide.enumeration } +db.language.attribute = + + ## Identifies the language (i.e. programming language) of the content + attribute language { text } +db.performance.enumeration = + + ## The content describes an optional step or steps. + "optional" + | + ## The content describes a required step or steps. + "required" +db.performance.attribute = + + ## Specifies if the content is required or optional + attribute performance { db.performance.enumeration } +db.floatstyle.attribute = + + ## Specifies style information to be used when rendering the float + attribute floatstyle { text } +db.width.attribute = + + ## Specifies the width of the element + attribute width { text } +db.depth.attribute = + + ## Specifies the depth of the element + attribute depth { text } +db.contentwidth.attribute = + + ## Specifies the width of the content rectangle + attribute contentwidth { text } +db.contentdepth.attribute = + + ## Specifies the depth of the content rectangle + attribute contentdepth { text } +db.scalefit.enumeration = + + ## False (do not scale-to-fit; anamorphic scaling may occur) + "0" + | + ## True (scale-to-fit; anamorphic scaling is forbidden) + "1" +db.scale.attribute = + + ## Specifies the scaling factor + attribute scale { xsd:positiveInteger } +db.classid.attribute = + + ## Specifies a classid for a media object player + attribute classid { text } +db.autoplay.attribute = + + ## Specifies the autoplay setting for a media object player + attribute autoplay { text } +db.halign.enumeration = + + ## Centered horizontally + "center" + | + ## Aligned horizontally on the specified character + "char" + | + ## Fully justified (left and right margins or edges) + "justify" + | + ## Left aligned + "left" + | + ## Right aligned + "right" +db.valign.enumeration = + + ## Aligned on the bottom of the region + "bottom" + | + ## Centered vertically + "middle" + | + ## Aligned on the top of the region + "top" +db.biblio.class.enumeration = + + ## A digital object identifier. + "doi" + | + ## An international standard book number. + "isbn" + | + ## An international standard technical report number (ISO 10444). + "isrn" + | + ## An international standard serial number. + "issn" + | + ## An international standard text code. + "istc" + | + ## A Library of Congress reference number. + "libraryofcongress" + | + ## A publication number (an internal number or possibly organizational standard). + "pubsnumber" + | + ## A Uniform Resource Identifier + "uri" +db.biblio.class-enum.attribute = + + ## Identifies the kind of bibliographic identifier + attribute class { db.biblio.class.enumeration }? +db.biblio.class-other.attribute = + + ## Identifies the nature of the non-standard bibliographic identifier + attribute otherclass { xsd:NMTOKEN } +db.biblio.class-other.attributes = + + ## Identifies the kind of bibliographic identifier + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.biblio.class-other.attribute +db.biblio.class.attribute = + db.biblio.class-enum.attribute | db.biblio.class-other.attributes +db.pubwork.enumeration = + + ## An article + "article" + | + ## A bulletin board system + "bbs" + | + ## A book + "book" + | + ## A CD-ROM + "cdrom" + | + ## A chapter (as of a book) + "chapter" + | + ## A DVD + "dvd" + | + ## An email message + "emailmessage" + | + ## A gopher page + "gopher" + | + ## A journal + "journal" + | + ## A manuscript + "manuscript" + | + ## A posting to a newsgroup + "newsposting" + | + ## A part (as of a book) + "part" + | + ## A reference entry + "refentry" + | + ## A section (as of a book or article) + "section" + | + ## A series + "series" + | + ## A set (as of books) + "set" + | + ## A web page + "webpage" + | + ## A wiki page + "wiki" + | + ## Some other kind of work + "other" +db.biblio.pubwork.enumeration = db.pubwork.enumeration +db.biblio.pubwork-enum.attribute = + + ## Identifies the nature of the published work + attribute pubwork { db.biblio.pubwork.enumeration }? +db.biblio.pubwork-other.attribute = + + ## Identifies the nature of some other kind of published work + attribute otherpubwork { xsd:NMTOKEN } +db.biblio.pubwork-other.attributes = + + ## Identifies that this is some other kind of published work + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.biblio.pubwork-other.attribute +db.biblio.pubwork.attribute = + db.biblio.pubwork-enum.attribute | db.biblio.pubwork-other.attributes +db.ubiq.inlines = + (db.inlinemediaobject + | db.remark + | db.link.inlines + | db.alt + | db.trademark + | # below, effectively the publishing inlines (as of 5.0) + db.abbrev + | db.acronym + | db.date + | db._emphasis + | db.footnote + | db.footnoteref + | db._foreignphrase + | db._phrase + | db._quote + | db.subscript + | db.superscript + | db.wordasword) + | db.annotation + | (db._firstterm | db._glossterm) + | db.indexterm + | db.coref +db._text = + (text | db.ubiq.inlines | db._phrase | db.replaceable)* + | db.xi.include +db._title = db.title? & db.titleabbrev? & db.subtitle? +db._title.req = db.title & db.titleabbrev? & db.subtitle? +db._title.only = db.title? & db.titleabbrev? +db._title.onlyreq = db.title & db.titleabbrev? +db._info = (db._title, db.titleforbidden.info?) | db.info? +db._info.title.req = + (db._title.req, db.titleforbidden.info?) | db.titlereq.info +db._info.title.only = + (db._title.only, db.titleforbidden.info?) | db.titleonly.info +db._info.title.onlyreq = + (db._title.onlyreq, db.titleforbidden.info?) | db.titleonlyreq.info +db._info.title.forbidden = db.titleforbidden.info? +db.all.inlines = + (text + | db.ubiq.inlines + | db.general.inlines + | db.domain.inlines + | db.extension.inlines) + | db.xi.include +db.general.inlines = + db.publishing.inlines + | db.product.inlines + | db.bibliography.inlines + | db.graphic.inlines + | db.indexing.inlines + | db.link.inlines +db.domain.inlines = + db.technical.inlines + | db.math.inlines + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines + | db.os.inlines + | db.programming.inlines + | db.error.inlines +db.technical.inlines = + (db.replaceable | db.package | db.parameter) + | db.termdef + | db.nonterminal + | (db.systemitem | db.option | db.optional | db.property) +db.product.inlines = + db.trademark + | (db.productnumber + | db.productname + | db.database + | db.application + | db.hardware) +db.bibliography.inlines = + db.citation + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.author + | db.person + | db.personname + | db.org + | db.orgname + | db.editor + | db.jobtitle +db.publishing.inlines = + (db.abbrev + | db.acronym + | db.date + | db.emphasis + | db.footnote + | db.footnoteref + | db.foreignphrase + | db.phrase + | db.quote + | db.revnumber + | db.subscript + | db.superscript + | db.wordasword) + | db.glossary.inlines + | db.coref +db.graphic.inlines = db.inlinemediaobject +db.indexing.inlines = notAllowed | db.indexterm +db.link.inlines = + (db.xref | db.link | db.olink | db.anchor) | db.biblioref +db.extension.inlines = notAllowed +db.nopara.blocks = + (db.list.blocks + | db.wrapper.blocks + | db.formal.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.indexterm + | db.synopsis.blocks + | db.admonition.blocks +db.para.blocks = db.anchor | db.para | db.formalpara | db.simpara +db.all.blocks = + (db.nopara.blocks | db.para.blocks | db.extension.blocks) + | db.annotation + | db.xi.include +db.wrapper.blocks = db.formalgroup +db.formal.blocks = (db.example | db.figure | db.table) | db.equation +db.informal.blocks = + (db.informalexample | db.informalfigure | db.informaltable) + | db.informalequation +db.publishing.blocks = + db.sidebar | db.blockquote | db.address | db.epigraph +db.graphic.blocks = db.mediaobject | db.screenshot +db.technical.blocks = + db.procedure + | db.task + | (db.productionset | db.constraintdef) + | db.msgset +db.list.blocks = + (db.itemizedlist + | db.orderedlist + | db.procedure + | db.simplelist + | db.variablelist + | db.segmentedlist) + | db.glosslist + | db.bibliolist + | db.calloutlist + | db.qandaset +db.verbatim.blocks = + (db.screen | db.literallayout) + | (db.programlistingco | db.screenco) + | (db.programlisting | db.synopsis) +db.extension.blocks = notAllowed +db.info.extension = db._any +db.info.elements = + (db.abstract + | db.address + | db.artpagenums + | db.author + | db.authorgroup + | db.authorinitials + | db.bibliocoverage + | db.biblioid + | db.bibliosource + | db.collab + | db.confgroup + | db.contractsponsor + | db.contractnum + | db.copyright + | db.cover + | db.date + | db.edition + | db.editor + | db.issuenum + | 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.meta + | db.info.extension) + | db.annotation + | db.extendedlink + | (db.bibliomisc | db.bibliomset | db.bibliorelation | db.biblioset) + | db.itermset + | (db.productname | db.productnumber) + | db.xi.include +db.bibliographic.elements = + db.info.elements + | db.publishing.inlines + | db.citerefentry + | db.citetitle + | db.citebiblioid + | db.person + | db.personblurb + | db.personname + | db.subtitle + | db.title + | db.titleabbrev +div { + db.title.role.attribute = attribute role { text } + db.title.attlist = + db.title.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.title = + + ## The text of the title of a section of a document or of a formal block-level element + element title { db.title.attlist, db.all.inlines* } +} +div { + db.titleabbrev.role.attribute = attribute role { text } + db.titleabbrev.attlist = + db.titleabbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.titleabbrev = + + ## The abbreviation of a title + element titleabbrev { db.titleabbrev.attlist, db.all.inlines* } +} +div { + db.subtitle.role.attribute = attribute role { text } + db.subtitle.attlist = + db.subtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subtitle = + + ## The subtitle of a document + element subtitle { db.subtitle.attlist, db.all.inlines* } +} +div { + db.info.role.attribute = attribute role { text } + db.info.attlist = db.info.role.attribute? & db.common.attributes + db.info = + + ## A wrapper for information about a component or other block + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.info.attlist, (db._title & db.info.elements*) } +} +div { + db.titlereq.info.role.attribute = attribute role { text } + db.titlereq.info.attlist = + db.titlereq.info.role.attribute? & db.common.attributes + db.titlereq.info = + + ## A wrapper for information about a component or other block with a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titlereq.info.attlist, (db._title.req & db.info.elements*) + } +} +div { + db.titleonly.info.role.attribute = attribute role { text } + db.titleonly.info.attlist = + db.titleonly.info.role.attribute? & db.common.attributes + db.titleonly.info = + + ## A wrapper for information about a component or other block with only a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonly.info.attlist, (db._title.only & db.info.elements*) + } +} +div { + db.titleonlyreq.info.role.attribute = attribute role { text } + db.titleonlyreq.info.attlist = + db.titleonlyreq.info.role.attribute? & db.common.attributes + db.titleonlyreq.info = + + ## A wrapper for information about a component or other block with only a required title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { + db.titleonlyreq.info.attlist, + (db._title.onlyreq & db.info.elements*) + } +} +div { + db.titleforbidden.info.role.attribute = attribute role { text } + db.titleforbidden.info.attlist = + db.titleforbidden.info.role.attribute? & db.common.attributes + db.titleforbidden.info = + + ## A wrapper for information about a component or other block without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:info" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element info { db.titleforbidden.info.attlist, db.info.elements* } +} +div { + db.subjectset.role.attribute = attribute role { text } + db.subjectset.scheme.attribute = + + ## Identifies the controlled vocabulary used by this set's terms + attribute scheme { xsd:NMTOKEN } + db.subjectset.attlist = + db.subjectset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subjectset.scheme.attribute? + db.subjectset = + + ## A set of terms describing the subject matter of a document + element subjectset { db.subjectset.attlist, db.subject+ } +} +div { + db.subject.role.attribute = attribute role { text } + db.subject.weight.attribute = + + ## Specifies a ranking for this subject relative to other subjects in the same set + attribute weight { text } + db.subject.attlist = + db.subject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.subject.weight.attribute? + db.subject = + + ## One of a group of terms describing the subject matter of a document + element subject { db.subject.attlist, db.subjectterm+ } +} +div { + db.subjectterm.role.attribute = attribute role { text } + db.subjectterm.attlist = + db.subjectterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subjectterm = + + ## A term in a group of terms describing the subject matter of a document + element subjectterm { db.subjectterm.attlist, text } +} +div { + db.keywordset.role.attribute = attribute role { text } + db.keywordset.attlist = + db.keywordset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keywordset = + + ## A set of keywords describing the content of a document + element keywordset { db.keywordset.attlist, db.keyword+ } +} +div { + db.keyword.role.attribute = attribute role { text } + db.keyword.attlist = + db.keyword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keyword = + + ## One of a set of keywords describing the content of a document + element keyword { db.keyword.attlist, text } +} +db.table.choice = notAllowed | db.cals.table | db.html.table +db.informaltable.choice = + notAllowed | db.cals.informaltable | db.html.informaltable +db.table = db.table.choice +db.informaltable = db.informaltable.choice +div { + db.procedure.role.attribute = attribute role { text } + db.procedure.type.attribute = + + ## Identifies the type of procedure + attribute type { text }? + db.procedure.attlist = + db.procedure.role.attribute? + & db.procedure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + db.procedure.info = db._info.title.only + db.procedure = + + ## A list of operations to be performed in a well-defined sequence + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:procedure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element procedure { + db.procedure.attlist, + db.procedure.info, + db.all.blocks*, + db.step+, + db.result? + } +} +div { + db.step.role.attribute = attribute role { text } + db.step.attlist = + db.step.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.step.info = db._info.title.only + # This content model is blocks*, step|stepalternatives, blocks* but + # expressed this way it avoids UPA issues in XSD and DTD versions + db.step = + + ## A unit of action in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:step" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element step { + db.step.attlist, + db.step.info, + ((db.all.blocks+, + ((db.substeps | db.stepalternatives), db.all.blocks*)?, + db.result?) + | ((db.substeps | db.stepalternatives), + db.all.blocks*, + db.result?)) + } +} +div { + db.stepalternatives.role.attribute = attribute role { text } + db.stepalternatives.attlist = + db.stepalternatives.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.stepalternatives.info = db._info.title.forbidden + db.stepalternatives = + + ## Alternative steps in a procedure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:stepalternatives" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element stepalternatives { + db.stepalternatives.attlist, db.stepalternatives.info, db.step+ + } +} +div { + db.substeps.role.attribute = attribute role { text } + db.substeps.attlist = + db.substeps.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.performance.attribute? + db.substeps = + + ## A wrapper for steps that occur within steps in a procedure + element substeps { db.substeps.attlist, db.step+ } +} +div { + db.result.role.attribute = attribute role { text } + db.result.attlist = + db.result.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.result = + + ## A wrapper for identifying the results of a procedure or step + element result { db.result.attlist, db.all.blocks+ } +} +div { + db.sidebar.floatstyle.attribute = db.floatstyle.attribute + db.sidebar.role.attribute = attribute role { text } + db.sidebar.attlist = + db.sidebar.role.attribute? + & db.sidebar.floatstyle.attribute? + & db.common.attributes + & db.common.linking.attributes + db.sidebar.info = db._info + db.sidebar = + + ## A portion of a document that is isolated from the main narrative flow + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:sidebar" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of sidebar" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sidebar" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sidebar { + db.sidebar.attlist, db.sidebar.info, db.all.blocks+ + } +} +div { + db.abstract.role.attribute = attribute role { text } + db.abstract.attlist = + db.abstract.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abstract.info = db._info.title.only + db.abstract = + + ## A summary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:abstract" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element abstract { + db.abstract.attlist, db.abstract.info, db.all.blocks+ + } +} +div { + db.personblurb.role.attribute = attribute role { text } + db.personblurb.attlist = + db.personblurb.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personblurb.info = db._info.title.only + db.personblurb = + + ## A short description or note about a person + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:personblurb" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element personblurb { + db.personblurb.attlist, db.personblurb.info, db.para.blocks+ + } +} +div { + db.blockquote.role.attribute = attribute role { text } + db.blockquote.attlist = + db.blockquote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.blockquote.info = db._info.title.only + db.blockquote = + + ## A quotation set off from the main text + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:blockquote" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element blockquote { + db.blockquote.attlist, + db.blockquote.info, + db.attribution?, + db.all.blocks+ + } +} +div { + db.attribution.role.attribute = attribute role { text } + db.attribution.attlist = + db.attribution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.attribution = + + ## The source of a block quote or epigraph + element attribution { + db.attribution.attlist, + (db._text + | db.person + | db.personname + | db.citetitle + | db.citation)* + } +} +div { + db.bridgehead.renderas.enumeration = + + ## Render as a first-level section + "sect1" + | + ## Render as a second-level section + "sect2" + | + ## Render as a third-level section + "sect3" + | + ## Render as a fourth-level section + "sect4" + | + ## Render as a fifth-level section + "sect5" + db.bridgehead.renderas-enum.attribute = + + ## Indicates how the bridge head should be rendered + attribute renderas { db.bridgehead.renderas.enumeration }? + db.bridgehead.renderas-other.attribute = + + ## Identifies the nature of the non-standard rendering + attribute otherrenderas { xsd:NMTOKEN } + db.bridgehead.renderas-other.attributes = + + ## Indicates how the bridge head should be rendered + attribute renderas { + + ## Identifies a non-standard rendering + "other" + } + & db.bridgehead.renderas-other.attribute + db.bridgehead.renderas.attribute = + db.bridgehead.renderas-enum.attribute + | db.bridgehead.renderas-other.attributes + db.bridgehead.role.attribute = attribute role { text } + db.bridgehead.attlist = + db.bridgehead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bridgehead.renderas.attribute? + db.bridgehead = + + ## A free-floating heading + element bridgehead { db.bridgehead.attlist, db.all.inlines* } +} +div { + db.remark.role.attribute = attribute role { text } + db.remark.attlist = + db.remark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.remark = + + ## A remark (or comment) intended for presentation in a draft manuscript + element remark { db.remark.attlist, db.all.inlines* } +} +div { + db.epigraph.role.attribute = attribute role { text } + db.epigraph.attlist = + db.epigraph.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.epigraph.info = db._info.title.forbidden + db.epigraph = + + ## A short inscription at the beginning of a document or component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:epigraph" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element epigraph { + db.epigraph.attlist, + db.epigraph.info, + db.attribution?, + (db.para.blocks | db.literallayout)+ + } +} +div { + db.footnote.role.attribute = attribute role { text } + db.footnote.label.attribute = + + ## Identifies the desired footnote mark + attribute label { xsd:NMTOKEN } + db.footnote.attlist = + db.footnote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.footnote.label.attribute? + db.footnote = + + ## A footnote + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:footnote)" + "footnote must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:epigraph)" + "epigraph must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of footnote" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:footnote" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of footnote" + ] + ] + ] + ] + element footnote { db.footnote.attlist, db.all.blocks+ } +} +div { + db.formalpara.role.attribute = attribute role { text } + db.formalpara.attlist = + db.formalpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.formalpara.info = db._info.title.onlyreq + db.formalpara = + + ## A paragraph with a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalpara { + db.formalpara.attlist, + db.formalpara.info, + db.indexing.inlines*, + db.para + } +} +div { + db.para.role.attribute = attribute role { text } + db.para.attlist = + db.para.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.para.info = db._info.title.forbidden + db.para = + + ## A paragraph + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:para" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element para { + db.para.attlist, + db.para.info, + (db.all.inlines | db.nopara.blocks)* + } +} +div { + db.simpara.role.attribute = attribute role { text } + db.simpara.attlist = + db.simpara.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.simpara.info = db._info.title.forbidden + db.simpara = + + ## A paragraph that contains only text and inline markup, no block elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simpara" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simpara { + db.simpara.attlist, db.simpara.info, db.all.inlines* + } +} +div { + db.itemizedlist.role.attribute = attribute role { text } + db.itemizedlist.mark.attribute = + + ## Identifies the type of mark to be used on items in this list + attribute mark { xsd:NMTOKEN } + db.itemizedlist.attlist = + db.itemizedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.itemizedlist.mark.attribute? + db.itemizedlist.info = db._info.title.only + db.itemizedlist = + + ## A list in which each entry is marked with a bullet or other dingbat + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:itemizedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element itemizedlist { + db.itemizedlist.attlist, + db.itemizedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.orderedlist.role.attribute = attribute role { text } + db.orderedlist.continuation.enumeration = + + ## Specifies that numbering should begin where the preceding list left off + "continues" + | + ## Specifies that numbering should begin again at 1 + "restarts" + db.orderedlist.continuation.attribute = + + ## Indicates how list numbering should begin relative to the immediately preceding list + attribute continuation { db.orderedlist.continuation.enumeration } + db.orderedlist.startingnumber.attribute = + + ## Specifies the initial line number + attribute startingnumber { xsd:integer } + db.orderedlist.inheritnum.enumeration = + + ## Specifies that numbering should ignore list nesting + "ignore" + | + ## Specifies that numbering should inherit from outer-level lists + "inherit" + db.orderedlist.inheritnum.attribute = + + ## Indicates whether or not item numbering should be influenced by list nesting + attribute inheritnum { db.orderedlist.inheritnum.enumeration } + db.orderedlist.numeration.enumeration = + + ## Specifies Arabic numeration (1, 2, 3, …) + "arabic" + | + ## Specifies upper-case alphabetic numeration (A, B, C, …) + "upperalpha" + | + ## Specifies lower-case alphabetic numeration (a, b, c, …) + "loweralpha" + | + ## Specifies upper-case Roman numeration (I, II, III, …) + "upperroman" + | + ## Specifies lower-case Roman numeration (i, ii, iii …) + "lowerroman" + db.orderedlist.numeration.attribute = + + ## Indicates the desired numeration + attribute numeration { db.orderedlist.numeration.enumeration } + db.orderedlist.attlist = + db.orderedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & (db.orderedlist.continuation.attribute + | db.orderedlist.startingnumber.attribute)? + & db.orderedlist.inheritnum.attribute? + & db.orderedlist.numeration.attribute? + db.orderedlist.info = db._info.title.only + db.orderedlist = + + ## A list in which each entry is marked with a sequentially incremented label + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:orderedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element orderedlist { + db.orderedlist.attlist, + db.orderedlist.info, + db.all.blocks*, + db.listitem+ + } +} +div { + db.listitem.role.attribute = attribute role { text } + db.listitem.override.attribute = + + ## Specifies the keyword for the type of mark that should be used on this + ## item, instead of the mark that would be used by default + attribute override { xsd:NMTOKEN } + db.listitem.attlist = + db.listitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.listitem.override.attribute? + db.listitem.info = db._info.title.forbidden + db.listitem = + + ## A wrapper for the elements of a list item + element listitem { + db.listitem.attlist, db.listitem.info, db.all.blocks+ + } +} +div { + db.segmentedlist.role.attribute = attribute role { text } + db.segmentedlist.attlist = + db.segmentedlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segmentedlist.info = db._info.title.only + db.segmentedlist = + + ## A segmented list, a list of sets of elements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:segmentedlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element segmentedlist { + db.segmentedlist.attlist, + db.segmentedlist.info, + db.segtitle+, + db.seglistitem+ + } +} +div { + db.segtitle.role.attribute = attribute role { text } + db.segtitle.attlist = + db.segtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.segtitle = + + ## The title of an element of a list item in a segmented list + element segtitle { db.segtitle.attlist, db.all.inlines* } +} +div { + db.seglistitem.role.attribute = attribute role { text } + db.seglistitem.attlist = + db.seglistitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seglistitem = + + ## A list item in a segmented list + [ + s:pattern [ + s:title [ "Cardinality of segments and titles" ] + s:rule [ + context = "db:seglistitem" + s:assert [ + test = "count(db:seg) = count(../db:segtitle)" + "The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist" + ] + ] + ] + ] + element seglistitem { db.seglistitem.attlist, db.seg+ } +} +div { + db.seg.role.attribute = attribute role { text } + db.seg.attlist = + db.seg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seg = + + ## An element of a list item in a segmented list + element seg { db.seg.attlist, db.all.inlines* } +} +div { + db.simplelist.role.attribute = attribute role { text } + db.simplelist.type.enumeration = + + ## A tabular presentation in row-major order. + "horiz" + | + ## A tabular presentation in column-major order. + "vert" + | + ## An inline presentation, usually a comma-delimited list. + "inline" + db.simplelist.type.attribute = + + ## Specifies the type of list presentation + [ a:defaultValue = "vert" ] + attribute type { db.simplelist.type.enumeration } + db.simplelist.columns.attribute = + + ## Specifies the number of columns for horizontal or vertical presentation + attribute columns { xsd:integer } + db.simplelist.attlist = + db.simplelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplelist.type.attribute? + & db.simplelist.columns.attribute? + db.simplelist = + + ## An undecorated list of single words or short phrases + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplelist { db.simplelist.attlist, db.member+ } +} +div { + db.member.role.attribute = attribute role { text } + db.member.attlist = + db.member.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.member = + + ## An element of a simple list + element member { db.member.attlist, db.all.inlines* } +} +div { + db.variablelist.role.attribute = attribute role { text } + db.variablelist.termlength.attribute = + + ## Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + attribute termlength { text } + db.variablelist.attlist = + db.variablelist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spacing.attribute? + & db.variablelist.termlength.attribute? + db.variablelist.info = db._info.title.only + db.variablelist = + + ## A list in which each entry is composed of a set of one or more terms and an associated description + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:variablelist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element variablelist { + db.variablelist.attlist, + db.variablelist.info, + db.all.blocks*, + db.varlistentry+ + } +} +div { + db.varlistentry.role.attribute = attribute role { text } + db.varlistentry.attlist = + db.varlistentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varlistentry = + + ## A wrapper for a set of terms and the associated description in a variable list + element varlistentry { + db.varlistentry.attlist, db.term+, db.listitem + } +} +div { + db.term.role.attribute = attribute role { text } + db.term.attlist = + db.term.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.term = + + ## The word or phrase being defined or described in a variable list + element term { db.term.attlist, db.all.inlines* } +} +div { + db.example.role.attribute = attribute role { text } + db.example.label.attribute = db.label.attribute + db.example.width.attribute = db.width.characters.attribute + db.example.pgwide.attribute = db.pgwide.attribute + db.example.floatstyle.attribute = db.floatstyle.attribute + db.example.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.example.attlist = + db.example.role.attribute? + & db.example.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.example.label.attribute? + & db.example.floatstyle.attribute? + & (db.example.width.attribute | db.example.pgwide.attribute)? + db.example.info = db._info.title.onlyreq + db.example = + + ## A formal example, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:example" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of example" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:example" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element example { + db.example.attlist, db.example.info, db.all.blocks+, db.caption? + } +} +div { + db.informalexample.role.attribute = attribute role { text } + db.informalexample.width.attribute = db.width.characters.attribute + db.informalexample.pgwide.attribute = db.pgwide.attribute + db.informalexample.floatstyle.attribute = db.floatstyle.attribute + db.informalexample.type.attribute = + + ## Identifies the type of example + attribute type { text }? + db.informalexample.attlist = + db.informalexample.role.attribute? + & db.informalexample.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalexample.floatstyle.attribute? + & (db.informalexample.width.attribute + | db.informalexample.pgwide.attribute)? + db.informalexample.info = db._info.title.forbidden + db.informalexample = + + ## A displayed example without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalexample" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalexample { + db.informalexample.attlist, + db.informalexample.info, + db.all.blocks+, + db.caption? + } +} +db.verbatim.inlines = (db.all.inlines | db.lineannotation) | db.co +db.verbatim.contentmodel = + db._info.title.forbidden, (db.textobject | db.verbatim.inlines*) +div { + db.literallayout.role.attribute = attribute role { text } + db.literallayout.class.enumeration = + + ## The literal layout should be formatted with a monospaced font + "monospaced" + | + ## The literal layout should be formatted with the current font + "normal" + db.literallayout.class.attribute = + + ## Specifies the class of literal layout + attribute class { db.literallayout.class.enumeration } + db.literallayout.attlist = + db.literallayout.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.literallayout.class.attribute? + db.literallayout = + + ## A block of text in which line breaks and white space are to be reproduced faithfully + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:literallayout" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element literallayout { + db.literallayout.attlist, db.verbatim.contentmodel + } +} +div { + db.screen.role.attribute = attribute role { text } + db.screen.width.attribute = db.width.characters.attribute + db.screen.attlist = + db.screen.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.screen.width.attribute? + db.screen = + + ## Text that a user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screen" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screen { db.screen.attlist, db.verbatim.contentmodel } +} +div { + db.screenshot.role.attribute = attribute role { text } + db.screenshot.attlist = + db.screenshot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenshot.info = db._info + db.screenshot = + + ## A representation of what the user sees or might see on a computer screen + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenshot" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenshot { + db.screenshot.attlist, db.screenshot.info, db.mediaobject + } +} +div { + db.figure.role.attribute = attribute role { text } + db.figure.label.attribute = db.label.attribute + db.figure.pgwide.attribute = db.pgwide.attribute + db.figure.floatstyle.attribute = db.floatstyle.attribute + db.figure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.figure.attlist = + db.figure.role.attribute? + & db.figure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.figure.label.attribute? + & db.figure.pgwide.attribute? + & db.figure.floatstyle.attribute? + db.figure.info = db._info.title.onlyreq + db.figure = + + ## A formal figure, generally an illustration, with a title + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:figure" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of figure" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:figure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element figure { + db.figure.attlist, db.figure.info, db.all.blocks+, db.caption? + } +} +div { + db.informalfigure.role.attribute = attribute role { text } + db.informalfigure.label.attribute = db.label.attribute + db.informalfigure.pgwide.attribute = db.pgwide.attribute + db.informalfigure.floatstyle.attribute = db.floatstyle.attribute + db.informalfigure.type.attribute = + + ## Identifies the type of figure + attribute type { text }? + db.informalfigure.attlist = + db.informalfigure.role.attribute? + & db.informalfigure.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.informalfigure.label.attribute? + & db.informalfigure.pgwide.attribute? + & db.informalfigure.floatstyle.attribute? + db.informalfigure.info = db._info.title.forbidden + db.informalfigure = + + ## A untitled figure + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalfigure" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalfigure { + db.informalfigure.attlist, + db.informalfigure.info, + db.all.blocks+, + db.caption? + } +} +db.mediaobject.content = + (db.videoobject | db.audioobject | db.imageobject | db.textobject) + | db.imageobjectco +div { + db.mediaobject.role.attribute = attribute role { text } + db.mediaobject.attlist = + db.mediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mediaobject.info = db._info.title.forbidden + db.mediaobject = + + ## A displayed media object (video, audio, image, etc.) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:mediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element mediaobject { + db.mediaobject.attlist, + db.mediaobject.info, + db.alt?, + db.mediaobject.content+, + db.caption? + } +} +div { + db.inlinemediaobject.role.attribute = attribute role { text } + db.inlinemediaobject.attlist = + db.inlinemediaobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlinemediaobject.info = db._info.title.forbidden + db.inlinemediaobject = + + ## An inline media object (video, audio, image, and so on) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:inlinemediaobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element inlinemediaobject { + db.inlinemediaobject.attlist, + db.inlinemediaobject.info, + db.alt?, + db.mediaobject.content+ + } +} +div { + db.videoobject.role.attribute = attribute role { text } + db.videoobject.attlist = + db.videoobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.videoobject.info = db._info.title.forbidden + db.videoobject = + + ## A wrapper for video data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videoobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videoobject { + db.videoobject.attlist, db.videoobject.info, db.videodata+ + } +} +div { + db.audioobject.role.attribute = attribute role { text } + db.audioobject.attlist = + db.audioobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.audioobject.info = db._info.title.forbidden + db.audioobject = + + ## A wrapper for audio data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audioobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audioobject { + db.audioobject.attlist, db.audioobject.info, db.audiodata+ + } +} +db.imageobject.content = + db.imagedata+ + | db.imagedata.mathml + | db.imagedata.svg+ + | db.xi.include +div { + db.imageobject.role.attribute = attribute role { text } + db.imageobject.attlist = + db.imageobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobject.info = db._info.title.forbidden + db.imageobject = + + ## A wrapper for image data and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobject { + db.imageobject.attlist, + db.imageobject.info, + db.imageobject.content + } +} +div { + db.textobject.role.attribute = attribute role { text } + db.textobject.attlist = + db.textobject.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.textobject.info = db._info.title.forbidden + db.textobject = + + ## A wrapper for a text description of an object and its associated meta-information + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textobject" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textobject { + db.textobject.attlist, + db.textobject.info, + (db.phrase | db.textdata | db.all.blocks+) + } +} +div { + db.videodata.role.attribute = attribute role { text } + db.videodata.align.enumeration = db.halign.enumeration + db.videodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.videodata.align.enumeration } + db.videodata.autoplay.attribute = db.autoplay.attribute + db.videodata.classid.attribute = db.classid.attribute + db.videodata.valign.enumeration = db.valign.enumeration + db.videodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.videodata.valign.enumeration } + db.videodata.width.attribute = db.width.attribute + db.videodata.depth.attribute = db.depth.attribute + db.videodata.contentwidth.attribute = db.contentwidth.attribute + db.videodata.contentdepth.attribute = db.contentdepth.attribute + db.videodata.scalefit.enumeration = db.scalefit.enumeration + db.videodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.videodata.scalefit.enumeration } + db.videodata.scale.attribute = db.scale.attribute + db.videodata.attlist = + db.videodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.videodata.align.attribute? + & db.videodata.valign.attribute? + & db.videodata.width.attribute? + & db.videodata.contentwidth.attribute? + & db.videodata.scalefit.attribute? + & db.videodata.scale.attribute? + & db.videodata.depth.attribute? + & db.videodata.contentdepth.attribute? + & db.videodata.autoplay.attribute? + & db.videodata.classid.attribute? + db.videodata.info = db._info.title.forbidden + db.videodata = + + ## Pointer to external video data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:videodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element videodata { + db.videodata.attlist, db.videodata.info, db.multimediaparam* + } +} +div { + db.audiodata.role.attribute = attribute role { text } + db.audiodata.align.enumeration = db.halign.enumeration + db.audiodata.align.attribute = + + ## Specifies the (horizontal) alignment of the video data + attribute align { db.audiodata.align.enumeration } + db.audiodata.autoplay.attribute = db.autoplay.attribute + db.audiodata.classid.attribute = db.classid.attribute + db.audiodata.contentwidth.attribute = db.contentwidth.attribute + db.audiodata.contentdepth.attribute = db.contentdepth.attribute + db.audiodata.depth.attribute = db.depth.attribute + db.audiodata.scale.attribute = db.scale.attribute + db.audiodata.scalefit.enumeration = db.scalefit.enumeration + db.audiodata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.audiodata.scalefit.enumeration } + db.audiodata.valign.enumeration = db.valign.enumeration + db.audiodata.valign.attribute = + + ## Specifies the vertical alignment of the video data + attribute valign { db.audiodata.valign.enumeration } + db.audiodata.width.attribute = db.width.attribute + db.audiodata.attlist = + db.audiodata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.audiodata.align.attribute? + & db.audiodata.autoplay.attribute? + & db.audiodata.classid.attribute? + & db.audiodata.contentdepth.attribute? + & db.audiodata.contentwidth.attribute? + & db.audiodata.depth.attribute? + & db.audiodata.scale.attribute? + & db.audiodata.scalefit.attribute? + & db.audiodata.valign.attribute? + & db.audiodata.width.attribute? + db.audiodata.info = db._info.title.forbidden + db.audiodata = + + ## Pointer to external audio data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:audiodata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element audiodata { + db.audiodata.attlist, db.audiodata.info, db.multimediaparam* + } +} +div { + db.imagedata.role.attribute = attribute role { text } + db.imagedata.align.enumeration = db.halign.enumeration + db.imagedata.align.attribute = + + ## Specifies the (horizontal) alignment of the image data + attribute align { db.imagedata.align.enumeration } + db.imagedata.valign.enumeration = db.valign.enumeration + db.imagedata.valign.attribute = + + ## Specifies the vertical alignment of the image data + attribute valign { db.imagedata.valign.enumeration } + db.imagedata.width.attribute = db.width.attribute + db.imagedata.depth.attribute = db.depth.attribute + db.imagedata.contentwidth.attribute = db.contentwidth.attribute + db.imagedata.contentdepth.attribute = db.contentdepth.attribute + db.imagedata.scalefit.enumeration = db.scalefit.enumeration + db.imagedata.scalefit.attribute = + + ## Determines if anamorphic scaling is forbidden + attribute scalefit { db.imagedata.scalefit.enumeration } + db.imagedata.scale.attribute = db.scale.attribute + db.imagedata.attlist = + db.imagedata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.info = db._info.title.forbidden + db.imagedata = + + ## Pointer to external image data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.attlist, db.imagedata.info, db.multimediaparam* + } +} +div { + db.textdata.role.attribute = attribute role { text } + db.textdata.encoding.attribute = + + ## Identifies the encoding of the text in the external file + attribute encoding { text } + db.textdata.attlist = + db.textdata.role.attribute? + & db.common.attributes + & db.common.data.attributes + & db.textdata.encoding.attribute? + db.textdata.info = db._info.title.forbidden + db.textdata = + + ## Pointer to external text data + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:textdata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element textdata { db.textdata.attlist, db.textdata.info } +} +div { + db.multimediaparam.role.attribute = attribute role { text } + db.multimediaparam.name.attribute = + + ## Specifies the name of the parameter + attribute name { text } + db.multimediaparam.value.attribute = + + ## Specifies the value of the parameter + attribute value { text } + db.multimediaparam.valuetype.attribute = + + ## Specifies the type of the value of the parameter + attribute valuetype { text } + db.multimediaparam.attlist = + db.multimediaparam.role.attribute? + & db.common.attributes + & db.multimediaparam.name.attribute + & db.multimediaparam.value.attribute + & db.multimediaparam.valuetype.attribute? + db.multimediaparam = + + ## Application specific parameters for a media player + element multimediaparam { db.multimediaparam.attlist, empty } +} +div { + db.caption.role.attribute = attribute role { text } + db.caption.attlist = + db.caption.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caption.info = db._info.title.forbidden + db.caption = + + ## A caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { + db.caption.attlist, db.caption.info, db.all.blocks+ + } +} +div { + db.address.role.attribute = attribute role { text } + db.address.attlist = + db.address.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.address = + + ## A real-world address, generally a postal address + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:address" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element address { + db.address.attlist, + (db._text + | db.personname + | db.orgname + | db.pob + | db.street + | db.city + | db.state + | db.postcode + | db.country + | db.phone + | db.fax + | db.email + | db.uri + | db.otheraddr)* + } +} +div { + db.street.role.attribute = attribute role { text } + db.street.attlist = + db.street.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.street = + + ## A street address in an address + element street { db.street.attlist, db._text } +} +div { + db.pob.role.attribute = attribute role { text } + db.pob.attlist = + db.pob.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pob = + + ## A post office box in an address + element pob { db.pob.attlist, db._text } +} +div { + db.postcode.role.attribute = attribute role { text } + db.postcode.attlist = + db.postcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.postcode = + + ## A postal code in an address + element postcode { db.postcode.attlist, db._text } +} +div { + db.city.role.attribute = attribute role { text } + db.city.attlist = + db.city.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.city = + + ## The name of a city in an address + element city { db.city.attlist, db._text } +} +div { + db.state.role.attribute = attribute role { text } + db.state.attlist = + db.state.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.state = + + ## A state or province in an address + element state { db.state.attlist, db._text } +} +div { + db.country.role.attribute = attribute role { text } + db.country.attlist = + db.country.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.country = + + ## The name of a country + element country { db.country.attlist, db._text } +} +div { + db.phone.role.attribute = attribute role { text } + db.phone.attlist = + db.phone.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.phone = + + ## A telephone number + element phone { db.phone.attlist, db._text } +} +div { + db.fax.role.attribute = attribute role { text } + db.fax.attlist = + db.fax.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.fax = + + ## A fax number + element fax { db.fax.attlist, db._text } +} +div { + db.otheraddr.role.attribute = attribute role { text } + db.otheraddr.attlist = + db.otheraddr.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.otheraddr = + + ## Uncategorized information in address + element otheraddr { db.otheraddr.attlist, db._text } +} +div { + db.affiliation.role.attribute = attribute role { text } + db.affiliation.attlist = + db.affiliation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.affiliation = + + ## The institutional affiliation of an individual + element affiliation { + db.affiliation.attlist, + db.shortaffil?, + db.jobtitle*, + (db.org? | (db.orgname?, db.orgdiv*, db.address*)) + } +} +div { + db.shortaffil.role.attribute = attribute role { text } + db.shortaffil.attlist = + db.shortaffil.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.shortaffil = + + ## A brief description of an affiliation + element shortaffil { db.shortaffil.attlist, db._text } +} +div { + db.jobtitle.role.attribute = attribute role { text } + db.jobtitle.attlist = + db.jobtitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.jobtitle = + + ## The title of an individual in an organization + element jobtitle { db.jobtitle.attlist, db._text } +} +div { + db.orgname.class.enumeration = + + ## A consortium + "consortium" + | + ## A corporation + "corporation" + | + ## An informal organization + "informal" + | + ## A non-profit organization + "nonprofit" + db.orgname.class-enum.attribute = + + ## Specifies the nature of the organization + attribute class { db.orgname.class.enumeration } + db.orgname.class-other.attributes = + + ## Specifies the nature of the organization + attribute class { + + ## Indicates a non-standard organization class + "other" + }, + + ## Identifies the non-standard nature of the organization + attribute otherclass { text } + db.orgname.class.attribute = + db.orgname.class-enum.attribute | db.orgname.class-other.attributes + db.orgname.role.attribute = attribute role { text } + db.orgname.attlist = + db.orgname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.orgname.class.attribute? + db.orgname = + + ## The name of an organization + element orgname { db.orgname.attlist, db._text } +} +div { + db.orgdiv.role.attribute = attribute role { text } + db.orgdiv.attlist = + db.orgdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.orgdiv = + + ## A division of an organization + element orgdiv { db.orgdiv.attlist, db.all.inlines* } +} +div { + db.artpagenums.role.attribute = attribute role { text } + db.artpagenums.attlist = + db.artpagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.artpagenums = + + ## The page numbers of an article as published + element artpagenums { db.artpagenums.attlist, db._text } +} +div { + db.personname.role.attribute = attribute role { text } + db.personname.attlist = + db.personname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.personname = + + ## The personal name of an individual + element personname { + db.personname.attlist, + (db._text + | (db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername)+ + | (db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername)+) + } +} +db.person.author.contentmodel = + db.personname, + (db.personblurb + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.org.author.contentmodel = + db.orgname, + (db.orgdiv + | db.affiliation + | db.email + | db.uri + | db.address + | db.contrib)* +db.credit.contentmodel = + db.person.author.contentmodel | db.org.author.contentmodel +div { + db.author.role.attribute = attribute role { text } + db.author.attlist = + db.author.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.author = + + ## The name of an individual author + element author { db.author.attlist, db.credit.contentmodel } +} +div { + db.authorgroup.role.attribute = attribute role { text } + db.authorgroup.attlist = + db.authorgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorgroup = + + ## Wrapper for author information when a document has multiple authors or collaborators + element authorgroup { + db.authorgroup.attlist, (db.author | db.editor | db.othercredit)+ + } +} +div { + db.collab.role.attribute = attribute role { text } + db.collab.attlist = + db.collab.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.collab = + + ## Identifies a collaborator + element collab { + db.collab.attlist, + (db.person | db.personname | db.org | db.orgname)+, + db.affiliation* + } +} +div { + db.authorinitials.role.attribute = attribute role { text } + db.authorinitials.attlist = + db.authorinitials.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.authorinitials = + + ## The initials or other short identifier for an author + element authorinitials { db.authorinitials.attlist, db._text } +} +div { + db.person.role.attribute = attribute role { text } + db.person.attlist = + db.person.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.person = + + ## A person and associated metadata + element person { + db.person.attlist, + db.personname, + (db.address + | db.affiliation + | db.email + | db.uri + | db.personblurb)* + } +} +div { + db.org.role.attribute = attribute role { text } + db.org.attlist = + db.org.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.org = + + ## An organization and associated metadata + element org { + db.org.attlist, + db.orgname, + (db.address | db.affiliation | db.email | db.uri | db.orgdiv)* + } +} +div { + db.confgroup.role.attribute = attribute role { text } + db.confgroup.attlist = + db.confgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confgroup = + + ## A wrapper for document meta-information about a conference + element confgroup { + db.confgroup.attlist, + (db.confdates + | db.conftitle + | db.confnum + | db.confsponsor + | db.address)* + } +} +div { + db.confdates.role.attribute = attribute role { text } + db.confdates.attlist = + db.confdates.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confdates = + + ## The dates of a conference for which a document was written + element confdates { db.confdates.attlist, db._text } +} +div { + db.conftitle.role.attribute = attribute role { text } + db.conftitle.attlist = + db.conftitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.conftitle = + + ## The title of a conference for which a document was written + element conftitle { db.conftitle.attlist, db._text } +} +div { + db.confnum.role.attribute = attribute role { text } + db.confnum.attlist = + db.confnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confnum = + + ## An identifier, frequently numerical, associated with a conference for which a document was written + element confnum { db.confnum.attlist, db._text } +} +div { + db.confsponsor.role.attribute = attribute role { text } + db.confsponsor.attlist = + db.confsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.confsponsor = + + ## The sponsor of a conference for which a document was written + element confsponsor { db.confsponsor.attlist, db._text } +} +div { + db.contractnum.role.attribute = attribute role { text } + db.contractnum.attlist = + db.contractnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractnum = + + ## The contract number of a document + element contractnum { db.contractnum.attlist, db._text } +} +div { + db.contractsponsor.role.attribute = attribute role { text } + db.contractsponsor.attlist = + db.contractsponsor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contractsponsor = + + ## The sponsor of a contract + element contractsponsor { db.contractsponsor.attlist, db._text } +} +div { + db.copyright.role.attribute = attribute role { text } + db.copyright.attlist = + db.copyright.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.copyright = + + ## Copyright information about a document + element copyright { db.copyright.attlist, db.year+, db.holder* } +} +div { + db.year.role.attribute = attribute role { text } + db.year.attlist = + db.year.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.year = + + ## The year of publication of a document + element year { db.year.attlist, db._text } +} +div { + db.holder.role.attribute = attribute role { text } + db.holder.attlist = + db.holder.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.holder = + + ## The name of the individual or organization that holds a copyright + element holder { db.holder.attlist, db._text } +} +db.cover.contentmodel = + (db.para.blocks + | db.extension.blocks + | db.list.blocks + | db.informal.blocks + | db.publishing.blocks + | db.graphic.blocks + | db.technical.blocks + | db.verbatim.blocks + | db.bridgehead + | db.remark + | db.revhistory) + | db.synopsis.blocks +div { + db.cover.role.attribute = attribute role { text } + db.cover.attlist = + db.cover.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.cover = + + ## Additional content for the cover of a publication + element cover { db.cover.attlist, db.cover.contentmodel+ } +} +db.date.contentmodel = + xsd:date | xsd:dateTime | xsd:gYearMonth | xsd:gYear | text +div { + db.date.role.attribute = attribute role { text } + db.date.attlist = + db.date.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.date = + + ## The date of publication or revision of a document + element date { db.date.attlist, db.date.contentmodel } +} +div { + db.edition.role.attribute = attribute role { text } + db.edition.attlist = + db.edition.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.edition = + + ## The name or number of an edition of a document + element edition { db.edition.attlist, db._text } +} +div { + db.editor.role.attribute = attribute role { text } + db.editor.attlist = + db.editor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.editor = + + ## The name of the editor of a document + element editor { db.editor.attlist, db.credit.contentmodel } +} +div { + db.biblioid.role.attribute = attribute role { text } + db.biblioid.attlist = + db.biblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.biblioid = + + ## An identifier for a document + element biblioid { db.biblioid.attlist, db._text } +} +div { + db.citebiblioid.role.attribute = attribute role { text } + db.citebiblioid.attlist = + db.citebiblioid.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.citebiblioid = + + ## A citation of a bibliographic identifier + element citebiblioid { db.citebiblioid.attlist, db._text } +} +div { + db.bibliosource.role.attribute = attribute role { text } + db.bibliosource.attlist = + db.bibliosource.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + db.bibliosource = + + ## The source of a document + element bibliosource { db.bibliosource.attlist, db._text } +} +div { + db.bibliorelation.type.enumeration = + + ## The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + "hasformat" + | + ## The described resource includes the referenced resource either physically or logically + "haspart" + | + ## The described resource has a version, edition, or adaptation, namely, the referenced resource + "hasversion" + | + ## The described resource is the same intellectual content of the referenced resource, but presented in another format + "isformatof" + | + ## The described resource is a physical or logical part of the referenced resource + "ispartof" + | + ## The described resource is referenced, cited, or otherwise pointed to by the referenced resource + "isreferencedby" + | + ## The described resource is supplanted, displaced, or superceded by the referenced resource + "isreplacedby" + | + ## The described resource is required by the referenced resource, either physically or logically + "isrequiredby" + | + ## The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + "isversionof" + | + ## The described resource references, cites, or otherwise points to the referenced resource + "references" + | + ## The described resource supplants, displaces, or supersedes the referenced resource + "replaces" + | + ## The described resource requires the referenced resource to support its function, delivery, or coherence of content + "requires" + db.bibliorelation.type-enum.attribute = + + ## Identifies the type of relationship + attribute type { db.bibliorelation.type.enumeration }? + db.bibliorelation.type-other.attributes = + + ## Identifies the type of relationship + attribute type { + + ## The described resource has a non-standard relationship with the referenced resource + "othertype" + }?, + + ## A keyword that identififes the type of the non-standard relationship + attribute othertype { xsd:NMTOKEN } + db.bibliorelation.type.attribute = + db.bibliorelation.type-enum.attribute + | db.bibliorelation.type-other.attributes + db.bibliorelation.role.attribute = attribute role { text } + db.bibliorelation.attlist = + db.bibliorelation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblio.class.attribute + & db.bibliorelation.type.attribute + db.bibliorelation = + + ## The relationship of a document to another + element bibliorelation { db.bibliorelation.attlist, db._text } +} +div { + db.bibliocoverage.spacial.enumeration = + + ## The DCMI Point identifies a point in space using its geographic coordinates + "dcmipoint" + | + ## ISO 3166 Codes for the representation of names of countries + "iso3166" + | + ## The DCMI Box identifies a region of space using its geographic limits + "dcmibox" + | + ## The Getty Thesaurus of Geographic Names + "tgn" + db.bibliocoverage.spatial-enum.attribute = + + ## Specifies the type of spatial coverage + attribute spatial { db.bibliocoverage.spacial.enumeration }? + db.bibliocoverage.spatial-other.attributes = + + ## Specifies the type of spatial coverage + attribute spatial { + + ## Identifies a non-standard type of coverage + "otherspatial" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute otherspatial { xsd:NMTOKEN } + db.bibliocoverage.spatial.attribute = + db.bibliocoverage.spatial-enum.attribute + | db.bibliocoverage.spatial-other.attributes + db.bibliocoverage.temporal.enumeration = + + ## A specification of the limits of a time interval + "dcmiperiod" + | + ## W3C Encoding rules for dates and times—a profile based on ISO 8601 + "w3c-dtf" + db.bibliocoverage.temporal-enum.attribute = + + ## Specifies the type of temporal coverage + attribute temporal { db.bibliocoverage.temporal.enumeration }? + db.bibliocoverage.temporal-other.attributes = + + ## Specifies the type of temporal coverage + attribute temporal { + + ## Specifies a non-standard type of coverage + "othertemporal" + }?, + + ## A keyword that identifies the type of non-standard coverage + attribute othertemporal { xsd:NMTOKEN } + db.bibliocoverage.temporal.attribute = + db.bibliocoverage.temporal-enum.attribute + | db.bibliocoverage.temporal-other.attributes + db.bibliocoverage.coverage.attrib = + db.bibliocoverage.spatial.attribute + & db.bibliocoverage.temporal.attribute + db.bibliocoverage.role.attribute = attribute role { text } + db.bibliocoverage.attlist = + db.bibliocoverage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.bibliocoverage.coverage.attrib + db.bibliocoverage = + + ## The spatial or temporal coverage of a document + element bibliocoverage { db.bibliocoverage.attlist, db._text } +} +div { + db.legalnotice.role.attribute = attribute role { text } + db.legalnotice.attlist = + db.legalnotice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.legalnotice.info = db._info.title.only + db.legalnotice = + + ## A statement of legal obligations or requirements + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:legalnotice" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element legalnotice { + db.legalnotice.attlist, db.legalnotice.info, db.all.blocks+ + } +} +div { + db.othercredit.class.enumeration = + + ## A copy editor + "copyeditor" + | + ## A graphic designer + "graphicdesigner" + | + ## A production editor + "productioneditor" + | + ## A technical editor + "technicaleditor" + | + ## A translator + "translator" + | + ## An indexer + "indexer" + | + ## A proof-reader + "proofreader" + | + ## A cover designer + "coverdesigner" + | + ## An interior designer + "interiordesigner" + | + ## An illustrator + "illustrator" + | + ## A reviewer + "reviewer" + | + ## A typesetter + "typesetter" + | + ## A converter (a persons responsible for conversion, not an application) + "conversion" + db.othercredit.class-enum.attribute = + + ## Identifies the nature of the contributor + attribute class { db.othercredit.class.enumeration }? + db.othercredit.class-other.attribute = + + ## Identifies the nature of the non-standard contribution + attribute otherclass { xsd:NMTOKEN } + db.othercredit.class-other.attributes = + + ## Identifies the nature of the contributor + attribute class { + + ## Identifies a non-standard contribution + "other" + } + & db.othercredit.class-other.attribute + db.othercredit.class.attribute = + db.othercredit.class-enum.attribute + | db.othercredit.class-other.attributes + db.othercredit.role.attribute = attribute role { text } + db.othercredit.attlist = + db.othercredit.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.othercredit.class.attribute + db.othercredit = + + ## A person or entity, other than an author or editor, credited in a document + element othercredit { + db.othercredit.attlist, db.credit.contentmodel + } +} +div { + db.pagenums.role.attribute = attribute role { text } + db.pagenums.attlist = + db.pagenums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pagenums = + + ## The numbers of the pages in a book, for use in a bibliographic entry + element pagenums { db.pagenums.attlist, db._text } +} +div { + db.contrib.role.attribute = attribute role { text } + db.contrib.attlist = + db.contrib.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.contrib = + + ## A summary of the contributions made to a document by a credited source + element contrib { db.contrib.attlist, db.all.inlines* } +} +div { + db.honorific.role.attribute = attribute role { text } + db.honorific.attlist = + db.honorific.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.honorific = + + ## The title of a person + element honorific { db.honorific.attlist, db._text } +} +div { + db.firstname.role.attribute = attribute role { text } + db.firstname.attlist = + db.firstname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.firstname = + + ## A given name of a person + element firstname { db.firstname.attlist, db._text } +} +div { + db.givenname.role.attribute = attribute role { text } + db.givenname.attlist = + db.givenname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.givenname = + + ## The given name of a person + element givenname { db.givenname.attlist, db._text } +} +div { + db.surname.role.attribute = attribute role { text } + db.surname.attlist = + db.surname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.surname = + + ## An inherited or family name; in western cultures the last name + element surname { db.surname.attlist, db._text } +} +div { + db.lineage.role.attribute = attribute role { text } + db.lineage.attlist = + db.lineage.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineage = + + ## The portion of a person's name indicating a relationship to ancestors + element lineage { db.lineage.attlist, db._text } +} +div { + db.othername.role.attribute = attribute role { text } + db.othername.attlist = + db.othername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.othername = + + ## A component of a person's name that is not a first name, surname, or lineage + element othername { db.othername.attlist, db._text } +} +div { + db.printhistory.role.attribute = attribute role { text } + db.printhistory.attlist = + db.printhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.printhistory = + + ## The printing history of a document + element printhistory { db.printhistory.attlist, db.para.blocks+ } +} +div { + db.pubdate.role.attribute = attribute role { text } + db.pubdate.attlist = + db.pubdate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.pubdate = + + ## The date of publication of a document + element pubdate { db.pubdate.attlist, db.date.contentmodel } +} +div { + db.publisher.role.attribute = attribute role { text } + db.publisher.attlist = + db.publisher.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publisher = + + ## The publisher of a document + element publisher { + db.publisher.attlist, db.publishername, db.address* + } +} +div { + db.publishername.role.attribute = attribute role { text } + db.publishername.attlist = + db.publishername.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.publishername = + + ## The name of the publisher of a document + element publishername { db.publishername.attlist, db._text } +} +div { + db.releaseinfo.role.attribute = attribute role { text } + db.releaseinfo.attlist = + db.releaseinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.releaseinfo = + + ## Information about a particular release of a document + element releaseinfo { db.releaseinfo.attlist, db._text } +} +div { + db.revhistory.role.attribute = attribute role { text } + db.revhistory.attlist = + db.revhistory.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revhistory.info = db._info.title.only + db.revhistory = + + ## A history of the revisions to a document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:revhistory" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element revhistory { + db.revhistory.attlist, db.revhistory.info, db.revision+ + } +} +div { + db.revision.role.attribute = attribute role { text } + db.revision.attlist = + db.revision.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revision = + + ## An entry describing a single revision in the history of the revisions to a document + element revision { + db.revision.attlist, + db.revnumber?, + db.date, + (db.authorinitials | db.author)*, + (db.revremark | db.revdescription)? + } +} +div { + db.revnumber.role.attribute = attribute role { text } + db.revnumber.attlist = + db.revnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revnumber = + + ## A document revision number + element revnumber { db.revnumber.attlist, db._text } +} +div { + db.revremark.role.attribute = attribute role { text } + db.revremark.attlist = + db.revremark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revremark = + + ## A description of a revision to a document + element revremark { db.revremark.attlist, db._text } +} +div { + db.revdescription.role.attribute = attribute role { text } + db.revdescription.attlist = + db.revdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.revdescription = + + ## A extended description of a revision to a document + element revdescription { db.revdescription.attlist, db.all.blocks* } +} +div { + db.seriesvolnums.role.attribute = attribute role { text } + db.seriesvolnums.attlist = + db.seriesvolnums.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seriesvolnums = + + ## Numbers of the volumes in a series of books + element seriesvolnums { db.seriesvolnums.attlist, db._text } +} +div { + db.volumenum.role.attribute = attribute role { text } + db.volumenum.attlist = + db.volumenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.volumenum = + + ## The volume number of a document in a set (as of books in a set or articles in a journal) + element volumenum { db.volumenum.attlist, db._text } +} +div { + db.issuenum.role.attribute = attribute role { text } + db.issuenum.attlist = + db.issuenum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.issuenum = + + ## The number of an issue of a journal + element issuenum { db.issuenum.attlist, db._text } +} +div { + db.meta.role.attribute = attribute role { text } + db.meta.name.attribute = + + ## A name for the metadata element + attribute name { text } + db.meta.content.attribute = + + ## The metadata content + attribute content { text } + db.meta.attlist = + db.meta.name.attribute? + & db.meta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.meta.empty = + + ## A generic metadata element + element meta { db.meta.attlist, db.meta.content.attribute, empty } + db.meta.content = + + ## A generic metadata element + element meta { + db.meta.attlist, + (text | db._any | db.all.inlines | db.all.blocks)* + } + db.meta = db.meta.empty | db.meta.content +} +div { + db.package.role.attribute = attribute role { text } + db.package.attlist = + db.package.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.package = + + ## A software or application package + element package { db.package.attlist, db._text } +} +div { + db.email.role.attribute = attribute role { text } + db.email.attlist = + db.email.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.email = + + ## An email address + element email { db.email.attlist, db._text } +} +div { + db.lineannotation.role.attribute = attribute role { text } + db.lineannotation.attlist = + db.lineannotation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lineannotation = + + ## A comment on a line in a verbatim listing + element lineannotation { db.lineannotation.attlist, db._text } +} +div { + db.parameter.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + db.parameter.class.attribute = + + ## Identifies the class of parameter + attribute class { db.parameter.class.enumeration } + db.parameter.role.attribute = attribute role { text } + db.parameter.attlist = + db.parameter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.parameter.class.attribute? + db.parameter = + + ## A value or a symbolic reference to a value + element parameter { db.parameter.attlist, db._text } +} +db.replaceable.inlines = db._text | db.co +div { + db.replaceable.class.enumeration = + + ## A command + "command" + | + ## A function + "function" + | + ## An option + "option" + | + ## A parameter + "parameter" + db.replaceable.class.attribute = + + ## Identifies the nature of the replaceable text + attribute class { db.replaceable.class.enumeration } + db.replaceable.role.attribute = attribute role { text } + db.replaceable.attlist = + db.replaceable.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.replaceable.class.attribute? + db.replaceable = + + ## Content that may or must be replaced by the user + element replaceable { + db.replaceable.attlist, db.replaceable.inlines* + } +} +div { + db.uri.type.attribute = + + ## Identifies the type of URI specified + attribute type { text }? + db.uri.role.attribute = attribute role { text } + db.uri.attlist = + db.uri.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.uri.type.attribute + db.uri = + + ## A Uniform Resource Identifier + element uri { db.uri.attlist, db._text } +} +div { + db.abbrev.role.attribute = attribute role { text } + db.abbrev.attlist = + db.abbrev.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.abbrev = + + ## An abbreviation, especially one followed by a period + element abbrev { + db.abbrev.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.acronym.role.attribute = attribute role { text } + db.acronym.attlist = + db.acronym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.acronym = + + ## An often pronounceable word made from the initial (or selected) letters of a name or phrase + element acronym { + db.acronym.attlist, + (db._text | db.superscript | db.subscript | db.trademark)* + } +} +div { + db.citation.role.attribute = attribute role { text } + db.citation.attlist = + db.citation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citation = + + ## An inline bibliographic reference to another published work + element citation { db.citation.attlist, db.all.inlines* } +} +div { + db.citerefentry.role.attribute = attribute role { text } + db.citerefentry.attlist = + db.citerefentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.citerefentry = + + ## A citation to a reference page + element citerefentry { + db.citerefentry.attlist, db.refentrytitle, db.manvolnum? + } +} +div { + db.refentrytitle.role.attribute = attribute role { text } + db.refentrytitle.attlist = + db.refentrytitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refentrytitle = + + ## The title of a reference page + element refentrytitle { db.refentrytitle.attlist, db.all.inlines* } +} +div { + db.manvolnum.role.attribute = attribute role { text } + db.manvolnum.attlist = + db.manvolnum.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.manvolnum = + + ## A reference volume number + element manvolnum { db.manvolnum.attlist, db._text } +} +div { + db.citetitle.pubwork.enumeration = db.pubwork.enumeration + db.citetitle.pubwork-enum.attribute = + + ## Identifies the nature of the publication being cited + attribute pubwork { db.citetitle.pubwork.enumeration } + db.citetitle.pubwork-other.attribute = + + ## Identifies the nature of some other kind of publication being cited + attribute otherpubwork { xsd:NMTOKEN } + db.citetitle.pubwork-other.attributes = + + ## Identifies that this is some other kind of publication being cited + attribute pubwork { + + ## Indicates that the published work is some 'other' kind. + "other" + } + & db.citetitle.pubwork-other.attribute + db.citetitle.pubwork.attribute = + db.citetitle.pubwork-enum.attribute + | db.citetitle.pubwork-other.attributes + db.citetitle.role.attribute = attribute role { text } + db.citetitle.attlist = + db.citetitle.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.citetitle.pubwork.attribute? + db.citetitle = + + ## The title of a cited work + element citetitle { db.citetitle.attlist, db.all.inlines* } +} +div { + db.emphasis.role.attribute = attribute role { text } + db.emphasis.attlist = + db.emphasis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.emphasis = + + ## Emphasized text + element emphasis { db.emphasis.attlist, db.all.inlines* } +} +div { + db._emphasis = + + ## A limited span of emphasized text + element emphasis { db.emphasis.attlist, db._text } +} +div { + db.foreignphrase.role.attribute = attribute role { text } + db.foreignphrase.attlist = + db.foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.foreignphrase = + + ## A word or phrase in a language other than the primary language of the document + element foreignphrase { + db.foreignphrase.attlist, (text | db.general.inlines)* + } +} +div { + db._foreignphrase.role.attribute = attribute role { text } + db._foreignphrase.attlist = + db._foreignphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._foreignphrase = + + ## A limited word or phrase in a language other than the primary language of the document + element foreignphrase { db._foreignphrase.attlist, db._text } +} +div { + db.phrase.role.attribute = attribute role { text } + 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* } +} +div { + db._phrase = + + ## A limited span of text + element phrase { db.phrase.attlist, db._text } +} +div { + db.quote.role.attribute = attribute role { text } + db.quote.attlist = + db.quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.quote = + + ## An inline quotation + element quote { db.quote.attlist, db.all.inlines* } +} +div { + db._quote.role.attribute = attribute role { text } + db._quote.attlist = + db._quote.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db._quote = + + ## A limited inline quotation + element quote { db._quote.attlist, db._text } +} +div { + db.subscript.role.attribute = attribute role { text } + db.subscript.attlist = + db.subscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.subscript = + + ## A subscript (as in H₂O, the molecular formula for water) + element subscript { db.subscript.attlist, db._text } +} +div { + db.superscript.role.attribute = attribute role { text } + db.superscript.attlist = + db.superscript.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.superscript = + + ## A superscript (as in x², the mathematical notation for x multiplied by itself) + element superscript { db.superscript.attlist, db._text } +} +div { + db.trademark.class.enumeration = + + ## A copyright + "copyright" + | + ## A registered copyright + "registered" + | + ## A service + "service" + | + ## A trademark + "trade" + db.trademark.class.attribute = + + ## Identifies the class of trade mark + attribute class { db.trademark.class.enumeration } + db.trademark.role.attribute = attribute role { text } + db.trademark.attlist = + db.trademark.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.trademark.class.attribute? + db.trademark = + + ## A trademark + element trademark { db.trademark.attlist, db._text } +} +div { + db.wordasword.role.attribute = attribute role { text } + db.wordasword.attlist = + db.wordasword.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.wordasword = + + ## A word meant specifically as a word and not representing anything else + element wordasword { db.wordasword.attlist, db._text } +} +div { + db.footnoteref.role.attribute = attribute role { text } + db.footnoteref.label.attribute = db.label.attribute + db.footnoteref.attlist = + db.footnoteref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.footnoteref.label.attribute? + db.footnoteref = + + ## A cross reference to a footnote (a footnote mark) + [ + s:pattern [ + s:title [ "Footnote reference type constraint" ] + s:rule [ + context = "db:footnoteref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'footnote' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on footnoteref must point to a footnote." + ] + ] + ] + ] + element footnoteref { db.footnoteref.attlist, empty } +} +div { + db.xref.role.attribute = attribute role { text } + db.xref.xrefstyle.attribute = db.xrefstyle.attribute + db.xref.endterm.attribute = db.endterm.attribute + db.xref.attlist = + db.xref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.xref.xrefstyle.attribute? + & db.xref.endterm.attribute? + db.xref = + + ## A cross reference to another part of the document + element xref { db.xref.attlist, empty } +} +div { + db.link.role.attribute = attribute role { text } + db.link.xrefstyle.attribute = db.xrefstyle.attribute + db.link.endterm.attribute = db.endterm.attribute + db.link.attlist = + db.link.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.link.xrefstyle.attribute? + & db.link.endterm.attribute? + db.link = + + ## A hypertext link + element link { db.link.attlist, db.all.inlines* } +} +div { + db.olink.role.attribute = attribute role { text } + db.olink.xrefstyle.attribute = db.xrefstyle.attribute + db.olink.localinfo.attribute = + + ## Holds additional information that may be used by the application when resolving the link + attribute localinfo { text } + db.olink.targetdoc.attribute = + + ## Specifies the URI of the document in which the link target appears + attribute targetdoc { xsd:anyURI } + db.olink.targetptr.attribute = + + ## Specifies the location of the link target in the document + attribute targetptr { text } + db.olink.type.attribute = + + ## Identifies application-specific customization of the link behavior + attribute type { text } + db.olink.attlist = + db.common.attributes + & db.olink.targetdoc.attribute? + & db.olink.role.attribute? + & db.olink.xrefstyle.attribute? + & db.olink.localinfo.attribute? + & db.olink.targetptr.attribute? + & db.olink.type.attribute? + db.olink = + + ## A link that addresses its target indirectly + element olink { db.olink.attlist, db.all.inlines* } +} +div { + db.anchor.role.attribute = attribute role { text } + db.anchor.attlist = + db.anchor.role.attribute? & db.common.idreq.attributes + db.anchor = + + ## A spot in the document + element anchor { db.anchor.attlist, empty } +} +div { + db.alt.role.attribute = attribute role { text } + db.alt.attlist = db.alt.role.attribute? & db.common.attributes + db.alt = + + ## A text-only annotation, often used for accessibility + element alt { db.alt.attlist, (text | db.inlinemediaobject)* } +} +div { + db.formalgroup.fgstyle.attribute = + + ## Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + attribute fgstyle { text } + db.formalgroup.role.attribute = attribute role { text } + db.formalgroup.pgwide.attribute = db.pgwide.attribute + db.formalgroup.floatstyle.attribute = db.floatstyle.attribute + db.formalgroup.attlist = + db.formalgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.formalgroup.floatstyle.attribute? + & db.formalgroup.pgwide.attribute? + & db.formalgroup.fgstyle.attribute? + db.formalgroup.info = db._info.title.onlyreq + db.formalgroup = + + ## A group of formal objects, for example subfigures + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:formalgroup" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element formalgroup { + db.formalgroup.attlist, + db.formalgroup.info, + (db.figure+ | db.table+ | db.example+ | db.equation+) + } +} +db.status.attribute = + + ## Identifies the editorial or publication status of the element on which it occurs + attribute status { text } +db.toplevel.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | (db.sect1+, db.simplesect*) + | db.refentry+ + | ((db.section | db.xi.include)+ | (db.simplesect | db.xi.include)+) + | (db.refentry | db.xi.include)+ + | (db.refsect1 | db.xi.include)+ + | (db.sect1 | db.xi.include)+ +db.toplevel.blocks.or.sections = + (db.all.blocks+, db.toplevel.sections?) | db.toplevel.sections +db.recursive.sections = + ((db.section+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | ((db.section | db.xi.include)+ | (db.simplesect | db.xi.include)+) + | (db.refentry | db.xi.include)+ + | (db.refsect1 | db.xi.include)+ +db.recursive.blocks.or.sections = + (db.all.blocks+, db.recursive.sections?) | db.recursive.sections +db.divisions = db.part | db.reference | db.xi.include +db.components = + (db.dedication + | db.acknowledgements + | db.preface + | db.chapter + | db.appendix + | db.article + | db.colophon) + | db.xi.include +db.navigation.components = + notAllowed | db.glossary | db.bibliography | db.index | db.toc +db.component.contentmodel = + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* +db.setindex.components = notAllowed | db.setindex +db.toc.components = notAllowed | db.toc +db.set.components = (db.set | db.book | db.article) | db.xi.include +div { + db.set.status.attribute = db.status.attribute + db.set.role.attribute = attribute role { text } + db.set.attlist = + db.set.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.set.status.attribute? + db.set.info = db._info.title.req + db.set = + + ## A collection of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:set" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element set { + db.set.attlist, + db.set.info, + db.toc.components?, + db.set.components+, + db.setindex.components? + } +} +db.book.components = + (db.navigation.components | db.components | db.divisions)* | db.topic* +div { + db.book.status.attribute = db.status.attribute + db.book.role.attribute = attribute role { text } + db.book.attlist = + db.book.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.book.status.attribute? + db.book.info = db._info + db.book = + + ## A book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:book" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element book { db.book.attlist, db.book.info, db.book.components } +} +div { + db.dedication.status.attribute = db.status.attribute + db.dedication.role.attribute = attribute role { text } + db.dedication.attlist = + db.dedication.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.dedication.status.attribute? + db.dedication.info = db._info + db.dedication = + + ## The dedication of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:dedication" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element dedication { + db.dedication.attlist, db.dedication.info, db.all.blocks+ + } +} +div { + db.acknowledgements.status.attribute = db.status.attribute + db.acknowledgements.role.attribute = attribute role { text } + db.acknowledgements.attlist = + db.acknowledgements.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.acknowledgements.status.attribute? + db.acknowledgements.info = db._info + db.acknowledgements = + + ## Acknowledgements of a book or other component + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:acknowledgements" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element acknowledgements { + db.acknowledgements.attlist, + db.acknowledgements.info, + db.all.blocks+ + } +} +div { + db.colophon.status.attribute = db.status.attribute + db.colophon.role.attribute = attribute role { text } + db.colophon.attlist = + db.colophon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.colophon.status.attribute? + db.colophon.info = db._info + db.colophon = + + ## Text at the back of a book describing facts about its production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:colophon" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element colophon { + db.colophon.attlist, + db.colophon.info, + ((db.all.blocks+, db.simplesect*) + | (db.all.blocks*, db.simplesect+)) + } +} +db.appendix.contentmodel = db.component.contentmodel | db.topic+ +div { + db.appendix.status.attribute = db.status.attribute + db.appendix.role.attribute = attribute role { text } + db.appendix.attlist = + db.appendix.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.appendix.status.attribute? + db.appendix.info = db._info.title.req + db.appendix = + + ## An appendix in a book or article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:appendix" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element appendix { + db.appendix.attlist, db.appendix.info, db.appendix.contentmodel? + } +} +db.chapter.contentmodel = db.component.contentmodel | db.topic+ +div { + db.chapter.status.attribute = db.status.attribute + db.chapter.role.attribute = attribute role { text } + db.chapter.attlist = + db.chapter.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.chapter.status.attribute? + db.chapter.info = db._info.title.req + db.chapter = + + ## A chapter, as of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:chapter" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element chapter { + db.chapter.attlist, db.chapter.info, db.chapter.contentmodel? + } +} +db.part.components = + (db.navigation.components | db.components) + | (db.refentry | db.reference) + | db.xi.include +db.part.contentmodel = db.part.components+ | db.topic+ +div { + db.part.status.attribute = db.status.attribute + db.part.role.attribute = attribute role { text } + db.part.attlist = + db.part.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.part.status.attribute? + db.part.info = db._info.title.req + db.part = + + ## A division in a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:part" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element part { + db.part.attlist, + db.part.info, + db.partintro?, + db.part.contentmodel? + } +} +div { + db.preface.status.attribute = db.status.attribute + db.preface.role.attribute = attribute role { text } + db.preface.attlist = + db.preface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.preface.status.attribute? + db.preface.info = db._info.title.req + db.preface = + + ## Introductory matter preceding the first chapter of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:preface" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element preface { + db.preface.attlist, db.preface.info, db.component.contentmodel? + } +} +div { + db.partintro.status.attribute = db.status.attribute + db.partintro.role.attribute = attribute role { text } + db.partintro.attlist = + db.partintro.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.partintro.status.attribute? + db.partintro.info = db._info + db.partintro = + + ## An introduction to the contents of a part + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:partintro" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element partintro { + db.partintro.attlist, + db.partintro.info, + db.toplevel.blocks.or.sections? + } +} +div { + db.section.status.attribute = db.status.attribute + db.section.class.enumeration = + + ## A section of legal obligations or requirements + "legal" + db.section.class-enum.attribute = + + ## Identifies the nature of the section + attribute class { db.section.class.enumeration } + db.section.class-other.attribute = + + ## Identifies a non-standard section class + attribute otherclass { xsd:NMTOKEN } + db.section.class-other.attributes = + + ## Indicates that a non-standard section class is applied + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.section.class-other.attribute + db.section.class.attribute = + db.section.class-enum.attribute | db.section.class-other.attributes + db.section.role.attribute = attribute role { text } + db.section.attlist = + db.section.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.section.status.attribute? + & db.section.class.attribute? + db.section.info = db._info.title.req + db.section = + + ## A recursive section + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:section" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element section { + db.section.attlist, + db.section.info, + db.navigation.components*, + db.recursive.blocks.or.sections?, + db.navigation.components* + } +} +div { + db.simplesect.status.attribute = db.status.attribute + db.simplesect.role.attribute = attribute role { text } + db.simplesect.attlist = + db.simplesect.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.simplesect.status.attribute? + db.simplesect.info = db._info.title.req + db.simplesect = + + ## A section of a document with no subdivisions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:simplesect" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element simplesect { + db.simplesect.attlist, db.simplesect.info, db.all.blocks* + } +} +db.article.components = db.toplevel.sections +db.article.navcomponents = + db.navigation.components + | db.acknowledgements + | db.dedication + | db.appendix + | db.colophon +div { + db.article.status.attribute = db.status.attribute + db.article.class.enumeration = + + ## A collection of frequently asked questions. + "faq" + | + ## An article in a journal or other periodical. + "journalarticle" + | + ## A description of a product. + "productsheet" + | + ## A specification. + "specification" + | + ## A technical report. + "techreport" + | + ## A white paper. + "whitepaper" + db.article.class-enum.attribute = + + ## Identifies the nature of the article + attribute class { db.article.class.enumeration } + db.article.class-other.attribute = + + ## Identifies the nature of the non-standard article + attribute otherclass { xsd:NMTOKEN } + db.article.class-other.attributes = + + ## Identifies the nature of the article + attribute class { + + ## Indicates that the identifier is some 'other' kind. + "other" + } + & db.article.class-other.attribute + db.article.class.attribute = + db.article.class-enum.attribute | db.article.class-other.attributes + db.article.role.attribute = attribute role { text } + db.article.attlist = + db.article.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.article.status.attribute? + & db.article.class.attribute? + db.article.info = db._info.title.req + db.article = + + ## An article + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:article" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element article { + db.article.attlist, + db.article.info, + db.article.navcomponents*, + ((db.all.blocks+, db.article.components?) + | db.article.components), + db.article.navcomponents* + } +} +db.annotations.attribute = + + ## Identifies one or more annotations that apply to this element + attribute annotations { text } +div { + db.annotation.role.attribute = attribute role { text } + db.annotation.annotates.attribute = + + ## Identifies one or more elements to which this annotation applies + attribute annotates { text } + db.annotation.attlist = + db.annotation.role.attribute? + & db.annotation.annotates.attribute? + & db.common.attributes + db.annotation.info = db._info.title.only + db.annotation = + + ## An annotation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:annotation" + s:assert [ + test = "not(.//db:annotation)" + "annotation must not occur among the children or descendants of annotation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:annotation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element annotation { + db.annotation.attlist, db.annotation.info, db.all.blocks+ + } +} +db.xlink.extended.type.attribute = + + ## Identifies the XLink extended link type + [ + s:pattern [ + s:title [ "XLink extended placement" ] + s:rule [ + context = "*[@xlink:type='extended']" + s:assert [ + test = "not(parent::*[@xlink:type='extended'])" + "An XLink extended type element may not occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink extended link type + "extended" + } +db.xlink.locator.type.attribute = + + ## Identifies the XLink locator link type + [ + s:pattern [ + s:title [ "XLink locator placement" ] + s:rule [ + context = "*[@xlink:type='locator']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink locator type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink locator link type + "locator" + } +db.xlink.arc.type.attribute = + + ## Identifies the XLink arc link type + [ + s:pattern [ + s:title [ "XLink arc placement" ] + s:rule [ + context = "*[@xlink:type='arc']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink arc type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink arc link type + "arc" + } +db.xlink.resource.type.attribute = + + ## Identifies the XLink resource link type + [ + s:pattern [ + s:title [ "XLink resource placement" ] + s:rule [ + context = "*[@xlink:type='resource']" + s:assert [ + test = "parent::*[@xlink:type='extended']" + "An XLink resource type element must occur as the direct child of an XLink extended type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink resource link type + "resource" + } +db.xlink.title.type.attribute = + + ## Identifies the XLink title link type + [ + s:pattern [ + s:title [ "XLink title placement" ] + s:rule [ + context = "*[@xlink:type='title']" + s:assert [ + test = + "parent::*[@xlink:type='extended'] or parent::*[@xlink:type='locator'] or parent::*[@xlink:type='arc']" + "An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element." + ] + ] + ] + ] + attribute xlink:type { + + ## An XLink title link type + "title" + } +db.xlink.extended.link.attributes = + db.xlink.extended.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? +db.xlink.locator.link.attributes = + db.xlink.locator.type.attribute + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.arc.link.attributes = + db.xlink.arc.type.attribute + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? +db.xlink.resource.link.attributes = + db.xlink.resource.type.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? +db.xlink.title.link.attributes = db.xlink.title.type.attribute +db.xlink.from.attribute = + + ## Specifies the XLink traversal-from + attribute xlink:from { xsd:NMTOKEN } +db.xlink.label.attribute = + + ## Specifies the XLink label + attribute xlink:label { xsd:NMTOKEN } +db.xlink.to.attribute = + + ## Specifies the XLink traversal-to + attribute xlink:to { xsd:NMTOKEN } +div { + db.extendedlink.role.attribute = attribute role { text } + db.extendedlink.attlist = + db.extendedlink.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "extended" ] + attribute xlink:type { + + ## An XLink extended link + "extended" + }? + & db.xlink.role.attribute? + & db.xlink.title.attribute? + db.extendedlink = + + ## An XLink extended link + element extendedlink { + db.extendedlink.attlist, (db.locator | db.arc | db.link)+ + } +} +div { + db.locator.role.attribute = attribute role { text } + db.locator.attlist = + db.locator.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "locator" ] + attribute xlink:type { + + ## An XLink locator link + "locator" + }? + & db.xlink.href.attribute + & db.xlink.role.attribute? + & db.xlink.title.attribute? + & db.xlink.label.attribute? + db.locator = + + ## An XLink locator in an extendedlink + element locator { db.locator.attlist, empty } +} +div { + db.arc.role.attribute = attribute role { text } + db.arc.attlist = + db.arc.role.attribute? + & db.common.attributes + & + ## Identifies the XLink link type + [ a:defaultValue = "arc" ] + attribute xlink:type { + + ## An XLink arc link + "arc" + }? + & db.xlink.arcrole.attribute? + & db.xlink.title.attribute? + & db.xlink.show.attribute? + & db.xlink.actuate.attribute? + & db.xlink.from.attribute? + & db.xlink.to.attribute? + db.arc = + + ## An XLink arc in an extendedlink + element arc { db.arc.attlist, empty } +} +db.sect1.sections = + ((db.sect2+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect2 | db.xi.include)+ +div { + db.sect1.status.attribute = db.status.attribute + db.sect1.class.attribute = db.section.class.attribute + db.sect1.role.attribute = attribute role { text } + db.sect1.attlist = + db.sect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect1.status.attribute? + & db.sect1.class.attribute? + db.sect1.info = db._info.title.req + db.sect1 = + + ## A top-level section of document + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect1 { + db.sect1.attlist, + db.sect1.info, + db.navigation.components*, + ((db.all.blocks+, db.sect1.sections?) | db.sect1.sections)?, + db.navigation.components* + } +} +db.sect2.sections = + ((db.sect3+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect3 | db.xi.include)+ +div { + db.sect2.status.attribute = db.status.attribute + db.sect2.class.attribute = db.section.class.attribute + db.sect2.role.attribute = attribute role { text } + db.sect2.attlist = + db.sect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect2.status.attribute? + & db.sect2.class.attribute? + db.sect2.info = db._info.title.req + db.sect2 = + + ## A subsection within a sect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect2 { + db.sect2.attlist, + db.sect2.info, + db.navigation.components*, + ((db.all.blocks+, db.sect2.sections?) | db.sect2.sections)?, + db.navigation.components* + } +} +db.sect3.sections = + ((db.sect4+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect4 | db.xi.include)+ +div { + db.sect3.status.attribute = db.status.attribute + db.sect3.class.attribute = db.section.class.attribute + db.sect3.role.attribute = attribute role { text } + db.sect3.attlist = + db.sect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect3.status.attribute? + & db.sect3.class.attribute? + db.sect3.info = db._info.title.req + db.sect3 = + + ## A subsection within a sect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect3 { + db.sect3.attlist, + db.sect3.info, + db.navigation.components*, + ((db.all.blocks+, db.sect3.sections?) | db.sect3.sections)?, + db.navigation.components* + } +} +db.sect4.sections = + ((db.sect5+, db.simplesect*) | db.simplesect+) + | db.refentry+ + | (db.sect5 | db.xi.include)+ +div { + db.sect4.status.attribute = db.status.attribute + db.sect4.class.attribute = db.section.class.attribute + db.sect4.role.attribute = attribute role { text } + db.sect4.attlist = + db.sect4.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect4.status.attribute? + & db.sect4.class.attribute? + db.sect4.info = db._info.title.req + db.sect4 = + + ## A subsection within a sect3 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect4" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect4 { + db.sect4.attlist, + db.sect4.info, + db.navigation.components*, + ((db.all.blocks+, db.sect4.sections?) | db.sect4.sections)?, + db.navigation.components* + } +} +db.sect5.sections = + db.simplesect+ | db.refentry+ | (db.simplesect | db.xi.include)+ +div { + db.sect5.status.attribute = db.status.attribute + db.sect5.class.attribute = db.section.class.attribute + db.sect5.role.attribute = attribute role { text } + db.sect5.attlist = + db.sect5.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.sect5.status.attribute? + & db.sect5.class.attribute? + db.sect5.info = db._info.title.req + db.sect5 = + + ## A subsection within a sect4 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:sect5" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element sect5 { + db.sect5.attlist, + db.sect5.info, + db.navigation.components*, + ((db.all.blocks+, db.sect5.sections?) | db.sect5.sections)?, + db.navigation.components* + } +} +db.toplevel.refsection = + db.refsection+ + | db.refsect1+ + | (db.refentry | db.xi.include)+ + | (db.refsect1 | db.xi.include)+ +db.secondlevel.refsection = + db.refsection+ + | db.refsect2+ + | (db.refentry | db.xi.include)+ + | (db.refsect2 | db.xi.include)+ +db.reference.components = db.refentry | db.xi.include +div { + db.reference.status.attribute = db.status.attribute + db.reference.role.attribute = attribute role { text } + db.reference.attlist = + db.reference.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.reference.status.attribute? + & db.label.attribute? + db.reference.info = db._info.title.req + db.reference = + + ## A collection of reference entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:reference" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element reference { + db.reference.attlist, + db.reference.info, + db.partintro?, + db.reference.components* + } +} +div { + db.refentry.status.attribute = db.status.attribute + db.refentry.role.attribute = attribute role { text } + db.refentry.attlist = + db.refentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refentry.status.attribute? + & db.label.attribute? + db.refentry.info = db._info.title.forbidden + db.refentry = + + ## A reference page (originally a UNIX man-style reference page) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refentry { + db.refentry.attlist, + db.indexterm*, + db.refentry.info, + db.refmeta?, + db.refnamediv+, + db.refsynopsisdiv?, + db.toplevel.refsection + } +} +div { + db.refmeta.role.attribute = attribute role { text } + db.refmeta.attlist = + db.refmeta.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refmeta = + + ## Meta-information for a reference entry + element refmeta { + db.refmeta.attlist, + db.indexterm*, + db.refentrytitle, + db.manvolnum?, + db.refmiscinfo*, + db.indexterm* + } +} +db.refmiscinfo.class.enumeration = + + ## The name of the software product or component to which this topic applies + "source" + | + ## The version of the software product or component to which this topic applies + "version" + | + ## The section title of the reference page (e.g., User Commands) + "manual" + | + ## The section title of the reference page (believed synonymous with "manual" but in wide use) + "sectdesc" + | + ## The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + "software" +db.refmiscinfo.class-enum.attribute = + + ## Identifies the kind of miscellaneous information + attribute class { db.refmiscinfo.class.enumeration }? +db.refmiscinfo.class-other.attribute = + + ## Identifies the nature of non-standard miscellaneous information + attribute otherclass { text } +db.refmiscinfo.class-other.attributes = + + ## Identifies the kind of miscellaneious information + attribute class { + + ## Indicates that the information is some 'other' kind. + "other" + } + & db.refmiscinfo.class-other.attribute +db.refmiscinfo.class.attribute = + db.refmiscinfo.class-enum.attribute + | db.refmiscinfo.class-other.attributes +div { + db.refmiscinfo.role.attribute = attribute role { text } + db.refmiscinfo.attlist = + db.refmiscinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refmiscinfo.class.attribute? + db.refmiscinfo = + + ## Meta-information for a reference entry other than the title and volume number + element refmiscinfo { db.refmiscinfo.attlist, db._text } +} +div { + db.refnamediv.role.attribute = attribute role { text } + db.refnamediv.attlist = + db.refnamediv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refnamediv = + + ## The name, purpose, and classification of a reference page + element refnamediv { + db.refnamediv.attlist, + db.refdescriptor?, + db.refname+, + db.refpurpose, + db.refclass* + } +} +div { + db.refdescriptor.role.attribute = attribute role { text } + db.refdescriptor.attlist = + db.refdescriptor.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refdescriptor = + + ## A description of the topic of a reference page + element refdescriptor { db.refdescriptor.attlist, db.all.inlines* } +} +div { + db.refname.role.attribute = attribute role { text } + db.refname.attlist = + db.refname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refname = + + ## The name of (one of) the subject(s) of a reference page + element refname { db.refname.attlist, db.all.inlines* } +} +div { + db.refpurpose.role.attribute = attribute role { text } + db.refpurpose.attlist = + db.refpurpose.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refpurpose = + + ## A short (one sentence) synopsis of the topic of a reference page + element refpurpose { db.refpurpose.attlist, db.all.inlines* } +} +div { + db.refclass.role.attribute = attribute role { text } + db.refclass.attlist = + db.refclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refclass = + + ## The scope or other indication of applicability of a reference entry + element refclass { db.refclass.attlist, (text | db.application)* } +} +div { + db.refsynopsisdiv.role.attribute = attribute role { text } + db.refsynopsisdiv.attlist = + db.refsynopsisdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.refsynopsisdiv.info = db._info + db.refsynopsisdiv = + + ## A syntactic synopsis of the subject of the reference page + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsynopsisdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsynopsisdiv { + db.refsynopsisdiv.attlist, + db.refsynopsisdiv.info, + ((db.all.blocks+, db.secondlevel.refsection?) + | db.secondlevel.refsection) + } +} +div { + db.refsection.status.attribute = db.status.attribute + db.refsection.role.attribute = attribute role { text } + db.refsection.attlist = + db.refsection.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.refsection.status.attribute? + & db.label.attribute? + db.refsection.info = db._info.title.req + db.refsection = + + ## A recursive section in a refentry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsection" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsection { + db.refsection.attlist, + db.refsection.info, + ((db.all.blocks+, db.refsection*) | db.refsection+) + } +} +db.refsect1.sections = db.refsect2+ +div { + db.refsect1.status.attribute = db.status.attribute + db.refsect1.role.attribute = attribute role { text } + db.refsect1.attlist = + db.refsect1.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect1.status.attribute? + db.refsect1.info = db._info.title.req + db.refsect1 = + + ## A major subsection of a reference entry + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect1" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect1 { + db.refsect1.attlist, + db.refsect1.info, + ((db.all.blocks+, db.refsect1.sections?) | db.refsect1.sections) + } +} +db.refsect2.sections = db.refsect3+ +div { + db.refsect2.status.attribute = db.status.attribute + db.refsect2.role.attribute = attribute role { text } + db.refsect2.attlist = + db.refsect2.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect2.status.attribute? + db.refsect2.info = db._info.title.req + db.refsect2 = + + ## A subsection of a refsect1 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect2" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect2 { + db.refsect2.attlist, + db.refsect2.info, + ((db.all.blocks+, db.refsect2.sections?) | db.refsect2.sections) + } +} +div { + db.refsect3.status.attribute = db.status.attribute + db.refsect3.role.attribute = attribute role { text } + db.refsect3.attlist = + db.refsect3.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.refsect3.status.attribute? + db.refsect3.info = db._info.title.req + db.refsect3 = + + ## A subsection of a refsect2 + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:refsect3" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element refsect3 { + db.refsect3.attlist, db.refsect3.info, db.all.blocks+ + } +} +db.glossary.inlines = + db.firstterm | db.glossterm | db._firstterm | db._glossterm +db.baseform.attribute = + + ## Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + attribute baseform { text }? +div { + db.glosslist.role.attribute = attribute role { text } + db.glosslist.attlist = + db.glosslist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.glosslist.info = db._info.title.only + db.glosslist = + + ## A wrapper for a list of glossary entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glosslist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glosslist { + db.glosslist.attlist, + db.glosslist.info?, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.glossentry.role.attribute = attribute role { text } + db.glossentry.sortas.attribute = + + ## Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + attribute sortas { text } + db.glossentry.attlist = + db.glossentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossentry.sortas.attribute? + db.glossentry = + + ## An entry in a glossary or glosslist + element glossentry { + db.glossentry.attlist, + db.glossterm, + db.acronym?, + db.abbrev?, + db.indexterm*, + (db.glosssee | db.glossdef+) + } +} +div { + db.glossdef.role.attribute = attribute role { text } + db.glossdef.subject.attribute = + + ## Specifies a list of keywords for the definition + attribute subject { text } + db.glossdef.attlist = + db.glossdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossdef.subject.attribute? + db.glossdef = + + ## A definition in a glossentry + element glossdef { + db.glossdef.attlist, db.all.blocks+, db.glossseealso* + } +} +div { + db.glosssee.role.attribute = attribute role { text } + db.glosssee.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glosssee.attlist = + db.glosssee.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glosssee.otherterm.attribute? + db.glosssee = + + ## A cross-reference from one glossentry + ## to another + [ + s:pattern [ + s:title [ "Glosssary 'see' type constraint" ] + s:rule [ + context = "db:glosssee[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glosssee must point to a glossentry." + ] + ] + ] + ] + element glosssee { db.glosssee.attlist, db.all.inlines* } +} +div { + db.glossseealso.role.attribute = attribute role { text } + db.glossseealso.otherterm.attribute = + + ## Identifies the other term + attribute otherterm { xsd:IDREF } + db.glossseealso.attlist = + db.glossseealso.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.glossseealso.otherterm.attribute? + db.glossseealso = + + ## A cross-reference from one glossentry to another + [ + s:pattern [ + s:title [ "Glossary 'seealso' type constraint" ] + s:rule [ + context = "db:glossseealso[@otherterm]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@otherterm]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@otherterm]) = 'http://docbook.org/ns/docbook'" + "@otherterm on glossseealso must point to a glossentry." + ] + ] + ] + ] + element glossseealso { db.glossseealso.attlist, db.all.inlines* } +} +div { + db.firstterm.role.attribute = attribute role { text } + db.firstterm.attlist = + db.firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.firstterm = + + ## The first occurrence of a term + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db.firstterm.attlist, db.all.inlines* } +} +div { + db._firstterm.role.attribute = attribute role { text } + db._firstterm.attlist = + db._firstterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._firstterm = + + ## The first occurrence of a term, with limited content + [ + s:pattern [ + s:title [ "Glossary 'firstterm' type constraint" ] + s:rule [ + context = "db:firstterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on firstterm must point to a glossentry." + ] + ] + ] + ] + element firstterm { db._firstterm.attlist, db._text } +} +div { + db.glossterm.role.attribute = attribute role { text } + db.glossterm.attlist = + db.glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db.glossterm.attlist, db.all.inlines* } +} +div { + db._glossterm.role.attribute = attribute role { text } + db._glossterm.attlist = + db._glossterm.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db._glossterm = + + ## A glossary term + [ + s:pattern [ + s:title [ "Glossary 'glossterm' type constraint" ] + s:rule [ + context = "db:glossterm[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'glossentry' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on glossterm must point to a glossentry." + ] + ] + ] + ] + element glossterm { db._glossterm.attlist, db._text } +} +div { + db.glossary.status.attribute = db.status.attribute + db.glossary.role.attribute = attribute role { text } + db.glossary.attlist = + db.glossary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossary.status.attribute? + db.glossary.info = db._info + db.glossary = + + ## A glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossary { + db.glossary.attlist, + db.glossary.info, + db.all.blocks*, + (db.glossdiv* | db.glossentry*), + db.bibliography? + } +} +div { + db.glossdiv.status.attribute = db.status.attribute + db.glossdiv.role.attribute = attribute role { text } + db.glossdiv.attlist = + db.glossdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.glossdiv.status.attribute? + db.glossdiv.info = db._info.title.req + db.glossdiv = + + ## A division in a glossary + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:glossdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element glossdiv { + db.glossdiv.attlist, + db.glossdiv.info, + db.all.blocks*, + db.glossentry+ + } +} +div { + db.termdef.role.attribute = attribute role { text } + db.termdef.attlist = + db.termdef.role.attribute? + & db.glossentry.sortas.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.baseform.attribute + db.termdef = + + ## An inline definition of a term + [ + s:pattern [ + s:title [ "Glossary term definition constraint" ] + s:rule [ + context = "db:termdef" + s:assert [ + test = "count(db:firstterm) = 1" + "A termdef must contain exactly one firstterm" + ] + ] + ] + ] + element termdef { db.termdef.attlist, db.all.inlines* } +} +db.relation.attribute = + + ## Identifies the relationship between the bibliographic elemnts + attribute relation { text } +div { + db.biblioentry.role.attribute = attribute role { text } + db.biblioentry.pubwork.attribute = db.biblio.pubwork.attribute + db.biblioentry.attlist = + db.biblioentry.role.attribute? + & db.biblioentry.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.biblioentry = + + ## A raw entry in a bibliography + element biblioentry { + db.biblioentry.attlist, db.bibliographic.elements+ + } +} +div { + db.bibliomixed.role.attribute = attribute role { text } + db.bibliomixed.pubwork.attribute = db.biblio.pubwork.attribute + db.bibliomixed.attlist = + db.bibliomixed.role.attribute? + & db.bibliomixed.pubwork.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomixed = + + ## A cooked entry in a bibliography + element bibliomixed { + db.bibliomixed.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.biblioset.relation.attribute = db.relation.attribute + db.biblioset.role.attribute = attribute role { text } + db.biblioset.attlist = + db.biblioset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.biblioset.relation.attribute? + db.biblioset = + + ## A raw container for related bibliographic information + element biblioset { + db.biblioset.attlist, db.bibliographic.elements+ + } +} +div { + 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.bibliomset = + + ## A cooked container for related bibliographic information + element bibliomset { + db.bibliomset.attlist, + ((db._text + | db.honorific + | db.firstname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)* + | (db._text + | db.honorific + | db.givenname + | db.surname + | db.lineage + | db.othername + | db.bibliographic.elements)*) + } +} +div { + db.bibliomisc.role.attribute = attribute role { text } + db.bibliomisc.attlist = + db.bibliomisc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliomisc = + + ## Untyped bibliographic information + element bibliomisc { db.bibliomisc.attlist, db._text } +} +div { + db.bibliography.status.attrib = db.status.attribute + db.bibliography.role.attribute = attribute role { text } + db.bibliography.attlist = + db.bibliography.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliography.status.attrib? + db.bibliography.info = db._info + db.bibliography = + + ## A bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliography" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliography { + db.bibliography.attlist, + db.bibliography.info, + db.all.blocks*, + (db.bibliodiv+ | (db.biblioentry | db.bibliomixed)+) + } +} +div { + db.bibliodiv.status.attrib = db.status.attribute + db.bibliodiv.role.attribute = attribute role { text } + db.bibliodiv.attlist = + db.bibliodiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.bibliodiv.status.attrib? + db.bibliodiv.info = db._info.title.req + db.bibliodiv = + + ## A section of a bibliography + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliodiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliodiv { + db.bibliodiv.attlist, + db.bibliodiv.info, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.bibliolist.role.attribute = attribute role { text } + db.bibliolist.attlist = + db.bibliolist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.bibliolist.info = db._info.title.only + db.bibliolist = + + ## A wrapper for a list of bibliography entries + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:bibliolist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element bibliolist { + db.bibliolist.attlist, + db.bibliolist.info?, + db.all.blocks*, + (db.biblioentry | db.bibliomixed)+ + } +} +div { + db.biblioref.role.attribute = attribute role { text } + db.biblioref.xrefstyle.attribute = db.xrefstyle.attribute + db.biblioref.endterm.attribute = db.endterm.attribute + db.biblioref.units.attribute = + + ## The units (for example, pages) used to identify the beginning and ending of a reference. + attribute units { xsd:token } + db.biblioref.begin.attribute = + + ## Identifies the beginning of a reference; the location within the work that is being referenced. + attribute begin { xsd:token } + db.biblioref.end.attribute = + + ## Identifies the end of a reference. + attribute end { xsd:token } + db.biblioref.attlist = + db.biblioref.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + & db.biblioref.xrefstyle.attribute? + & db.biblioref.endterm.attribute? + & db.biblioref.units.attribute? + & db.biblioref.begin.attribute? + & db.biblioref.end.attribute? + db.biblioref = + + ## A cross-reference to a bibliographic entry + element biblioref { db.biblioref.attlist, empty } +} +db.significance.enumeration = + + ## Normal + "normal" + | + ## Preferred + "preferred" +db.significance.attribute = + + ## Specifies the significance of the term + attribute significance { db.significance.enumeration } +db.zone.attribute = + + ## Specifies the IDs of the elements to which this term applies + attribute zone { xsd:IDREFS } +db.indexterm.pagenum.attribute = + + ## Indicates the page on which this index term occurs in some version of the printed document + attribute pagenum { text } +db.scope.enumeration = + + ## All indexes + "all" + | + ## The global index (as for a combined index of a set of books) + "global" + | + ## The local index (the index for this document only) + "local" +db.scope.attribute = + + ## Specifies the scope of the index term + attribute scope { db.scope.enumeration } +db.sortas.attribute = + + ## Specifies the string by which the term is to be sorted; if unspecified, the term content is used + attribute sortas { text } +db.index.type.attribute = + + ## Specifies the target index for this term + attribute type { text } +div { + db.itermset.role.attribute = attribute role { text } + db.itermset.attlist = + db.itermset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.itermset = + + ## A set of index terms in the meta-information of a document + element itermset { db.itermset.attlist, db.indexterm.singular+ } +} +db.indexterm.contentmodel = + (db.primary, + (db.secondary, + ((db.tertiary, (db.see | db.seealso+)?)? + | (db.see | db.seealso+)?)?)?)?, + (db.see | db.seealso+)? +div { + db.indexterm.singular.role.attribute = attribute role { text } + db.indexterm.singular.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## A singular index term + "singular" + } + db.indexterm.singular.attlist = + db.indexterm.singular.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.singular.class.attribute? + db.indexterm.singular = + + ## A wrapper for an indexed term + element indexterm { + db.indexterm.singular.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.startofrange.role.attribute = attribute role { text } + db.indexterm.startofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The start of a range + "startofrange" + } + db.indexterm.startofrange.attlist = + db.indexterm.startofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.significance.attribute? + & db.zone.attribute? + & db.indexterm.pagenum.attribute? + & db.scope.attribute? + & db.index.type.attribute? + & db.indexterm.startofrange.class.attribute + db.indexterm.startofrange = + + ## A wrapper for an indexed term that covers a range + element indexterm { + db.indexterm.startofrange.attlist, db.indexterm.contentmodel + } +} +div { + db.indexterm.endofrange.role.attribute = attribute role { text } + db.indexterm.endofrange.class.attribute = + + ## Identifies the class of index term + attribute class { + + ## The end of a range + "endofrange" + } + db.indexterm.endofrange.startref.attribute = + + ## Points to the start of the range + attribute startref { xsd:IDREF } + db.indexterm.endofrange.attlist = + db.indexterm.endofrange.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.indexterm.endofrange.class.attribute + & db.indexterm.endofrange.startref.attribute + db.indexterm.endofrange = + + ## Identifies the end of a range associated with an indexed term + [ + s:pattern [ + s:title [ "Indexterm 'startref' type constraint" ] + s:rule [ + context = "db:indexterm[@startref]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@startref]) = 'indexterm' and namespace-uri(//*[@xml:id=current()/@startref]) = 'http://docbook.org/ns/docbook'" + "@startref on indexterm must point to an indexterm." + ] + s:assert [ + test = + "//*[@xml:id=current()/@startref]/@class='startofrange'" + "@startref on indexterm must point to a startofrange indexterm." + ] + ] + ] + ] + element indexterm { db.indexterm.endofrange.attlist, empty } +} +div { + db.indexterm = + db.indexterm.singular + | db.indexterm.startofrange + | db.indexterm.endofrange +} +div { + db.primary.role.attribute = attribute role { text } + db.primary.attlist = + db.primary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.primary = + + ## The primary word or phrase under which an index term should be sorted + element primary { db.primary.attlist, db.all.inlines* } +} +div { + db.secondary.role.attribute = attribute role { text } + db.secondary.attlist = + db.secondary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.secondary = + + ## A secondary word or phrase in an index term + element secondary { db.secondary.attlist, db.all.inlines* } +} +div { + db.tertiary.role.attribute = attribute role { text } + db.tertiary.attlist = + db.tertiary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.sortas.attribute? + db.tertiary = + + ## A tertiary word or phrase in an index term + element tertiary { db.tertiary.attlist, db.all.inlines* } +} +div { + db.see.role.attribute = attribute role { text } + db.see.class.attribute = + + ## Identifies the class of 'see' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.see.attlist = + db.see.role.attribute? + & db.see.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.see = + + ## Part of an index term directing the reader instead to another entry in the index + element see { db.see.attlist, db.all.inlines* } +} +div { + db.seealso.role.attribute = attribute role { text } + db.seealso.class.attribute = + + ## Identifies the class of 'seealso' + attribute class { + + ## Normal + "normal" + | + ## See 'under' + "under" + } + db.seealso.attlist = + db.seealso.role.attribute? + & db.seealso.class.attribute? + & db.common.attributes + & db.common.linking.attributes + db.seealso = + + ## Part of an index term directing the reader also to another entry in the index + element seealso { db.seealso.attlist, db.all.inlines* } +} +div { + db.index.status.attribute = db.status.attribute + db.index.role.attribute = attribute role { text } + db.index.attlist = + db.index.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.index.status.attribute? + & db.index.type.attribute? + db.index.info = db._info + # Yes, db.indexdiv* and db.indexentry*; that way an is valid. + # Authors can use an empty index to indicate where a generated index should + # appear. + db.index = + + ## An index to a book or part of a book + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:index" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element index { + db.index.attlist, + db.index.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry* | db.segmentedlist) + } +} +div { + db.setindex.status.attribute = db.status.attribute + db.setindex.role.attribute = attribute role { text } + db.setindex.attlist = + db.setindex.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.setindex.status.attribute? + & db.index.type.attribute? + db.setindex.info = db._info + db.setindex = + + ## An index to a set of books + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:setindex" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element setindex { + db.setindex.attlist, + db.setindex.info, + db.all.blocks*, + (db.indexdiv* | db.indexentry*) + } +} +div { + db.indexdiv.status.attribute = db.status.attribute + db.indexdiv.role.attribute = attribute role { text } + db.indexdiv.attlist = + db.indexdiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.indexdiv.status.attribute? + db.indexdiv.info = db._info.title.req + db.indexdiv = + + ## A division in an index + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:indexdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element indexdiv { + db.indexdiv.attlist, + db.indexdiv.info, + db.all.blocks*, + (db.indexentry+ | db.segmentedlist) + } +} +div { + db.indexentry.role.attribute = attribute role { text } + db.indexentry.attlist = + db.indexentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.indexentry = + + ## An entry in an index + element indexentry { + db.indexentry.attlist, + db.primaryie, + (db.seeie | db.seealsoie)*, + (db.secondaryie, (db.seeie | db.seealsoie | db.tertiaryie)*)* + } +} +div { + db.primaryie.role.attribute = attribute role { text } + db.primaryie.attlist = + db.primaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.primaryie = + + ## A primary term in an index entry, not in the text + element primaryie { db.primaryie.attlist, db.all.inlines* } +} +div { + db.secondaryie.role.attribute = attribute role { text } + db.secondaryie.attlist = + db.secondaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.secondaryie = + + ## A secondary term in an index entry, rather than in the text + element secondaryie { db.secondaryie.attlist, db.all.inlines* } +} +div { + db.tertiaryie.role.attribute = attribute role { text } + db.tertiaryie.attlist = + db.tertiaryie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.tertiaryie = + + ## A tertiary term in an index entry, rather than in the text + element tertiaryie { db.tertiaryie.attlist, db.all.inlines* } +} +div { + db.seeie.role.attribute = attribute role { text } + db.seeie.attlist = + db.seeie.role.attribute? + & db.common.attributes + & db.linkend.attribute? + db.seeie = + + ## A See + ## entry in an index, rather than in the text + element seeie { db.seeie.attlist, db.all.inlines* } +} +div { + db.seealsoie.role.attribute = attribute role { text } + db.seealsoie.attlist = + db.seealsoie.role.attribute? + & db.common.attributes + & db.linkends.attribute? + db.seealsoie = + + ## A See also + ## entry in an index, rather than in the text + element seealsoie { db.seealsoie.attlist, db.all.inlines* } +} +db.toc.pagenum.attribute = + + ## Indicates the page on which this element occurs in some version of the printed document + attribute pagenum { text } +div { + db.toc.role.attribute = attribute role { text } + db.toc.attlist = + db.toc.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.toc.info = db._info.title.only + db.toc = + + ## A table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:toc" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element toc { + db.toc.attlist, + db.toc.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)* + } +} +div { + db.tocdiv.role.attribute = attribute role { text } + 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 + db.tocdiv = + + ## A division in a table of contents + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tocdiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tocdiv { + db.tocdiv.attlist, + db.tocdiv.info, + db.all.blocks*, + (db.tocdiv | db.tocentry)+ + } +} +div { + db.tocentry.role.attribute = attribute role { text } + db.tocentry.pagenum.attribute = db.toc.pagenum.attribute + db.tocentry.attlist = + db.tocentry.role.attribute? + & db.common.attributes + & db.tocentry.pagenum.attribute? + & db.linkend.attribute? + db.tocentry = + + ## A component title in a table of contents + element tocentry { db.tocentry.attlist, db.all.inlines* } +} +db.task.info = db._info.title.req +div { + db.task.role.attribute = attribute role { text } + db.task.attlist = + db.task.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.task = + + ## A task to be completed + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:task" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element task { + db.task.attlist, + db.task.info, + db.tasksummary?, + db.taskprerequisites?, + db.procedure+, + db.example*, + db.taskrelated? + } +} +div { + db.tasksummary.role.attribute = attribute role { text } + db.tasksummary.attlist = + db.tasksummary.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tasksummary.info = db._info.title.only + db.tasksummary = + + ## A summary of a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tasksummary" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tasksummary { + db.tasksummary.attlist, db.tasksummary.info, db.all.blocks+ + } +} +div { + db.taskprerequisites.role.attribute = attribute role { text } + db.taskprerequisites.attlist = + db.taskprerequisites.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskprerequisites.info = db._info.title.only + db.taskprerequisites = + + ## The prerequisites for a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskprerequisites" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskprerequisites { + db.taskprerequisites.attlist, + db.taskprerequisites.info, + db.all.blocks+ + } +} +div { + db.taskrelated.role.attribute = attribute role { text } + db.taskrelated.attlist = + db.taskrelated.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.taskrelated.info = db._info.title.only + db.taskrelated = + + ## Information related to a task + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:taskrelated" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element taskrelated { + db.taskrelated.attlist, db.taskrelated.info, db.all.blocks+ + } +} +db.area.units.enumeration = + + ## Coordinates expressed as a pair of CALS graphic coordinates. + "calspair" + | + ## Coordinates expressed as a line and column. + "linecolumn" + | + ## Coordinates expressed as a pair of lines and columns. + "linecolumnpair" + | + ## Coordinates expressed as a line range. + "linerange" +db.area.units-enum.attribute = + + ## Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + ## for graphics and linecolumn + ## for line-oriented elements. + attribute units { db.area.units.enumeration }? +db.area.units-other.attributes = + + ## Indicates that non-standard units are used for this area + ## . In this case otherunits + ## must be specified. + attribute units { + + ## Coordinates expressed in some non-standard units. + "other" + }?, + + ## Identifies the units used in the coords + ## attribute when the units + ## attribute is other + ## . This attribute is forbidden otherwise. + attribute otherunits { xsd:NMTOKEN } +db.area.units.attribute = + db.area.units-enum.attribute | db.area.units-other.attributes +div { + db.calloutlist.role.attribute = attribute role { text } + db.calloutlist.attlist = + db.calloutlist.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.calloutlist.info = db._info.title.only + db.calloutlist = + + ## A list of callout + ## s + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:calloutlist" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element calloutlist { + db.calloutlist.attlist, + db.calloutlist.info, + db.all.blocks*, + db.callout+ + } +} +div { + db.callout.role.attribute = attribute role { text } + db.callout.arearefs.attribute = + + ## Identifies the areas described by this callout. + attribute arearefs { xsd:IDREFS } + db.callout.attlist = + db.callout.role.attribute? + & db.common.attributes + & db.callout.arearefs.attribute + # This requires an XPath 2.0 compatible Schematron processor + db.callout = + + ## A called out + ## description of a marked area + [ + s:pattern [ + s:title [ "Callout cross reference constraint" ] + s:rule [ + context = "db:callout[@arearefs]" + s:assert [ + test = + "every $id in tokenize(current()/@arearefs) satisfies (every $ar in //*[@xml:id = $id] satisfies (local-name($ar) = ('areaset', 'area', 'co') and namespace-uri($ar) = 'http://docbook.org/ns/docbook'))" + "@arearefs on callout must point to a areaset, area, or co." + ] + ] + ] + ] + element callout { db.callout.attlist, db.all.blocks+ } +} +div { + db.programlistingco.role.attribute = attribute role { text } + db.programlistingco.attlist = + db.programlistingco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.programlistingco.info = db._info.title.forbidden + db.programlistingco = + + ## A program listing with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlistingco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlistingco { + db.programlistingco.attlist, + db.programlistingco.info, + db.areaspec, + db.programlisting, + db.calloutlist* + } +} +div { + db.areaspec.role.attribute = attribute role { text } + db.areaspec.attlist = + db.areaspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.area.units.attribute + db.areaspec = + + ## A collection of regions in a graphic or code example + element areaspec { db.areaspec.attlist, (db.area | db.areaset)+ } +} +div { + db.area.role.attribute = attribute role { text } + db.area.linkends.attribute = + + ## Point to the callout + ## s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + attribute linkends { xsd:IDREFS } + db.area.label.attribute = + + ## Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + attribute label { text } + db.area.coords.attribute = + + ## Provides the coordinates of the area. The coordinates must be interpreted using the units + ## specified. + attribute coords { text } + db.area.attlist = + db.area.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area = + + ## A region defined for a callout in a graphic or code example + element area { db.area.attlist, db.alt? } +} +div { + # The only difference is that xml:id is optional + db.area.inareaset.attlist = + db.area.role.attribute? + & db.common.attributes + & db.area.units.attribute + & (db.area.linkends.attribute | db.xlink.simple.link.attributes)? + & db.area.label.attribute? + & db.area.coords.attribute + db.area.inareaset = + + ## A region defined for a callout in a graphic or code example + element area { db.area.inareaset.attlist, db.alt? } +} +div { + db.areaset.role.attribute = attribute role { text } + db.areaset.linkends.attribute = db.linkends.attribute + db.areaset.label.attribute = db.label.attribute + db.areaset.attlist = + db.areaset.role.attribute? + & db.common.idreq.attributes + & db.area.units.attribute + & (db.areaset.linkends.attribute | db.xlink.simple.link.attributes)? + & db.areaset.label.attribute? + db.areaset = + + ## A set of related areas in a graphic or code example + element areaset { db.areaset.attlist, db.area.inareaset+ } +} +div { + db.screenco.role.attribute = attribute role { text } + db.screenco.attlist = + db.screenco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.screenco.info = db._info.title.forbidden + db.screenco = + + ## A screen with associated areas used in callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:screenco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element screenco { + db.screenco.attlist, + db.screenco.info, + db.areaspec, + db.screen, + db.calloutlist* + } +} +div { + db.imageobjectco.role.attribute = attribute role { text } + db.imageobjectco.attlist = + db.imageobjectco.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.imageobjectco.info = db._info.title.forbidden + db.imageobjectco = + + ## A wrapper for an image object with callouts + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imageobjectco" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imageobjectco { + db.imageobjectco.attlist, + db.imageobjectco.info, + db.areaspec, + db.imageobject+, + db.calloutlist* + } +} +div { + db.co.role.attribute = attribute role { text } + db.co.linkends.attribute = db.linkends.attribute + db.co.label.attribute = db.label.attribute + db.co.attlist = + db.co.role.attribute? + & db.common.idreq.attributes + & db.co.linkends.attribute? + & db.co.label.attribute? + db.co = + + ## The location of a callout embedded in text + element co { db.co.attlist, empty } +} +div { + db.coref.role.attribute = attribute role { text } + db.coref.label.attribute = db.label.attribute + db.coref.attlist = + db.coref.role.attribute? + & db.common.attributes + & db.linkend.attribute + & db.coref.label.attribute? + db.coref = + + ## A cross reference to a co + element coref { db.coref.attlist, empty } +} +div { + db.productionset.role.attribute = attribute role { text } + db.productionset.attlist = + db.productionset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productionset.info = db._info.title.only + db.productionset = + + ## A set of EBNF productions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:productionset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element productionset { + db.productionset.attlist, + db.productionset.info, + (db.production | db.productionrecap)+ + } +} +div { + db.production.role.attribute = attribute role { text } + db.production.attlist = + db.production.role.attribute? + & db.common.idreq.attributes + & db.common.linking.attributes + db.production = + + ## A production in a set of EBNF productions + element production { + db.production.attlist, db.lhs, db.rhs+, db.constraint* + } +} +div { + db.lhs.role.attribute = attribute role { text } + db.lhs.attlist = + db.lhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.lhs = + + ## The left-hand side of an EBNF production + element lhs { db.lhs.attlist, text } +} +div { + db.rhs.role.attribute = attribute role { text } + db.rhs.attlist = + db.rhs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.rhs = + + ## The right-hand side of an EBNF production + element rhs { + db.rhs.attlist, + (text | db.nonterminal | db.lineannotation | db.sbr)* + } +} +div { + db.nonterminal.role.attribute = attribute role { text } + db.nonterminal.def.attribute = + + ## Specifies a URI that points to a production + ## where the nonterminal + ## is defined + attribute def { xsd:anyURI } + db.nonterminal.attlist = + db.nonterminal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.nonterminal.def.attribute + db.nonterminal = + + ## A non-terminal in an EBNF production + element nonterminal { db.nonterminal.attlist, text } +} +div { + db.constraint.role.attribute = attribute role { text } + db.constraint.attlist = + db.constraint.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.constraint = + + ## A constraint in an EBNF production + [ + s:pattern [ + s:title [ "Constraint cross reference constraint" ] + s:rule [ + context = "db:constraint[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'constraintdef' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on constraint must point to a constraintdef." + ] + ] + ] + ] + element constraint { db.constraint.attlist, empty } +} +div { + db.productionrecap.role.attribute = attribute role { text } + db.productionrecap.attlist = + db.productionrecap.role.attribute? + & db.common.attributes + & db.common.req.linking.attributes + db.productionrecap = + + ## A cross-reference to an EBNF production + [ + s:pattern [ + s:title [ "Production recap cross reference constraint" ] + s:rule [ + context = "db:productionrecap[@linkend]" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'production' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on productionrecap must point to a production." + ] + ] + ] + ] + element productionrecap { db.productionrecap.attlist, empty } +} +div { + db.constraintdef.role.attribute = attribute role { text } + db.constraintdef.attlist = + db.constraintdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.constraintdef.info = db._info.title.only + db.constraintdef = + + ## The definition of a constraint in an EBNF production + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constraintdef" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constraintdef { + db.constraintdef.attlist, db.constraintdef.info, db.all.blocks+ + } +} +db.char.attribute = + + ## Specifies the alignment character when align + ## is set to char + ## . + attribute char { text } +db.charoff.attribute = + + ## Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + ## when align + ## is set to char + ## . + attribute charoff { + xsd:decimal { minExclusive = "0" maxExclusive = "100" } + } +db.frame.attribute = + + ## Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + attribute frame { + + ## Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + "all" + | + ## Frame only the bottom of the table. + "bottom" + | + ## Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + "none" + | + ## Frame the left and right sides of the table. + "sides" + | + ## Frame the top of the table. + "top" + | + ## Frame the top and bottom of the table. + "topbot" + } +db.colsep.attribute = + + ## Specifies the presence or absence of the column separator + attribute colsep { + + ## No column separator rule. + "0" + | + ## Provide a column separator rule on the right + "1" + } +db.rowsep.attribute = + + ## Specifies the presence or absence of the row separator + attribute rowsep { + + ## No row separator rule. + "0" + | + ## Provide a row separator rule below + "1" + } +db.orient.attribute = + + ## Specifies the orientation of the table + attribute orient { + + ## 90 degrees counter-clockwise from the rest of the text flow. + "land" + | + ## The same orientation as the rest of the text flow. + "port" + } +db.tabstyle.attribute = + + ## Specifies the table style + attribute tabstyle { text } +db.rowheader.attribute = + + ## Indicates whether or not the entries in the first column should be considered row headers + attribute rowheader { + + ## Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + "firstcol" + | + ## Indicates that row headers are identified by use of the headers attribute on entries in the table. + "headers" + | + ## Indicates that entries in the first column have no special significance with respect to column headers. + "norowheader" + } +db.align.attribute = + + ## Specifies the horizontal alignment of text in an entry. + attribute align { + + ## Centered. + "center" + | + ## Aligned on a particular character. + "char" + | + ## Left and right justified. + "justify" + | + ## Left justified. + "left" + | + ## Right justified. + "right" + } +db.valign.attribute = + + ## Specifies the vertical alignment of text in an entry. + attribute valign { + + ## Aligned on the bottom of the entry. + "bottom" + | + ## Aligned in the middle. + "middle" + | + ## Aligned at the top of the entry. + "top" + } +db.specify-col-by-colname.attributes = + + ## Specifies a column specification by name. + attribute colname { text } +db.specify-col-by-namest.attributes = + + ## Specifies a starting column by name. + attribute namest { text } +db.specify-span-by-spanspec.attributes = + + ## Specifies a span by name. + attribute spanname { text } +db.specify-span-directly.attributes = + + ## Specifies a starting column by name. + attribute namest { text } + & + ## Specifies an ending column by name. + attribute nameend { text } +db.column-spec.attributes = + db.specify-col-by-colname.attributes + | db.specify-col-by-namest.attributes + | db.specify-span-by-spanspec.attributes + | db.specify-span-directly.attributes +db.colname.attribute = + + ## Provides a name for a column specification. + attribute colname { text } +db.spanname.attribute = + + ## Provides a name for a span specification. + attribute spanname { text } +div { + db.tgroup.role.attribute = attribute role { text } + db.tgroup.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.tgroup.cols.attribute = + + ## The number of columns in the table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.tgroup.attlist = + db.tgroup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.tgroup.tgroupstyle.attribute? + & db.tgroup.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.tgroup = + + ## A wrapper for the main content of a table, or part of a table + element tgroup { + db.tgroup.attlist, + db.colspec*, + db.spanspec*, + db.cals.thead?, + db.cals.tfoot?, + db.cals.tbody + } +} +div { + db.colspec.role.attribute = attribute role { text } + db.colspec.colnum.attribute = + + ## The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + attribute colnum { xsd:positiveInteger } + db.colspec.colwidth.attribute = + + ## Specifies the width of the column. + attribute colwidth { text } + db.colspec.attlist = + db.colspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.colspec.colnum.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.colspec.colwidth.attribute? + & db.charoff.attribute? + & db.colname.attribute? + & db.rowsep.attribute? + & db.align.attribute? + & db.rowheader.attribute? + db.colspec = + + ## Specifications for a column in a table + element colspec { db.colspec.attlist, empty } +} +div { + db.spanspec.role.attribute = attribute role { text } + db.spanspec.namest.attribute = + + ## Specifies a starting column by name. + attribute namest { text } + db.spanspec.nameend.attribute = + + ## Specifies an ending column by name. + attribute nameend { text } + db.spanspec.attlist = + db.spanspec.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.spanname.attribute + & db.spanspec.namest.attribute + & db.spanspec.nameend.attribute + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.spanspec = + + ## Formatting information for a spanned column in a table + element spanspec { db.spanspec.attlist, empty } +} +div { + db.cals.thead.role.attribute = attribute role { text } + db.cals.thead.attlist = + db.cals.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.thead = + + ## A table header consisting of one or more rows + element thead { db.cals.thead.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tfoot.role.attribute = attribute role { text } + db.cals.tfoot.attlist = + db.cals.tfoot.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tfoot = + + ## A table footer consisting of one or more rows + element tfoot { db.cals.tfoot.attlist, db.colspec*, db.row+ } +} +div { + db.cals.tbody.role.attribute = attribute role { text } + db.cals.tbody.attlist = + db.cals.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.tbody.attlist, db.row+ } +} +div { + db.row.role.attribute = attribute role { text } + db.row.attlist = + db.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.row = + + ## A row in a table + element row { db.row.attlist, (db.entry | db.entrytbl)+ } +} +div { + db.entry.role.attribute = attribute role { text } + db.entry.morerows.attribute = + + ## Specifies the number of additional rows which this entry occupies. Defaults to zero. + attribute morerows { xsd:integer } + db.entry.rotate.attribute = + + ## Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + attribute rotate { + + ## Do not rotate the cell. + "0" + | + ## Rotate the cell 90 degrees counter-clockwise. + "1" + } + db.entry.scope.attribute = + + ## Specifies the scope of a header. + attribute scope { + + ## Applies to the row + "row" + | + ## Applies to the column + "col" + | + ## Applies to the row group + "rowgroup" + | + ## Applies to the column group + "colgroup" + } + db.entry.headers.attribute = + + ## Specifies the entry or entries which serve as headers for this element. + attribute headers { xsd:IDREFS } + db.entry.attlist = + db.entry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + & db.char.attribute? + & db.colsep.attribute? + & db.charoff.attribute? + & db.entry.morerows.attribute? + & db.column-spec.attributes? + & db.rowsep.attribute? + & db.entry.rotate.attribute? + & db.align.attribute? + & db.entry.scope.attribute? + & db.entry.headers.attribute? + db.entry = + + ## A cell in a table + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of entry" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:entry" + s:assert [ + test = "not(.//db:informaltable)" + "informaltable must not occur among the children or descendants of entry" + ] + ] + ] + ] + element entry { + db.entry.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.entrytbl.role.attribute = attribute role { text } + db.entrytbl.tgroupstyle.attribute = + + ## Additional style information for downstream processing; typically the name of a style. + attribute tgroupstyle { text } + db.entrytbl.cols.attribute = + + ## The number of columns in the entry table. Must be an integer greater than zero. + attribute cols { xsd:positiveInteger } + db.entrytbl.attlist = + db.entrytbl.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.char.attribute? + & db.charoff.attribute? + & db.column-spec.attributes? + & db.entrytbl.tgroupstyle.attribute? + & db.entrytbl.cols.attribute + & db.colsep.attribute? + & db.rowsep.attribute? + & db.align.attribute? + db.entrytbl = + + ## A subtable appearing in place of an entry in a table + element entrytbl { + db.entrytbl.attlist, + db.colspec*, + db.spanspec*, + db.cals.entrytbl.thead?, + db.cals.entrytbl.tbody + } +} +div { + db.cals.entrytbl.thead.role.attribute = attribute role { text } + db.cals.entrytbl.thead.attlist = + db.cals.entrytbl.thead.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.thead = + + ## A table header consisting of one or more rows + element thead { + db.cals.entrytbl.thead.attlist, db.colspec*, db.entrytbl.row+ + } +} +div { + db.cals.entrytbl.tbody.role.attribute = attribute role { text } + db.cals.entrytbl.tbody.attlist = + db.cals.entrytbl.tbody.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.valign.attribute? + db.cals.entrytbl.tbody = + + ## A wrapper for the rows of a table or informal table + element tbody { db.cals.entrytbl.tbody.attlist, db.entrytbl.row+ } +} +div { + db.entrytbl.row.role.attribute = attribute role { text } + db.entrytbl.row.attlist = + db.entrytbl.row.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.rowsep.attribute? + & db.valign.attribute? + db.entrytbl.row = + + ## A row in a table + element row { db.entrytbl.row.attlist, db.entry+ } +} +div { + db.cals.table.role.attribute = attribute role { text } + db.cals.table.label.attribute = db.label.attribute + db.cals.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.table.attlist = + db.cals.table.role.attribute? + & db.cals.table.type.attribute? + & db.cals.table.label.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & + ## Indicates if the short or long title should be used in a List of Tables + attribute shortentry { + + ## Indicates that the full title should be used. + "0" + | + ## Indicates that the short short title (titleabbrev) should be used. + "1" + }? + & + ## Indicates if the table should appear in a List of Tables + attribute tocentry { + + ## Indicates that the table should not occur in the List of Tables. + "0" + | + ## Indicates that the table should appear in the List of Tables. + "1" + }? + & db.rowheader.attribute? + db.cals.table.info = db._info.title.onlyreq + db.cals.table = + + ## A formal table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { + db.cals.table.attlist, + db.cals.table.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +div { + db.cals.informaltable.role.attribute = attribute role { text } + db.cals.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.cals.informaltable.attlist = + db.cals.informaltable.role.attribute? + & db.cals.informaltable.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tabstyle.attribute? + & db.floatstyle.attribute? + & db.orient.attribute? + & db.colsep.attribute? + & db.rowsep.attribute? + & db.frame.attribute? + & db.pgwide.attribute? + & db.rowheader.attribute? + db.cals.informaltable.info = db._info.title.forbidden + db.cals.informaltable = + + ## A table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.cals.informaltable.attlist, + db.cals.informaltable.info, + (db.alt? & db.indexing.inlines* & db.textobject*), + (db.mediaobject+ | db.tgroup+), + db.caption? + } +} +db.html.coreattrs = + + ## This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + attribute class { text }? + & + ## This attribute specifies style information for the current element. + attribute style { text }? + & + ## This attribute offers advisory information about the element for which it is set. + attribute title { text }? +db.html.i18n = + + ## This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + attribute lang { text }? +db.html.events = + + ## Occurs when the pointing device button is clicked over an element. + attribute onclick { text }? + & + ## Occurs when the pointing device button is double clicked over an element. + attribute ondblclick { text }? + & + ## Occurs when the pointing device button is pressed over an element. + attribute onmousedown { text }? + & + ## Occurs when the pointing device button is released over an element. + attribute onmouseup { text }? + & + ## Occurs when the pointing device is moved onto an element. + attribute onmouseover { text }? + & + ## Occurs when the pointing device is moved while it is over an element. + attribute onmousemove { text }? + & + ## Occurs when the pointing device is moved away from an element. + attribute onmouseout { text }? + & + ## Occurs when a key is pressed and released over an element. + attribute onkeypress { text }? + & + ## Occurs when a key is pressed down over an element. + attribute onkeydown { text }? + & + ## Occurs when a key is released over an element. + attribute onkeyup { text }? +db.html.attrs = + db.common.attributes + & db.html.coreattrs + & db.html.i18n + & db.html.events +db.html.cellhalign = + + ## Specifies the alignment of data and the justification of text in a cell. + attribute align { + + ## Left-flush data/Left-justify text. This is the default value for table data. + "left" + | + ## Center data/Center-justify text. This is the default value for table headers. + "center" + | + ## Right-flush data/Right-justify text. + "right" + | + ## Double-justify text. + "justify" + | + ## Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + "char" + }? + & + ## This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + attribute char { text }? + & + ## When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + attribute charoff { + xsd:integer >> a:documentation [ "An explicit offset." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage offset." ] + }? +db.html.cellvalign = + + ## Specifies the vertical position of data within a cell. + attribute valign { + + ## Cell data is flush with the top of the cell. + "top" + | + ## Cell data is centered vertically within the cell. This is the default value. + "middle" + | + ## Cell data is flush with the bottom of the cell. + "bottom" + | + ## All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + "baseline" + }? +db.html.table.attributes = + + ## Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + attribute summary { text }? + & + ## Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + attribute width { + xsd:integer >> a:documentation [ "An explicit width." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage width." ] + }? + & + ## Specifies the width (in pixels only) of the frame around a table. + attribute border { xsd:nonNegativeInteger }? + & + ## Specifies which sides of the frame surrounding a table will be visible. + attribute frame { + + ## No sides. This is the default value. + "void" + | + ## The top side only. + "above" + | + ## The bottom side only. + "below" + | + ## The top and bottom sides only. + "hsides" + | + ## The left-hand side only. + "lhs" + | + ## The right-hand side only. + "rhs" + | + ## The right and left sides only. + "vsides" + | + ## All four sides. + "box" + | + ## All four sides. + "border" + }? + & + ## Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + attribute rules { + + ## No rules. This is the default value. + "none" + | + ## Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + "groups" + | + ## Rules will appear between rows only. + "rows" + | + ## Rules will appear between columns only. + "cols" + | + ## Rules will appear between all rows and columns. + "all" + }? + & + ## Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + attribute cellspacing { + xsd:integer >> a:documentation [ "An explicit spacing." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage spacing." ] + }? + & + ## Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + attribute cellpadding { + xsd:integer >> a:documentation [ "An explicit padding." ] + | xsd:string { pattern = "[0-9]+%" } + >> a:documentation [ "A percentage padding." ] + }? +db.html.tablecell.attributes = + + ## Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + attribute abbr { text }? + & + ## This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + attribute axis { text }? + & + ## Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + attribute headers { text }? + & + ## Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + attribute scope { + + ## The current cell provides header information for the rest of the row that contains it + "row" + | + ## The current cell provides header information for the rest of the column that contains it. + "col" + | + ## The header cell provides header information for the rest of the row group that contains it. + "rowgroup" + | + ## The header cell provides header information for the rest of the column group that contains it. + "colgroup" + }? + & + ## Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all rows from the current row to the last row of the table section (thead + ## , tbody + ## , or tfoot + ## ) in which the cell is defined. + attribute rowspan { xsd:nonNegativeInteger }? + & + ## Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 + ## ). The value zero (0 + ## ) means that the cell spans all columns from the current column to the last column of the column group (colgroup + ## ) in which the cell is defined. + attribute colspan { xsd:nonNegativeInteger }? +db.html.table.info = db._info.title.forbidden +db.html.table.model = + db.html.table.info?, + db.html.caption, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +db.html.informaltable.info = db._info.title.forbidden +db.html.informaltable.model = + db.html.informaltable.info?, + (db.html.col* | db.html.colgroup*), + db.html.thead?, + db.html.tfoot?, + (db.html.tbody+ | db.html.tr+) +div { + db.html.table.role.attribute = attribute role { text } + db.html.table.label.attribute = db.label.attribute + db.html.table.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.table.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.table.role.attribute? + & db.html.table.type.attribute? + & db.html.table.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.table = + + ## A formal (captioned) HTML table in a document + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:table" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of table" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:table" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element table { db.html.table.attlist, db.html.table.model } +} +div { + db.html.informaltable.role.attribute = attribute role { text } + db.html.informaltable.label.attribute = db.label.attribute + db.html.informaltable.type.attribute = + + ## Identifies the type of table + attribute type { text }? + db.html.informaltable.attlist = + db.html.attrs + & db.html.table.attributes + & db.html.informaltable.role.attribute? + & db.html.informaltable.type.attribute? + & db.html.informaltable.label.attribute? + & db.orient.attribute? + & db.pgwide.attribute? + & db.tabstyle.attribute? + & db.floatstyle.attribute? + db.html.informaltable = + + ## An HTML table without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informaltable" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informaltable { + db.html.informaltable.attlist, db.html.informaltable.model + } +} +div { + db.html.caption.attlist = db.html.attrs + db.html.caption = + + ## An HTML table caption + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:sidebar)" + "sidebar must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:task)" + "task must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caption" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caption" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caption" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caption { db.html.caption.attlist, db.all.inlines* } +} +div { + db.html.col.attlist = + db.html.attrs + & + ## This attribute, whose value must be an integer > 0, specifies the number of columns spanned + ## by the col + ## element; the col + ## element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + ## element shares its attributes with the next N-1 columns. + attribute span { xsd:nonNegativeInteger }? + & + ## Specifies a default width for each column spanned by the current col + ## element. It has the same meaning as the width + ## attribute for the colgroup + ## element and overrides it. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.col = + + ## Specifications for a column in an HTML table + element col { db.html.col.attlist, empty } +} +div { + db.html.colgroup.attlist = + db.html.attrs + & + ## This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + ## defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + ## element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + ## element contains one or more col + ## elements. + attribute span { xsd:nonNegativeInteger }? + & + ## This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + ## (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + ## will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + ## element. + attribute width { text }? + & db.html.cellhalign + & db.html.cellvalign + db.html.colgroup = + + ## A group of columns in an HTML table + element colgroup { db.html.colgroup.attlist, db.html.col* } +} +div { + db.html.thead.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.thead = + + ## A table header consisting of one or more rows in an HTML table + element thead { db.html.thead.attlist, db.html.tr+ } +} +div { + db.html.tfoot.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tfoot = + + ## A table footer consisting of one or more rows in an HTML table + element tfoot { db.html.tfoot.attlist, db.html.tr+ } +} +div { + db.html.tbody.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tbody = + + ## A wrapper for the rows of an HTML table or informal HTML table + element tbody { db.html.tbody.attlist, db.html.tr+ } +} +div { + db.html.tr.attlist = + db.html.attrs & db.html.cellhalign & db.html.cellvalign + db.html.tr = + + ## A row in an HTML table + element tr { db.html.tr.attlist, (db.html.th | db.html.td)+ } +} +div { + db.html.th.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.th = + + ## A table header entry in an HTML table + element th { + db.html.th.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.html.td.attlist = + db.html.attrs + & db.html.tablecell.attributes + & db.html.cellhalign + & db.html.cellvalign + db.html.td = + + ## A table entry in an HTML table + element td { + db.html.td.attlist, (db.all.inlines* | db.all.blocks*) + } +} +div { + db.msgset.role.attribute = attribute role { text } + db.msgset.attlist = + db.msgset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgset.info = db._info.title.only + db.msgset = + + ## A detailed set of messages, usually error messages + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgset { + db.msgset.attlist, + db.msgset.info, + (db.msgentry+ | db.simplemsgentry+) + } +} +div { + db.msgentry.role.attribute = attribute role { text } + db.msgentry.attlist = + db.msgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgentry = + + ## A wrapper for an entry in a message set + element msgentry { + db.msgentry.attlist, db.msg+, db.msginfo?, db.msgexplan* + } +} +div { + db.simplemsgentry.role.attribute = attribute role { text } + db.simplemsgentry.msgaud.attribute = + + ## The audience to which the message relevant + attribute msgaud { text } + db.simplemsgentry.msgorig.attribute = + + ## The origin of the message + attribute msgorig { text } + db.simplemsgentry.msglevel.attribute = + + ## The level of importance or severity of a message + attribute msglevel { text } + db.simplemsgentry.attlist = + db.simplemsgentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.simplemsgentry.msgaud.attribute? + & db.simplemsgentry.msgorig.attribute? + & db.simplemsgentry.msglevel.attribute? + db.simplemsgentry = + + ## A wrapper for a simpler entry in a message set + element simplemsgentry { + db.simplemsgentry.attlist, db.msgtext, db.msgexplan+ + } +} +div { + db.msg.role.attribute = attribute role { text } + db.msg.attlist = + db.msg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msg.info = db._info.title.only + db.msg = + + ## A message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msg" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msg { + db.msg.attlist, db.msg.info, db.msgmain, (db.msgsub | db.msgrel)* + } +} +div { + db.msgmain.role.attribute = attribute role { text } + db.msgmain.attlist = + db.msgmain.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgmain.info = db._info.title.only + db.msgmain = + + ## The primary component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgmain" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgmain { db.msgmain.attlist, db.msgmain.info, db.msgtext } +} +div { + db.msgsub.role.attribute = attribute role { text } + db.msgsub.attlist = + db.msgsub.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgsub.info = db._info.title.only + db.msgsub = + + ## A subcomponent of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgsub" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgsub { db.msgsub.attlist, db.msgsub.info, db.msgtext } +} +div { + db.msgrel.role.attribute = attribute role { text } + db.msgrel.attlist = + db.msgrel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgrel.info = db._info.title.only + db.msgrel = + + ## A related component of a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgrel" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgrel { db.msgrel.attlist, db.msgrel.info, db.msgtext } +} +div { + db.msgtext.role.attribute = attribute role { text } + db.msgtext.attlist = + db.msgtext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgtext = + + ## The actual text of a message component in a message set + element msgtext { db.msgtext.attlist, db.all.blocks+ } +} +div { + db.msginfo.role.attribute = attribute role { text } + db.msginfo.attlist = + db.msginfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msginfo = + + ## Information about a message in a message set + element msginfo { + db.msginfo.attlist, (db.msglevel | db.msgorig | db.msgaud)* + } +} +div { + db.msglevel.role.attribute = attribute role { text } + db.msglevel.attlist = + db.msglevel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msglevel = + + ## The level of importance or severity of a message in a message set + element msglevel { db.msglevel.attlist, db._text } +} +div { + db.msgorig.role.attribute = attribute role { text } + db.msgorig.attlist = + db.msgorig.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgorig = + + ## The origin of a message in a message set + element msgorig { db.msgorig.attlist, db._text } +} +div { + db.msgaud.role.attribute = attribute role { text } + db.msgaud.attlist = + db.msgaud.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgaud = + + ## The audience to which a message in a message set is relevant + element msgaud { db.msgaud.attlist, db._text } +} +div { + db.msgexplan.role.attribute = attribute role { text } + db.msgexplan.attlist = + db.msgexplan.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.msgexplan.info = db._info.title.only + db.msgexplan = + + ## Explanatory material relating to a message in a message set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:msgexplan" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element msgexplan { + db.msgexplan.attlist, db.msgexplan.info, db.all.blocks+ + } +} +div { + db.qandaset.role.attribute = attribute role { text } + db.qandaset.defaultlabel.enumeration = + + ## No labels + "none" + | + ## Numeric labels + "number" + | + ## "Q:" and "A:" labels + "qanda" + db.qandaset.defaultlabel.attribute = + + ## Specifies the default labelling + attribute defaultlabel { db.qandaset.defaultlabel.enumeration } + db.qandaset.attlist = + db.qandaset.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.qandaset.defaultlabel.attribute? + db.qandaset.info = db._info.title.only + db.qandaset = + + ## A question-and-answer set + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaset" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaset { + db.qandaset.attlist, + db.qandaset.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandadiv.role.attribute = attribute role { text } + db.qandadiv.attlist = + db.qandadiv.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandadiv.info = db._info.title.only + db.qandadiv = + + ## A titled division in a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandadiv" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandadiv { + db.qandadiv.attlist, + db.qandadiv.info, + db.all.blocks*, + (db.qandadiv+ | db.qandaentry+) + } +} +div { + db.qandaentry.role.attribute = attribute role { text } + db.qandaentry.attlist = + db.qandaentry.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.qandaentry.info = db._info.title.only + db.qandaentry = + + ## A question/answer set within a qandaset + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:qandaentry" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element qandaentry { + db.qandaentry.attlist, db.qandaentry.info, db.question, db.answer* + } +} +div { + db.question.role.attribute = attribute role { text } + db.question.attlist = + db.question.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.question = + + ## A question in a qandaset + element question { db.question.attlist, db.label?, db.all.blocks+ } +} +div { + db.answer.role.attribute = attribute role { text } + db.answer.attlist = + db.answer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.answer = + + ## An answer to a question posed in a qandaset + element answer { db.answer.attlist, db.label?, db.all.blocks+ } +} +div { + db.label.role.attribute = attribute role { text } + db.label.attlist = + db.label.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.label = + + ## A label on a question or answer + element label { db.label.attlist, db._text } +} +db.math.inlines = db.inlineequation +db.equation.content = + (db.mediaobject+ | db.mathphrase+) | db._any.mml+ | db.xi.include+ +db.inlineequation.content = + (db.inlinemediaobject+ | db.mathphrase+) + | db._any.mml+ + | db.xi.include+ +div { + db.equation.role.attribute = attribute role { text } + db.equation.label.attribute = db.label.attribute + db.equation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.equation.attlist = + db.equation.role.attribute? + & db.equation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.equation.label.attribute? + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.equation.info = db._info.title.only + db.equation = + + ## A displayed mathematical equation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:example)" + "example must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:figure)" + "figure must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:table)" + "table must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:equation" + s:assert [ + test = "not(.//db:equation)" + "equation must not occur among the children or descendants of equation" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:equation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element equation { + db.equation.attlist, + db.equation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.informalequation.role.attribute = attribute role { text } + db.informalequation.type.attribute = + + ## Identifies the type of equation + attribute type { text }? + db.informalequation.attlist = + db.informalequation.role.attribute? + & db.informalequation.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.pgwide.attribute? + & db.floatstyle.attribute? + db.informalequation.info = db._info.title.forbidden + db.informalequation = + + ## A displayed mathematical equation without a title + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:informalequation" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element informalequation { + db.informalequation.attlist, + db.informalequation.info, + db.alt?, + db.equation.content, + db.caption? + } +} +div { + db.inlineequation.role.attribute = attribute role { text } + db.inlineequation.attlist = + db.inlineequation.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.inlineequation = + + ## A mathematical equation or expression occurring inline + element inlineequation { + db.inlineequation.attlist, db.alt?, db.inlineequation.content + } +} +div { + db.mathphrase.role.attribute = attribute role { text } + db.mathphrase.attlist = + db.mathphrase.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mathphrase = + + ## A mathematical phrase that can be represented with ordinary text and a small amount of markup + element mathphrase { + db.mathphrase.attlist, + (db._text | db.ubiq.inlines | db._emphasis)* + } +} +db.imagedata.mathml.content = db._any.mml | db.xi.include +div { + db.imagedata.mathml.role.attribute = attribute role { text } + db.imagedata.mathml.attlist = + db.imagedata.mathml.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is MathML + attribute format { + + ## Specifies MathML. + "mathml" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.mathml.info = db._info.title.forbidden + db.imagedata.mathml = + + ## A MathML expression in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.mathml.attlist, + db.imagedata.mathml.info, + db.imagedata.mathml.content+ + } +} +div { + db._any.mml = + + ## Any element from the MathML namespace + element mml:* { (db._any.attribute | text | db._any)* } +} +db.imagedata.svg.content = db._any.svg | db.xi.include +div { + db.imagedata.svg.role.attribute = attribute role { text } + db.imagedata.svg.attlist = + db.imagedata.svg.role.attribute? + & db.common.attributes + & + ## Specifies that the format of the data is SVG + attribute format { + + ## Specifies SVG. + "svg" + }? + & db.imagedata.align.attribute? + & db.imagedata.valign.attribute? + & db.imagedata.width.attribute? + & db.imagedata.contentwidth.attribute? + & db.imagedata.scalefit.attribute? + & db.imagedata.scale.attribute? + & db.imagedata.depth.attribute? + & db.imagedata.contentdepth.attribute? + db.imagedata.svg.info = db._info.title.forbidden + db.imagedata.svg = + + ## An SVG drawing in a media object + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:imagedata" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element imagedata { + db.imagedata.svg.attlist, + db.imagedata.svg.info, + db.imagedata.svg.content+ + } +} +div { + db._any.svg = + + ## Any element from the SVG namespace + element svg:* { (db._any.attribute | text | db._any)* } +} +db.markup.inlines = + db.tag + | db.markup + | db.token + | db.symbol + | db.literal + | db.code + | db.constant + | db.email + | db.uri +div { + db.markup.role.attribute = attribute role { text } + db.markup.attlist = + db.markup.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.markup = + + ## A string of formatting markup in text that is to be represented literally + element markup { db.markup.attlist, db._text } +} +div { + db.tag.role.attribute = attribute role { text } + db.tag.class.enumeration = + + ## An attribute + "attribute" + | + ## An attribute value + "attvalue" + | + ## An element + "element" + | + ## An empty element tag + "emptytag" + | + ## An end tag + "endtag" + | + ## A general entity + "genentity" + | + ## The local name part of a qualified name + "localname" + | + ## A namespace + "namespace" + | + ## A numeric character reference + "numcharref" + | + ## A parameter entity + "paramentity" + | + ## A processing instruction + "pi" + | + ## The prefix part of a qualified name + "prefix" + | + ## An SGML comment + "comment" + | + ## A start tag + "starttag" + | + ## An XML processing instruction + "xmlpi" + db.tag.class.attribute = + + ## Identifies the nature of the tag content + attribute class { db.tag.class.enumeration } + db.tag.namespace.attribute = + + ## Identifies the namespace of the tag content + attribute namespace { xsd:anyURI } + db.tag.attlist = + db.tag.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.tag.class.attribute? + & db.tag.namespace.attribute? + db.tag = + + ## A component of XML (or SGML) markup + element tag { db.tag.attlist, (db._text | db.tag)* } +} +div { + db.symbol.class.attribute = + + ## Identifies the class of symbol + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.symbol.role.attribute = attribute role { text } + db.symbol.attlist = + db.symbol.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.symbol.class.attribute? + db.symbol = + + ## A name that is replaced by a value before processing + element symbol { db.symbol.attlist, db._text } +} +div { + db.token.role.attribute = attribute role { text } + db.token.attlist = + db.token.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.token = + + ## A unit of information + element token { db.token.attlist, db._text } +} +div { + db.literal.role.attribute = attribute role { text } + db.literal.attlist = + db.literal.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.literal = + + ## Inline text that is some literal value + element literal { db.literal.attlist, db._text } +} +div { + code.language.attribute = + + ## Identifies the (computer) language of the code fragment + attribute language { text } + db.code.role.attribute = attribute role { text } + db.code.attlist = + db.code.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & code.language.attribute? + db.code = + + ## An inline code fragment + element code { + db.code.attlist, (db.programming.inlines | db._text)* + } +} +div { + db.constant.class.attribute = + + ## Identifies the class of constant + attribute class { + + ## The value is a limit of some kind + "limit" + } + db.constant.role.attribute = attribute role { text } + db.constant.attlist = + db.constant.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.constant.class.attribute? + db.constant = + + ## A programming or system constant + element constant { db.constant.attlist, db._text } +} +div { + db.productname.role.attribute = attribute role { text } + db.productname.class.enumeration = + + ## A name with a copyright + "copyright" + | + ## A name with a registered copyright + "registered" + | + ## A name of a service + "service" + | + ## A name which is trademarked + "trade" + db.productname.class.attribute = + + ## Specifies the class of product name + attribute class { db.productname.class.enumeration } + db.productname.attlist = + db.productname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.productname.class.attribute? + db.productname = + + ## The formal name of a product + element productname { db.productname.attlist, db._text } +} +div { + db.productnumber.role.attribute = attribute role { text } + db.productnumber.attlist = + db.productnumber.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.productnumber = + + ## A number assigned to a product + element productnumber { db.productnumber.attlist, db._text } +} +div { + db.database.class.enumeration = + + ## An alternate or secondary key + "altkey" + | + ## A constraint + "constraint" + | + ## A data type + "datatype" + | + ## A field + "field" + | + ## A foreign key + "foreignkey" + | + ## A group + "group" + | + ## An index + "index" + | + ## The first or primary key + "key1" + | + ## An alternate or secondary key + "key2" + | + ## A name + "name" + | + ## The primary key + "primarykey" + | + ## A (stored) procedure + "procedure" + | + ## A record + "record" + | + ## A rule + "rule" + | + ## The secondary key + "secondarykey" + | + ## A table + "table" + | + ## A user + "user" + | + ## A view + "view" + db.database.class.attribute = + + ## Identifies the class of database artifact + attribute class { db.database.class.enumeration } + db.database.role.attribute = attribute role { text } + db.database.attlist = + db.database.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.database.class.attribute? + db.database = + + ## The name of a database, or part of a database + element database { db.database.attlist, db._text } +} +div { + db.application.class.enumeration = + + ## A hardware application + "hardware" + | + ## A software application + "software" + db.application.class.attribute = + + ## Identifies the class of application + attribute class { db.application.class.enumeration } + db.application.role.attribute = attribute role { text } + db.application.attlist = + db.application.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.application.class.attribute? + db.application = + + ## The name of a software program + element application { db.application.attlist, db._text } +} +div { + db.hardware.role.attribute = attribute role { text } + db.hardware.attlist = + db.hardware.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.hardware = + + ## A physical part of a computer system + element hardware { db.hardware.attlist, db._text } +} +db.gui.inlines = + db.guiicon + | db.guibutton + | db.guimenuitem + | db.guimenu + | db.guisubmenu + | db.guilabel + | db.menuchoice + | db.mousebutton +div { + db.guibutton.role.attribute = attribute role { text } + db.guibutton.attlist = + db.guibutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guibutton = + + ## The text on a button in a GUI + element guibutton { + db.guibutton.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guiicon.role.attribute = attribute role { text } + db.guiicon.attlist = + db.guiicon.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guiicon = + + ## Graphic and/or text appearing as a icon in a GUI + element guiicon { + db.guiicon.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guilabel.role.attribute = attribute role { text } + db.guilabel.attlist = + db.guilabel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guilabel = + + ## The text of a label in a GUI + element guilabel { + db.guilabel.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenu.role.attribute = attribute role { text } + db.guimenu.attlist = + db.guimenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenu = + + ## The name of a menu in a GUI + element guimenu { + db.guimenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guimenuitem.role.attribute = attribute role { text } + db.guimenuitem.attlist = + db.guimenuitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guimenuitem = + + ## The name of a terminal menu item in a GUI + element guimenuitem { + db.guimenuitem.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.guisubmenu.role.attribute = attribute role { text } + db.guisubmenu.attlist = + db.guisubmenu.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.guisubmenu = + + ## The name of a submenu in a GUI + element guisubmenu { + db.guisubmenu.attlist, + (db._text | db.accel | db.superscript | db.subscript)* + } +} +div { + db.menuchoice.role.attribute = attribute role { text } + db.menuchoice.attlist = + db.menuchoice.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.menuchoice = + + ## A selection or series of selections from a menu + element menuchoice { + db.menuchoice.attlist, + db.shortcut?, + (db.guibutton + | db.guiicon + | db.guilabel + | db.guimenu + | db.guimenuitem + | db.guisubmenu)+ + } +} +div { + db.mousebutton.role.attribute = attribute role { text } + db.mousebutton.attlist = + db.mousebutton.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.mousebutton = + + ## The conventional name of a mouse button + element mousebutton { db.mousebutton.attlist, db._text } +} +db.keyboard.inlines = + db.keycombo + | db.keycap + | db.keycode + | db.keysym + | db.shortcut + | db.accel +div { + db.keycap.function.enumeration = + + ## The "Alt" key + "alt" + | + ## The "Alt Graph" key + "altgr" + | + ## The "Backspace" key + "backspace" + | + ## The "Command" key + "command" + | + ## The "Control" key + "control" + | + ## The "Delete" key + "delete" + | + ## The down arrow + "down" + | + ## The "End" key + "end" + | + ## The "Enter" key + "enter" + | + ## The "Escape" key + "escape" + | + ## The "Home" key + "home" + | + ## The "Insert" key + "insert" + | + ## The left arrow + "left" + | + ## The "Meta" key + "meta" + | + ## The "Option" key + "option" + | + ## The page down key + "pagedown" + | + ## The page up key + "pageup" + | + ## The right arrow + "right" + | + ## The "Return" key + "return" + | + ## The "Shift" key + "shift" + | + ## The spacebar + "space" + | + ## The "Tab" key + "tab" + | + ## The up arrow + "up" + db.keycap.function-enum.attribute = + + ## Identifies the function key + attribute function { db.keycap.function.enumeration }? + db.keycap.function-other.attributes = + + ## Identifies the function key + attribute function { + + ## Indicates a non-standard function key + "other" + }?, + + ## Specifies a keyword that identifies the non-standard key + attribute otherfunction { text } + db.keycap.function.attrib = + db.keycap.function-enum.attribute + | db.keycap.function-other.attributes + db.keycap.role.attribute = attribute role { text } + db.keycap.attlist = + db.keycap.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycap.function.attrib + db.keycap = + + ## The text printed on a key on a keyboard + element keycap { db.keycap.attlist, db._text } +} +div { + db.keycode.role.attribute = attribute role { text } + db.keycode.attlist = + db.keycode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keycode = + + ## The internal, frequently numeric, identifier for a key on a keyboard + element keycode { db.keycode.attlist, db._text } +} +db.keycombination.contentmodel = + (db.keycap | db.keycombo | db.keysym) | db.mousebutton +div { + db.keycombo.action.enumeration = + + ## A (single) mouse click. + "click" + | + ## A double mouse click. + "double-click" + | + ## A mouse or key press. + "press" + | + ## Sequential clicks or presses. + "seq" + | + ## Simultaneous clicks or presses. + "simul" + db.keycombo.action-enum.attribute = + + ## Identifies the nature of the action taken. If keycombo + ## contains more than one element, simul + ## is the default, otherwise there is no default. + attribute action { db.keycombo.action.enumeration }? + db.keycombo.action-other.attributes = + + ## Identifies the nature of the action taken + attribute action { + + ## Indicates a non-standard action + "other" + }?, + + ## Identifies the non-standard action in some unspecified way. + attribute otheraction { text } + db.keycombo.action.attrib = + db.keycombo.action-enum.attribute + | db.keycombo.action-other.attributes + db.keycombo.role.attribute = attribute role { text } + db.keycombo.attlist = + db.keycombo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.keycombo.action.attrib + db.keycombo = + + ## A combination of input actions + element keycombo { + db.keycombo.attlist, db.keycombination.contentmodel+ + } +} +div { + db.keysym.role.attribute = attribute role { text } + db.keysym.attlist = + db.keysym.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.keysym = + + ## The symbolic name of a key on a keyboard + element keysym { db.keysym.attlist, db._text } +} +div { + db.accel.role.attribute = attribute role { text } + db.accel.attlist = + db.accel.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.accel = + + ## A graphical user interface (GUI) keyboard shortcut + element accel { db.accel.attlist, db._text } +} +div { + db.shortcut.action.attrib = db.keycombo.action.attrib + db.shortcut.role.attribute = attribute role { text } + db.shortcut.attlist = + db.shortcut.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.shortcut.action.attrib + db.shortcut = + + ## A key combination for an action that is also accessible through a menu + element shortcut { + db.shortcut.attlist, db.keycombination.contentmodel+ + } +} +db.os.inlines = + db.prompt + | db.envar + | db.filename + | db.command + | db.computeroutput + | db.userinput +db.computeroutput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines +db.userinput.inlines = + (text | db.ubiq.inlines | db.os.inlines | db.technical.inlines) + | db.co + | db.markup.inlines + | db.gui.inlines + | db.keyboard.inlines +db.prompt.inlines = db._text | db.co +div { + db.prompt.role.attribute = attribute role { text } + db.prompt.attlist = + db.prompt.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.prompt = + + ## A character or string indicating the start of an input field in a computer display + element prompt { db.prompt.attlist, db.prompt.inlines* } +} +div { + db.envar.role.attribute = attribute role { text } + db.envar.attlist = + db.envar.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.envar = + + ## A software environment variable + element envar { db.envar.attlist, db._text } +} +div { + db.filename.class.enumeration = + + ## A device + "devicefile" + | + ## A directory + "directory" + | + ## A filename extension + "extension" + | + ## A header file (as for a programming language) + "headerfile" + | + ## A library file + "libraryfile" + | + ## A partition (as of a hard disk) + "partition" + | + ## A symbolic link + "symlink" + db.filename.class.attribute = + + ## Identifies the class of filename + attribute class { db.filename.class.enumeration } + db.filename.path.attribute = + + ## Specifies the path of the filename + attribute path { text } + db.filename.role.attribute = attribute role { text } + db.filename.attlist = + db.filename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.filename.path.attribute? + & db.filename.class.attribute? + db.filename = + + ## The name of a file + element filename { db.filename.attlist, db._text } +} +div { + db.command.role.attribute = attribute role { text } + db.command.attlist = + db.command.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.command = + + ## The name of an executable program or other software command + element command { db.command.attlist, db._text } +} +div { + db.computeroutput.role.attribute = attribute role { text } + db.computeroutput.attlist = + db.computeroutput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.computeroutput = + + ## Data, generally text, displayed or presented by a computer + element computeroutput { + db.computeroutput.attlist, db.computeroutput.inlines* + } +} +div { + db.userinput.role.attribute = attribute role { text } + db.userinput.attlist = + db.userinput.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.userinput = + + ## Data entered by the user + element userinput { db.userinput.attlist, db.userinput.inlines* } +} +div { + db.cmdsynopsis.role.attribute = attribute role { text } + db.cmdsynopsis.sepchar.attribute = + + ## Specifies the character that should separate the command and its top-level arguments + attribute sepchar { text } + db.cmdsynopsis.cmdlength.attribute = + + ## Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + attribute cmdlength { text } + db.cmdsynopsis.label.attribute = db.label.attribute + db.cmdsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.cmdsynopsis.attlist = + db.cmdsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.cmdsynopsis.sepchar.attribute? + & db.cmdsynopsis.cmdlength.attribute? + & db.cmdsynopsis.label.attribute? + & db.cmdsynopsis.packageref.attribute? + db.cmdsynopsis.info = db._info.title.forbidden + db.cmdsynopsis = + + ## A syntax summary for a software command + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:cmdsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element cmdsynopsis { + db.cmdsynopsis.attlist, + db.cmdsynopsis.info, + (db.command | db.arg | db.group | db.sbr)+, + db.synopfragment* + } +} +db.rep.enumeration = + + ## Can not be repeated. + "norepeat" + | + ## Can be repeated. + "repeat" +db.rep.attribute = + + ## Indicates whether or not repetition is possible. + [ a:defaultValue = "norepeat" ] attribute rep { db.rep.enumeration } +db.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted without indication. + "plain" + | + ## Formatted to indicate that it is required. + "req" +db.choice.opt.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] attribute choice { db.choice.enumeration } +db.choice.req.attribute = + + ## Indicates optionality. + [ a:defaultValue = "req" ] attribute choice { db.choice.enumeration } +div { + db.arg.role.attribute = attribute role { text } + db.arg.rep.attribute = db.rep.attribute + db.arg.choice.attribute = db.choice.opt.attribute + db.arg.attlist = + db.arg.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.arg.rep.attribute? + & db.arg.choice.attribute? + db.arg = + + ## An argument in a cmdsynopsis + element arg { + db.arg.attlist, + (db._text + | db.arg + | db.group + | db.option + | db.synopfragmentref + | db.sbr)* + } +} +div { + db.group.role.attribute = attribute role { text } + db.group.rep.attribute = db.rep.attribute + db.group.choice.attribute = db.choice.opt.attribute + db.group.attlist = + db.group.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.rep.attribute? + & db.group.choice.attribute? + db.group = + + ## A group of elements in a cmdsynopsis + element group { + db.group.attlist, + (db.arg + | db.group + | db.option + | db.synopfragmentref + | db.replaceable + | db.sbr)+ + } +} +div { + db.sbr.role.attribute = attribute role { text } + db.sbr.attlist = db.sbr.role.attribute? & db.common.attributes + db.sbr = + + ## An explicit line break in a command synopsis + element sbr { db.sbr.attlist, empty } +} +div { + db.synopfragment.role.attribute = attribute role { text } + db.synopfragment.attlist = + db.synopfragment.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.synopfragment = + + ## A portion of a cmdsynopsis broken out from the main body of the synopsis + element synopfragment { + db.synopfragment.attlist, (db.arg | db.group)+ + } +} +div { + db.synopfragmentref.role.attribute = attribute role { text } + db.synopfragmentref.attlist = + db.synopfragmentref.role.attribute? + & db.common.attributes + & db.linkend.attribute + db.synopfragmentref = + + ## A reference to a fragment of a command synopsis + [ + s:pattern [ + s:title [ "Synopsis fragment type constraint" ] + s:rule [ + context = "db:synopfragmentref" + s:assert [ + test = + "local-name(//*[@xml:id=current()/@linkend]) = 'synopfragment' and namespace-uri(//*[@xml:id=current()/@linkend]) = 'http://docbook.org/ns/docbook'" + "@linkend on synopfragmentref must point to a synopfragment." + ] + ] + ] + ] + element synopfragmentref { db.synopfragmentref.attlist, text } +} +db.programming.inlines = + db.function + | db.parameter + | db.varname + | db.returnvalue + | db.type + | db.classname + | db.exceptionname + | db.interfacename + | db.methodname + | db.modifier + | db.initializer + | db.buildtarget + | db.oo.inlines + | db.templatename + | db.macroname + | db.unionname + | db.enumname + | db.enumvalue + | db.enumidentifier + | db.typedefname +db.oo.inlines = db.ooclass | db.ooexception | db.oointerface +db.synopsis.blocks = + (db.funcsynopsis + | db.classsynopsis + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.enumsynopsis + | db.typedefsynopsis + | db.packagesynopsis + | db.macrosynopsis + | db.unionsynopsis) + | db.cmdsynopsis +div { + db.synopsis.role.attribute = attribute role { text } + db.synopsis.label.attribute = db.label.attribute + db.synopsis.attlist = + db.synopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.synopsis.label.attribute? + db.synopsis = + + ## A general-purpose element for representing the syntax of commands or functions + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:synopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element synopsis { db.synopsis.attlist, db.verbatim.contentmodel } +} +div { + db.synopsisinfo.role.attribute = attribute role { text } + db.synopsisinfo.attlist = + db.synopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.synopsisinfo = + + ## Information supplementing synopsis + element synopsisinfo { + db.synopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcsynopsis.info = db._info.title.forbidden + db.funcsynopsis.role.attribute = attribute role { text } + db.funcsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.funcsynopsis.attlist = + db.funcsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.funcsynopsis.packageref.attribute? + db.funcsynopsis = + + ## The syntax summary for a function definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsis { + db.funcsynopsis.attlist, + db.funcsynopsis.info, + (db.funcsynopsisinfo | db.funcprototype)+ + } +} +div { + db.funcsynopsisinfo.role.attribute = attribute role { text } + db.funcsynopsisinfo.attlist = + db.funcsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.funcsynopsisinfo = + + ## Information supplementing the funcdefs of a funcsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:funcsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element funcsynopsisinfo { + db.funcsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.funcprototype.role.attribute = attribute role { text } + db.funcprototype.attlist = + db.funcprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcprototype = + + ## The prototype of a function + element funcprototype { + db.funcprototype.attlist, + db.modifier*, + db.funcdef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.funcdef.role.attribute = attribute role { text } + db.funcdef.attlist = + db.funcdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcdef = + + ## A function (subroutine) name and its return type + element funcdef { + db.funcdef.attlist, + (db._text | db.type | db.templatename | db.void | db.function)* + } +} +div { + db.function.role.attribute = attribute role { text } + db.function.attlist = + db.function.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.function = + + ## The name of a function or subroutine, as in a programming language + element function { db.function.attlist, db._text } +} +div { + db.void.role.attribute = attribute role { text } + db.void.attlist = + db.void.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.void = + + ## An empty element in a function synopsis indicating that the function in question takes no arguments + element void { db.void.attlist, empty } +} +div { + db.varargs.role.attribute = attribute role { text } + db.varargs.attlist = + db.varargs.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varargs = + + ## An empty element in a function synopsis indicating a variable number of arguments + element varargs { db.varargs.attlist, empty } +} +div { + db.group.paramdef.role.attribute = attribute role { text } + db.group.paramdef.choice.attribute = db.choice.opt.attribute + db.group.paramdef.attlist = + db.group.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.paramdef.choice.attribute? + db.group.paramdef = + + ## A group of parameters + element group { + db.group.paramdef.attlist, (db.paramdef | db.group.paramdef)+ + } +} +div { + db.paramdef.role.attribute = attribute role { text } + db.paramdef.choice.enumeration = + + ## Formatted to indicate that it is optional. + "opt" + | + ## Formatted to indicate that it is required. + "req" + db.paramdef.choice.attribute = + + ## Indicates optionality. + [ a:defaultValue = "opt" ] + attribute choice { db.paramdef.choice.enumeration } + db.paramdef.attlist = + db.paramdef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.paramdef.choice.attribute? + db.paramdef = + + ## Information about a function parameter in a programming language + element paramdef { + db.paramdef.attlist, + (db._text + | db.initializer + | db.modifier + | db.type + | db.templatename + | db.parameter + | db.funcparams)* + } +} +div { + db.funcparams.role.attribute = attribute role { text } + db.funcparams.attlist = + db.funcparams.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.funcparams = + + ## Parameters for a function referenced through a function pointer in a synopsis + element funcparams { db.funcparams.attlist, db._text } +} +div { + db.classsynopsis.info = db._info.title.forbidden + db.classsynopsis.role.attribute = attribute role { text } + db.classsynopsis.class.enumeration = + + ## This is the synopsis of a class + "class" + | + ## This is the synopsis of an interface + "interface" + db.classsynopsis.class.attribute = + + ## Specifies the nature of the synopsis + attribute class { db.classsynopsis.class.enumeration } + db.classsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.classsynopsis.attlist = + db.classsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.classsynopsis.class.attribute? + & db.classsynopsis.packageref.attribute? + db.classsynopsis = + + ## The syntax summary for a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsis { + db.classsynopsis.attlist, + db.classsynopsis.info, + db.classsynopsisinfo*, + db.templatename*, + db.oo.inlines, + (db.template + | db.ooexception + | db.methodsynopsis + | db.constructorsynopsis + | db.destructorsynopsis + | db.fieldsynopsis + | db.classsynopsisinfo)* + } +} +div { + db.classsynopsisinfo.role.attribute = attribute role { text } + db.classsynopsisinfo.attlist = + db.classsynopsisinfo.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + db.classsynopsisinfo = + + ## Information supplementing the contents of a classsynopsis + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:classsynopsisinfo" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element classsynopsisinfo { + db.classsynopsisinfo.attlist, db.verbatim.contentmodel + } +} +div { + db.ooclass.role.attribute = attribute role { text } + db.ooclass.attlist = + db.ooclass.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooclass = + + ## A class in an object-oriented programming language + element ooclass { + db.ooclass.attlist, + (db.package | db.modifier)*, + db.classname, + db.modifier* + } +} +div { + db.oointerface.role.attribute = attribute role { text } + db.oointerface.attlist = + db.oointerface.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.oointerface = + + ## An interface in an object-oriented programming language + element oointerface { + db.oointerface.attlist, + (db.package | db.modifier)*, + db.interfacename, + db.modifier* + } +} +div { + db.ooexception.role.attribute = attribute role { text } + db.ooexception.attlist = + db.ooexception.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.ooexception = + + ## An exception in an object-oriented programming language + element ooexception { + db.ooexception.attlist, + (db.package | db.modifier)*, + db.exceptionname, + db.modifier* + } +} +db.modifier.xml.space.attribute = + + ## Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + attribute xml:space { + + ## Extra whitespace and line breaks must be preserved. + [ + # Ideally the definition of xml:space used on modifier would be + # different from the definition used on the verbatim elements. The + # verbatim elements forbid the use of xml:space="default" which + # wouldn't be a problem on modifier. But doing that causes the + # generated XSD schemas to be broken so I'm just reusing the existing + # definition for now. It won't be backwards incompatible to fix this + # problem in the future. + # | ## Extra whitespace and line breaks are not preserved. + # "default" + + ] + "preserve" + } +div { + db.modifier.role.attribute = attribute role { text } + db.modifier.attlist = + db.modifier.xml.space.attribute? + & db.modifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.modifier = + + ## Modifiers in a synopsis + element modifier { db.modifier.attlist, db._text } +} +div { + db.interfacename.role.attribute = attribute role { text } + db.interfacename.attlist = + db.interfacename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.interfacename = + + ## The name of an interface + element interfacename { db.interfacename.attlist, db._text } +} +div { + db.exceptionname.role.attribute = attribute role { text } + db.exceptionname.attlist = + db.exceptionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.exceptionname = + + ## The name of an exception + element exceptionname { db.exceptionname.attlist, db._text } +} +div { + db.fieldsynopsis.info = db._info.title.forbidden + db.fieldsynopsis.role.attribute = attribute role { text } + db.fieldsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.fieldsynopsis.attlist = + db.fieldsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.fieldsynopsis.packageref.attribute? + db.fieldsynopsis = + + ## The name of a field in a class definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:fieldsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element fieldsynopsis { + db.fieldsynopsis.attlist, + db.fieldsynopsis.info, + db.synopsisinfo*, + db.modifier*, + (db.type | db.templatename)*, + db.varname, + db.modifier*, + db.initializer?, + db.synopsisinfo* + } +} +div { + db.initializer.role.attribute = attribute role { text } + db.initializer.attlist = + db.initializer.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.initializer.inlines = db._text | db.mathphrase | db.markup.inlines + db.initializer = + + ## The initializer for a fieldsynopsis + element initializer { + db.initializer.attlist, db.initializer.inlines* + } +} +div { + db.constructorsynopsis.info = db._info.title.forbidden + db.constructorsynopsis.role.attribute = attribute role { text } + db.constructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.constructorsynopsis.attlist = + db.constructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.constructorsynopsis.packageref.attribute? + db.constructorsynopsis = + + ## A syntax summary for a constructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:constructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element constructorsynopsis { + db.constructorsynopsis.attlist, + db.constructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.destructorsynopsis.info = db._info.title.forbidden + db.destructorsynopsis.role.attribute = attribute role { text } + db.destructorsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.destructorsynopsis.attlist = + db.destructorsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.destructorsynopsis.packageref.attribute? + db.destructorsynopsis = + + ## A syntax summary for a destructor + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:destructorsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element destructorsynopsis { + db.destructorsynopsis.attlist, + db.destructorsynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.methodname?, + ((db.methodparam | db.group.methodparam)+ | db.void?), + db.modifier*, + db.exceptionname*, + db.synopsisinfo* + } +} +div { + db.methodsynopsis.info = db._info.title.forbidden + db.methodsynopsis.role.attribute = attribute role { text } + db.methodsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.methodsynopsis.attlist = + db.methodsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.methodsynopsis.packageref.attribute? + db.methodsynopsis = + + ## A syntax summary for a method + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:methodsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element methodsynopsis { + db.methodsynopsis.attlist, + db.methodsynopsis.info, + db.synopsisinfo*, + (db.templatename | db.modifier)*, + (db.type | db.void)?, + db.methodname, + db.templatename*, + ((db.methodparam | db.group.methodparam)+ | db.void), + (db.exceptionname | db.modifier | db.templatename)*, + db.synopsisinfo* + } +} +div { + db.methodname.role.attribute = attribute role { text } + db.methodname.attlist = + db.methodname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.methodname = + + ## The name of a method + element methodname { db.methodname.attlist, db._text } +} +div { + db.methodparam.role.attribute = attribute role { text } + db.methodparam.rep.attribute = db.rep.attribute + db.methodparam.choice.attribute = db.choice.req.attribute + db.methodparam.attlist = + db.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.methodparam.rep.attribute? + & db.methodparam.choice.attribute? + db.methodparam = + + ## Parameters to a method + element methodparam { + db.methodparam.attlist, + (db.modifier | db.type | db.templatename)*, + ((db.parameter, db.initializer?) | db.funcparams), + db.modifier* + } +} +div { + db.group.methodparam.role.attribute = attribute role { text } + db.group.methodparam.choice.attribute = db.choice.opt.attribute + db.group.methodparam.attlist = + db.group.methodparam.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.group.methodparam.choice.attribute? + db.group.methodparam = + + ## A group of method parameters + element group { + db.group.methodparam.attlist, + (db.methodparam | db.group.methodparam)+ + } +} +div { + db.varname.role.attribute = attribute role { text } + db.varname.attlist = + db.varname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.varname = + + ## The name of a variable + element varname { db.varname.attlist, db._text } +} +div { + db.buildtarget.role.attribute = attribute role { text } + db.buildtarget.attlist = + db.buildtarget.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.buildtarget = + + ## Target of a build + element buildtarget { db.buildtarget.attlist, db._text } +} +div { + db.returnvalue.role.attribute = attribute role { text } + db.returnvalue.attlist = + db.returnvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.returnvalue = + + ## The value returned by a function + element returnvalue { db.returnvalue.attlist, db._text } +} +div { + db.type.role.attribute = attribute role { text } + db.type.class.enumeration = + + ## Combined type is union of nested types + "union" + | + ## Combined type is intersection of nested types + "intersection" + db.type.class.attribute = + + ## Specifies the way how are nested types combined together + attribute class { db.type.class.enumeration } + db.type.attlist = + db.type.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.type.class.attribute? + db.type = + + ## The classification of a value + element type { + db.type.attlist, (db._text | db.programming.inlines)* + } +} +div { + db.classname.role.attribute = attribute role { text } + db.classname.attlist = + db.classname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.classname = + + ## The name of a class, in the object-oriented programming sense + element classname { db.classname.attlist, db._text } +} +div { + db.templatename.role.attribute = attribute role { text } + db.templatename.attlist = + db.templatename.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.templatename = + + ## The identifier for a template, in the generic programming sense + element templatename { db.templatename.attlist, db._text } +} +div { + db.template.role.attribute = attribute role { text } + db.template.attlist = + db.template.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.template = + + ## The definition of a template, in the generic programming sense + element template { + db.template.attlist, + (((db.modifier | db.type | db._text)*, + db.templatename, + (db.modifier | db.type | db._text)*) + | db.specializedtemplate) + } +} +div { + db.specializedtemplate.role.attribute = attribute role { text } + db.specializedtemplate.attlist = + db.specializedtemplate.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.specializedtemplate = + + ## The specialization of a template identifier, in the generic programming sense + element specializedtemplate { + db.specializedtemplate.attlist, + (db.modifier | db.type | db._text)* + } +} +div { + db.packagesynopsis.info = db._info.title.forbidden + db.packagesynopsis.role.attribute = attribute role { text } + db.packagesynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.packagesynopsis.attlist = + db.packagesynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.packagesynopsis.packageref.attribute? + db.packagesynopsis = + + ## The syntax summary for a package definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:packagesynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element packagesynopsis { + db.packagesynopsis.attlist, + db.packagesynopsis.info, + db.synopsisinfo*, + db.modifier*, + db.package, + db.modifier*, + (db.synopsis.blocks | db.synopsisinfo)* + } +} +div { + db.macroname.role.attribute = attribute role { text } + db.macroname.attlist = + db.macroname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroname = + + ## The name of a macro (a code-generating function) + element macroname { db.macroname.attlist, db._text } +} +div { + db.macrosynopsis.info = db._info.title.forbidden + db.macrosynopsis.role.attribute = attribute role { text } + db.macrosynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.macrosynopsis.attlist = + db.macrosynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.macrosynopsis.packageref.attribute? + db.macrosynopsis = + + ## The syntax summary for a macro definition (code-generating function) + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:macrosynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element macrosynopsis { + db.macrosynopsis.attlist, + db.macrosynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.macroname, + (db.package | db.modifier)*, + db.macroprototype+, + db.synopsisinfo* + } +} +div { + db.macroprototype.role.attribute = attribute role { text } + db.macroprototype.attlist = + db.macroprototype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macroprototype = + + ## The prototype of a macro (code-generating function) + element macroprototype { + db.macroprototype.attlist, + db.modifier*, + db.macrodef, + (db.void + | db.varargs + | ((db.paramdef | db.group.paramdef)+, db.varargs?)), + db.modifier* + } +} +div { + db.macrodef.role.attribute = attribute role { text } + db.macrodef.attlist = + db.macrodef.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.macrodef = + + ## A macro name and its return type + element macrodef { + db.macrodef.attlist, (db.type | db.templatename)*, db.macroname + } +} +div { + db.unionname.role.attribute = attribute role { text } + db.unionname.attlist = + db.unionname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.unionname = + + ## The name of a union of types + element unionname { db.unionname.attlist, db._text } +} +div { + db.union.role.attribute = attribute role { text } + db.union.attlist = + db.union.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.union = + + ## The definition of a union of types, which may be more than a name + element union { db.union.attlist, db.type+ } +} +div { + db.unionsynopsis.info = db._info.title.forbidden + db.unionsynopsis.role.attribute = attribute role { text } + # N.B. the enumeration is explicitly identical to the enumeration + # on enumsynopsis by default. + db.unionsynopsis.ordered.attribute = + + ## Indicates how the value of a union is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.unionsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.unionsynopsis.attlist = + db.unionsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.unionsynopsis.ordered.attribute? + & db.unionsynopsis.packageref.attribute? + db.unionsynopsis = + + ## The syntax summary for a union-of-types definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:unionsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element unionsynopsis { + db.unionsynopsis.attlist, + db.unionsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.unionname?, + db.union, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.enumname.role.attribute = attribute role { text } + db.enumname.attlist = + db.enumname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumname = + + ## The name of an enumeration + element enumname { db.enumname.attlist, db._text } +} +div { + db.enumvalue.role.attribute = attribute role { text } + db.enumvalue.attlist = + db.enumvalue.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumvalue = + + ## The value an enumerated type can take + element enumvalue { db.enumvalue.attlist, db._text } +} +div { + db.enumitemdescription.role.attribute = attribute role { text } + db.enumitemdescription.attlist = + db.enumitemdescription.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitemdescription = + + ## The description of a value an enumerated type can take + element enumitemdescription { + db.enumitemdescription.attlist, db.all.inlines* + } +} +div { + db.enumidentifier.role.attribute = attribute role { text } + db.enumidentifier.attlist = + db.enumidentifier.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumidentifier = + + ## The identifier of a value an enumerated type can take + element enumidentifier { db.enumidentifier.attlist, db._text } +} +div { + db.enumitem.role.attribute = attribute role { text } + db.enumitem.attlist = + db.enumitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.enumitem = + + ## A value an enumerated type can take and its description + element enumitem { + db.enumitem.attlist, + db.enumidentifier, + db.enumvalue*, + db.enumitemdescription? + } +} +div { + db.enumsynopsis.info = db._info.title.forbidden + db.enumsynopsis.role.attribute = attribute role { text } + db.enumsynopsis.ordered.enumeration = + + ## Value of enum is specified explicitly using enumvalue + "0" + | + ## Value of enum is inferred from its position + "1" + db.enumsynopsis.ordered.attribute = + + ## Indicates how the value of an enumeration is specified. + attribute ordered { db.enumsynopsis.ordered.enumeration } + db.enumsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.enumsynopsis.attlist = + db.enumsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.enumsynopsis.ordered.attribute? + & db.enumsynopsis.packageref.attribute? + db.enumsynopsis = + + ## The syntax summary for an enumerated-type definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:enumsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element enumsynopsis { + db.enumsynopsis.attlist, + db.enumsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + (db.enumname, db.modifier*)?, + db.enumitem+, + db.synopsisinfo* + } +} +div { + db.typedefname.role.attribute = attribute role { text } + db.typedefname.attlist = + db.typedefname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.typedefname = + + ## The name of a type alias + element typedefname { db.typedefname.attlist, db._text } +} +div { + db.typedefsynopsis.info = db._info.title.forbidden + db.typedefsynopsis.role.attribute = attribute role { text } + db.typedefsynopsis.packageref.attribute = + + ## Identifies the package to which this synopsis (logically) belongs + attribute packageref { text } + db.typedefsynopsis.attlist = + db.typedefsynopsis.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.language.attribute? + & db.typedefsynopsis.packageref.attribute? + db.typedefsynopsis = + + ## The syntax summary for a type-alias definition + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:typedefsynopsis" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element typedefsynopsis { + db.typedefsynopsis.attlist, + db.typedefsynopsis.info, + db.synopsisinfo*, + (db.package | db.modifier)*, + db.typedefname, + (db.package | db.modifier)*, + db.synopsisinfo* + } +} +div { + db.programlisting.role.attribute = attribute role { text } + db.programlisting.width.attribute = db.width.characters.attribute + db.programlisting.attlist = + db.programlisting.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.verbatim.attributes + & db.programlisting.width.attribute? + db.programlisting = + + ## A literal listing of all or part of a program + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:programlisting" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element programlisting { + db.programlisting.attlist, db.verbatim.contentmodel + } +} +db.admonition.blocks = + db.caution | db.danger | db.important | db.note | db.tip | db.warning +db.admonition.contentmodel = db._info.title.only, db.all.blocks+ +div { + db.caution.role.attribute = attribute role { text } + db.caution.attlist = + db.caution.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.caution = + + ## A note of caution + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:caution" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of caution" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:caution" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element caution { db.caution.attlist, db.admonition.contentmodel } +} +div { + db.danger.role.attribute = attribute role { text } + db.danger.attlist = + db.danger.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.danger = + + ## An admonition set off from the text indicating hazardous situation + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:danger" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of danger" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:danger" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element danger { db.danger.attlist, db.admonition.contentmodel } +} +div { + db.important.role.attribute = attribute role { text } + db.important.attlist = + db.important.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.important = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:important" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of important" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:important" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element important { + db.important.attlist, db.admonition.contentmodel + } +} +div { + db.note.role.attribute = attribute role { text } + db.note.attlist = + db.note.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.note = + + ## A message set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:note" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of note" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:note" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element note { db.note.attlist, db.admonition.contentmodel } +} +div { + db.tip.role.attribute = attribute role { text } + db.tip.attlist = + db.tip.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.tip = + + ## A suggestion to the user, set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:tip" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of tip" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:tip" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element tip { db.tip.attlist, db.admonition.contentmodel } +} +div { + db.warning.role.attribute = attribute role { text } + db.warning.attlist = + db.warning.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.warning = + + ## An admonition set off from the text + [ + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:caution)" + "caution must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:danger)" + "danger must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:important)" + "important must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:note)" + "note must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:tip)" + "tip must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Element exclusion" ] + s:rule [ + context = "db:warning" + s:assert [ + test = "not(.//db:warning)" + "warning must not occur among the children or descendants of warning" + ] + ] + ] + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:warning" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element warning { db.warning.attlist, db.admonition.contentmodel } +} +db.error.inlines = + db.errorcode | db.errortext | db.errorname | db.errortype +div { + db.errorcode.role.attribute = attribute role { text } + db.errorcode.attlist = + db.errorcode.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorcode = + + ## An error code + element errorcode { db.errorcode.attlist, db._text } +} +div { + db.errorname.role.attribute = attribute role { text } + db.errorname.attlist = + db.errorname.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errorname = + + ## An error name + element errorname { db.errorname.attlist, db._text } +} +div { + db.errortext.role.attribute = attribute role { text } + db.errortext.attlist = + db.errortext.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortext = + + ## An error message. + element errortext { db.errortext.attlist, db._text } +} +div { + db.errortype.role.attribute = attribute role { text } + db.errortype.attlist = + db.errortype.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.errortype = + + ## The classification of an error message + element errortype { db.errortype.attlist, db._text } +} +db.systemitem.inlines = db._text | db.co +div { + db.systemitem.class.enumeration = + + ## A daemon or other system process (syslogd) + "daemon" + | + ## A domain name (example.com) + "domainname" + | + ## An ethernet address (00:05:4E:49:FD:8E) + "etheraddress" + | + ## An event of some sort (SIGHUP) + "event" + | + ## An event handler of some sort (hangup) + "eventhandler" + | + ## A filesystem (ext3) + "filesystem" + | + ## A fully qualified domain name (my.example.com) + "fqdomainname" + | + ## A group name (wheel) + "groupname" + | + ## A network interface (eth0) + "interface" + | + ## An IP address (127.0.0.1) + "ipaddress" + | + ## A library (libncurses) + "library" + | + ## A macro + "macro" + | + ## A netmask (255.255.255.192) + "netmask" + | + ## A newsgroup (comp.text.xml) + "newsgroup" + | + ## An operating system name (Hurd) + "osname" + | + ## A process (gnome-cups-icon) + "process" + | + ## A protocol (ftp) + "protocol" + | + ## A resource + "resource" + | + ## A security context (a role, permission, or security token, for example) + "securitycontext" + | + ## A server (mail.example.com) + "server" + | + ## A service (ppp) + "service" + | + ## A system name (hephaistos) + "systemname" + | + ## A user name (ndw) + "username" + db.systemitem.class-enum.attribute = + + ## Identifies the nature of the system item + attribute class { db.systemitem.class.enumeration }? + db.systemitem.class-other.attribute = + + ## Identifies the nature of the non-standard system item + attribute otherclass { xsd:NMTOKEN } + db.systemitem.class-other.attributes = + + ## Identifies the kind of systemitemgraphic identifier + attribute class { + + ## Indicates that the system item is some 'other' kind. + "other" + } + & db.systemitem.class-other.attribute + db.systemitem.class.attribute = + db.systemitem.class-enum.attribute + | db.systemitem.class-other.attributes + db.systemitem.role.attribute = attribute role { text } + db.systemitem.attlist = + db.systemitem.role.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.systemitem.class.attribute? + db.systemitem = + + ## A system-related item or term + element systemitem { db.systemitem.attlist, db.systemitem.inlines* } +} +div { + db.option.role.attribute = attribute role { text } + db.option.attlist = + db.option.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.option = + + ## An option for a software command + element option { db.option.attlist, db._text } +} +div { + db.optional.role.attribute = attribute role { text } + db.optional.attlist = + db.optional.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.optional = + + ## Optional information + element optional { db.optional.attlist, (db._text | db.optional)* } +} +div { + db.property.role.attribute = attribute role { text } + db.property.attlist = + db.property.role.attribute? + & db.common.attributes + & db.common.linking.attributes + db.property = + + ## A unit of data associated with some part of a computer system + element property { db.property.attlist, db._text } +} +div { + db.topic.status.attribute = db.status.attribute + db.topic.role.attribute = attribute role { text } + db.topic.type.attribute = + + ## Identifies the topic type + attribute type { text } + db.topic.attlist = + db.topic.role.attribute? + & db.topic.type.attribute? + & db.common.attributes + & db.common.linking.attributes + & db.label.attribute? + & db.topic.status.attribute? + db.topic.info = db._info.title.req + db.topic = + + ## A modular unit of documentation not part of any particular narrative flow + [ + s:pattern [ + s:title [ "Root must have version" ] + s:rule [ + context = "/db:topic" + s:assert [ + test = "@version" + "If this element is the root element, it must have a version attribute." + ] + ] + ] + ] + element topic { + db.topic.attlist, + db.topic.info, + db.navigation.components*, + db.toplevel.blocks.or.sections, + db.navigation.components* + } +} +div { + db.any.other.attribute = attribute * - local:* { text } + db.xi.include.attlist = + attribute href { + xsd:anyURI { pattern = "[^#]+" } + }?, + [ a:defaultValue = "xml" ] attribute parse { "xml" | "text" }?, + attribute xpointer { text }?, + attribute fragid { text }?, + attribute set-xml-id { text }?, + attribute encoding { text }?, + attribute accept { text }?, + attribute accept-language { text }?, + db.any.other.attribute* + db.xi.include = + + ## An XInclude + element xi:include { db.xi.include.attlist, db.xi.fallback? } +} +div { + # The fallback element has no attributes + db.xi.fallback = + + ## An XInclude fallback + element xi:fallback { db.all.blocks+ | db.all.inlines+ | db._any* } +} diff --git a/catalog/docbook5.2/rng/docbookxi.rng b/catalog/docbook5.2/rng/docbookxi.rng new file mode 100755 index 0000000..c6b499e --- /dev/null +++ b/catalog/docbook5.2/rng/docbookxi.rng @@ -0,0 +1,18679 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Any attribute, including any attribute in any namespace + + + + + + Any attribute in any other explicit namespace + + + + + + + + + + + + + + Any element from almost any namespace + + + + + + + + + + + + + + +
+ + + Designates the computer or chip architecture to which the element applies + + + + + Designates the intended audience to which the element applies, for example, system administrators, programmers, or new users. + + + + + provides a standard place for application-specific effectivity + + + + + Indicates standards conformance characteristics of the element + + + + + Indicates the operating system to which the element is applicable + + + + + Indicates the editorial revision to which the element belongs + + + + + Indicates something about the security level associated with the element to which it applies + + + + + Indicates the level of user experience for which the element applies + + + + + Indicates the computer vendor to which the element applies + + + + + Indicates the word size (width in bits) of the computer architecture to which the element applies + + + + + Indicates the output format (for example, print or epub) to which the element applies + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Points to the element whose content is to be used as the text of the link + + + + + + Points to an internal link target by identifying the value of its xml:id attribute + + + + + + Points to one or more internal link targets by identifying the value of their xml:id attributes + + + + + + Identifies a link target with a URI + + + + + + Identifies the XLink link type + simple + An XLink simple link type + + + + + Identifies the XLink role of the link + + + + + + Identifies the XLink arcrole of the link + + + + + + Identifies the XLink title of the link + + + + + new + An application traversing to the ending resource should load it in a new window, frame, pane, or other relevant presentation context. + replace + An application traversing to the ending resource should load the resource in the same window, frame, pane, or other relevant presentation context in which the starting resource was loaded. + embed + An application traversing to the ending resource should load its presentation in place of the presentation of the starting resource. + other + The behavior of an application traversing to the ending resource is unconstrained by XLink. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink show behavior of the link + + + + + + onLoad + An application should traverse to the ending resource immediately on loading the starting resource. + onRequest + An application should traverse from the starting resource to the ending resource only on a post-loading event triggered for the purpose of traversal. + other + The behavior of an application traversing to the ending resource is unconstrained by this specification. The application should look for other markup present in the link to determine the appropriate behavior. + none + The behavior of an application traversing to the ending resource is unconstrained by this specification. No other markup is present to help the application determine the appropriate behavior. + + + + + Identifies the XLink actuate behavior of the link + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Identifies the unique ID value of the element + + + + + + Specifies the DocBook version of the element and its descendants + + + + + Specifies the natural language of the element and its descendants + + + + + Specifies the base URI of the element and its descendants + + + + + + Provides the name or similar semantic identifier assigned to the content in some previous markup scheme + + + + + Provides the text that is to be generated for a cross reference to the element + + + + + Specifies a keyword or keywords identifying additional style information + + + + + changed + The element has been changed. + added + The element is new (has been added to the document). + deleted + The element has been deleted. + off + Explicitly turns off revision markup for this element. + + + + + Identifies the revision status of the element + + + + + + ltr + Left-to-right text + rtl + Right-to-left text + lro + Left-to-right override + rlo + Right-to-left override + + + + + Identifies the direction of text in an element + + + + + + The RDFa Lite vocab + + + + + + The RDFa Lite typeof + + + + + The RDFa Lite property + + + + + The RDFa Lite resource + + + + + The RDFa Lite prefix + + + + + + + + + + + + + + + + + + + + + + + + none + No ID fixup strategy + suffix + ID fixup by concatenating suffixes + auto + ID fixup by creating unique values + + + + + The transclusion ID fixup strategy + + + + + + The transclusion suffix to use when the suffix ID fixup strategy is employed + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + + + + user + No link scope adjustments are made + local + The link scopes are adjusted with the suffix property + near + The link scopes are adjusted based on proximity + global + The link scopes are adjusted based on document order + + + + + The transclusion link scope adjustment + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the format of the data + + + + + Indentifies the location of the data by URI + + + + Identifies the location of the data by external identifier (entity name) + + + + + + + continues + Line numbering continues from the immediately preceding element with the same name. + restarts + Line numbering restarts (begins at 1, usually). + + + + + Determines whether line numbering continues from the previous element or restarts + + + + + + numbered + Lines are numbered. + unnumbered + Lines are not numbered. + + + + + Determines whether lines are numbered + + + + + + Specifies the initial line number + + + + + + Identifies the language (i.e. programming language) of the verbatim content + + + + + Can be used to indicate explicitly that whitespace in the verbatim environment is preserved. Whitespace must always be preserved in verbatim environments whether this attribute is specified or not + preserve + Whitespace must be preserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies an identifying string for presentation purposes + + + + + Specifies the width (in characters) of the element + + + + + + compact + The spacing should be "compact". + normal + The spacing should be "normal". + + + + + Specifies (a hint about) the spacing of the content + + + + + + 0 + The element should be rendered in the current text flow (with the flow column width). + 1 + The element should be rendered across the full text page. + + + + + Indicates if the element is rendered across the column or the page + + + + + + Identifies the language (i.e. programming language) of the content + + + + + optional + The content describes an optional step or steps. + required + The content describes a required step or steps. + + + + + Specifies if the content is required or optional + + + + + + Specifies style information to be used when rendering the float + + + + + Specifies the width of the element + + + + + Specifies the depth of the element + + + + + Specifies the width of the content rectangle + + + + + Specifies the depth of the content rectangle + + + + + 0 + False (do not scale-to-fit; anamorphic scaling may occur) + 1 + True (scale-to-fit; anamorphic scaling is forbidden) + + + + + Specifies the scaling factor + + + + + + Specifies a classid for a media object player + + + + + Specifies the autoplay setting for a media object player + + + + + center + Centered horizontally + char + Aligned horizontally on the specified character + justify + Fully justified (left and right margins or edges) + left + Left aligned + right + Right aligned + + + + + bottom + Aligned on the bottom of the region + middle + Centered vertically + top + Aligned on the top of the region + + + + + doi + A digital object identifier. + isbn + An international standard book number. + isrn + An international standard technical report number (ISO 10444). + issn + An international standard serial number. + istc + An international standard text code. + libraryofcongress + A Library of Congress reference number. + pubsnumber + A publication number (an internal number or possibly organizational standard). + uri + A Uniform Resource Identifier + + + + + + Identifies the kind of bibliographic identifier + + + + + + + Identifies the nature of the non-standard bibliographic identifier + + + + + + + Identifies the kind of bibliographic identifier + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + article + An article + bbs + A bulletin board system + book + A book + cdrom + A CD-ROM + chapter + A chapter (as of a book) + dvd + A DVD + emailmessage + An email message + gopher + A gopher page + journal + A journal + manuscript + A manuscript + newsposting + A posting to a newsgroup + part + A part (as of a book) + refentry + A reference entry + section + A section (as of a book or article) + series + A series + set + A set (as of books) + webpage + A web page + wiki + A wiki page + other + Some other kind of work + + + + + + + + + Identifies the nature of the published work + + + + + + + Identifies the nature of some other kind of published work + + + + + + + Identifies that this is some other kind of published work + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text of the title of a section of a document or of a formal block-level element + + + + + + +
+
+ + + + + + + + + + + + + + + The abbreviation of a title + + + + + + +
+
+ + + + + + + + + + + + + + + The subtitle of a document + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block with only a required title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + A wrapper for information about a component or other block without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + Identifies the controlled vocabulary used by this set's terms + + + + + + + + + + + + + + + + + + A set of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + Specifies a ranking for this subject relative to other subjects in the same set + + + + + + + + + + + + + + + + + One of a group of terms describing the subject matter of a document + + + + + + +
+
+ + + + + + + + + + + + + + + A term in a group of terms describing the subject matter of a document + + + + +
+
+ + + + + + + + + + + + + + + A set of keywords describing the content of a document + + + + + + +
+
+ + + + + + + + + + + + + + + One of a set of keywords describing the content of a document + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ + + + + + + Identifies the type of procedure + + + + + + + + + + + + + + + + + + + + + A list of operations to be performed in a well-defined sequence + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A unit of action in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + Alternative steps in a procedure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for steps that occur within steps in a procedure + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for identifying the results of a procedure or step + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + A portion of a document that is isolated from the main narrative flow + + Element exclusion + + sidebar must not occur among the children or descendants of sidebar + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short description or note about a person + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A quotation set off from the main text + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The source of a block quote or epigraph + + + + + + + + + + + + +
+
+ + + sect1 + Render as a first-level section + sect2 + Render as a second-level section + sect3 + Render as a third-level section + sect4 + Render as a fourth-level section + sect5 + Render as a fifth-level section + + + + + + Indicates how the bridge head should be rendered + + + + + + + Identifies the nature of the non-standard rendering + + + + + + + Indicates how the bridge head should be rendered + other + Identifies a non-standard rendering + + + + + + + + + + + + + + + + + + + + + + + + + + + + A free-floating heading + + + + + + +
+
+ + + + + + + + + + + + + + + A remark (or comment) intended for presentation in a draft manuscript + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A short inscription at the beginning of a document or component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + Identifies the desired footnote mark + + + + + + + + + + + + + + + + + + A footnote + + Element exclusion + + footnote must not occur among the children or descendants of footnote + + + + Element exclusion + + example must not occur among the children or descendants of footnote + + + + Element exclusion + + figure must not occur among the children or descendants of footnote + + + + Element exclusion + + table must not occur among the children or descendants of footnote + + + + Element exclusion + + equation must not occur among the children or descendants of footnote + + + + Element exclusion + + sidebar must not occur among the children or descendants of footnote + + + + Element exclusion + + task must not occur among the children or descendants of footnote + + + + Element exclusion + + epigraph must not occur among the children or descendants of footnote + + + + Element exclusion + + caution must not occur among the children or descendants of footnote + + + + Element exclusion + + danger must not occur among the children or descendants of footnote + + + + Element exclusion + + important must not occur among the children or descendants of footnote + + + + Element exclusion + + note must not occur among the children or descendants of footnote + + + + Element exclusion + + tip must not occur among the children or descendants of footnote + + + + Element exclusion + + warning must not occur among the children or descendants of footnote + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph with a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A paragraph that contains only text and inline markup, no block elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the type of mark to be used on items in this list + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a bullet or other dingbat + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + continues + Specifies that numbering should begin where the preceding list left off + restarts + Specifies that numbering should begin again at 1 + + + + + Indicates how list numbering should begin relative to the immediately preceding list + + + + + + Specifies the initial line number + + + + + + ignore + Specifies that numbering should ignore list nesting + inherit + Specifies that numbering should inherit from outer-level lists + + + + + Indicates whether or not item numbering should be influenced by list nesting + + + + + + arabic + Specifies Arabic numeration (1, 2, 3, …) + upperalpha + Specifies upper-case alphabetic numeration (A, B, C, …) + loweralpha + Specifies lower-case alphabetic numeration (a, b, c, …) + upperroman + Specifies upper-case Roman numeration (I, II, III, …) + lowerroman + Specifies lower-case Roman numeration (i, ii, iii …) + + + + + Indicates the desired numeration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is marked with a sequentially incremented label + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Specifies the keyword for the type of mark that should be used on this + item, instead of the mark that would be used by default + + + + + + + + + + + + + + + + + + + + + A wrapper for the elements of a list item + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A segmented list, a list of sets of elements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of an element of a list item in a segmented list + + + + + + +
+
+ + + + + + + + + + + + + + + A list item in a segmented list + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a list item in a segmented list + + + + + + +
+
+ + + + + + horiz + A tabular presentation in row-major order. + vert + A tabular presentation in column-major order. + inline + An inline presentation, usually a comma-delimited list. + + + + + Specifies the type of list presentation + + + + + + Specifies the number of columns for horizontal or vertical presentation + + + + + + + + + + + + + + + + + + + + + An undecorated list of single words or short phrases + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + + + + + + + + + + An element of a simple list + + + + + + +
+
+ + + + + + Indicates a length beyond which the presentation system may consider a term too long and select an alternate presentation for that term, item, or list + + + + + + + + + + + + + + + + + + + + + + + A list in which each entry is composed of a set of one or more terms and an associated description + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for a set of terms and the associated description in a variable list + + + + + + + +
+
+ + + + + + + + + + + + + + + The word or phrase being defined or described in a variable list + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal example, with a title + + Element exclusion + + example must not occur among the children or descendants of example + + + + Element exclusion + + figure must not occur among the children or descendants of example + + + + Element exclusion + + table must not occur among the children or descendants of example + + + + Element exclusion + + equation must not occur among the children or descendants of example + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of example + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed example without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + monospaced + The literal layout should be formatted with a monospaced font + normal + The literal layout should be formatted with the current font + + + + + Specifies the class of literal layout + + + + + + + + + + + + + + + + + + + A block of text in which line breaks and white space are to be reproduced faithfully + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + Text that a user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A representation of what the user sees or might see on a computer screen + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal figure, generally an illustration, with a title + + Element exclusion + + example must not occur among the children or descendants of figure + + + + Element exclusion + + figure must not occur among the children or descendants of figure + + + + Element exclusion + + table must not occur among the children or descendants of figure + + + + Element exclusion + + equation must not occur among the children or descendants of figure + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Identifies the type of figure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A untitled figure + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A displayed media object (video, audio, image, etc.) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + An inline media object (video, audio, image, and so on) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for video data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for audio data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for image data and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a text description of an object and its associated meta-information + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external video data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + Specifies the vertical alignment of the video data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external audio data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + Specifies the (horizontal) alignment of the image data + + + + + + + + + Specifies the vertical alignment of the image data + + + + + + + + + + + + + + + + + + + + + Determines if anamorphic scaling is forbidden + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pointer to external image data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + Identifies the encoding of the text in the external file + + + + + + + + + + + + + + + + + + + + Pointer to external text data + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + Specifies the name of the parameter + + + + + Specifies the value of the parameter + + + + + Specifies the type of the value of the parameter + + + + + + + + + + + + + + + + + + Application specific parameters for a media player + + + + +
+
+ + + + + + + + + + + + + + + + + + A caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A real-world address, generally a postal address + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A street address in an address + + + + +
+
+ + + + + + + + + + + + + + + A post office box in an address + + + + +
+
+ + + + + + + + + + + + + + + A postal code in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a city in an address + + + + +
+
+ + + + + + + + + + + + + + + A state or province in an address + + + + +
+
+ + + + + + + + + + + + + + + The name of a country + + + + +
+
+ + + + + + + + + + + + + + + A telephone number + + + + +
+
+ + + + + + + + + + + + + + + A fax number + + + + +
+
+ + + + + + + + + + + + + + + Uncategorized information in address + + + + +
+
+ + + + + + + + + + + + + + + The institutional affiliation of an individual + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A brief description of an affiliation + + + + +
+
+ + + + + + + + + + + + + + + The title of an individual in an organization + + + + +
+
+ + + consortium + A consortium + corporation + A corporation + informal + An informal organization + nonprofit + A non-profit organization + + + + + Specifies the nature of the organization + + + + + + Specifies the nature of the organization + other + Indicates a non-standard organization class + + + Identifies the non-standard nature of the organization + + + + + + + + + + + + + + + + + + + + + + + + + + The name of an organization + + + + +
+
+ + + + + + + + + + + + + + + A division of an organization + + + + + + +
+
+ + + + + + + + + + + + + + + The page numbers of an article as published + + + + +
+
+ + + + + + + + + + + + + + + The personal name of an individual + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The name of an individual author + + + + +
+
+ + + + + + + + + + + + + + + Wrapper for author information when a document has multiple authors or collaborators + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Identifies a collaborator + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The initials or other short identifier for an author + + + + +
+
+ + + + + + + + + + + + + + + A person and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An organization and associated metadata + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for document meta-information about a conference + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The dates of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The title of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + An identifier, frequently numerical, associated with a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a conference for which a document was written + + + + +
+
+ + + + + + + + + + + + + + + The contract number of a document + + + + +
+
+ + + + + + + + + + + + + + + The sponsor of a contract + + + + +
+
+ + + + + + + + + + + + + + + Copyright information about a document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The year of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the individual or organization that holds a copyright + + + + +
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + Additional content for the cover of a publication + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + + + + + + The date of publication or revision of a document + + + + +
+
+ + + + + + + + + + + + + + + The name or number of an edition of a document + + + + +
+
+ + + + + + + + + + + + + + + The name of the editor of a document + + + + +
+
+ + + + + + + + + + + + + + + + An identifier for a document + + + + +
+
+ + + + + + + + + + + + + + + + A citation of a bibliographic identifier + + + + +
+
+ + + + + + + + + + + + + + + + The source of a document + + + + +
+
+ + + hasformat + The described resource pre-existed the referenced resource, which is essentially the same intellectual content presented in another format + haspart + The described resource includes the referenced resource either physically or logically + hasversion + The described resource has a version, edition, or adaptation, namely, the referenced resource + isformatof + The described resource is the same intellectual content of the referenced resource, but presented in another format + ispartof + The described resource is a physical or logical part of the referenced resource + isreferencedby + The described resource is referenced, cited, or otherwise pointed to by the referenced resource + isreplacedby + The described resource is supplanted, displaced, or superceded by the referenced resource + isrequiredby + The described resource is required by the referenced resource, either physically or logically + isversionof + The described resource is a version, edition, or adaptation of the referenced resource; changes in version imply substantive changes in content rather than differences in format + references + The described resource references, cites, or otherwise points to the referenced resource + replaces + The described resource supplants, displaces, or supersedes the referenced resource + requires + The described resource requires the referenced resource to support its function, delivery, or coherence of content + + + + + + Identifies the type of relationship + + + + + + + + Identifies the type of relationship + othertype + The described resource has a non-standard relationship with the referenced resource + + + + A keyword that identififes the type of the non-standard relationship + + + + + + + + + + + + + + + + + + + + + + + + + + The relationship of a document to another + + + + +
+
+ + + dcmipoint + The DCMI Point identifies a point in space using its geographic coordinates + iso3166 + ISO 3166 Codes for the representation of names of countries + dcmibox + The DCMI Box identifies a region of space using its geographic limits + tgn + The Getty Thesaurus of Geographic Names + + + + + + Specifies the type of spatial coverage + + + + + + + + Specifies the type of spatial coverage + otherspatial + Identifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + dcmiperiod + A specification of the limits of a time interval + w3c-dtf + W3C Encoding rules for dates and times—a profile based on ISO 8601 + + + + + + Specifies the type of temporal coverage + + + + + + + + Specifies the type of temporal coverage + othertemporal + Specifies a non-standard type of coverage + + + + A keyword that identifies the type of non-standard coverage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The spatial or temporal coverage of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A statement of legal obligations or requirements + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + copyeditor + A copy editor + graphicdesigner + A graphic designer + productioneditor + A production editor + technicaleditor + A technical editor + translator + A translator + indexer + An indexer + proofreader + A proof-reader + coverdesigner + A cover designer + interiordesigner + An interior designer + illustrator + An illustrator + reviewer + A reviewer + typesetter + A typesetter + conversion + A converter (a persons responsible for conversion, not an application) + + + + + + Identifies the nature of the contributor + + + + + + + Identifies the nature of the non-standard contribution + + + + + + + Identifies the nature of the contributor + other + Identifies a non-standard contribution + + + + + + + + + + + + + + + + + + + + + + + + + + A person or entity, other than an author or editor, credited in a document + + + + +
+
+ + + + + + + + + + + + + + + The numbers of the pages in a book, for use in a bibliographic entry + + + + +
+
+ + + + + + + + + + + + + + + A summary of the contributions made to a document by a credited source + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a person + + + + +
+
+ + + + + + + + + + + + + + + A given name of a person + + + + +
+
+ + + + + + + + + + + + + + + The given name of a person + + + + +
+
+ + + + + + + + + + + + + + + An inherited or family name; in western cultures the last name + + + + +
+
+ + + + + + + + + + + + + + + The portion of a person's name indicating a relationship to ancestors + + + + +
+
+ + + + + + + + + + + + + + + A component of a person's name that is not a first name, surname, or lineage + + + + +
+
+ + + + + + + + + + + + + + + The printing history of a document + + + + + + +
+
+ + + + + + + + + + + + + + + The date of publication of a document + + + + +
+
+ + + + + + + + + + + + + + + The publisher of a document + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of the publisher of a document + + + + +
+
+ + + + + + + + + + + + + + + Information about a particular release of a document + + + + +
+
+ + + + + + + + + + + + + + + + + + A history of the revisions to a document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry describing a single revision in the history of the revisions to a document + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A document revision number + + + + +
+
+ + + + + + + + + + + + + + + A description of a revision to a document + + + + +
+
+ + + + + + + + + + + + + + + A extended description of a revision to a document + + + + + + +
+
+ + + + + + + + + + + + + + + Numbers of the volumes in a series of books + + + + +
+
+ + + + + + + + + + + + + + + The volume number of a document in a set (as of books in a set or articles in a journal) + + + + +
+
+ + + + + + + + + + + + + + + The number of an issue of a journal + + + + +
+
+ + + + + + A name for the metadata element + + + + + The metadata content + + + + + + + + + + + + + + + + + A generic metadata element + + + + + + + + A generic metadata element + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A software or application package + + + + +
+
+ + + + + + + + + + + + + + + An email address + + + + +
+
+ + + + + + + + + + + + + + + A comment on a line in a verbatim listing + + + + +
+
+ + + command + A command + function + A function + option + An option + + + + + Identifies the class of parameter + + + + + + + + + + + + + + + + + + + + + A value or a symbolic reference to a value + + + + +
+ + + + + + +
+ + + command + A command + function + A function + option + An option + parameter + A parameter + + + + + Identifies the nature of the replaceable text + + + + + + + + + + + + + + + + + + + + + Content that may or must be replaced by the user + + + + + + +
+
+ + + + Identifies the type of URI specified + + + + + + + + + + + + + + + + + + + A Uniform Resource Identifier + + + + +
+
+ + + + + + + + + + + + + + + An abbreviation, especially one followed by a period + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An often pronounceable word made from the initial (or selected) letters of a name or phrase + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An inline bibliographic reference to another published work + + + + + + +
+
+ + + + + + + + + + + + + + + A citation to a reference page + + + + + + + +
+
+ + + + + + + + + + + + + + + The title of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A reference volume number + + + + +
+
+ + + + + + Identifies the nature of the publication being cited + + + + + + Identifies the nature of some other kind of publication being cited + + + + + + + Identifies that this is some other kind of publication being cited + other + Indicates that the published work is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + The title of a cited work + + + + + + +
+
+ + + + + + + + + + + + + + + Emphasized text + + + + + + +
+
+ + + A limited span of emphasized text + + + + +
+
+ + + + + + + + + + + + + + + A word or phrase in a language other than the primary language of the document + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A limited word or phrase in a language other than the primary language of the document + + + + +
+
+ + + + + + + + + + + + + + + A span of text + + + + + + +
+
+ + + A limited span of text + + + + +
+
+ + + + + + + + + + + + + + + An inline quotation + + + + + + +
+
+ + + + + + + + + + + + + + + A limited inline quotation + + + + +
+
+ + + + + + + + + + + + + + + A subscript (as in Hâ‚‚O, the molecular formula for water) + + + + +
+
+ + + + + + + + + + + + + + + A superscript (as in x², the mathematical notation for x multiplied by itself) + + + + +
+
+ + + copyright + A copyright + registered + A registered copyright + service + A service + trade + A trademark + + + + + Identifies the class of trade mark + + + + + + + + + + + + + + + + + + + + + A trademark + + + + +
+
+ + + + + + + + + + + + + + + A word meant specifically as a word and not representing anything else + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a footnote (a footnote mark) + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A cross reference to another part of the document + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A hypertext link + + + + + + +
+
+ + + + + + + + + Holds additional information that may be used by the application when resolving the link + + + + + Specifies the URI of the document in which the link target appears + + + + + + Specifies the location of the link target in the document + + + + + Identifies application-specific customization of the link behavior + + + + + + + + + + + + + + + + + + + + + + + + + + + + A link that addresses its target indirectly + + + + + + +
+
+ + + + + + + + + + + + + + A spot in the document + + + + +
+
+ + + + + + + + + + + + + + A text-only annotation, often used for accessibility + + + + + + + + + +
+
+ + + Holds style of formalgroup - this can be used to specify desired layout and positioning of subfigures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A group of formal objects, for example subfigures + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies the editorial or publication status of the element on which it occurs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + The dedication of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Acknowledgements of a book or other component + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Text at the back of a book describing facts about its production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An appendix in a book or article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A chapter, as of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Introductory matter preceding the first chapter of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An introduction to the contents of a part + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + legal + A section of legal obligations or requirements + + + + Identifies the nature of the section + + + + + + Identifies a non-standard section class + + + + + + + Indicates that a non-standard section class is applied + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a document with no subdivisions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + + + + faq + A collection of frequently asked questions. + journalarticle + An article in a journal or other periodical. + productsheet + A description of a product. + specification + A specification. + techreport + A technical report. + whitepaper + A white paper. + + + + + Identifies the nature of the article + + + + + + Identifies the nature of the non-standard article + + + + + + + Identifies the nature of the article + other + Indicates that the identifier is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An article + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Identifies one or more annotations that apply to this element + + +
+ + + + + + Identifies one or more elements to which this annotation applies + + + + + + + + + + + + + + + + + + + An annotation + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Identifies the XLink extended link type + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + extended + An XLink extended link type + + + + + Identifies the XLink locator link type + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + locator + An XLink locator link type + + + + + Identifies the XLink arc link type + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + arc + An XLink arc link type + + + + + Identifies the XLink resource link type + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + resource + An XLink resource link type + + + + + Identifies the XLink title link type + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + title + An XLink title link type + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the XLink traversal-from + + + + + + Specifies the XLink label + + + + + + Specifies the XLink traversal-to + + + +
+ + + + + + + + + + + + Identifies the XLink link type + extended + An XLink extended link + + + + + + + + + + + + + An XLink extended link + + + + + + + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + locator + An XLink locator link + + + + + + + + + + + + + + + + + An XLink locator in an extendedlink + + + + +
+
+ + + + + + + + + + + + Identifies the XLink link type + arc + An XLink arc link + + + + + + + + + + + + + + + + + + + + + + + + + An XLink arc in an extendedlink + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A top-level section of document + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect3 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection within a sect4 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A collection of reference entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A reference page (originally a UNIX man-style reference page) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Meta-information for a reference entry + + + + + + + + + + + + + + + + +
+ + + source + The name of the software product or component to which this topic applies + version + The version of the software product or component to which this topic applies + manual + The section title of the reference page (e.g., User Commands) + sectdesc + The section title of the reference page (believed synonymous with "manual" but in wide use) + software + The name of the software product or component to which this topic applies (e.g., SunOS x.y; believed synonymous with "source" but in wide use) + + + + + + Identifies the kind of miscellaneous information + + + + + + + Identifies the nature of non-standard miscellaneous information + + + + + + Identifies the kind of miscellaneious information + other + Indicates that the information is some 'other' kind. + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + Meta-information for a reference entry other than the title and volume number + + + + +
+
+ + + + + + + + + + + + + + + The name, purpose, and classification of a reference page + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A description of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The name of (one of) the subject(s) of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + A short (one sentence) synopsis of the topic of a reference page + + + + + + +
+
+ + + + + + + + + + + + + + + The scope or other indication of applicability of a reference entry + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A syntactic synopsis of the subject of the reference page + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A recursive section in a refentry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A major subsection of a reference entry + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect1 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A subsection of a refsect2 + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + + + + + + + + + + Specifies the base form of the term, the one that appears in the glossary. This allows adjectival, plural, and other variations of the term to appear in the element. The element content is the default base form. + + + +
+ + + + + + + + + + + + + + + + + + A wrapper for a list of glossary entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + Specifies the string by which the element's content is to be sorted; if unspecified, the content is used + + + + + + + + + + + + + + + + + An entry in a glossary or glosslist + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + Specifies a list of keywords for the definition + + + + + + + + + + + + + + + + + A definition in a glossentry + + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry + to another + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + + + + + +
+
+ + + + + + Identifies the other term + + + + + + + + + + + + + + + + + + A cross-reference from one glossentry to another + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + The first occurrence of a term, with limited content + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A glossary term + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in a glossary + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + An inline definition of a term + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + + + + + +
+ + + Identifies the relationship between the bibliographic elemnts + + +
+ + + + + + + + + + + + + + + + + + + + + A raw entry in a bibliography + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked entry in a bibliography + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A raw container for related bibliographic information + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cooked container for related bibliographic information + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Untyped bibliographic information + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A section of a bibliography + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for a list of bibliography entries + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + The units (for example, pages) used to identify the beginning and ending of a reference. + + + + + + Identifies the beginning of a reference; the location within the work that is being referenced. + + + + + + Identifies the end of a reference. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cross-reference to a bibliographic entry + + + + +
+ + + normal + Normal + preferred + Preferred + + + + + Specifies the significance of the term + + + + + + Specifies the IDs of the elements to which this term applies + + + + + + Indicates the page on which this index term occurs in some version of the printed document + + + + + all + All indexes + global + The global index (as for a combined index of a set of books) + local + The local index (the index for this document only) + + + + + Specifies the scope of the index term + + + + + + Specifies the string by which the term is to be sorted; if unspecified, the term content is used + + + + + Specifies the target index for this term + + +
+ + + + + + + + + + + + + + + A set of index terms in the meta-information of a document + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Identifies the class of index term + singular + A singular index term + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term + + + + +
+
+ + + + + + Identifies the class of index term + startofrange + The start of a range + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for an indexed term that covers a range + + + + +
+
+ + + + + + Identifies the class of index term + endofrange + The end of a range + + + + + Points to the start of the range + + + + + + + + + + + + + + + + + Identifies the end of a range associated with an indexed term + + Indexterm 'startref' type constraint + + @startref on indexterm must point to an indexterm. + @startref on indexterm must point to a startofrange indexterm. + + + + + + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary word or phrase under which an index term should be sorted + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A secondary word or phrase in an index term + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A tertiary word or phrase in an index term + + + + + + +
+
+ + + + + + Identifies the class of 'see' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader instead to another entry in the index + + + + + + +
+
+ + + + + + Identifies the class of 'seealso' + + normal + Normal + under + See 'under' + + + + + + + + + + + + + + + + + + Part of an index term directing the reader also to another entry in the index + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a book or part of a book + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An index to a set of books + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A division in an index + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An entry in an index + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + A primary term in an index entry, not in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A secondary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A tertiary term in an index entry, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See +entry in an index, rather than in the text + + + + + + +
+
+ + + + + + + + + + + + + + + + + A See also + entry in an index, rather than in the text + + + + + + +
+ + + Indicates the page on which this element occurs in some version of the printed document + + +
+ + + + + + + + + + + + + + + + + + A table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + A division in a table of contents + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A component title in a table of contents + + + + + + +
+ + + +
+ + + + + + + + + + + + + + + A task to be completed + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A summary of a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The prerequisites for a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + Information related to a task + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + calspair + Coordinates expressed as a pair of CALS graphic coordinates. + linecolumn + Coordinates expressed as a line and column. + linecolumnpair + Coordinates expressed as a pair of lines and columns. + linerange + Coordinates expressed as a line range. + + + + + + Identifies the units used in the coords attribute. The default units vary according to the type of callout specified: calspair + for graphics and linecolumn + for line-oriented elements. + + + + + + + + Indicates that non-standard units are used for this area +. In this case otherunits + must be specified. + other + Coordinates expressed in some non-standard units. + + + + Identifies the units used in the coords + attribute when the units + attribute is other +. This attribute is forbidden otherwise. + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + A list of callout +s + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + Identifies the areas described by this callout. + + + + + + + + + + + + + + + + A called out + description of a marked area + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A program listing with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + A collection of regions in a graphic or code example + + + + + + + + + +
+
+ + + + + + Point to the callout +s which refer to this area. (This provides bidirectional linking which may be useful in online presentation.) + + + + + + Specifies an identifying number or string that may be used in presentation. The area label might be drawn on top of the figure, for example, at the position indicated by the coords attribute. + + + + + Provides the coordinates of the area. The coordinates must be interpreted using the units + specified. + + + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + A region defined for a callout in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A set of related areas in a graphic or code example + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A screen with associated areas used in callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for an image object with callouts + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + The location of a callout embedded in text + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A cross reference to a co + + + + +
+
+ + + + + + + + + + + + + + + + + + A set of EBNF productions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A production in a set of EBNF productions + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The left-hand side of an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + The right-hand side of an EBNF production + + + + + + + + + + + +
+
+ + + + + + Specifies a URI that points to a production +where the nonterminal + is defined + + + + + + + + + + + + + + + + A non-terminal in an EBNF production + + + + +
+
+ + + + + + + + + + + + + + + A constraint in an EBNF production + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + + + +
+
+ + + + + + + + + + + + + + + A cross-reference to an EBNF production + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The definition of a constraint in an EBNF production + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+ + + Specifies the alignment character when align + is set to char +. + + + + + Specifies the percentage of the column's total width that should appear to the left of the first occurance of the character identified in char + when align + is set to char +. + + 0 + 100 + + + + + + Specifies how the table is to be framed. Note that there is no way to obtain a border on only the starting edge (left, in left-to-right writing systems) of the table. + + all + Frame all four sides of the table. In some environments with limited control over table border formatting, such as HTML, this may imply additional borders. + bottom + Frame only the bottom of the table. + none + Place no border on the table. In some environments with limited control over table border formatting, such as HTML, this may disable other borders as well. + sides + Frame the left and right sides of the table. + top + Frame the top of the table. + topbot + Frame the top and bottom of the table. + + + + + + Specifies the presence or absence of the column separator + + 0 + No column separator rule. + 1 + Provide a column separator rule on the right + + + + + + Specifies the presence or absence of the row separator + + 0 + No row separator rule. + 1 + Provide a row separator rule below + + + + + + Specifies the orientation of the table + + land + 90 degrees counter-clockwise from the rest of the text flow. + port + The same orientation as the rest of the text flow. + + + + + + Specifies the table style + + + + + Indicates whether or not the entries in the first column should be considered row headers + + firstcol + Indicates that entries in the first column of the table are functionally row headers (analogous to the way that a thead provides column headers). + headers + Indicates that row headers are identified by use of the headers attribute on entries in the table. + norowheader + Indicates that entries in the first column have no special significance with respect to column headers. + + + + + + Specifies the horizontal alignment of text in an entry. + + center + Centered. + char + Aligned on a particular character. + justify + Left and right justified. + left + Left justified. + right + Right justified. + + + + + + Specifies the vertical alignment of text in an entry. + + bottom + Aligned on the bottom of the entry. + middle + Aligned in the middle. + top + Aligned at the top of the entry. + + + + + + Specifies a column specification by name. + + + + + Specifies a starting column by name. + + + + + Specifies a span by name. + + + + + + Specifies a starting column by name. + + + Specifies an ending column by name. + + + + + + + + + + + + + + Provides a name for a column specification. + + + + + Provides a name for a span specification. + + +
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A wrapper for the main content of a table, or part of a table + + + + + + + + + + + + + + + + +
+
+ + + + + + The number of the column to which this specification applies. Must be greater than any preceding column number. Defaults to one more than the number of the preceding column, if there is one, or one. + + + + + + Specifies the width of the column. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifications for a column in a table + + + + +
+
+ + + + + + Specifies a starting column by name. + + + + + Specifies an ending column by name. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Formatting information for a spanned column in a table + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table footer consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + + + + +
+
+ + + + + + Specifies the number of additional rows which this entry occupies. Defaults to zero. + + + + + + Specifies the rotation of this entry. A value of 1 (true) rotates the cell 90 degrees counter-clockwise. A value of 0 (false) leaves the cell unrotated. + + 0 + Do not rotate the cell. + 1 + Rotate the cell 90 degrees counter-clockwise. + + + + + + Specifies the scope of a header. + + row + Applies to the row + col + Applies to the column + rowgroup + Applies to the row group + colgroup + Applies to the column group + + + + + + Specifies the entry or entries which serve as headers for this element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A cell in a table + + Element exclusion + + table must not occur among the children or descendants of entry + + + + Element exclusion + + informaltable must not occur among the children or descendants of entry + + + + + + + + + + + + + +
+
+ + + + + + Additional style information for downstream processing; typically the name of a style. + + + + + The number of columns in the entry table. Must be an integer greater than zero. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A subtable appearing in place of an entry in a table + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A table header consisting of one or more rows + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A wrapper for the rows of a table or informal table + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A row in a table + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Indicates if the short or long title should be used in a List of Tables + + 0 + Indicates that the full title should be used. + 1 + Indicates that the short short title (titleabbrev) should be used. + + + + + + Indicates if the table should appear in a List of Tables + + 0 + Indicates that the table should not occur in the List of Tables. + 1 + Indicates that the table should appear in the List of Tables. + + + + + + + + + + + + + + A formal table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + This attribute assigns a class name or set of class names to an element. Any number of elements may be assigned the same class name or names. Multiple class names must be separated by white space characters. + + + + + This attribute specifies style information for the current element. + + + + + This attribute offers advisory information about the element for which it is set. + + + + + + + + This attribute specifies the base language of an element's attribute values and text content. The default value of this attribute is unknown. + + + + + + + + Occurs when the pointing device button is clicked over an element. + + + + + Occurs when the pointing device button is double clicked over an element. + + + + + Occurs when the pointing device button is pressed over an element. + + + + + Occurs when the pointing device button is released over an element. + + + + + Occurs when the pointing device is moved onto an element. + + + + + Occurs when the pointing device is moved while it is over an element. + + + + + Occurs when the pointing device is moved away from an element. + + + + + Occurs when a key is pressed and released over an element. + + + + + Occurs when a key is pressed down over an element. + + + + + Occurs when a key is released over an element. + + + + + + + + + + + + + + + + + Specifies the alignment of data and the justification of text in a cell. + + left + Left-flush data/Left-justify text. This is the default value for table data. + center + Center data/Center-justify text. This is the default value for table headers. + right + Right-flush data/Right-justify text. + justify + Double-justify text. + char + Align text around a specific character. If a user agent doesn't support character alignment, behavior in the presence of this value is unspecified. + + + + + + This attribute specifies a single character within a text fragment to act as an axis for alignment. The default value for this attribute is the decimal point character for the current language as set by the lang attribute (e.g., the period in English and the comma in French). User agents are not required to support this attribute. + + + + + When present, this attribute specifies the offset to the first occurrence of the alignment character on each line. If a line doesn't include the alignment character, it should be horizontally shifted to end at the alignment position. When charoff is used to set the offset of an alignment character, the direction of offset is determined by the current text direction (set by the dir attribute). In left-to-right texts (the default), offset is from the left margin. In right-to-left texts, offset is from the right margin. User agents are not required to support this attribute. + + + An explicit offset. + + [0-9]+% + + A percentage offset. + + + + + + + + + Specifies the vertical position of data within a cell. + + top + Cell data is flush with the top of the cell. + middle + Cell data is centered vertically within the cell. This is the default value. + bottom + Cell data is flush with the bottom of the cell. + baseline + All cells in the same row as a cell whose valign attribute has this value should have their textual data positioned so that the first text line occurs on a baseline common to all cells in the row. This constraint does not apply to subsequent text lines in these cells. + + + + + + + + + Provides a summary of the table's purpose and structure for user agents rendering to non-visual media such as speech and Braille. + + + + + Specifies the desired width of the entire table and is intended for visual user agents. When the value is a percentage value, the value is relative to the user agent's available horizontal space. In the absence of any width specification, table width is determined by the user agent. + + + An explicit width. + + [0-9]+% + + A percentage width. + + + + + + Specifies the width (in pixels only) of the frame around a table. + + + + + + Specifies which sides of the frame surrounding a table will be visible. + + void + No sides. This is the default value. + above + The top side only. + below + The bottom side only. + hsides + The top and bottom sides only. + lhs + The left-hand side only. + rhs + The right-hand side only. + vsides + The right and left sides only. + box + All four sides. + border + All four sides. + + + + + + Specifies which rules will appear between cells within a table. The rendering of rules is user agent dependent. + + none + No rules. This is the default value. + groups + Rules will appear between row groups (see thead, tfoot, and tbody) and column groups (see colgroup and col) only. + rows + Rules will appear between rows only. + cols + Rules will appear between columns only. + all + Rules will appear between all rows and columns. + + + + + + Specifies how much space the user agent should leave between the left side of the table and the left-hand side of the leftmost column, the top of the table and the top side of the topmost row, and so on for the right and bottom of the table. The attribute also specifies the amount of space to leave between cells. + + + An explicit spacing. + + [0-9]+% + + A percentage spacing. + + + + + + Specifies the amount of space between the border of the cell and its contents. If the value of this attribute is a pixel length, all four margins should be this distance from the contents. If the value of the attribute is a percentage length, the top and bottom margins should be equally separated from the content based on a percentage of the available vertical space, and the left and right margins should be equally separated from the content based on a percentage of the available horizontal space. + + + An explicit padding. + + [0-9]+% + + A percentage padding. + + + + + + + + + + Provides an abbreviated form of the cell's content and may be rendered by user agents when appropriate in place of the cell's content. Abbreviated names should be short since user agents may render them repeatedly. For instance, speech synthesizers may render the abbreviated headers relating to a particular cell before rendering that cell's content. + + + + + This attribute may be used to place a cell into conceptual categories that can be considered to form axes in an n-dimensional space. User agents may give users access to these categories (e.g., the user may query the user agent for all cells that belong to certain categories, the user agent may present a table in the form of a table of contents, etc.). Please consult an HTML reference for more details. + + + + + Specifies the list of header cells that provide header information for the current data cell. The value of this attribute is a space-separated list of cell names; those cells must be named by setting their id attribute. Authors generally use the headers attribute to help non-visual user agents render header information about data cells (e.g., header information is spoken prior to the cell data), but the attribute may also be used in conjunction with style sheets. + + + + + Specifies the set of data cells for which the current header cell provides header information. This attribute may be used in place of the headers attribute, particularly for simple tables. + + row + The current cell provides header information for the rest of the row that contains it + col + The current cell provides header information for the rest of the column that contains it. + rowgroup + The header cell provides header information for the rest of the row group that contains it. + colgroup + The header cell provides header information for the rest of the column group that contains it. + + + + + + Specifies the number of rows spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all rows from the current row to the last row of the table section (thead +, tbody +, or tfoot +) in which the cell is defined. + + + + + + Specifies the number of columns spanned by the current cell. The default value of this attribute is one (1 +). The value zero (0 +) means that the cell spans all columns from the current column to the last column of the column group (colgroup +) in which the cell is defined. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A formal (captioned) HTML table in a document + + Element exclusion + + example must not occur among the children or descendants of table + + + + Element exclusion + + figure must not occur among the children or descendants of table + + + + Element exclusion + + equation must not occur among the children or descendants of table + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + Identifies the type of table + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An HTML table without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + An HTML table caption + + Element exclusion + + example must not occur among the children or descendants of caption + + + + Element exclusion + + figure must not occur among the children or descendants of caption + + + + Element exclusion + + table must not occur among the children or descendants of caption + + + + Element exclusion + + equation must not occur among the children or descendants of caption + + + + Element exclusion + + sidebar must not occur among the children or descendants of caption + + + + Element exclusion + + task must not occur among the children or descendants of caption + + + + Element exclusion + + caution must not occur among the children or descendants of caption + + + + Element exclusion + + danger must not occur among the children or descendants of caption + + + + Element exclusion + + important must not occur among the children or descendants of caption + + + + Element exclusion + + note must not occur among the children or descendants of caption + + + + Element exclusion + + tip must not occur among the children or descendants of caption + + + + Element exclusion + + warning must not occur among the children or descendants of caption + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + +
+
+ + + + + + This attribute, whose value must be an integer > 0, specifies the number of columns spanned + by the col + element; the col + element shares its attributes with all the columns it spans. The default value for this attribute is 1 (i.e., a single column). If the span attribute is set to N > 1, the current col + element shares its attributes with the next N-1 columns. + + + + + + Specifies a default width for each column spanned by the current col + element. It has the same meaning as the width + attribute for the colgroup + element and overrides it. + + + + + + + + + Specifications for a column in an HTML table + + + + +
+
+ + + + + + This attribute, which must be an integer > 0, specifies the number of columns in a column group. In the absence of a span attribute, each colgroup + defines a column group containing one column. If the span attribute is set to N > 0, the current colgroup + element defines a column group containing N columns. User agents must ignore this attribute if the colgroup + element contains one or more col + elements. + + + + + + This attribute specifies a default width for each column in the current column group. In addition to the standard pixel, percentage, and relative values, this attribute allows the special form 0* + (zero asterisk) which means that the width of the each column in the group should be the minimum width necessary to hold the column's contents. This implies that a column's entire contents must be known before its width may be correctly computed. Authors should be aware that specifying 0* + will prevent visual user agents from rendering a table incrementally. This attribute is overridden for any column in the column group whose width is specified via a col + element. + + + + + + + + + A group of columns in an HTML table + + + + + + +
+
+ + + + + + + + + + A table header consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A table footer consisting of one or more rows in an HTML table + + + + + + +
+
+ + + + + + + + + + A wrapper for the rows of an HTML table or informal HTML table + + + + + + +
+
+ + + + + + + + + + A row in an HTML table + + + + + + + + + +
+
+ + + + + + + + + + + A table header entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + A table entry in an HTML table + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A detailed set of messages, usually error messages + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A wrapper for an entry in a message set + + + + + + + + + + + + +
+
+ + + + + + The audience to which the message relevant + + + + + The origin of the message + + + + + The level of importance or severity of a message + + + + + + + + + + + + + + + + + + + + + + + A wrapper for a simpler entry in a message set + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + The primary component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A subcomponent of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A related component of a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + +
+
+ + + + + + + + + + + + + + + The actual text of a message component in a message set + + + + + + +
+
+ + + + + + + + + + + + + + + Information about a message in a message set + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The level of importance or severity of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The origin of a message in a message set + + + + +
+
+ + + + + + + + + + + + + + + The audience to which a message in a message set is relevant + + + + +
+
+ + + + + + + + + + + + + + + + + + Explanatory material relating to a message in a message set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + + + + none + No labels + number + Numeric labels + qanda + "Q:" and "A:" labels + + + + + Specifies the default labelling + + + + + + + + + + + + + + + + + + + + + A question-and-answer set + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A titled division in a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + A question/answer set within a qandaset + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A question in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An answer to a question posed in a qandaset + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A label on a question or answer + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation + + Element exclusion + + example must not occur among the children or descendants of equation + + + + Element exclusion + + figure must not occur among the children or descendants of equation + + + + Element exclusion + + table must not occur among the children or descendants of equation + + + + Element exclusion + + equation must not occur among the children or descendants of equation + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + Identifies the type of equation + + + + + + + + + + + + + + + + + + + + + + + + + + + A displayed mathematical equation without a title + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical equation or expression occurring inline + + + + + + + +
+
+ + + + + + + + + + + + + + + A mathematical phrase that can be represented with ordinary text and a small amount of markup + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + Specifies that the format of the data is MathML + mathml + Specifies MathML. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A MathML expression in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the MathML namespace + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + + + Specifies that the format of the data is SVG + svg + Specifies SVG. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + An SVG drawing in a media object + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + +
+
+ + + Any element from the SVG namespace + + + + + + + + + + +
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A string of formatting markup in text that is to be represented literally + + + + +
+
+ + + + + + attribute + An attribute + attvalue + An attribute value + element + An element + emptytag + An empty element tag + endtag + An end tag + genentity + A general entity + localname + The local name part of a qualified name + namespace + A namespace + numcharref + A numeric character reference + paramentity + A parameter entity + pi + A processing instruction + prefix + The prefix part of a qualified name + comment + An SGML comment + starttag + A start tag + xmlpi + An XML processing instruction + + + + + Identifies the nature of the tag content + + + + + + Identifies the namespace of the tag content + + + + + + + + + + + + + + + + + + + + + A component of XML (or SGML) markup + + + + + + + + + +
+
+ + + Identifies the class of symbol + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A name that is replaced by a value before processing + + + + +
+
+ + + + + + + + + + + + + + + A unit of information + + + + +
+
+ + + + + + + + + + + + + + + Inline text that is some literal value + + + + +
+
+ + + Identifies the (computer) language of the code fragment + + + + + + + + + + + + + + + + + + + + An inline code fragment + + + + + + + + + +
+
+ + + Identifies the class of constant + limit + The value is a limit of some kind + + + + + + + + + + + + + + + + + + + + A programming or system constant + + + + +
+
+ + + + + + copyright + A name with a copyright + registered + A name with a registered copyright + service + A name of a service + trade + A name which is trademarked + + + + + Specifies the class of product name + + + + + + + + + + + + + + + + + + The formal name of a product + + + + +
+
+ + + + + + + + + + + + + + + A number assigned to a product + + + + +
+
+ + + altkey + An alternate or secondary key + constraint + A constraint + datatype + A data type + field + A field + foreignkey + A foreign key + group + A group + index + An index + key1 + The first or primary key + key2 + An alternate or secondary key + name + A name + primarykey + The primary key + procedure + A (stored) procedure + record + A record + rule + A rule + secondarykey + The secondary key + table + A table + user + A user + view + A view + + + + + Identifies the class of database artifact + + + + + + + + + + + + + + + + + + + + + The name of a database, or part of a database + + + + +
+
+ + + hardware + A hardware application + software + A software application + + + + + Identifies the class of application + + + + + + + + + + + + + + + + + + + + + The name of a software program + + + + +
+
+ + + + + + + + + + + + + + + A physical part of a computer system + + + + +
+ + + + + + + + + + + + +
+ + + + + + + + + + + + + + + The text on a button in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Graphic and/or text appearing as a icon in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The text of a label in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a menu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a terminal menu item in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a submenu in a GUI + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A selection or series of selections from a menu + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The conventional name of a mouse button + + + + +
+ + + + + + + + + + +
+ + + alt + The "Alt" key + altgr + The "Alt Graph" key + backspace + The "Backspace" key + command + The "Command" key + control + The "Control" key + delete + The "Delete" key + down + The down arrow + end + The "End" key + enter + The "Enter" key + escape + The "Escape" key + home + The "Home" key + insert + The "Insert" key + left + The left arrow + meta + The "Meta" key + option + The "Option" key + pagedown + The page down key + pageup + The page up key + right + The right arrow + return + The "Return" key + shift + The "Shift" key + space + The spacebar + tab + The "Tab" key + up + The up arrow + + + + + + Identifies the function key + + + + + + + + Identifies the function key + other + Indicates a non-standard function key + + + + Specifies a keyword that identifies the non-standard key + + + + + + + + + + + + + + + + + + + + + + + + The text printed on a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + The internal, frequently numeric, identifier for a key on a keyboard + + + + +
+ + + + + + + + + + +
+ + + click + A (single) mouse click. + double-click + A double mouse click. + press + A mouse or key press. + seq + Sequential clicks or presses. + simul + Simultaneous clicks or presses. + + + + + + Identifies the nature of the action taken. If keycombo + contains more than one element, simul + is the default, otherwise there is no default. + + + + + + + + Identifies the nature of the action taken + other + Indicates a non-standard action + + + + Identifies the non-standard action in some unspecified way. + + + + + + + + + + + + + + + + + + + + + + + + A combination of input actions + + + + + + +
+
+ + + + + + + + + + + + + + + The symbolic name of a key on a keyboard + + + + +
+
+ + + + + + + + + + + + + + + A graphical user interface (GUI) keyboard shortcut + + + + +
+
+ + + + + + + + + + + + + + + + + + + A key combination for an action that is also accessible through a menu + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A character or string indicating the start of an input field in a computer display + + + + + + +
+
+ + + + + + + + + + + + + + + A software environment variable + + + + +
+
+ + + devicefile + A device + directory + A directory + extension + A filename extension + headerfile + A header file (as for a programming language) + libraryfile + A library file + partition + A partition (as of a hard disk) + symlink + A symbolic link + + + + + Identifies the class of filename + + + + + + Specifies the path of the filename + + + + + + + + + + + + + + + + + + + + + + + The name of a file + + + + +
+
+ + + + + + + + + + + + + + + The name of an executable program or other software command + + + + +
+
+ + + + + + + + + + + + + + + Data, generally text, displayed or presented by a computer + + + + + + +
+
+ + + + + + + + + + + + + + + Data entered by the user + + + + + + +
+
+ + + + + + Specifies the character that should separate the command and its top-level arguments + + + + + Indicates the displayed length of the command; this information may be used to intelligently indent command synopses which extend beyond one line + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A syntax summary for a software command + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + +
+ + + norepeat + Can not be repeated. + repeat + Can be repeated. + + + + + Indicates whether or not repetition is possible. + + + + + + opt + Formatted to indicate that it is optional. + plain + Formatted without indication. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + Indicates optionality. + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + An argument in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + A group of elements in a cmdsynopsis + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + An explicit line break in a command synopsis + + + + +
+
+ + + + + + + + + + + + + + + A portion of a cmdsynopsis broken out from the main body of the synopsis + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A reference to a fragment of a command synopsis + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + A general-purpose element for representing the syntax of commands or functions + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing synopsis + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a function definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the funcdefs of a funcsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a function + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A function (subroutine) name and its return type + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a function or subroutine, as in a programming language + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating that the function in question takes no arguments + + + + +
+
+ + + + + + + + + + + + + + + An empty element in a function synopsis indicating a variable number of arguments + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of parameters + + + + + + + + + +
+
+ + + + + + opt + Formatted to indicate that it is optional. + req + Formatted to indicate that it is required. + + + + + Indicates optionality. + + + + + + + + + + + + + + + + + + Information about a function parameter in a programming language + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + Parameters for a function referenced through a function pointer in a synopsis + + + + +
+
+ + + + + + + + + class + This is the synopsis of a class + interface + This is the synopsis of an interface + + + + + Specifies the nature of the synopsis + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + Information supplementing the contents of a classsynopsis + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A class in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An interface in an object-oriented programming language + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + An exception in an object-oriented programming language + + + + + + + + + + + + + +
+ + + Can be used to indicate that whitespace in the modifier should be preserved (for multi-line annotations, for example). + preserve + Extra whitespace and line breaks must be preserved. + + + +
+ + + + + + + + + + + + + + + + + + Modifiers in a synopsis + + + + +
+
+ + + + + + + + + + + + + + + The name of an interface + + + + +
+
+ + + + + + + + + + + + + + + The name of an exception + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The name of a field in a class definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + The initializer for a fieldsynopsis + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a constructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a destructor + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + A syntax summary for a method + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a method + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + Parameters to a method + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + A group of method parameters + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a variable + + + + +
+
+ + + + + + + + + + + + + + + Target of a build + + + + +
+
+ + + + + + + + + + + + + + + The value returned by a function + + + + +
+
+ + + + + + union + Combined type is union of nested types + intersection + Combined type is intersection of nested types + + + + + Specifies the way how are nested types combined together + + + + + + + + + + + + + + + + + + The classification of a value + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a class, in the object-oriented programming sense + + + + +
+
+ + + + + + + + + + + + + + + The identifier for a template, in the generic programming sense + + + + +
+
+ + + + + + + + + + + + + + + The definition of a template, in the generic programming sense + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The specialization of a template identifier, in the generic programming sense + + + + + + + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a package definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a macro (a code-generating function) + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a macro definition (code-generating function) + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The prototype of a macro (code-generating function) + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A macro name and its return type + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a union of types + + + + +
+
+ + + + + + + + + + + + + + + The definition of a union of types, which may be more than a name + + + + + + +
+
+ + + + + + + + + + Indicates how the value of a union is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for a union-of-types definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of an enumeration + + + + +
+
+ + + + + + + + + + + + + + + The value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + The description of a value an enumerated type can take + + + + + + +
+
+ + + + + + + + + + + + + + + The identifier of a value an enumerated type can take + + + + +
+
+ + + + + + + + + + + + + + + A value an enumerated type can take and its description + + + + + + + + + + +
+
+ + + + + + + + + 0 + Value of enum is specified explicitly using enumvalue + 1 + Value of enum is inferred from its position + + + + + Indicates how the value of an enumeration is specified. + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + + + + The syntax summary for an enumerated-type definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + The name of a type alias + + + + +
+
+ + + + + + + + + Identifies the package to which this synopsis (logically) belongs + + + + + + + + + + + + + + + + + + + + The syntax summary for a type-alias definition + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + A literal listing of all or part of a program + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + A note of caution + + Element exclusion + + caution must not occur among the children or descendants of caution + + + + Element exclusion + + danger must not occur among the children or descendants of caution + + + + Element exclusion + + important must not occur among the children or descendants of caution + + + + Element exclusion + + note must not occur among the children or descendants of caution + + + + Element exclusion + + tip must not occur among the children or descendants of caution + + + + Element exclusion + + warning must not occur among the children or descendants of caution + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text indicating hazardous situation + + Element exclusion + + caution must not occur among the children or descendants of danger + + + + Element exclusion + + danger must not occur among the children or descendants of danger + + + + Element exclusion + + important must not occur among the children or descendants of danger + + + + Element exclusion + + note must not occur among the children or descendants of danger + + + + Element exclusion + + tip must not occur among the children or descendants of danger + + + + Element exclusion + + warning must not occur among the children or descendants of danger + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of important + + + + Element exclusion + + danger must not occur among the children or descendants of important + + + + Element exclusion + + important must not occur among the children or descendants of important + + + + Element exclusion + + note must not occur among the children or descendants of important + + + + Element exclusion + + tip must not occur among the children or descendants of important + + + + Element exclusion + + warning must not occur among the children or descendants of important + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A message set off from the text + + Element exclusion + + caution must not occur among the children or descendants of note + + + + Element exclusion + + danger must not occur among the children or descendants of note + + + + Element exclusion + + important must not occur among the children or descendants of note + + + + Element exclusion + + note must not occur among the children or descendants of note + + + + Element exclusion + + tip must not occur among the children or descendants of note + + + + Element exclusion + + warning must not occur among the children or descendants of note + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + A suggestion to the user, set off from the text + + Element exclusion + + caution must not occur among the children or descendants of tip + + + + Element exclusion + + danger must not occur among the children or descendants of tip + + + + Element exclusion + + important must not occur among the children or descendants of tip + + + + Element exclusion + + note must not occur among the children or descendants of tip + + + + Element exclusion + + tip must not occur among the children or descendants of tip + + + + Element exclusion + + warning must not occur among the children or descendants of tip + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+
+ + + + + + + + + + + + + + + An admonition set off from the text + + Element exclusion + + caution must not occur among the children or descendants of warning + + + + Element exclusion + + danger must not occur among the children or descendants of warning + + + + Element exclusion + + important must not occur among the children or descendants of warning + + + + Element exclusion + + note must not occur among the children or descendants of warning + + + + Element exclusion + + tip must not occur among the children or descendants of warning + + + + Element exclusion + + warning must not occur among the children or descendants of warning + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + An error code + + + + +
+
+ + + + + + + + + + + + + + + An error name + + + + +
+
+ + + + + + + + + + + + + + + An error message. + + + + +
+
+ + + + + + + + + + + + + + + The classification of an error message + + + + +
+ + + + + + +
+ + + daemon + A daemon or other system process (syslogd) + domainname + A domain name (example.com) + etheraddress + An ethernet address (00:05:4E:49:FD:8E) + event + An event of some sort (SIGHUP) + eventhandler + An event handler of some sort (hangup) + filesystem + A filesystem (ext3) + fqdomainname + A fully qualified domain name (my.example.com) + groupname + A group name (wheel) + interface + A network interface (eth0) + ipaddress + An IP address (127.0.0.1) + library + A library (libncurses) + macro + A macro + netmask + A netmask (255.255.255.192) + newsgroup + A newsgroup (comp.text.xml) + osname + An operating system name (Hurd) + process + A process (gnome-cups-icon) + protocol + A protocol (ftp) + resource + A resource + securitycontext + A security context (a role, permission, or security token, for example) + server + A server (mail.example.com) + service + A service (ppp) + systemname + A system name (hephaistos) + username + A user name (ndw) + + + + + + Identifies the nature of the system item + + + + + + + Identifies the nature of the non-standard system item + + + + + + + Identifies the kind of systemitemgraphic identifier + other + Indicates that the system item is some 'other' kind. + + + + + + + + + + + + + + + + + + + + + + + + + + + + A system-related item or term + + + + + + +
+
+ + + + + + + + + + + + + + + An option for a software command + + + + +
+
+ + + + + + + + + + + + + + + Optional information + + + + + + + + + +
+
+ + + + + + + + + + + + + + + A unit of data associated with some part of a computer system + + + + +
+
+ + + + + + + + + Identifies the topic type + + + + + + + + + + + + + + + + + + + + + + + + + + A modular unit of documentation not part of any particular narrative flow + + Root must have version + + If this element is the root element, it must have a version attribute. + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + [^#]+ + + + + + + + xml + text + + + + + + + + + + + + + + + + + + + + + + + + + + + + An XInclude + + + + + + +
+
+ + + + An XInclude fallback + + + + + + + + + + + + + +
+
diff --git a/catalog/docbook5.2/sch/assembly.sch b/catalog/docbook5.2/sch/assembly.sch new file mode 100755 index 0000000..793d5cd --- /dev/null +++ b/catalog/docbook5.2/sch/assembly.sch @@ -0,0 +1,270 @@ + + + + + + + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + caution must not occur among the children or descendants of caution + danger must not occur among the children or descendants of caution + important must not occur among the children or descendants of caution + note must not occur among the children or descendants of caution + tip must not occur among the children or descendants of caution + warning must not occur among the children or descendants of caution + + + caution must not occur among the children or descendants of danger + danger must not occur among the children or descendants of danger + important must not occur among the children or descendants of danger + note must not occur among the children or descendants of danger + tip must not occur among the children or descendants of danger + warning must not occur among the children or descendants of danger + + + caution must not occur among the children or descendants of important + danger must not occur among the children or descendants of important + important must not occur among the children or descendants of important + note must not occur among the children or descendants of important + tip must not occur among the children or descendants of important + warning must not occur among the children or descendants of important + + + caution must not occur among the children or descendants of note + danger must not occur among the children or descendants of note + important must not occur among the children or descendants of note + note must not occur among the children or descendants of note + tip must not occur among the children or descendants of note + warning must not occur among the children or descendants of note + + + caution must not occur among the children or descendants of tip + danger must not occur among the children or descendants of tip + important must not occur among the children or descendants of tip + note must not occur among the children or descendants of tip + tip must not occur among the children or descendants of tip + warning must not occur among the children or descendants of tip + + + caution must not occur among the children or descendants of warning + danger must not occur among the children or descendants of warning + important must not occur among the children or descendants of warning + note must not occur among the children or descendants of warning + tip must not occur among the children or descendants of warning + warning must not occur among the children or descendants of warning + + + caution must not occur among the children or descendants of caption + danger must not occur among the children or descendants of caption + equation must not occur among the children or descendants of caption + example must not occur among the children or descendants of caption + figure must not occur among the children or descendants of caption + important must not occur among the children or descendants of caption + note must not occur among the children or descendants of caption + sidebar must not occur among the children or descendants of caption + table must not occur among the children or descendants of caption + task must not occur among the children or descendants of caption + tip must not occur among the children or descendants of caption + warning must not occur among the children or descendants of caption + + + equation must not occur among the children or descendants of equation + example must not occur among the children or descendants of equation + figure must not occur among the children or descendants of equation + table must not occur among the children or descendants of equation + + + equation must not occur among the children or descendants of example + example must not occur among the children or descendants of example + figure must not occur among the children or descendants of example + table must not occur among the children or descendants of example + + + equation must not occur among the children or descendants of figure + example must not occur among the children or descendants of figure + figure must not occur among the children or descendants of figure + table must not occur among the children or descendants of figure + + + equation must not occur among the children or descendants of table + example must not occur among the children or descendants of table + figure must not occur among the children or descendants of table + + + caution must not occur among the children or descendants of footnote + danger must not occur among the children or descendants of footnote + epigraph must not occur among the children or descendants of footnote + equation must not occur among the children or descendants of footnote + example must not occur among the children or descendants of footnote + figure must not occur among the children or descendants of footnote + footnote must not occur among the children or descendants of footnote + important must not occur among the children or descendants of footnote + note must not occur among the children or descendants of footnote + sidebar must not occur among the children or descendants of footnote + table must not occur among the children or descendants of footnote + task must not occur among the children or descendants of footnote + tip must not occur among the children or descendants of footnote + warning must not occur among the children or descendants of footnote + + + sidebar must not occur among the children or descendants of sidebar + + + informaltable must not occur among the children or descendants of entry + table must not occur among the children or descendants of entry + + + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + Indexterm 'startref' type constraint + + @startref on indexterm must point to a startofrange indexterm. + @startref on indexterm must point to an indexterm. + + + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + + Specification of renderas + + The renderas attribute can be specified on either the structure or output, but not both. + + + The renderas attribute can be specified on either the structure or output, but not both. + + + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + diff --git a/catalog/docbook5.2/sch/assemblyxi.sch b/catalog/docbook5.2/sch/assemblyxi.sch new file mode 100755 index 0000000..793d5cd --- /dev/null +++ b/catalog/docbook5.2/sch/assemblyxi.sch @@ -0,0 +1,270 @@ + + + + + + + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + caution must not occur among the children or descendants of caution + danger must not occur among the children or descendants of caution + important must not occur among the children or descendants of caution + note must not occur among the children or descendants of caution + tip must not occur among the children or descendants of caution + warning must not occur among the children or descendants of caution + + + caution must not occur among the children or descendants of danger + danger must not occur among the children or descendants of danger + important must not occur among the children or descendants of danger + note must not occur among the children or descendants of danger + tip must not occur among the children or descendants of danger + warning must not occur among the children or descendants of danger + + + caution must not occur among the children or descendants of important + danger must not occur among the children or descendants of important + important must not occur among the children or descendants of important + note must not occur among the children or descendants of important + tip must not occur among the children or descendants of important + warning must not occur among the children or descendants of important + + + caution must not occur among the children or descendants of note + danger must not occur among the children or descendants of note + important must not occur among the children or descendants of note + note must not occur among the children or descendants of note + tip must not occur among the children or descendants of note + warning must not occur among the children or descendants of note + + + caution must not occur among the children or descendants of tip + danger must not occur among the children or descendants of tip + important must not occur among the children or descendants of tip + note must not occur among the children or descendants of tip + tip must not occur among the children or descendants of tip + warning must not occur among the children or descendants of tip + + + caution must not occur among the children or descendants of warning + danger must not occur among the children or descendants of warning + important must not occur among the children or descendants of warning + note must not occur among the children or descendants of warning + tip must not occur among the children or descendants of warning + warning must not occur among the children or descendants of warning + + + caution must not occur among the children or descendants of caption + danger must not occur among the children or descendants of caption + equation must not occur among the children or descendants of caption + example must not occur among the children or descendants of caption + figure must not occur among the children or descendants of caption + important must not occur among the children or descendants of caption + note must not occur among the children or descendants of caption + sidebar must not occur among the children or descendants of caption + table must not occur among the children or descendants of caption + task must not occur among the children or descendants of caption + tip must not occur among the children or descendants of caption + warning must not occur among the children or descendants of caption + + + equation must not occur among the children or descendants of equation + example must not occur among the children or descendants of equation + figure must not occur among the children or descendants of equation + table must not occur among the children or descendants of equation + + + equation must not occur among the children or descendants of example + example must not occur among the children or descendants of example + figure must not occur among the children or descendants of example + table must not occur among the children or descendants of example + + + equation must not occur among the children or descendants of figure + example must not occur among the children or descendants of figure + figure must not occur among the children or descendants of figure + table must not occur among the children or descendants of figure + + + equation must not occur among the children or descendants of table + example must not occur among the children or descendants of table + figure must not occur among the children or descendants of table + + + caution must not occur among the children or descendants of footnote + danger must not occur among the children or descendants of footnote + epigraph must not occur among the children or descendants of footnote + equation must not occur among the children or descendants of footnote + example must not occur among the children or descendants of footnote + figure must not occur among the children or descendants of footnote + footnote must not occur among the children or descendants of footnote + important must not occur among the children or descendants of footnote + note must not occur among the children or descendants of footnote + sidebar must not occur among the children or descendants of footnote + table must not occur among the children or descendants of footnote + task must not occur among the children or descendants of footnote + tip must not occur among the children or descendants of footnote + warning must not occur among the children or descendants of footnote + + + sidebar must not occur among the children or descendants of sidebar + + + informaltable must not occur among the children or descendants of entry + table must not occur among the children or descendants of entry + + + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + Indexterm 'startref' type constraint + + @startref on indexterm must point to a startofrange indexterm. + @startref on indexterm must point to an indexterm. + + + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + + Specification of renderas + + The renderas attribute can be specified on either the structure or output, but not both. + + + The renderas attribute can be specified on either the structure or output, but not both. + + + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + diff --git a/catalog/docbook5.2/sch/dbits.sch b/catalog/docbook5.2/sch/dbits.sch new file mode 100755 index 0000000..8f09d76 --- /dev/null +++ b/catalog/docbook5.2/sch/dbits.sch @@ -0,0 +1,609 @@ + + + + + + + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + caution must not occur among the children or descendants of caution + danger must not occur among the children or descendants of caution + important must not occur among the children or descendants of caution + note must not occur among the children or descendants of caution + tip must not occur among the children or descendants of caution + warning must not occur among the children or descendants of caution + + + caution must not occur among the children or descendants of danger + danger must not occur among the children or descendants of danger + important must not occur among the children or descendants of danger + note must not occur among the children or descendants of danger + tip must not occur among the children or descendants of danger + warning must not occur among the children or descendants of danger + + + caution must not occur among the children or descendants of important + danger must not occur among the children or descendants of important + important must not occur among the children or descendants of important + note must not occur among the children or descendants of important + tip must not occur among the children or descendants of important + warning must not occur among the children or descendants of important + + + caution must not occur among the children or descendants of note + danger must not occur among the children or descendants of note + important must not occur among the children or descendants of note + note must not occur among the children or descendants of note + tip must not occur among the children or descendants of note + warning must not occur among the children or descendants of note + + + caution must not occur among the children or descendants of tip + danger must not occur among the children or descendants of tip + important must not occur among the children or descendants of tip + note must not occur among the children or descendants of tip + tip must not occur among the children or descendants of tip + warning must not occur among the children or descendants of tip + + + caution must not occur among the children or descendants of warning + danger must not occur among the children or descendants of warning + important must not occur among the children or descendants of warning + note must not occur among the children or descendants of warning + tip must not occur among the children or descendants of warning + warning must not occur among the children or descendants of warning + + + caution must not occur among the children or descendants of caption + danger must not occur among the children or descendants of caption + equation must not occur among the children or descendants of caption + example must not occur among the children or descendants of caption + figure must not occur among the children or descendants of caption + important must not occur among the children or descendants of caption + note must not occur among the children or descendants of caption + sidebar must not occur among the children or descendants of caption + table must not occur among the children or descendants of caption + task must not occur among the children or descendants of caption + tip must not occur among the children or descendants of caption + warning must not occur among the children or descendants of caption + + + equation must not occur among the children or descendants of equation + example must not occur among the children or descendants of equation + figure must not occur among the children or descendants of equation + table must not occur among the children or descendants of equation + + + equation must not occur among the children or descendants of example + example must not occur among the children or descendants of example + figure must not occur among the children or descendants of example + table must not occur among the children or descendants of example + + + equation must not occur among the children or descendants of figure + example must not occur among the children or descendants of figure + figure must not occur among the children or descendants of figure + table must not occur among the children or descendants of figure + + + equation must not occur among the children or descendants of table + example must not occur among the children or descendants of table + figure must not occur among the children or descendants of table + + + caution must not occur among the children or descendants of footnote + danger must not occur among the children or descendants of footnote + epigraph must not occur among the children or descendants of footnote + equation must not occur among the children or descendants of footnote + example must not occur among the children or descendants of footnote + figure must not occur among the children or descendants of footnote + footnote must not occur among the children or descendants of footnote + important must not occur among the children or descendants of footnote + note must not occur among the children or descendants of footnote + sidebar must not occur among the children or descendants of footnote + table must not occur among the children or descendants of footnote + task must not occur among the children or descendants of footnote + tip must not occur among the children or descendants of footnote + warning must not occur among the children or descendants of footnote + + + sidebar must not occur among the children or descendants of sidebar + + + informaltable must not occur among the children or descendants of entry + table must not occur among the children or descendants of entry + + + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + Indexterm 'startref' type constraint + + @startref on indexterm must point to a startofrange indexterm. + @startref on indexterm must point to an indexterm. + + + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + diff --git a/catalog/docbook5.2/sch/dbitsxi.sch b/catalog/docbook5.2/sch/dbitsxi.sch new file mode 100755 index 0000000..8f09d76 --- /dev/null +++ b/catalog/docbook5.2/sch/dbitsxi.sch @@ -0,0 +1,609 @@ + + + + + + + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + caution must not occur among the children or descendants of caution + danger must not occur among the children or descendants of caution + important must not occur among the children or descendants of caution + note must not occur among the children or descendants of caution + tip must not occur among the children or descendants of caution + warning must not occur among the children or descendants of caution + + + caution must not occur among the children or descendants of danger + danger must not occur among the children or descendants of danger + important must not occur among the children or descendants of danger + note must not occur among the children or descendants of danger + tip must not occur among the children or descendants of danger + warning must not occur among the children or descendants of danger + + + caution must not occur among the children or descendants of important + danger must not occur among the children or descendants of important + important must not occur among the children or descendants of important + note must not occur among the children or descendants of important + tip must not occur among the children or descendants of important + warning must not occur among the children or descendants of important + + + caution must not occur among the children or descendants of note + danger must not occur among the children or descendants of note + important must not occur among the children or descendants of note + note must not occur among the children or descendants of note + tip must not occur among the children or descendants of note + warning must not occur among the children or descendants of note + + + caution must not occur among the children or descendants of tip + danger must not occur among the children or descendants of tip + important must not occur among the children or descendants of tip + note must not occur among the children or descendants of tip + tip must not occur among the children or descendants of tip + warning must not occur among the children or descendants of tip + + + caution must not occur among the children or descendants of warning + danger must not occur among the children or descendants of warning + important must not occur among the children or descendants of warning + note must not occur among the children or descendants of warning + tip must not occur among the children or descendants of warning + warning must not occur among the children or descendants of warning + + + caution must not occur among the children or descendants of caption + danger must not occur among the children or descendants of caption + equation must not occur among the children or descendants of caption + example must not occur among the children or descendants of caption + figure must not occur among the children or descendants of caption + important must not occur among the children or descendants of caption + note must not occur among the children or descendants of caption + sidebar must not occur among the children or descendants of caption + table must not occur among the children or descendants of caption + task must not occur among the children or descendants of caption + tip must not occur among the children or descendants of caption + warning must not occur among the children or descendants of caption + + + equation must not occur among the children or descendants of equation + example must not occur among the children or descendants of equation + figure must not occur among the children or descendants of equation + table must not occur among the children or descendants of equation + + + equation must not occur among the children or descendants of example + example must not occur among the children or descendants of example + figure must not occur among the children or descendants of example + table must not occur among the children or descendants of example + + + equation must not occur among the children or descendants of figure + example must not occur among the children or descendants of figure + figure must not occur among the children or descendants of figure + table must not occur among the children or descendants of figure + + + equation must not occur among the children or descendants of table + example must not occur among the children or descendants of table + figure must not occur among the children or descendants of table + + + caution must not occur among the children or descendants of footnote + danger must not occur among the children or descendants of footnote + epigraph must not occur among the children or descendants of footnote + equation must not occur among the children or descendants of footnote + example must not occur among the children or descendants of footnote + figure must not occur among the children or descendants of footnote + footnote must not occur among the children or descendants of footnote + important must not occur among the children or descendants of footnote + note must not occur among the children or descendants of footnote + sidebar must not occur among the children or descendants of footnote + table must not occur among the children or descendants of footnote + task must not occur among the children or descendants of footnote + tip must not occur among the children or descendants of footnote + warning must not occur among the children or descendants of footnote + + + sidebar must not occur among the children or descendants of sidebar + + + informaltable must not occur among the children or descendants of entry + table must not occur among the children or descendants of entry + + + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + Indexterm 'startref' type constraint + + @startref on indexterm must point to a startofrange indexterm. + @startref on indexterm must point to an indexterm. + + + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + diff --git a/catalog/docbook5.2/sch/docbook.sch b/catalog/docbook5.2/sch/docbook.sch new file mode 100755 index 0000000..8f09d76 --- /dev/null +++ b/catalog/docbook5.2/sch/docbook.sch @@ -0,0 +1,609 @@ + + + + + + + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + caution must not occur among the children or descendants of caution + danger must not occur among the children or descendants of caution + important must not occur among the children or descendants of caution + note must not occur among the children or descendants of caution + tip must not occur among the children or descendants of caution + warning must not occur among the children or descendants of caution + + + caution must not occur among the children or descendants of danger + danger must not occur among the children or descendants of danger + important must not occur among the children or descendants of danger + note must not occur among the children or descendants of danger + tip must not occur among the children or descendants of danger + warning must not occur among the children or descendants of danger + + + caution must not occur among the children or descendants of important + danger must not occur among the children or descendants of important + important must not occur among the children or descendants of important + note must not occur among the children or descendants of important + tip must not occur among the children or descendants of important + warning must not occur among the children or descendants of important + + + caution must not occur among the children or descendants of note + danger must not occur among the children or descendants of note + important must not occur among the children or descendants of note + note must not occur among the children or descendants of note + tip must not occur among the children or descendants of note + warning must not occur among the children or descendants of note + + + caution must not occur among the children or descendants of tip + danger must not occur among the children or descendants of tip + important must not occur among the children or descendants of tip + note must not occur among the children or descendants of tip + tip must not occur among the children or descendants of tip + warning must not occur among the children or descendants of tip + + + caution must not occur among the children or descendants of warning + danger must not occur among the children or descendants of warning + important must not occur among the children or descendants of warning + note must not occur among the children or descendants of warning + tip must not occur among the children or descendants of warning + warning must not occur among the children or descendants of warning + + + caution must not occur among the children or descendants of caption + danger must not occur among the children or descendants of caption + equation must not occur among the children or descendants of caption + example must not occur among the children or descendants of caption + figure must not occur among the children or descendants of caption + important must not occur among the children or descendants of caption + note must not occur among the children or descendants of caption + sidebar must not occur among the children or descendants of caption + table must not occur among the children or descendants of caption + task must not occur among the children or descendants of caption + tip must not occur among the children or descendants of caption + warning must not occur among the children or descendants of caption + + + equation must not occur among the children or descendants of equation + example must not occur among the children or descendants of equation + figure must not occur among the children or descendants of equation + table must not occur among the children or descendants of equation + + + equation must not occur among the children or descendants of example + example must not occur among the children or descendants of example + figure must not occur among the children or descendants of example + table must not occur among the children or descendants of example + + + equation must not occur among the children or descendants of figure + example must not occur among the children or descendants of figure + figure must not occur among the children or descendants of figure + table must not occur among the children or descendants of figure + + + equation must not occur among the children or descendants of table + example must not occur among the children or descendants of table + figure must not occur among the children or descendants of table + + + caution must not occur among the children or descendants of footnote + danger must not occur among the children or descendants of footnote + epigraph must not occur among the children or descendants of footnote + equation must not occur among the children or descendants of footnote + example must not occur among the children or descendants of footnote + figure must not occur among the children or descendants of footnote + footnote must not occur among the children or descendants of footnote + important must not occur among the children or descendants of footnote + note must not occur among the children or descendants of footnote + sidebar must not occur among the children or descendants of footnote + table must not occur among the children or descendants of footnote + task must not occur among the children or descendants of footnote + tip must not occur among the children or descendants of footnote + warning must not occur among the children or descendants of footnote + + + sidebar must not occur among the children or descendants of sidebar + + + informaltable must not occur among the children or descendants of entry + table must not occur among the children or descendants of entry + + + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + Indexterm 'startref' type constraint + + @startref on indexterm must point to a startofrange indexterm. + @startref on indexterm must point to an indexterm. + + + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + diff --git a/catalog/docbook5.2/sch/docbookxi.sch b/catalog/docbook5.2/sch/docbookxi.sch new file mode 100755 index 0000000..8f09d76 --- /dev/null +++ b/catalog/docbook5.2/sch/docbookxi.sch @@ -0,0 +1,609 @@ + + + + + + + + Callout cross reference constraint + + @arearefs on callout must point to a areaset, area, or co. + + + + Cardinality of segments and titles + + The number of seg elements must be the same as the number of segtitle elements in the parent segmentedlist + + + + Constraint cross reference constraint + + @linkend on constraint must point to a constraintdef. + + + + Element exclusion + + annotation must not occur among the children or descendants of annotation + + + caution must not occur among the children or descendants of caution + danger must not occur among the children or descendants of caution + important must not occur among the children or descendants of caution + note must not occur among the children or descendants of caution + tip must not occur among the children or descendants of caution + warning must not occur among the children or descendants of caution + + + caution must not occur among the children or descendants of danger + danger must not occur among the children or descendants of danger + important must not occur among the children or descendants of danger + note must not occur among the children or descendants of danger + tip must not occur among the children or descendants of danger + warning must not occur among the children or descendants of danger + + + caution must not occur among the children or descendants of important + danger must not occur among the children or descendants of important + important must not occur among the children or descendants of important + note must not occur among the children or descendants of important + tip must not occur among the children or descendants of important + warning must not occur among the children or descendants of important + + + caution must not occur among the children or descendants of note + danger must not occur among the children or descendants of note + important must not occur among the children or descendants of note + note must not occur among the children or descendants of note + tip must not occur among the children or descendants of note + warning must not occur among the children or descendants of note + + + caution must not occur among the children or descendants of tip + danger must not occur among the children or descendants of tip + important must not occur among the children or descendants of tip + note must not occur among the children or descendants of tip + tip must not occur among the children or descendants of tip + warning must not occur among the children or descendants of tip + + + caution must not occur among the children or descendants of warning + danger must not occur among the children or descendants of warning + important must not occur among the children or descendants of warning + note must not occur among the children or descendants of warning + tip must not occur among the children or descendants of warning + warning must not occur among the children or descendants of warning + + + caution must not occur among the children or descendants of caption + danger must not occur among the children or descendants of caption + equation must not occur among the children or descendants of caption + example must not occur among the children or descendants of caption + figure must not occur among the children or descendants of caption + important must not occur among the children or descendants of caption + note must not occur among the children or descendants of caption + sidebar must not occur among the children or descendants of caption + table must not occur among the children or descendants of caption + task must not occur among the children or descendants of caption + tip must not occur among the children or descendants of caption + warning must not occur among the children or descendants of caption + + + equation must not occur among the children or descendants of equation + example must not occur among the children or descendants of equation + figure must not occur among the children or descendants of equation + table must not occur among the children or descendants of equation + + + equation must not occur among the children or descendants of example + example must not occur among the children or descendants of example + figure must not occur among the children or descendants of example + table must not occur among the children or descendants of example + + + equation must not occur among the children or descendants of figure + example must not occur among the children or descendants of figure + figure must not occur among the children or descendants of figure + table must not occur among the children or descendants of figure + + + equation must not occur among the children or descendants of table + example must not occur among the children or descendants of table + figure must not occur among the children or descendants of table + + + caution must not occur among the children or descendants of footnote + danger must not occur among the children or descendants of footnote + epigraph must not occur among the children or descendants of footnote + equation must not occur among the children or descendants of footnote + example must not occur among the children or descendants of footnote + figure must not occur among the children or descendants of footnote + footnote must not occur among the children or descendants of footnote + important must not occur among the children or descendants of footnote + note must not occur among the children or descendants of footnote + sidebar must not occur among the children or descendants of footnote + table must not occur among the children or descendants of footnote + task must not occur among the children or descendants of footnote + tip must not occur among the children or descendants of footnote + warning must not occur among the children or descendants of footnote + + + sidebar must not occur among the children or descendants of sidebar + + + informaltable must not occur among the children or descendants of entry + table must not occur among the children or descendants of entry + + + + Footnote reference type constraint + + @linkend on footnoteref must point to a footnote. + + + + Glossary 'firstterm' type constraint + + @linkend on firstterm must point to a glossentry. + + + + Glossary 'glossterm' type constraint + + @linkend on glossterm must point to a glossentry. + + + + Glossary 'seealso' type constraint + + @otherterm on glossseealso must point to a glossentry. + + + + Glossary term definition constraint + + A termdef must contain exactly one firstterm + + + + Glosssary 'see' type constraint + + @otherterm on glosssee must point to a glossentry. + + + + Indexterm 'startref' type constraint + + @startref on indexterm must point to a startofrange indexterm. + @startref on indexterm must point to an indexterm. + + + + Production recap cross reference constraint + + @linkend on productionrecap must point to a production. + + + + Root must have version + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + If this element is the root element, it must have a version attribute. + + + + Suffix fixup must be specified + + If a suffix is specified, suffix ID fixup must also be specified. + + + + Synopsis fragment type constraint + + @linkend on synopfragmentref must point to a synopfragment. + + + + XLink arc placement + + An XLink arc type element must occur as the direct child of an XLink extended type element. + + + + XLink extended placement + + An XLink extended type element may not occur as the direct child of an XLink extended type element. + + + + XLink locator placement + + An XLink locator type element must occur as the direct child of an XLink extended type element. + + + + XLink resource placement + + An XLink resource type element must occur as the direct child of an XLink extended type element. + + + + XLink title placement + + An XLink title type element must occur as the direct child of an XLink extended, locator, or arc type element. + + + diff --git a/catalog/xhtml1.1/xhtml-attribs-1.mod b/catalog/xhtml1.1/xhtml-attribs-1.mod new file mode 100644 index 0000000..2567b46 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-attribs-1.mod @@ -0,0 +1,142 @@ + + + + + + + + + +]]> + + + + +]]> + + + + +]]> + + + + + + + + +]]> + + + + + + + + + + + +]]> + + +]]> + + + + + + + + + + + + + + + + diff --git a/catalog/xhtml1.1/xhtml-base-1.mod b/catalog/xhtml1.1/xhtml-base-1.mod new file mode 100644 index 0000000..ea50e42 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-base-1.mod @@ -0,0 +1,53 @@ + + + + + + + + + + + + +]]> + + + +]]> + + + + diff --git a/catalog/xhtml1.1/xhtml-bdo-1.mod b/catalog/xhtml1.1/xhtml-bdo-1.mod new file mode 100644 index 0000000..b47dad6 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-bdo-1.mod @@ -0,0 +1,47 @@ + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-blkphras-1.mod b/catalog/xhtml1.1/xhtml-blkphras-1.mod new file mode 100644 index 0000000..1b2fc45 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-blkphras-1.mod @@ -0,0 +1,164 @@ + + + + + + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-blkpres-1.mod b/catalog/xhtml1.1/xhtml-blkpres-1.mod new file mode 100644 index 0000000..62f1da4 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-blkpres-1.mod @@ -0,0 +1,40 @@ + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-blkstruct-1.mod b/catalog/xhtml1.1/xhtml-blkstruct-1.mod new file mode 100644 index 0000000..49fcc82 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-blkstruct-1.mod @@ -0,0 +1,57 @@ + + + + + + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-charent-1.mod b/catalog/xhtml1.1/xhtml-charent-1.mod new file mode 100644 index 0000000..bfe8616 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-charent-1.mod @@ -0,0 +1,39 @@ + + + + + + + +%xhtml-lat1; + + +%xhtml-symbol; + + +%xhtml-special; + + diff --git a/catalog/xhtml1.1/xhtml-csismap-1.mod b/catalog/xhtml1.1/xhtml-csismap-1.mod new file mode 100644 index 0000000..8283031 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-csismap-1.mod @@ -0,0 +1,114 @@ + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-datatypes-1.mod b/catalog/xhtml1.1/xhtml-datatypes-1.mod new file mode 100644 index 0000000..01383fa --- /dev/null +++ b/catalog/xhtml1.1/xhtml-datatypes-1.mod @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xhtml1.1/xhtml-edit-1.mod b/catalog/xhtml1.1/xhtml-edit-1.mod new file mode 100644 index 0000000..28dd01c --- /dev/null +++ b/catalog/xhtml1.1/xhtml-edit-1.mod @@ -0,0 +1,66 @@ + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-events-1.mod b/catalog/xhtml1.1/xhtml-events-1.mod new file mode 100644 index 0000000..0a3b183 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-events-1.mod @@ -0,0 +1,135 @@ + + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xhtml1.1/xhtml-form-1.mod b/catalog/xhtml1.1/xhtml-form-1.mod new file mode 100644 index 0000000..44493d3 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-form-1.mod @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-framework-1.mod b/catalog/xhtml1.1/xhtml-framework-1.mod new file mode 100644 index 0000000..f0da5a8 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-framework-1.mod @@ -0,0 +1,97 @@ + + + + + + + + +%xhtml-arch.mod;]]> + + + +%xhtml-notations.mod;]]> + + + +%xhtml-datatypes.mod;]]> + + + +%xhtml-xlink.mod; + + + +%xhtml-qname.mod;]]> + + + +%xhtml-events.mod;]]> + + + +%xhtml-attribs.mod;]]> + + + +%xhtml-model.redecl; + + + +%xhtml-model.mod;]]> + + + +%xhtml-charent.mod;]]> + + diff --git a/catalog/xhtml1.1/xhtml-hypertext-1.mod b/catalog/xhtml1.1/xhtml-hypertext-1.mod new file mode 100644 index 0000000..6c00720 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-hypertext-1.mod @@ -0,0 +1,54 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-image-1.mod b/catalog/xhtml1.1/xhtml-image-1.mod new file mode 100644 index 0000000..6d3742d --- /dev/null +++ b/catalog/xhtml1.1/xhtml-image-1.mod @@ -0,0 +1,51 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-inlphras-1.mod b/catalog/xhtml1.1/xhtml-inlphras-1.mod new file mode 100644 index 0000000..b2f6eab --- /dev/null +++ b/catalog/xhtml1.1/xhtml-inlphras-1.mod @@ -0,0 +1,203 @@ + + + + + + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-inlpres-1.mod b/catalog/xhtml1.1/xhtml-inlpres-1.mod new file mode 100644 index 0000000..5d90096 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-inlpres-1.mod @@ -0,0 +1,138 @@ + + + + + + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-inlstruct-1.mod b/catalog/xhtml1.1/xhtml-inlstruct-1.mod new file mode 100644 index 0000000..422dd23 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-inlstruct-1.mod @@ -0,0 +1,62 @@ + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-link-1.mod b/catalog/xhtml1.1/xhtml-link-1.mod new file mode 100644 index 0000000..2a18daf --- /dev/null +++ b/catalog/xhtml1.1/xhtml-link-1.mod @@ -0,0 +1,59 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-list-1.mod b/catalog/xhtml1.1/xhtml-list-1.mod new file mode 100644 index 0000000..fe95802 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-list-1.mod @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-meta-1.mod b/catalog/xhtml1.1/xhtml-meta-1.mod new file mode 100644 index 0000000..480d8d5 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-meta-1.mod @@ -0,0 +1,47 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-notations-1.mod b/catalog/xhtml1.1/xhtml-notations-1.mod new file mode 100644 index 0000000..a1f44a6 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-notations-1.mod @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xhtml1.1/xhtml-object-1.mod b/catalog/xhtml1.1/xhtml-object-1.mod new file mode 100644 index 0000000..4ad5abc --- /dev/null +++ b/catalog/xhtml1.1/xhtml-object-1.mod @@ -0,0 +1,60 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-param-1.mod b/catalog/xhtml1.1/xhtml-param-1.mod new file mode 100644 index 0000000..f873388 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-param-1.mod @@ -0,0 +1,48 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-pres-1.mod b/catalog/xhtml1.1/xhtml-pres-1.mod new file mode 100644 index 0000000..cb3d69b --- /dev/null +++ b/catalog/xhtml1.1/xhtml-pres-1.mod @@ -0,0 +1,38 @@ + + + + + + + + +%xhtml-inlpres.mod;]]> + + + +%xhtml-blkpres.mod;]]> + + diff --git a/catalog/xhtml1.1/xhtml-qname-1.mod b/catalog/xhtml1.1/xhtml-qname-1.mod new file mode 100644 index 0000000..5f15d16 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-qname-1.mod @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + +%xhtml-qname-extra.mod; + + + + + + + + + +]]> + + + + + + + + + + + + + + + + + + + +]]> + + + + + + + +]]> + + + + +%xhtml-qname.redecl; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xhtml1.1/xhtml-ruby-1.mod b/catalog/xhtml1.1/xhtml-ruby-1.mod new file mode 100644 index 0000000..a44bb3f --- /dev/null +++ b/catalog/xhtml1.1/xhtml-ruby-1.mod @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + +]]> + +]]> + + + +]]> + + + + + + + + + + + + + +]]> + + + + + + +]]> + + + + + + +]]> +]]> + + + + + + + +]]> + + + + + + + + +]]> + + + + +]]> +]]> + + + + + + +]]> +]]> + + + + + + + + + + +]]> + + + + + +]]> + + + + + +]]> +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> +]]> +]]> + + diff --git a/catalog/xhtml1.1/xhtml-script-1.mod b/catalog/xhtml1.1/xhtml-script-1.mod new file mode 100644 index 0000000..573eff9 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-script-1.mod @@ -0,0 +1,67 @@ + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-ssismap-1.mod b/catalog/xhtml1.1/xhtml-ssismap-1.mod new file mode 100644 index 0000000..31a9a0b --- /dev/null +++ b/catalog/xhtml1.1/xhtml-ssismap-1.mod @@ -0,0 +1,32 @@ + + + + + + + + + + + diff --git a/catalog/xhtml1.1/xhtml-struct-1.mod b/catalog/xhtml1.1/xhtml-struct-1.mod new file mode 100644 index 0000000..7530a2d --- /dev/null +++ b/catalog/xhtml1.1/xhtml-struct-1.mod @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-style-1.mod b/catalog/xhtml1.1/xhtml-style-1.mod new file mode 100644 index 0000000..9246993 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-style-1.mod @@ -0,0 +1,48 @@ + + + + + + + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-table-1.mod b/catalog/xhtml1.1/xhtml-table-1.mod new file mode 100644 index 0000000..b6eba8d --- /dev/null +++ b/catalog/xhtml1.1/xhtml-table-1.mod @@ -0,0 +1,333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + + + + + + + +]]> + + + +]]> + + + + + + +]]> + + + +]]> + + diff --git a/catalog/xhtml1.1/xhtml-text-1.mod b/catalog/xhtml1.1/xhtml-text-1.mod new file mode 100644 index 0000000..ab183a3 --- /dev/null +++ b/catalog/xhtml1.1/xhtml-text-1.mod @@ -0,0 +1,52 @@ + + + + + + + + +%xhtml-inlstruct.mod;]]> + + + +%xhtml-inlphras.mod;]]> + + + +%xhtml-blkstruct.mod;]]> + + + +%xhtml-blkphras.mod;]]> + + diff --git a/catalog/xliff2.2/catalog.xml b/catalog/xliff2.2/catalog.xml new file mode 100644 index 0000000..d4b7160 --- /dev/null +++ b/catalog/xliff2.2/catalog.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/fs.xsd b/catalog/xliff2.2/fs.xsd new file mode 100644 index 0000000..2561254 --- /dev/null +++ b/catalog/xliff2.2/fs.xsd @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/glossary.xsd b/catalog/xliff2.2/glossary.xsd new file mode 100644 index 0000000..7b3d060 --- /dev/null +++ b/catalog/xliff2.2/glossary.xsd @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/readme.txt b/catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/readme.txt new file mode 100644 index 0000000..9485b98 --- /dev/null +++ b/catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/readme.txt @@ -0,0 +1,3 @@ +IMPORTANT WARNING +Schema copies in this sub-folder are provided solely for implementers convenience and are NOT a part of the OASIS multipart product. +These schemas belong to their respective owners and their use is governed by their owners' respective IPR policies. diff --git a/catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/w3c/xml.xsd b/catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/w3c/xml.xsd new file mode 100644 index 0000000..aea7d0d --- /dev/null +++ b/catalog/xliff2.2/informativeCopiesOf3rdPartySchemas/w3c/xml.xsd @@ -0,0 +1,287 @@ + + + + + + +
+

About the XML namespace

+ +
+

+ This schema document describes the XML namespace, in a form + suitable for import by other schema documents. +

+

+ See + http://www.w3.org/XML/1998/namespace.html and + + http://www.w3.org/TR/REC-xml for information + about this namespace. +

+

+ Note that local names in this namespace are intended to be + defined only by the World Wide Web Consortium or its subgroups. + The names currently defined in this namespace are listed below. + They should not be used with conflicting semantics by any Working + Group, specification, or document instance. +

+

+ See further below in this document for more information about how to refer to this schema document from your own + XSD schema documents and about the + namespace-versioning policy governing this schema document. +

+
+
+
+
+ + + + +
+ +

lang (as an attribute name)

+

+ denotes an attribute whose value + is a language code for the natural language of the content of + any element; its value is inherited. This name is reserved + by virtue of its definition in the XML specification.

+ +
+
+

Notes

+

+ Attempting to install the relevant ISO 2- and 3-letter + codes as the enumerated possible values is probably never + going to be a realistic possibility. +

+

+ See BCP 47 at + http://www.rfc-editor.org/rfc/bcp/bcp47.txt + and the IANA language subtag registry at + + http://www.iana.org/assignments/language-subtag-registry + for further information. +

+

+ The union allows for the 'un-declaration' of xml:lang with + the empty string. +

+
+
+
+ + + + + + + + + +
+ + + + +
+ +

space (as an attribute name)

+

+ denotes an attribute whose + value is a keyword indicating what whitespace processing + discipline is intended for the content of the element; its + value is inherited. This name is reserved by virtue of its + definition in the XML specification.

+ +
+
+
+ + + + + + +
+ + + +
+ +

base (as an attribute name)

+

+ denotes an attribute whose value + provides a URI to be used as the base for interpreting any + relative URIs in the scope of the element on which it + appears; its value is inherited. This name is reserved + by virtue of its definition in the XML Base specification.

+ +

+ See http://www.w3.org/TR/xmlbase/ + for information about this attribute. +

+
+
+
+
+ + + + +
+ +

id (as an attribute name)

+

+ denotes an attribute whose value + should be interpreted as if declared to be of type ID. + This name is reserved by virtue of its definition in the + xml:id specification.

+ +

+ See http://www.w3.org/TR/xml-id/ + for information about this attribute. +

+
+
+
+
+ + + + + + + + + + +
+ +

Father (in any context at all)

+ +
+

+ denotes Jon Bosak, the chair of + the original XML Working Group. This name is reserved by + the following decision of the W3C XML Plenary and + XML Coordination groups: +

+
+

+ In appreciation for his vision, leadership and + dedication the W3C XML Plenary on this 10th day of + February, 2000, reserves for Jon Bosak in perpetuity + the XML name "xml:Father". +

+
+
+
+
+
+ + + +
+

About this schema document

+ +
+

+ This schema defines attributes and an attribute group suitable + for use by schemas wishing to allow xml:base, + xml:lang, xml:space or + xml:id attributes on elements they define. +

+

+ To enable this, such a schema must import this schema for + the XML namespace, e.g. as follows: +

+
+          <schema . . .>
+           . . .
+           <import namespace="http://www.w3.org/XML/1998/namespace"
+                      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+     
+

+ or +

+
+           <import namespace="http://www.w3.org/XML/1998/namespace"
+                      schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
+     
+

+ Subsequently, qualified reference to any of the attributes or the + group defined below will have the desired effect, e.g. +

+
+          <type . . .>
+           . . .
+           <attributeGroup ref="xml:specialAttrs"/>
+     
+

+ will define a type which will schema-validate an instance element + with any of those attributes. +

+
+
+
+
+ + + +
+

Versioning policy for this schema document

+
+

+ In keeping with the XML Schema WG's standard versioning + policy, this schema document will persist at + + http://www.w3.org/2009/01/xml.xsd. +

+

+ At the date of issue it can also be found at + + http://www.w3.org/2001/xml.xsd. +

+

+ The schema document at that URI may however change in the future, + in order to remain compatible with the latest version of XML + Schema itself, or with the XML namespace itself. In other words, + if the XML Schema or XML namespaces change, the version of this + document at + http://www.w3.org/2001/xml.xsd + + will change accordingly; the version at + + http://www.w3.org/2009/01/xml.xsd + + will not change. +

+

+ Previous dated (and unchanging) versions of this schema + document are at: +

+ +
+
+
+
+ +
+ diff --git a/catalog/xliff2.2/its.xsd b/catalog/xliff2.2/its.xsd new file mode 100644 index 0000000..1f99488 --- /dev/null +++ b/catalog/xliff2.2/its.xsd @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/itsm.xsd b/catalog/xliff2.2/itsm.xsd new file mode 100644 index 0000000..ce937e4 --- /dev/null +++ b/catalog/xliff2.2/itsm.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/catalog/xliff2.2/matches.xsd b/catalog/xliff2.2/matches.xsd new file mode 100644 index 0000000..da4fc0c --- /dev/null +++ b/catalog/xliff2.2/matches.xsd @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/metadata.xsd b/catalog/xliff2.2/metadata.xsd new file mode 100644 index 0000000..233c10b --- /dev/null +++ b/catalog/xliff2.2/metadata.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/plural_gender_select.xsd b/catalog/xliff2.2/plural_gender_select.xsd new file mode 100644 index 0000000..4d3a75e --- /dev/null +++ b/catalog/xliff2.2/plural_gender_select.xsd @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/catalog/xliff2.2/resource_data.xsd b/catalog/xliff2.2/resource_data.xsd new file mode 100644 index 0000000..665c61f --- /dev/null +++ b/catalog/xliff2.2/resource_data.xsd @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/size_restriction.xsd b/catalog/xliff2.2/size_restriction.xsd new file mode 100644 index 0000000..6ceeafb --- /dev/null +++ b/catalog/xliff2.2/size_restriction.xsd @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/validation.xsd b/catalog/xliff2.2/validation.xsd new file mode 100644 index 0000000..d5c35cc --- /dev/null +++ b/catalog/xliff2.2/validation.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/catalog/xliff2.2/xliff_core_2.2.xsd b/catalog/xliff2.2/xliff_core_2.2.xsd new file mode 100644 index 0000000..32c48b2 --- /dev/null +++ b/catalog/xliff2.2/xliff_core_2.2.xsd @@ -0,0 +1,421 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Version values: 2.0 and 2.1 are allowed for backward compatibility. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/html/about.html b/html/about.html index 089cc08..50244e3 100644 --- a/html/about.html +++ b/html/about.html @@ -11,7 +11,7 @@

Swordfish

about box -

Copyright © 2007 - 2023 Maxprograms

+

Copyright © 2007 - 2024 Maxprograms

diff --git a/jars/openxliff.jar b/jars/openxliff.jar index a49dfe27196ba28c3674484dcf16430530b6bb91..981dceb917fc563f4cb868603cce1d9c8df1b811 100644 GIT binary patch delta 500109 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%0AyUhtDPKmANvdlVa8IL~W5{(7N@PVFk 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

AWApxiJ@JJlzGk+k?J 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�dgZ7iTM#{L=+9Nf1o?(*42n9`00 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%0D>xH_^3@gV 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

Q*x% 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Ð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

jrox?$ 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

    o=FYU4Fs4K0)symx9N+w$= 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%0DbzQKaK-x*nurD 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

    (mXGe<5X6X!C;`5+;V&61 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

    Z%+eU6qPGF|i9_MBzu_F){5e^t-0h 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%0A||hcuZkx5N$Nte%pm0DxM-IE;f5^@+R$ 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

      Q|_=}h}*cIt(7djVPERS&yB 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�x^`oqeVg12a|asPd@+H9{vy}Y9Sb-6Tu;G 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%0ATY4$Bd~neyMQ?x4)B{% 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 OYYXBbe3A|1Li|4$Q`(jQ diff --git a/jars/xmljava.jar b/jars/xmljava.jar index d02b85865c9665ceae06feb96b1c5b3aa87b55d7..f1c5bcc56155b00836447d97467d94006228f156 100644 GIT binary patch delta 52148 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

      4q}0Qgzia_)=k{`^Z7rqxZY_Cs z9tDxE5dA@}2mFiB6lssO-u|rn)jKa0_R9H}4`ZsO?uaUfefn|m)0sAEgTR;M63ote>cUD_6v2O31Fj#5q$mi4}18o7MeM6)OTY!uw zvuMGmuP2$^YQ>-}K;PSCbyQJVLw?GdMR?TN$(O=*-9`iY)k1K5VjUL4EbZe_VNb~& zTB~(SA%iAJ4+eC2q*c^C>EtMTMq@H2YD0~3Ckam?-ZHWYqW)89LSZmwlL~4nRCUlD zEg1iZ_A5-PB2)IsLQG8ugSVzzu}(ykj=NJwURl>6M2ZpL51L39J|z+Aj;jM-9USgW z&((`FpoL%G-IK~t+@MJOSv%cg-L07I&@nWwCd-8K8ggXG~W)NUvk$ ztZBAl6(sYA@h*bYF)ncAnz2?%fh%yN|iA4ydp{sIp?$?5Q+-N$083 zMu&08bd8*K0C%8STPBtWTR=2u3m{AqaglO=KL6!)v>mZO zA-fI~Yob0KG9edsSn3LHto_Ls%qW5}<|L&roSa;Xumw=m)3x7zHQU`x+o9S)3)%vX zgj*)yeq}q|uQjK`d=3`fzP69bBp4dt7P8b%RW$e}ZGg6b_GnET15#PtLsJ`>)6ZWk z<-jSsi8y8a*o2Bq zW1S`Mh(dDOA=iFF$VMU$uD6Nb_Eix^Ut>>&_YHrN8 zj4b-+jzUZ8*=4h~a^@IbCwX33TUkTEAWFno-~i+;x$fQwm9O$Gg`u$>g;DF=pLl>p zQn5*6_W)UA`Jh%pTT!Vu0jcsx_xl&)FmW0|8OPjeRn;0%Zr)isNOX&vk4H~QP?VIq z%EGC$i8teDhJYXqcjck*7Q-qtD0%YaDweIJ<+p<9z@L*~2?=h~sWv_fVqnZ*8Dldz z+oEZ7g~-3q-#3Xno3zYY>{%G1+kS*M-u{wVV%r^Ja>7Z;X5JLfw1!M9zV zd;6`%B^IaoSBC=^BeO@>bUjmJ-oGT9@o{s&;&~@n!DQ=85hrm4A?#_tW(Y)vo`gJ7 zqQHq&8E8_PWu3Z*^TEOA8)Gn6|LwF}&Nd0$w%(en3Eu>U61uTdRf?r4t>=SO>vKjG zYn%o^T|k~Z`glr><wJwf>Ch#H zMDb=Nn!R^gscxAx4&f1uGff0&$K>CUM-sm0-eDiY@N=ZqWQaxOO0RWN5Hzw9g+;{3 zMP#(b?G5N=PUcS%!R%oL-lM{VR!tP6Q=T4aEBwzp9-@=7fs{HNo^Zh%L9W#+KHa9pEB z$mn~!H&x^!kDikcad)kXppUJ`41&*7T*)QysIPEUPpb9mj!!p!F?^YMn>SPiS@IIJL7bmGR`&r_|la6Ju=eEQ7)_ie5!6w@V+g1^oLPu`w z+d}x;<|dfk=BL!w9H22@x&PFOE%j(E=zzg7N;qXQ$&=5`8(oJES5smeXGjk9LhY7` zmbv0Z!#&{BT~s&ws*ceI1Xx0~mt~U0!Y`seIcc5ep1j*5s_U+RKfBm{+$&!Y@F{9t zYlyg7?7%rVO+LlKU2~B2>-op5Pl2X#MSb<>`yY_H0GC}sz_?nwxTz>4Lrm1#CQiAK zOaF$1Uls_6{%N^eZRD6AV+FAw7@r>!GWB3=eS*H$N~`~+_NDsEE(4Q+ZqF^>q_c$> zL3EE4vGwrl+f3D?L+eyu*G2ayhBmyH>17@^bWA%$Wh8F?8OPg5`Ee_6>rLn}$;0IN6!IWROemf+PX&@Wb^% z@`xbmE!#t(`Vi)+?7mn}zAnOP-$S9JcALo9J!WH9H(}i3qTy^=UT~IOHU3j?TDcLm zec>Lg9ydN2qg3Vi5l!)t7u392qf0ij02$=gCXI>ZNjmJh&xlSzhvM7289Y1fT&w$@ zsVUxzSwZr~q?5J}swucyTc?m9AWi zYO~#u#B~NbBkXl%26oN!Z)%TR*NwUidab@{RuwSzqL$Wr1vJteFyiUKN{SO(fXy=h zRo5_%nr4?(tXe_8l*-}!-epD%sW%s$Ov%3dNwS#ePgQ~qo)%DtT1rn}+EJV9Y><77 zNGP7b+RL_e%vshi>$V4}`n(j%liGH1(J81luH}N(QyN?y<7&C(&a4p3YMYC&y+=*^ z4|0T1rbL%lk0Y)4x7YLDemJSDuD`{78otN?Ol^w z0jNy{Hp#j3wF8H{tdwX0#8Pni?r$cMC+8@e8fgNoD?CSX@E)$Y_hZ^GKLWiRwns1f zAJ?8bbT-&=tVm_0P<&l7B$zvW!@l;i;OGmngpwsok+RV=jPiPK9o4pX9c1QZfix`%X^1f z~7JeY1W^Z zCBx<~PV3ibTK!Sl<2eY7!KAkaX%8Ty)u)&Gs?Z@W`+1wl5&zWpb;Hk^wz%ER8jcff z7*ZcZK^hlOVN_Z^xIX~Cp!(_g*-D@o()`>1Pv?s3+vuj9j#7J-chs%qsZ{MsRL#Botk`Vb_| z0CnN&w3rI*q)Ug4q~y1b)AkLR_yPI?PMN+flpml5TT#SIwkGg%WTuQ}E(*5{i}1gxXPY`c zBeYfo>UNgioN@+RCD@tj+o`}g4Eb}<^<6g~VZzEDD`iT{9n(S1Wa@$KQE^t{1U+zv zZuc+|=u~bpDTXi6R{D5aK!!h*#PbG4RUAtiMDMF|ah-|8#kQ?(^=1O^VX^wDDAz7wgD&{s9sABdC9E(&=EiX298vIv#4&(_;)sn0N2U=O1Vo7jSPX##6d>leAO_sQQZwWjHgX{#U*HwEk@gA5zYW> z!v+88L1Yjwr%6?a&<>u)yNQzQlttvOk=`@D5;hV@bSOOOajX#CXpPdPX?)a#F>c9r zxyg5EQ$Feopyl0nj0IZOKe(%Q=Y2NDWB^pAH@=Syt zKr?`ljKa-RRWbd1qr7wG@Hn4=+4^x@gpC6nP=H#!Kl0k<12Y58yPVTBWhwPSWgO2< z=He*7Ju-HYdfosF*S(b_BQc#l-6`TNqsxrZx9~Ghf#oxV{cC1u2YjdNG@`|ZVR|rG z9x&~U*$*d7x2DbxIsWWoE#{jXS{fIdtjmf! zD{auDTc^`^cD-vwG=FTKHkLXMzA#ik_gF<0bO~na;x$@b~d%+z4vToGlyUJ%fQhC}W71~3ds&LzmnoOv!>)jPg!=|} zhF>RsU5%!D5j6h9MSqvSvtTE6c>STP;z-Qcww}lHDlFP4EG)Oj@ZO}9HUL(dPIJB~Pym?T$#<754A}pXtp1WQVqas3tR*1aX%Otz!wn-Jauk2Fx_P5-c_&3RQS7Eb^zpMmsUa z@v=HAS?8Fz#u6;DtX8*;{G{R%KPrEzhZL|bUftU-RXOPZ?~=BzK;f}ke+MB(MwsIE zI%swT9bZR7l66qWXQMM4`*qGVXHO4G4Q#rLZpv)eJQ|`DOe3U-$?uSTwHF<#i_OHj zR(E_%7?EC&t05kMycgVLg+bcdwI&O5w*^IlXJ=zht9>QjxsawIvsiN2E zDB?$H%WkLHyjyVxa2qD#>3xoPm`11px?QO{j8SbWt$wHx`Ft1A22(1NjkVotDk_B^ zmglUUIM4LnduNFzmQs7oZ#`P#H?>m}$K-;X=&TLs?|DU_Zc5McxEE({yc|$a&fBmx zGg;MUFk3lL;pd}5_tqR-*9o-C$#$uP=@o6Ld=bFR&jzYJ_;gbSow>c2(w$joO^$;w z#d6HprYPKoFUAw2_qV=S9T9?HcH8cerChjuz>u4<``0X9W=ETT=?vIi_9FHR@BRnv zgZlBlqk~0D4JMO`l5gW8< zM(sAP`IZRXpNd0nu0NpOPXOov_zVb9>XhMN=F{;e?tZt4nisbG;}ISuX>{smn=M-n z*8cYGn+h?^K}=Z13BFsGUovy;!I>cDSWWy1b%2EI#*oNi5TgXKX|sJdng?NX03Lg0 zMG22p^p}JRFeUNTILE@$K+}>xs#zz@AMMx#jZ1eg+DtK; zN>00&dnRMjGKix$iea}Zwj3aq8BSu7H#~aO@Gh2Ss*gRut^i%@phsdco2TO@nV}E; z5@7QtWjq8Tt5I_rj`rOs8g0s*`MG*ONo$|zAW6;*gANU0(w~xjJ(f)`uul6PdpnpP z_jr_vJ0X>Y$@#h4bVo`Kj!#~GEhbsKc=rHvsumJfxeK$xR2dGGrm`*Oh)9X^(U;6B zSG*<#_bh(VPsrCzrwqynjI56Mf0lm&@=jyS1TM`k*v`dPx~> zMd2qcN52w>MKwlrx4YUJAKOt7*7ZK+PL%$;x8Gl+4W#ma+DI^sKen8rZ*hDw_pP{l z@^q;qK_L|bb2IkAI5u5z%g4x%BN5e|id$hOAt|ydH9-ssTZxBhud>Y4J|-!?2SzU) zxbk+ePu_t}3C0!CID_qK&VAR-GPqkv^~o843`5&Xm;-QjX?_p$v+X)|VDW zrX7$>>9Jb{-N_IMCMJL~WOsW`^S2ypdaAz z5hf+(3s$?`RBc>sO9IjF#VpMtt`61j(K+ibOfy&kJ5=vmB4GqaK28b+ z)vnz1_wUzA!F@T-RdVfYZ4@jYHjKA4&co@$Xf@4HP@28^A7OugguPxOIN%RutgW5P z*k4dIW_tso>kdQ@8_O3+n+Qpq6W{P zc(HCdS-}S9hm`L?Ix@-`w{BqdS1n&6=PMzPpiFP{v2it`@K*5tbOpY7!(7VCG_Yq@`|Zg$tX+jei$}4K+ zjpszYMBr?pZQ^a#3*O_YCTHpanb{__Vv6=v<}jR^uy0tf>=T~OY!nJwZQq=BSFg&s z3=uch>mIKp&e*0zr^O9uK@zwP%p|LEzQ+4o?V1t!Y?&#e?&=FyH`zF zCz%Wv*w=IVdw0?r)H*KFVZ5!utCGI?y-Pw3h!juG^|>Bb^|_AdbnZf$C9O_SClTWk zw)MmgGApmyT#KG@0f;o--Dx4<9T=0%=L78k2*tp0=8M|FNm39Hk%qG;S0_iaLV`u* zlVbT!FQv4xe~{UHY3jamM(xY4n7JJ0wSai$aj-|2?QShz?h=8w>M%R_5kWmGsh~@> zW}G|Lr@+`!=AZ#g@8Iz2#|bd|SF*e_EyR~eRTXhYw!6TO<`yrh5iZh}(Si2!SMNY* zyMwDmkO!MVEQg75XhfXennff+2*5roUyn0Q9vhGn*ST5V4T>;Ig0-GLVxa_;x8*^A%wURlo>0 z-oAW5IPEll0>3M3fN?jC1P|&q|KMn2>G_A49m^`>PA9yQ?YYU$i+TE=IQtXR>S`TL zO+#5ZC7Hteo{{@l32r)AC`T-bu6UKzhk>CN_ko9d(&>(!`lV+&KW{S-SgsDg$=sk7 z{jzCfbrS5=^&@Pu6k@Zn94UlV{^W^AQi}r1c)9=!d_N3f1K>g007}gK51v<)uWEg| z5#f#|30xA6sbuQrQmL0LC+GLeHBi$Ga8%0@k%C*Xb66(})0} zQJE4B&W-1-nT%Vc>U24Y#lm{YdYP3aP;a^xB`U$Ntls-O84v}@Co#|YVfHa&43doT zI97HxL>F^!+$4I}Wx+XwI*a4iS*JBh4!HN~*7m@siDTxKH*zOdH#C~Pa_gjyE|zkl zm<#gts1qKQaX(jYbD1^GU{5pFAORV2zd6-6)v{a(=QC{^avz~T^~>s zyWM)fF)>znAQ#OFM&6pEua`- z3n&h0g6Q2X>thBJ0P6-yTj3cHbRDR^Co zn;oG@IO6s+Z?5XJJ5^EYdp)GID0nn0v7l|tPGc)9bV0*J{hgSpi3R&a*;J9Sv!l_T z&8)CEe)I7Hy69HUJiBT{FHKXy)HY52LncNcU}dTi1a{t z{cU;C>RGK>@e6XprT6bgbuDHBtE>|-Z3QoM`nCo%6P5fI!J@ftO0W1&qZ?LZ?=!f@ zaq;`ojGO@B{?T_?bD06*%WsVFmTzDF+!XL0d{#XGO<8uzSYijK>%HL&fn55ao|)Gm z6H!WZ$IRxZDoz^d{*x{(Il+u|0&z?UK0~hDiMn#(wG0;oxX$B6E75P5`9wc)em)jd zw=VO&>o!HXzo}N+nI}m}&*zQGkWgRETW(eZo=)txgra`FZ3DX|EYu|^wCHZUyS%N z59C+zT1AueSci|bdN)7U@IBP7@!Wi~O8{PSsH@UVKT9f|9!K4AHsll*s(;4`f?OQm zc}|7zjW_l%B<{G$VFReIMH{`hG3vJg`3)>!)oj!Q)&xZBd=`&!&@ZSq)%)nZI)-|R zMH;f-#?4SGp1P&ktnGif1jPB)o-EskyL--UdAb`g5M{7F&rYTNF%`6Jrk&2&;F28M z-BkAs>14Ux_f4G~l`*!bw!?@`ASx zJYWK=I{+|60~bG&eAl6PFzf%oJ+3e8yLhOt7?6KzAv2aP+3AH6>&*kHe%4)kg$3qw zJTOr7E9tXSKx2UA1C9Pq-19S|Ic~ToCO2@midoE&G!-yWgq->Y7LXt_K#05$Qb-A= zjgSQ;4I-!)=O14o@=(AFKO)3@h1VRm;CC=}g!qokH2pWH5F(aGWR<`?6H-j@uOI%$ zB*hZxFe^aF`NYibL+N)faQWxKs29rsPyH>g<7UXq_zd|~|860nC7aFT&)q^?r5pKo zLyIp~>$_WX)5;t~tU!7TIm%{JXF*QVc@TMi`-dKu;2 z7f&vtce%6aGWyn%LiHjoewus(c29In726fqejYU%KGBDJa44g?SOSG;{dWG8)CHr&4HbU}QvM;{I>E%js8x}1jP z>qJApGP`GelJ%4>{PwZbFo%PcI_Gd923=EGA}E?f%C1z6$#Egh-NdCTm3iCOl^jsY zm(8o67mQ5n7JQSQKxG=FJ?`Y^=gO~p!m)_8EW3Ba*m*?7ZbjfsJ8h|)Fc7MEXKh`r zGH&;!O@K!3Eyt-yazRmGTQV)L;6>C31?3BqL5&y|*cnQ6=;7DMeyof6OH5d3f0~0+ zj^*;<@yA|;u)1lX=((Mwl`fH%N>?+fQD;JW_9f||%ORFXp|2Vrg(4ZP5Bt|ubo$Jn zyE)^QEO!;f>2&rtrYi@dX1v3Tq{&};9Fr_u^HFsXY3M| zdohgW#t3sF7{RY7Q7@ABk{9&de~NEr)%O}?RbO44F=0Ro6D^8XzJ9N(ze*q`NyrM7kuUr5g!pm`X}3-7HCI zkZzUkMK??7?#?q8=<_`9_kO?g?sN8U?~gx#1+&&%bB;Og`yS)EY0Q0~|iEFC_QS86tv zR1bK+tTn|D#K>vqos56bknCK!;uW2^WU5s}F=KN_{4l#-f=X6ya=$vUz$%+b%2Sar z@(aOS^CtBYqpm4LY$3x?cTjfINJ(<7XN})UJ;A* zD=&3}PxhIBt0}+`5H_K!F*RObrOZn3*0wE9aXX-9Chf4Vj3eA@kd-s~C@CjM1MAY> zg;tU-%^wdusRTo6wD%^Ftg2$aQqj1kJQ0;(voD(_5}bC8t-~8`IS&n*QG$sCk{~YR z#Cs>ga{^VoQclNRM}{W1&$l-(P(P=<09O2CwB9va;dX(y%FO%)(-Wx*ma=f4eoVA zP2zeU(7%9JxdePKK0etV3lSNhsoFygnihhr=ZEi38?xuDes*?h)c|Y%DkhJTc0^$t zakF%$ghSwM;vOCsB8d4iq1Vb0LvRATCn>#7umt5s3(^9^)A%b|#q&P3d2s{gM3?9& z!2Hb{dc46RB~~U_7sr~{-U3F3buq8xCACGWIue?w+DFnR>wZW<$czV-y9ywjpHYgt zwpX1!+OLWysI*V&fQ8&SsfQ>O{Vi^3vyzmcj50ef2&@iPDWvma*dD3^y>U##kj=u* zAWi(aSP4@39VG_Sb5WZbOfzY0pgr_^AvK;h$GCtF+h*J>x#@zIwd4VfX}scB&f>E~ zz;4PY4qsdwSvyA|TXWxI=Hxcw?({@>44ii^r=4oAJO*N}3NwqDsNd;Gy@u&{(opL} zed*2Tdfw%hwCsz46ch6GB8Ar=#RPOMsO))7pAzVcxz*mDoqYm$4HyR=cX=6CCk^D- zgvi&pfs_{hle$w)A>1zX2U=_?h-1Pem`MwbJTuGvX|&k8`y)M}%KGND%b<6kVdHZD z`Ilaq{!wTz;<{6)Pbp2ggno?4 zcF|Nl0WO3LIMXE!79zq{FY)Lnw1$M4MbKO?UR5IzcY;_CjY$LMN<$&`*0P`pUX)&H zhc6nAl^#F#qv$0kd9lG$@eZmTyO$ivb%R{9tDk|Xrj&B z)~>G1P~_*7IduhbiZZ*y_R@=5$Tq5`WAbu9NLV~N{vK5WvY_*8e0Jf)WpQFo)r>sU z9eG&SQ}Z_(zI_H~b*+It=L?x%#?S-Rzo&2WmO=LcwA2tS$f=aFw6*)k6zxf459!OI zSvJ|p9H}{DD^#Yq-mcg2T>*J2S(PGIW|pc+uRp}WIBm1!-I{-n`^)Dr^+UDREBzG# zv)16Ramb8$Anp2F3FFf8@p~2o9)Wa5p3Z@U072rzEc63{-K9$O@}Gf^tLpt>&Wu!;|q^` zf3blu!R8L-I(iA7eAjVxLb82Um98*=b%}KzoUtG6OdJOR5SvY6)C{2D_kCV49*oU?`2ZsF8CK|R9a^; z)1M7cqnD`3U~LiHFQT*f_i$zHN9#5t2lwSF87eSW%GNb7JQ{|ozP}-Dm~0FU%R4u8 z>#Th9>mRlQaJueeQ&4wc3F;2qnC=I~XbuLvY!52l?n{_So7KgPlrpq9P=@Q5^5^9$ ztOb0O`r$~NUpd2Ms$H)fuFkzwT2fE*j4%Oi)f;BUeIskQ>ONzmP#rOm?GHKp&jY% zL(yY*T`L8-xoC>N_GUy0rmMvePh%&=si|gN*$%R#J4;j35VC{tpns7a6mYC4%{E@i z4qESf$<@4RwGjzh-Z7wjD8^Tu)Vfc({oW#ccU7Y_f8{J43Vfr`U}Z^}UPEh9P|ie3>q>Ue>sJHH4u-B}2Z(zf_}{Y~{0S2O z*>oX3n!f@`1c?D`9uTsFl#5@KamrvLqKEoetRRKT7n)+<2ITj<&7L%zpJ9VHFXcO& zs`Q^%!j%=GWCU1LN&;+^ZvS`h6pV0tzhQ<^QLlwf+#jKsr5D>b+Ri={KSE8fFc=e z36bg^cqPN|#ZaVmf@P<(+oZ>ENU<2e%auV`ba^Kuys28`?s)s{Mq8JnwX#Z|Ndy0{ zbF8c0MmAB0%+*lYn4vp1_eiWHK1oKs5V(eOB3T`ANMU8dWO-tOIFQ!qmM)ZR z+Nb$4-9V+=H#ufcwCV-{0a^BY;K@ohmdn04{nAZGS8q8yfSVN^2Q|Th6Kj_Rmggy9 zkhSSx_7R~45iAe^5y=HPY$liDS5@wX1VMtWCj9_vikesw_vSi&`IicSrV=i_><7bgi_4_gK5`n&@ z7bLP81(Al~8X_lTPA*O`-W!c^8?~H1p5md*Rss@cF;OXWdiz2mw;Jg_9!c@q%6X3xy2xR9ZcKh@aT95hqQ<`P#hdb7O zXF0h&r5Fh!IS;x%4IUm6^QEzl0}Amsw`3GO$^#?6Sm2q&r>oC`C5;TlTaw)8@l8 zkJEhD+S0tIC|zhnMbUNI?xP38m4-*b7%Kym-e6ROfeHRbu%{y32?#nV=7L)tC87yY z*((wq@*bL??5pWdojs&k(P;bb)PmBkAGGIavO=CNV(X%UUy4tULG8aLB^@cXv+tR{ z(I;vk=}xq5ll!FSeGLu!Sex42*2m- zr?hfC<${PiHas#t&e=JS=jXfj@?T26|CB2|NfUc?#{Q8+kLj9 zD+<$nwMo7mI!qBwUHD4F5{8K9tb=h)ZjEmp99vtwF+G9a`k2=AYavX?!>E|aW4VhJ zC<7A!_Jsb&e&#BPh$nYqO=WiE?MvgIKxZo0k|)y1|H56vBi&tWN(af9KJ_#T@s7VR zc5Bpd$wE3dXQ)f!Oo=Lq&*kz`BAOogOJz$1KM6zXBwfBBB#L$OwaJL@1%47G8L|ZH3;dL`*;bxjmxwM)0b?CfuiV=^C5OLzUj|)CP5SP zrZ^s-o|j8c^$xy%q+ur*G>Rz_*7u|oPr^`)FAIvx*Nb8shN;b_DH1lobEw*06@tiy zeNXLP!m<``z+Sy%*bo=3?qw5#I*sI%+96a2x3Ve9Jg-#;u_Z$c4>)kOGF!TAxNPS? z4wCTz#zPr>Dfk+&E@>SZcONgjAtWDg7k)(sa9t5$X!hz6eZ}?%<6MrTBlOq)-YsKb z9T(11FuU6{4UpVky&>Qod>?K!)HNPQ6@j4YV16!rZ*8pwK)4R*5UzuuY4p2w|+YHNHClNo9cFJki+_m$OZ-=#D)Fnjb$-_fI{%Cu$6m2_b*$FQ(E!I2uMZ?-{vyV+1hOV*U%Y>1KKSHrU7Pp!n~@@t7g z%0B?^+tdYyA4x}y6Pv9X66rq?b341&jZft8qMm$GJjTlw0F6AeKf|Dc&l}yRTOaM| z4V@-Jv&>A6_>4y8FugLlYit3RO6kpWhY>Oz*oMW;8@)`TPIn}gTweiSn#5q1)Qk^R zi@=m8U1DeydDNT^!D1doe?>7xM+}tUJOBu72|Y``>i%BK4pe^24zNfy$PluF6@=^{ zQXZ5YgvwMe{wT6^+}f!p&@D+F=&G&dlNDSt8%ji)Qrn59 z5Mk-)3O)v<4+ko2uQ^EG;(Vy7M5|8J6{`VgqgGR$cGvXQ9RWF*3^G-j7)$oVOYBCp z_%^=hwRkt)9fF-L5x8057mLjX17hMdgG%E%IwSOvX4(0#aU8hx!NJWfCroQ$;mvlQ zulI-*VL$3$bC~Bz-H$%P+Do%NhwG1}^?8S(9~`nU6QEbDQM9(JK>P_dBj!QZK@7rm zK!5Ez02KKHE}Ng5DUkCs2pMszZn&_H3X2RZ4^!}pYmT*RH~Iy3!Jg{Cgp{%_AxY>3 zM&!J&&DujSXKE^m8C}1J(pq>Wj?LKUpFb>B$r@hj8g35|chGZcgLY`FFU?#WXSJ7m zzwfWagq*yHyA&#qbI{$Ftw!6vhzfqtUM(Pd33wQXj@{0EH8LdpD;A|bD(_@9itHqr zQ_%DB!)%-3A)TtburtnHF~%aaJn6-ziG^q;1&b1Ulcn&OZp4X3QHqzb1+ivtNuiM- z;R+8PHdYr}d{V1UbG$C48|{A$C~<-k9(%KDcoSAau+^nthv|9H+q=0aj0UH z4_uQxajDUce^y#=ZDU%FpArUp(`198T#N>+JbH3eVNqRkYc=4Eg0)5eg^Gp*OAQx| zp}*9T`Ie6&rS9zLcJq3MhDX$74Ag8wNi+P6+^GQnuXB6j#3AZtf+-F=DR|E#td}6^^!;MJh63VNB(jh&?B4W9v|hMJk3t{ z*;3XWk2(K6RE5kYa`J&3aSV^j5}m1hT7_r~+b};y8Qprx1whvCw=WNh7r2FHv9O5j zj{*yHMnTzuyE-U4Alt!&$i#&48*uJ5*T;wwwafDia6ivM$PO^Q(a%B)GrpV@;@m~* zu9dH2rh5J(>%Y1Vq(Rq#{oCkV_oPk_e10pO-u)-Wd$HK|rxGzq(v@%SkEZ~GA*@pv zLUxv2R;HdL0sF(v=dosATu*25!-%a$<2D-279I;bYwUj;c-Zy>rKEny%rJBDD0b`g zUMm!ty|FH%Z&CM7+(I}Nk$1A_#!WCFxpp0NCb%X2aUJyjaUHC7p|#9fwEoCgMnBTO zb{zmqo&9zyE2>sCsuR;1PLcJxs_6-_o3GJRHrnWOE&BQ!`RXmB3w7TK|JYBw=Q`K_ zdD1|IQJatWS2!Jg&uZ&{vG=y}$!GR>3|EEVOyg+uuH0Ce`_oqJVOJ zK%Vh9UYH(vgZ`kv+3JL`a97cChwXstvX&+m8!>W<2p59vkS?N`NP=f!}EF>eHV^ay+4tV)>UARCEG7mT#mPQdd>Oo zFPwT#+P%n-iGRuem4&~+dNx(>>&TnFg8e^du`ly0lB8z4uHzwU@}>0)P# zqnidiuVBn9DuQ`vwyGT1=$6X9i?cZHpIJH2r40s7$9;{U>HzQrT?b#L`Y!6ya+%r@ z0gzik2K)dvsipB5e=lM}CVw$>V=}o`NpZ-vv)Fx4wKJEt*LDd0Q`ARS9%WKsEn1cb@ z>M2#m`9ar#CL=CIVfiA>ii4<*+BC8ix6>fbT;@k(XO-WogYIoF4^}f2v>sE3Ct*~KYEo>H`H#;ZtSd7&SRzyh zVSAikI>)fDRR{E~k`cfeN^bG5646(7gy=~s0;Y1RQ6}l_N@%e@MHB3~e&Zcs73lY# zSSrV;5ga!O5w0{StMnNEFaaNFKN`bJm02bEr}ZA4zu%yd3hh>KTaZ{eJ;g}sdt^nE zdBb^_C*x!@jZ0Bc^un!rW^jPq6bw}+FZx%89j($3*0;*lRN&fmz}sLb-^Pb<9XNb` zmGp=qpp9apLOEtFAXHv@l0q_Xw#)Q)wQ0qx{M^f2-iL!r&BACuhF@GnlX(pg+g1=T8Iv>JUtdtk&Y>tFB#-%ul8b+OY%01S}Vh33su6$pCidDQwRcx z*9N_tm#ei!EPE{psAwbG*% zQsD4FwsT&SecrvyM^!QM&i7Y&WoF^|=#%w_%tm?g!s+$tPyEkUQNSnvEH??SIogYP zKC>;q#<}2_oO>^IdSu{qQ8LYShe%dRlXo1ko^KB~im-`TcNv5~npL1x39y~}q<8#eO4s|gec@KV^6oKa zV&lLq5#eECwEMiyaVZ+c*<+7Aa??}H^c;!qQzW3fyxgj-sa!TDn>6MS3eVr~@p}Ut zYo5_+rEPyx*otn_6$yd@xwoWGM_)UrBvPDJzE9~8QkGBcMsqD%x!qo^=__xwdd5aNX11; zlP`X3->n8ynw`Aq>m^sf6|}#uzRI6`anIE&GqsRBPE(AXLZa^pFzVM%?tfhxq)%}- zF#5_~zMIs1ZYpv3ss-iwK)8z8JfFWgIwYLffvu_;}pOh_Eua;AeU zTl7s=j&zzZb15_~rZ)EIE;3^d>Rrqk67<)t^$nm!Txn!m&3g7>x2oCJHsl8eN=ON^ zEYM)9)w&o^2V4r=8NTT}d_?-Bu`nN%n$pC1)cn@5$i=Guq7lQNXo$_sv?=pw>1gD3 zv)96@jUe;GoDeJ98a8f*0GjPZIy ziU6yLajd$+;Fw^6xB+5oCr^B%BmH|7j-|ZfRDwDCquf2t!WoJzM(1FbK1FN}=le|A zU!sGU!|tPaP;>w+%nu<<2e}B-L3jlPs+Xd%an}f`NJ(KhYTEXfw5OBJ+OYXEy76=A zY%Tn{1QQgC3VSbOI+pA!(Lwx`=zwgd>`HXN@10J2?oel(ajE&hDs_AmKVHLb)*B%@ zVB84Qc_9jV*1e9t>17>#n7Wlw{OYYA8NhGh)TtOo(SE7SY6mw24lb@{mNUe;h`_LhDY@)Z3 zUl}q4MIj2Dve-&pvGrqbL~P91hLZQP*S-#??NB*5cTYdOEN*fdjgO^K3JVR^3?uA%lxq3boAtiQ;y7 z?2-HIXn|`YRe1P&z3|(HLOL)Vr-$csna%U64W;$1cNm~IFg>D2^qlw3jcIQkCIgs3 zwLG`~*QDL|+b$u-{RexLrYAj-bjME%~-=+sF&EX}38f zwt4X3;g)uqKAr%eT)LBzt*y)9_!YUq#$Yfa4P$Q}7>vayZ7a-QwNSpxp!M}tQChn? z-u$F(hr@fgt*l*KF{N&#nCf|zVBdEwEH7PrIkuEs=z5cQZXz%CnVoBu+*Wq)XAGks z7H8u_kVx$a5?>yNjK@}-DRsF*3M*8VwpJwzqAo=SDs2FSlG{hAl~NA3`ri1!(mE_7 zct2D$U+Odu_)z-#9Gm0eNl0&{4^k^peQGW~*Dn-i(rEs#g3m8rdoScwR zQxg2eRSwW6UkcRUpq>dcPEo3MZ;dD*KCGXu9BCY{8bob{o=aW`R9BL+qpR2eXEViV z=vV$XqB#`#ToPx#Td$7vhAa3&y7q`ju|0KvJu1~RuB_lVIqQ5ppw;hV0JCosMELA+ z&N=BzCKALuBbo!KcU?IT$9cdJg3s7!oRa{T@6PV)>XjUIH+Apdz9A6gMPlAHkqw3K zrvj**+w-i8hfkw1gK*?MUTGA7rURnkZKD$ME7Ji&bP$6vPm*hnaKFVUzp~X4PUeCH zXZ2$y^*O){>~y)52)C$tz>G{fl$v23H;{<;G^S|DqyQPdp(DreQb0Te)D<ja@BJ-*O9sc#{4t~nqaebNl{#DE zUNmreD|&hxB_hN)tGd~iKeJ3935FqfBp|HB>?NXvb3;8Do#yJ7>o^Co6|nw$9q9ZY zD|UnXy`Bf_Nng*3-k>>pa!Snkb#Pa2>>1O8DnMpV{|Z%|I7(pdSvd;M#YL&HcQT1yO|lhW z_qr$G4Icpk%WiU<1F}-rE_IWq zu*50P3$wZDLrmbz_l$^i>6PWFyZ%K$;!-Oq@cFDmV&+#Jw!M9>owHBVm|=RL@L=T~ z#_QtdO%XMX)&NNNNRrNJx&bO;)FA1gZIsWU=7u0eeZ56|XCH?lJf*&%_0d((+4~W? z3S<*7>bfnT2=T)VlS^gJ_Gb4=o7wiZsU3c`(5nWm>-c^tbE{k4@YWQ3QP4QKvp==$ zFMPpacc_ze@)aREu&%zGYj2o7^%*8$;I?dR&JH1UnktdG+}WB|$Q)_psxM@9noi5V z@INF~x5TVJ^Aa4N4|{uP&DvLQR9@5vM0anr`Q*OEv-{T475xiRYV$s?Of}IOC*6w| zt)_!(daUCuKT)-7s?+4oVG7B``S+0N_g$hh>ymj(2NAl5chwM|-VKqOJxt7ykD1q^ z1J$szomn`kyNAaYGd;VrMQZuXSMU2@T!{{hTIV9D8z%J-qJ!^Yr9jQebc|r5E}RDCfMLe@CwD5AjJ#0Yu{Al-ZPr(x7>f6;?s@qpshqk!43Q?dJI)Ur#}fwfWjH-v#NHf8Z}5CNw_g@d z__1T}Gv~mvZNYZJxYKMawQy)`CB|+KGqsPVEAC!OgI;wdqlbH1vU=Gl0YQqt(UTS@ zTY&XqHbU3>?VB<$He;Xa%aye-8RYZ1k>yM_>)Dc0V_;^;O$O=?MZvY zCV#J8-0(B<-8ohNSyRmJk-lcIqN|5jQrR2Nzj@w-Gt>|qD+}0;{ZtUwm>=q*pFLAx zeqtdf>fcr2IlmB9OuQhdwhWQKkL%6EX!IEh5SWZ73tz~{pUuMaQ+Ot-dD3B1&S_DDR=?LIB$nQ%7-bk%1B(KJ@1X+Ya~@KTUZ^tEF}# z08P!Je zmg5{DE0iah+LaZ25MQO9GnWuoN3R19^^D4jYA!k_|9o4FMjo!O>%r1#D<@(r`8N z!W-}iqG=iN`0_n!<2`S$@8}NR9%58G4loqHI43DNJ4@*drgrtCr!$+ao~h0l-KOmC z#k#(t6QHeQipJtcDlC$DUHZqLG%t1?vRd3%)quXkr*?OisN0B?3X`-e)p8l( zmo$X$lNz8NB*S8`=N(zy+$0y|5`*%(0IUC#QydQ7&P7qY?;m!Zg%1gj@Ed>3%X_-R zn(oH;VB$Y-?>Er$X1z*qnZ%L|FRwGpo>f^|1Mg>cblYyqzh&6-=Qgodr&2Ua;bJoP zi4*Pz`qqV56V7Lef#aqDcjwC;?5hJN{Hc`UECV(yUf{@i@W+o$r@?Pd|L_`Ezow7; zhxY&;>(}?evpT-_xA-8DC!V7Nx;$TKY!|m+X7c;#_uq`J2maH@32^8CA%*z=CxeJc zJznJ`f!`bdb7=oaT>gjg{2XkEaUOp%mRI@B>u31YroOQ=T;)9(ZkAw`y4}5oWjA1lEr0D<@9RUB6rUOuP0Ll)KXvxJs{=fhDUvn7zuPyZt(*fui0RD?;;9rFY|K=h1 z*MI--nhrqG0q{R*Isionz{B(pIN;C!5z_%EIxzUZWIDjclC-Rd9K0h+?|9D2-rJ9 z)=+~D!Ks+78_Qo9fAI7Ai>`i)m*eUK=@o%UJo(M%|K~yf#?AjZXzpt~ zx!yBK7v3L91}o2BR}MEX*nU^sesY_em-}k78KMw}Ynb}F5_le!oAAB*>^fW?7)a zf}4DbNZBqT7Oaow*ST#@*8qKII9oLT3@t;J-T`3z@ki&WRZcj>M^&v6$y zB*wiRAbTxVE=TZQyr+cZt9etJflN+FTSE_%tw>`65Vl{(==1@Qvt51Zq}^-ve&XKs z`U6g-myQQirlg^c_@#T3vZ)LBOq0o;;ew8~N@(^6IFD*+eUIld`qqQ@>+-)1-8v4O zn6rk2BR^ojI?z1g^@b#myW_f-qmCO4}`i)IRc^H z>%wq4W`JL@c)<1wcm1k6<`XwIHruevXgb|FP+TJHh3CXmEQAB;XL3A(P2i}_5cnxO1TXNr?={Fwz zFFrarVd1)m_xLYxy4Q8@?+;}C!SDb07%?veP>02k!X4a!seviv8<Gj8t?0eT6UGk~ED9CS>Tuclob*Klb!;s8F){5no0TICF6q}q(54(T;DDVI6V{roBfL0x44 zd;6Qw)UBo7!?+VYIri5*NP-TUxwOnoyee8#Fwa&23r+_dKmYaNNdqBx?i2(sXKl;v zocAYCPxXXD%S_#8eyFWt-F0?~*2Xc7jYA;K(X?rS4HUNkb(!Ub7EfJi+$n+ck6&w5H+6y8J)|VnFYeSo58cEVyAuo*oi`MVovb-?qr};jE-JZp z!rJ{K-_AIuY>a15o@>Hg))`$o01+{jUGCcQg0kFQOe)K}9@Mrr8)FST+*PWHRhOpo zvKza7Xw}IL%4`+|Q<3Bv5veu|g7LM>jD#w#V%&lvy1eZ~O9>WP7}l<Us!Yzn84%ol=q%=x; ze)Uxo^d=V7i^g2Jz$|0;T z;~U|IbDJ-{|BBOGfZ_@p0CJeRB&oUOR92l-E57J+xh!(58`psGe*O#DZ35ZF51Skb z@v##yV{6)8NqBfh75|8Dlx#`^)iX0FXKKERN5T1{xyhhqTikhcr#uf8%|{~e5jDIN z3tXe-(WFkwEGBqyNuyN~`ilO6Ru88`b#iCr6JbGjTacoD{`G!5U?+xmY~EoJGIN5( zSTp)8Akqx8^cb9RK<>4XD|HX9-UGLFQr0X7l=IBYMz|wQtnP=j)e1Cms*sac%th)B zSCnyo!F@$L@6CC3B)y1xkday*hXQcX}XX0 z@+cuTzpA4oOFE1iDAaklwPWqMRjPR06Ld3tOO{qykQRts)csY4OT0T#79ft+oBT4p zVPF4Sps7)bziQSdr&~N4w}g)KdJ0CkC_QHVuHCnerjlwi1V&u~e!7CdsIOgP)Q5(E zt}fxXCwV(R{h~m7K{3oWzB{n(otnYL_Rz>hKnoDwSVzS(Fn&&do5ErsEJeWW!0O%8o;km({MPY48 z3QeKDq%I#%@ zpMW<@THdoS;pwnY8E^{5_TX=jx(f(WZ%2nTTugVxa){vyenf!O;c)MmUGJ-J1kQKNIi*twXs4aF6p#b=ahwmydjC8xtz;g z!Y+JH-7Posjho?8rqZM`9{hNjcYq{}KqcVQYJX%|zG1|V^bc+6E1Q);>1iL`_b1Te zXy!vlyQWM=;$h!-Y)P3l&Z8$}F>S!=%6eX`5)ZjYAMf**!}3<1QT>{`G+7s1TcQM1!=)cC=qddER=uc9zx*O+4dH`emV8uG$>`M!ei9dF*lZ{aCgKUU!0Y zVZOYyti_PSlqy^JY{cCsPC5ORnqgKVi)MV4oj2&=fOTliS3>&D> zhn%mC@h8D22Uo3=r4~w?^I9sNYCDpUv0zvbEW9B>T7TQ!vG?v>Y#3x&T#JSoA8h}10m6|==A1a1r zi@S&Mx=tA;Z=~SoYdmxiyoF+}_=Z1AvB&STI?SxhsT(9@L2&cEXWY8g;w!eSTB`h3 z!bn|>T^VumwOYT{!}bfZq=}4f3C1|7B$0Q9xzU-Mmg5kfcLMU5aW5J&W5c2i$X<6^7W=cOcE#j!IY_-Ozhfpn=SCtEe=(|l4w#sb!#NHK|a{eM)7V})J zWlcq=e)pR;j6G$N?Y79_pz(#!Phunf3D@(f3k^)c3KciF%PXu0MKj!!hGr%;;Ufj| zRv;9;f|J0Y+80>9H*R!pQ_quJbW*{Lgj9P32Ip#?CC{!|>fl601WUbs8EQW_-VnS) zYkD{v=(w8PzDr|T@P0U(mku**a_Z+>Pkg0Xr8L$N^H}* zGdFYSY*XWD*P3ST-BLnuO zcL%`nEOkcX#6vYRFDeRY9I3(QBGzw~Iz(sVUs>w$%py+OPy8^1olPgua>KZ)c_RsM z@a{M0oH{dZCRvcyt=K9!TO)N35@}Jz^~%AlIRouMP>p>9(mK%-xx(ZZFOJt{9ED}8 zb4P^C*IX973Y_kZlUZDdkQI=Q=E?22=DR-JQ_uaetMpCC=LZMmSV-rvHBeBDcOt!O zjjHNvqvGoW?rwVl!8}1>Hjaj&1!F;ftL#v*?5|uzIF6h=nZUr0Uq6kk8InWMvQWX9 z^kw{KSfxOPi~&|V=Zc`R&vV5+HW1LAid&i*1<7WG*K37;^-G~L7Z4L(B`v}fG2O); z-qN02z_5ZtXQ_x!3(T3h4@Czzoi=x-+hDTC8oQ##rtOB6_BJHQ-97wZ9JlCi;j5k3 z0o+&L4hyu9$=c{1pF|JGN1CP$eg!`D%OghkfLO&TW_pW+MFp5PchEfjEmdp2g8Ft2 zHJkH{jXWt2dpyRa@u|}7&U%(P)!p_;HJz=(AWgO0oLU4;JzMI+<6W(?aMB-|de&+H z{3Yeb0U6%r`)?p`RoohHtF}o`)Zo2@d7#guS8TG`SeJ%OuA0$IVv%jkV8DSlU)~c( zl|Sl9&$HFZjm{*p%O}aNYt$LS+&nBZBfiZ&O%*VPPPtd*N9Pz(>?YWSon$XfIt?^Jiz~u;w~LY zsadVD4K6#s(WJ4pBE^e>hat!S4CM>vykSxP4QoEv%#z!{oTG~B9^oZOAQ_Ml6d@sr zQ|@nJ$nupp5pC73_j^#U*w-PnW44?pRLOJ;Z12@zUa#X#UB<=dT|LP=L>uF*R!6^l z@Od)Qm7cmSMsgzSt3mhC{_ud ziHYm$O46La+`4#>;>84_t8ul+RnNFwFL|dN*jF^Z^M~GMU#&?zD$_T9moUX8Aaa~B zazBn)M2)if1z+Lf7pr@~HbpVLTpRTJb-1$9_GDnl9-U! zS>*~yeTH>dNx#Qr|tvt)ctkfL&C<}o1906n0OQJ4z}_!nyyo_v+SqccU|{*Cxs=gT4knB zWfzT|y2#U();4T1N6Tjk>Q)9^>Z;Dq-WNHIxAw}9<_}yf`w&?E$o$?ZD`J!DznlCH zIQC2S^*C|SPig)|B9|5XRlZQ+){O>ZPPo^d-pyXwnUGM#82alv8iGlHw2tX5>!Mka z$ex;b^C}Eim$|OF{bL!hwDc!{M-q&Jf*Gdk=$!@r;Fp{ljHVhao4q?WzT@=*$OlX2 zH`IL?O$`x4Os+)dMTS?T#NoHmlnWHu(kcq;_b-cMpF1_lg9B$%_1?kC3behm!?8q8Fb{sS%_78cT?g zPstyi)_5eMdGs|S=X3r*mntX!y~ajIiw#B@GUN3$Zl2cl8u#XJiVV(rOobI@I70QC ztL2Vq?I2fuRPwMv8Q65aJMLtWDjp%u_@K;IIy#kw+Cy4@G9D5AM;lQtk#$?=R7vdL^pdIuDP#lgPwF*Xd~2+ zDIu0yWYKJ`V10K=XNbL+0eLF#!~MI?w)44#zAts6KPFuG0wY*Bx?Lrix&60pO}}&p zFFTTkLgA>UXht(qT8Xi*w0s;hjhUZ7m_zMi{5T6+-Lo#}eYB7d6XBInkHb>uzu_4{ z@=-9f1%EI&Ff0y}MM6>}f6bnz?rSMlEborMz8u%4lP#G%0rMO2U7WulVI1z%Ik6$H z@(kpolb}u;K=1g2c=*ao17 ztMQmueVXgYd`&|2gEX({++T!6v#NFB6l-mqirQ+mJ-`gT`;wU38$fk5dS$ao@!;UB zE&c3l>cQR)_MSwer)xrNmd0+fh*Ck@xRiO;d_2ZBr-1dkMfOWDNyB>n@n!zH+t2b} z*`j8ehl}ir3l_~o#Hzhsp0I%&Dit`GF;U5fzgnCpY5!uSkdGfp2zd@{>KEf@dDcZjiP{t3KH4X6|nV4(G1hHzW}g83$n4UlqA8&B5trkaJmhEgWt z&m6&8f;jbMIr6Z#mdfm!ystH99C!~yc%*_YfFAp-;=Ns{NZMpdtWF+K^ZHd7~ zvxViv;%6>lJJ}u;`Vp1UF(?xiKBPU@9zCf?z_1~7`}Bn@nDda4E3eYZpvZ|mzS9ZW zP(RHn{~*OKZ^Ge_mNTcUlw$vJ&(p$XJI*h;*aeRx<9sd?_a@ji;)^-UV7t`&;Rka9 zurTRzF35FW!PQ+kTn02PxHIOWb^5kD3vo?I>Y%G;g#z*9Vd)S&&(FH*A_+O=rwSzW zrX{oVX-?5c^t(seVeVOi5miF&jT`O@Y{tyjJoR{sfgjJJh|y?Fh3};l^T$ZbY1co= z3F^-{Z!b{P|L!LbHP?=ew@P-J^b8S2XoF_F=`uM^#kYjry`d(WB9xLPn2fR|>9D zd7Eu&y2ISc^H~wSr;x6m8a*2@e8#Lq$9CMD>VV(U7lGF#;sUZ5iqo*+X@z<~DOR9i zh>!HJ?Exdl^Zf(UY$U6Z1^;|u`-DeXwEpKmC1JK1>h-7R4+6K zs_tIO$_5`Q+t^1w^H7oe1yOM#qVy~KB^n-1XSbv(`^(YJY?(D7ZsGtft)p9J(z?r5+cf-WQ*e`x?htt!rf!l zw+j~ZI>9nZk;#H_4UF#1fm>-YU{>>Y{)etNS(U_nasFLYfXUli$l|SMj#ekz5hhVp z0T!T?5A6EkgELec3Q~tONBlPnyLO#qnP=VAL{61HxZvy&w*CbAo}s#~{O~XL6+K>| z;clBZWn=f^3NE81Cr1mB^VbOYT0)pNBlr0mqGFl*hwUz=Wr4t;HdnjSmtW1Wmq*AZaro?@JB7)aP zCp#K{#+3m5fW7C@=X1P*oBq~Jyq@({JbdHxV6~Hr4KVlru=dtrQFVRaw@N6jQX;9+ z-5nwz-7O{ET>`=uP?44#x;v#~2$7QRE`r4JnPw5tVu&o0+-hSGJ$tA%HdwZCkcDAWAhnzi<`hhaLE zqL;@^DKQxC@zPzbZNhx#i@N+GL}1tNdgFBZ-MdQq^SXVDH(z@$#&kz{%xjwN?{!A; zObyKFYb~DkRwjs`TiK=sTZ47P^7mU_3r&MNGw~*FmJOFhCr0L~R=T87Wi3nrW}8zyp2=KB_4t z>BNdxkj3gl_bU)OJ;k;U2SMmu(VHl!uxB&oE$+5Y$W6Cwq9J7#S=t z(!bqs-2`bxLy?D=j~x#N1Zus)a~5umYA(%huiY_7c(wBIfZpPK3U+k1sjJ4vIkDq# z?nlmuG1H7eDJfe=_hBV8H%a0k?ib8|wk=)a=RmL>5@Sqh1xzKjr5&S5G_TSsq}7Ab`0 zyYID2Hb5ChknR`>+bw4zJT=*J_`Ovv+EypO!VJov`yI2ioLvN|b{8Hl6WS@%RemFGVCTso|>im2u%!r5d zUbX2srn_kqGFU|DdW0>1dcU$JpV6*I2v73cRfx{61>THw*Zt&Z)p=pgophEtZxLVw zm$Ok|jZveMa}@Nd7^=q?OMn@LHjJFYN2j509#rmK=zX^D<`a}uaS{`x(yB_O(=%Q} zv(u#^sH7$GD>`(D;qOe#70lf4cTVhz6q_Jp9HeB+m7A*G`@pG)g0yRQLUF%RtHn>_ z%?D~@~rR$d-9b(LE|hGA-d6ICo@sfk(#0` z-+8$9+l;r{&D2V87PRteY9W+OvR=x$$UIc98`HiXxxO?m4*DeZ^b;4TOh~9SSgGUH zUOjTe2b=C)zy(%))-83ey5w))rdz#C&h_5@S(Smk2hP?Y(!7AX@A)8@`OG7Fq5SEL zY60cJQS=8K5hX4K%-WY)_53J(Z$4AT97ozZ^bX!%8*W9}75c+6&kktQS$eXjjd@&$ zQ-W5aZZ_|i_r$C&sonB}a9fRUYHO?Iw?(??_9sAsg9YKZ<%bWy^n6qX{q7}@W-2EM zM74$IzQN~=GK09~buN8aS0NaC6c0LhsJnP2v1S#L)(Mvqkw)%w9&*)TPYh3g0L#fT zFGkvqbU>2%q+1~mqElcJgZ;kvt8sn?er7I=^)i+}KR_S7O?kkfp9=bk%oyjzoerQV zz{8`e@JvnQqFIBUrmkf$e)bMaCONk+zw^w{6vt10(Sn6zEqWIj*+$6Qy2Z?qVJjDlNFXCS+P z&1pxxp=68WER5GGw>_!n9dI_`Q^N(wif65A&mMIpuzIBAIDZ%$%a9>j|3Z0eQR)pfP zF@z*#pqoe>mKauO&yFL%a4tKi9dn-J9I5qnqcKKqlxHIP0D|NL@mVC!ZF=U^JSY%Q zZNJeRe@GaE$+Z;@hF;<{O*#2G!~&W))~4=G0dK=(PESjw=m6cSk%1RB570b=z6Bh< zUaHQzS4Q%|&rC=98#a0bGm|`DmX`1g`LqUD z*0VhkMC}_Ne}z7hafVzpqdzMg?&oH$?m@^YK+=&cp=B`|ATKuGkwfm5(i7s?5YNGG zW?$z^yis0FUkf|3m4FV+I?O*Y%Sez?W1j%yjOQ;$I zzlifC8~7A9VNW|Mg4Zb8K9FxTg3n2=ad|w3rQ1eERO1y{4#tH+wUn*ZrQ=LwvrR)?6OYV&F_uO4+`d$Zk0vk6o zzVOAf1SD?LC)IJt+t9rSy)=$>nG$|x7iB1_IeM;^!}KG`Q)E@4UV$x@$lDcfPWaIV zRlyO4?_IL);*}(F$J$-#&{&c0fCX4pwP2R)YZL^mGw?`I}iKSdPzQkGJ)nNSj##C$DQnx z!2s$+T+QxgI^@E%;DwFl^NY6)I17puQmOt1lx2#m<8g&;VuKhVQ$5dQZ!xkEw3cf3 zy@@6g;W_Ko9#*{165g4bdKZLR(>kHAL*K1s8LfQaPWdQ$0}}_H1INL5F~u9t62C1| zy(E6vjECaA_!g$ZSH)I=2)ifzoG?6IEv#Dw!1k;0)BdGRu?`RY^kp9PSSrW+tj&gA zNL@blz2{zs4!To3<8O=luc9M7D+mVSpF|BrjnIGa#t;OiL97uJyITOGpv6tn^4b!@ z5%hn7V*d6B{U@&vxYeJu=bJD7;Whg08A2Q#(Z*}}{qg!@p@^4%+tWjY0}6%Uh#cs@ ze!SO`W&fQY!z0J7(DY54&eqzOF(dL$IJnL0c#P=)$bypmbpT_hc_}*=apklbn_g=L z|HyUs_Csyoe&-_XWQv&Oja6IGa$2|#@+R2vT_*Fp41Rf+1I7*q0ROV=AQG1}qD;5r)Pjco>M3p|Z$uf3G*$VJ z)82#oyi=CxUbVLIm*GHNIGdE6payY=w`*&wOWl&zJc%jvyzTVOx9QrbE7lKbsx0&VU~bdvGmLW)6Zv_f zoW!?)S<9GVloBK|J2DxIfX5IXV;d_T{pi%qVkClM%D2N1Kw(;w-7WqU)xqD#JDfz?OFASO z{VX5FGm$pG3m$7ZfIlp{P@LC3AHy?yJ)nT6=DREYS@j;+J? zNlJQJRBdeONsH;ZQcP7LV;~_`MZ$~PgzW2EHR804=Vw?SVr_Q5YVFkViDZLDf<2x^ z@nwmHXHH1M)BNk{C=HI&baUvjRvKq+7xhDz+1rt2d|kvp#r&wsCyP8sdRNlHXHW}> zG#<2>iGL4Vjki{o#k)Bc-fg%yJzw0fkTnuHMb|AZ^i(uhXlFJ?Y4H3`yxP*oUts9? zoHgfmKj-n>>){{Itb(%6EeGab?tru^^gtkU_Z6*$v142w#?}7OL+OhW|MIG%2r6Ug=-RT~ zHpx*uY4|`&M+WWG@e*}QYk!PnMpE*mYVWH6@Q3{25#N3#LVkRybu^2fpr9E`HsVPD z_L7B|xvC~5BQYtq8#i|@m4zEC&p6v~p9>>Y$X`%Bx+d!-uc4}8- z`Mo>*BSr&wSM9D=l=G)pR(@BE`b-L?$B8o?wPWK8(S+n{!|hC=)A@$e6F&)zJ*+5x zy^he*>WI|R-ZT499qz#~x%Q>YL3v?SAOdNwJ}2SMnbmnmc4v?~X`X-!y-xnez?jC8Q~Q4VoAitp-6i zlcCfFT=4eeKMj39aFHWpq9k>hVl#x)gQ+1lCA{-VMf%6|Xg4rVm$^pNHNfMgKyR!F z>3vY+#ze@$`v5wyY1R&+$4T2+_NBXPIp2AKg_@wpHkIgS=3D0(S)4DXLHOdTEt0FW z(k0uvyUKp_0k&Ze5d*y+YDN31jx>08-GFfrWiEcGNokwTOPT7ZCLmDtCOQCqikLOP z0#-!y;(uR8^N%?PWSWWuTox`~>!2(&oCDs7vb)<963htZGAq@x%9-0vwDJnx~Sd5-KVdd{x#(i4b;Qo`)KHG|~)rh(C`QWt?BX)3imoP=3z``o?nl4CX z-YJ~Lrwmqi^(yxFZ581iT z)>>A!Cez*@Fhews-|6cC;K1+lQb9U2Z2e?sB8855DCpRXrvP6962kqvrWVX4tX{FP z9Hr^##2xQQ-U^^YPWIeS0Rsg?unw80=q^SA;TyqANSZXTaZanm(YioU-@r#pox59rznFSG0WZmAF@Pq|i$)E<dws zq~)QujYebFrW`AwXit{tkU-?qPbQ_olmbdolwO(7t*bBv*63v;zoWa@L;>-oPX-gj z9DK=)e-|DH`0W&bT3NMpR;`NKWU}*P)<|m3;;Qc*PkAvoB!PMnrR*(Q#K>DUoDc6j zzq4e=lb7~^>pi#{iTv^uX$$ja!~+L3se=;c634wq6Lv;459%?awT$`VNk8!DJ4RHnmd~6KT;(?-r z5j)4dTz8Y{V;#G+q9`A2ef*oK+??_ZLpZ0(<57&;5fdl?f41sM=GukEQ66P*1?%x#bfmPkeWWY@eKYj6#1pb7o zY1yE*w6A(Q-YfSx5zpMav{V4?3eI<=y|wHoJNN7}`_1iplYoqf5F$o~KWWDl7OX4{ z>U(`P{y_T`2tmd``h#4jJJW3ScFG5z;(t8Wh}9*i;(-`?{>SC$O%d!Z;7_AJYt+9B z`~HmqiC_$64+r>FE=La@?#r#uPbUCDL`_LwK2ShimZ zhUg3&WvC?*Vie^@?-a??5r8cFEeJDsK&f6A$fr!tA@_4T`0nt6jL}QTPW5=dHU1#Z zwWYj97P_i82+GbPpv)z*u^^Orb^`oCJh4G2GbIAbJe4f_ayz&T1xpl)UVm{kQ(hCk zNrv|L3+~~9-wrdD;ut2_$?vjzEytQMb(k`idaU?V-8>`EJn8r6M$`)|dic+PPX#J0 zT73l!3VAUtK9_Cf7#`eJ)TQ#IkGh@#E|QDj#hE!U9Qjxm|5i1)M_aDUqE?_n^YKTn@!YZB;&oexVz~=+A(1Mb!FIwdnHrJ#D>G`C1((X8hj# zhy`)+AzsHGHAP;DekXdZ@9lYehEF&z7F7%Yt# zH4$s;97p@c1<|34Ab=t9F+=e2;6SRAt!)LrXo8w0K~X8oXK9S1{sF$AjMLA3+I14` zrk)thHJ?fOT)seQX{O2wuY-xwefPa&HWI7g1t9XhEn;QS63ugOxW6iYYL&&ZDm2C; z5h=SY2-_{MzS#*%>8WYua!Dp3|7_~4|CB=8#&>>25PHv23D8w&m)OoOeLIlT08C6M4>^@z!#O3+w|1yf*1`NiA;R%Q4T_xpIQ$%h#h%Q0eP!zg1AqC9NHaOeWOlp= zykRoOpq7ff2z!(Ll;tcYq_P-LkxoHCnVCb;w5z1^Ee&}vJ(|D0XUBR6LqM4e{(>?y zMzzU7A~j`A3ZtB?U8oappv=eB#)iXvrj0)62{sIsiki|zvIhJWirZyhe-xdIHl@FM zKm*!8yg!-k=wV+Ku`bQEN7=SNslvJ%{N{#@&y(Ut4FJ*LK|*91&@wU>b}x9ErCeuw zX;LkmfNCe!tT;X(Z4@Gwtwz<6PU8ntbOErjdz<=eROAWg-LVxhkgpnd-n{;vUI;>& zoyR=aXC&r8C^JlnLfiIhl%F}sWY)x3)W}>1nar--@1e2_D>#b@A(9^(YN)Q!Um=I0 zGwv7x0YmDJk$bqPKJ*vQnWVW{)~NL9?@-E}O%!rkt?SkIq+f@LWEU zQLFN?-Z$H|ldf}-;ES$zI~7MK>tj{yRcfnB#ZMIJrSrGRD`rS4N!+UwQ2cWIdIsZ8 z$F?SLWJ&#uGfFUj2~PN#ksTNfKf|lcqo$Y*^kRQcdU1_@{y+#CE8@(6V_7ZZuQ*HK z2Jl)WFKx{(&#AQa)A}Gj^?R!BK>kp7O|o~T?^fRP}uIrya&qetf!ZO8aS0uY8pG+ z`}qUnHX-3*z_ZUf@$_$?o<9ORv93gbDNB*N;Mg=1D1w4uGNXY^X6)Zg<|B~FoFTrG zn4M-@KkRL70Qvr6KEy+j47a9ReNc?ded!6&H)Of7c3ax+5FKge5LYKBB~KSOQ=E}y zi*L1Y<#+$StUE!PnhE9gk*uAg{VY=Kjn z<)C+Dm$F?t-;b7%|22yfo!T|A(CCdQu6DpDe;(T+RC-A z-c?u!fMWxsFDqZm%!HA9*meJTG-K=`M&|CPhL^`^nTEy^FTS)v(o#bXCh1nxkjgee8z)KbT1~6j zuYV!S=jud_@Qt@A>^$a-HhqtJ;CJldcCNT?12`~6NkQw_1cX2BF1b~%p%7D-Vmp}y zH`8o}r!nzYy)-WmnMxh>oxAN%?;MjEe6gBqJb{fO^HVr)^Re0W)%f7+aDlZX> z#U_6J6CH-rp>c1+h3@-Jb$!)q;Wb|d6oo)pQeAx7xb``3eg%SqYc#!ICnDvm^XleX zlF}%kI>w-1HMd#kNB+)fzXhouU~K^bz)_$g<~KE&_L-D^F|)-jQ>JOUY*BV5xau6e zjzx5&I=7m3ooYvmW!rk$ER$=+&OK)_yAS)M4rBV~TCsFRfUIGjt|@B-caeb~^^09- z94`6y9a~qGz_KAe)a{F{moBL`ZeSs{aPGVbxM*`I&ykJa7oGh`Zyfc;E#80z0K3_? zO_CwG?!l$Zt9*sMf&pIwSkA=Rr21xztuaU*a}Z*2#ZOI%*=2Bbv(uf)I(tsG^$Fdh zVy)U?qqZ&og{G+2<3`fj$fo|X!kGM2SDeq>MF4m%%~wS3Pg~d|OE#@O$e&&pN-l@l zvx;Af>Me}n_N!sNE!&N`-?ETt)|FI`1L?i2jYWKM-TM1qcL zKmAE&J2UR`vCYJiZIH>FpxhJ&YYGhI4l+M~$WgC&(W^gf`cpxd7j=7JDwOpG$=n7a znF(k%i-Rw`a?&@pJ6W3CD-Cn&v1#IxFW2ZcB65X3e+UP1yz@ued>tHx)fMPu;e|O5Fmzu$H64bNur*v4yGr z%t0cCXcZ2#9BFyOzrCj|k1mwsauCx8_{sSB4Y@u8QTOn`UY7RiQq`SY^;E4IRZw<;x!r$ejx(bK;Bm~@x zbTYeVI(MR)!k`aCA`rW3!8{9S2I>xvnPveN&`4qZW2Ee@-l2d5PDq=HN z8etyZdhN)a_6IQbZv+VtS*qYhH_(>9eEeEWVSpeZ^d*TI0FolPSnQfS8(M|SSm zg%G!Kf)6(6_AcPKuDf^}*Or16u}3y2a|Wrnk+scFCm^8~RI!u%vF@UOO!L0?KU!0_?wu2%dw!AC$y6bk!cC6IKr*k^+FO6LWftH36* z0jaaQ@+!l&F*oY12Imo)M)leNM!(VQaIrcB4@Mbf8%$q$($=`&7-|XW0ngNpjOw$D8zi%iwILiLBqplEO!ns4q7=%Mp=w_luhW_$mRn08<(8+I zf-x}zMx=fuDwRcT^r;+;kgl%+FS1gdo&!P0(pq0zbLgw>?8p!;ZHEmBX6V+rA829e zV)HHi!@d$CoKYr0$fqjtL>w*K0@#@Iy5mB3{m7J>Sumsv$@W~%u=J!ogm_oJn!DCl z*H>JO%lyRNv`Im>&F=vxw}o6Qn-MOb*oQRQi4z_96{+G~`hdt4va6&1ak>>p)#M@( z`m_e*YGu5EJ~Ab?{^zC`rFAg0i7?CDx+5{sVhe6%dLU!DH_mcOoZHL~Jkuhm*%hCI z6J%J{y|wSRX>KGTHM>OICSw~A63`DXX%z~=)R%Hvx-0o~5{S>k$!=T`GW z%SdMs#-e%$pLJKqO^iF)KtAE_z902`5o@S`t9B}>xSZ8eVvTL*x2%TgmsK93zIPv= zy|i;bGt*Wpi#QVmJ&1{}ggkT74!-jqPa{FcIx<%%tsPC%2$&`$vF7AYm2?7?F`_a= zCl!hBJMxI^rCVz%?~DBO&_@oaT$lPR_nEjNj89t7DJl!M*BEfb+Az)$4~|7-i+(bx>Vh_<4Pdw8h>Rj zRtr6{y}n=4^~U78m(EgYn#5q<*Cl4RM|$`)Xd;F`a?5c>BTWwdc1qtElpnhgrp7aQ zw6Kes-MJOZFWzZb_yX{dJai+V_X@n{8J*Ky@uI(z-LJn%n7%wlZOJD4K$gTRGc`(N z*Z9zP*d;_{+y+HRxO-cPb}dULN^2oZYhnFJbI{F`K+jZK7q9O#g+#z>QtDt5zns(s zB@3p@b>g0=r2OP<#vK}@`hnpEnuORQIi@i_HS6zDGAdRVom&9+U8c_DVl&^g{2%O` z)IMAn@K%+8A8~mMts(4Coz7HF~)j2`IEJFG+d%7#;Us{TN17xPZbN2k&we0XI!I6bKDE>Q55zonKWc=3U zlGqn85!_~Pi_cDDn$8esP%lb5iWB_Y}i}V@1eAZkAqC6vtyWFu(-3hsz2I=BCqf*kyxq*9r>QGU5FtTZRcF z#lyVFec;}~nNrIR6Kmf5w@OdG+(TpjP*nymNfh*BW((_|3gubywXIF;J~k6#MUyEb z1YmH8LWV#mjTDc19tTwA$h|9yVFdD+zpZ+^fjs751dka_$C(@CF_#?zM;Q;Bh%A~@ z6ohA!oCs>Rt*XV{zWvzWx3X8}czA@Hd0?yJF(`zW(?TxlCG~OLFPsfwq4SC=4)*U= zbyt^>qsZI4!FGlnAoCZ2)vXO_bD*`+Q-hG<@#3;kN67GKi0W+MNSUDf7EC8452sA0 zgCSK)FuFx3=C}l8`hUrooI+0^Q(%5%YS!`g>i!Ylx(T*>*3_APbc<}4?v{gCtemIZ zW|@7`zK>Jm>uyhb2?US%e#_FN2Oj5)v#g|Yt1L94aLu-h zx`md5V+CB|PDysX?|L&FNwc%mZ|&TKzr7fPR}wtmR{>m&&G3nG;KxP3Y{{~7R>x$q zc)EGtkr50MvpbZga%MxujWx~{{Vj0Ex`hWv<4DPu3xgA_9U-plkIUgau=cyC0_~Dp z1hk=jMQoUpaisH`!}>g!&dSTRrZz~_mcsXcZNsA4BoG z3jHr}j{v-N&g2Egu+W%&f*o3l+|M&Bj$+jkKv7__IFAKw&pj+WlZY}((EFvGzFiT{ zVSG;AD&f6Qgkn3C&&3~Q+I#&Tdkg!KT6`gi-mHiSDb$Tt>G6rE-URF6?#a0DoTi@f z&WpEigoMP)xg|%gKF1p$e>WPga-AVP{8|&4CjuCdrwwS2T)E@$9m{c-zHUFsloTbm zcf_`uu{iLl9yOJ^!@-Hvdu}|ZPFH&Og3h9PybONlLTfzAH})snla_|GDUU7utwUAZ z*jSOyt~a7OrGr>gpxjdR4#tJX$GtvV@M0Q1c>8P^YD%mWJa1v#*%@&x|9qmjcHaCe zLI^l1;WrlPX1ldVa%4p0Pd4OT&KJF%gcCB5&l6Fd3tB+tIcm}@Wk_y_SSLSZT|FlU z46FKxvv7t1p6AjF?U|~d>Nz5LWpn&aDTdihfA$9%>L}2u6 zGNHut!`E*Ti73R!M6wx4#9=3T%RGQ?vYL@iFTQDn1mL6S!s?FRVt7y z!Il?Qo8x(6zZ=%)0+a>vYh!@4d2zF=U}w|gjwr`~>TWPv#NH}%k_k4#CTI^g4bl22 znNuOmkvqM^U5&so^WVL@bYhk`Un&nrMxqZEWf&3^DM zs8Ev+l(eFm(TI2kc`jSxm@H;m8f&qZC&5t#-;BFK3r^hgsevdGw!Nuk1Tmz9OA}gnCOW%#SQ@U@AXt z7oO4l9`@!i?$DbeIKV?Dw~3NVC)>`*Z4-D?q3vsD2fW|p!#^5~X`Sk1cs%36{|#T= zENKFgD}VRrdS$CQ7n4isY+_$D>Ln;o^I98y+Rlzy)ue06;9Ev%9YF)si;YcjorJqU zHf+oB^8Vy8zhuF64yi}O%F>E?Le!ExC|R_RZ>Hbs*=w^D%r zh+}SDXrA@BAh-z#Kaz@&Mc2Rg_|*CKXW8}<9a_+;=@rWQ4j;+7i57j~C06=hgpEKW z<+p8gV*-KkA4C}ZcY4-e(JEx2Qon0pci#45qmU&r;k&^B(bP@^v3v8cqr%*PL?3FP z%iQE1qV*w-MaIvOT*Xvg$BdGalDfM1ORChaNUH4hA;ZFUVc}-0Fr}+=U|BIoKcUw) zMXorJ68yToaQ#8g7gxL*95DXQs4NQ1c+&_7Kr=I2O=(Qfv=xlJZLE3zq*@)u;w#0Kf7Gv~1ZkI>_I7sb1ZELs_Wkq^!ECG71LtxHD*S+c?$qMD$gc!vObv8ecI&Sb(G~Gpr+1!%V8#LhN8XFsv_r#%$E&8cC zh;se`=)Oz%6Vn<4lrD*vk3AzeTFgmRjhEw}W+&S7y;uJJ{itk|3F(5LLf*RjrGVWK zL0h+9#YQn0m0i`IIj46==`vEEL)-<7j-tT%dal2}KNxK{>f#?EaIw!^YOp))%FCCo za`t+Au<9KKhi^na1C?}~WI&^6$xfeK8JNGYxuB1tEWeX{R~-uxkwP~M2s-TRCw=8= zDiNAP6T6cWG>asCQuPu3(pF)189 z_qs+)7<7}PmM`Fhnos0)y~!_H`)%(P1Sj_&L;pkK7-boNKkZe!e(Tl`A`E^3feVO% z&;FCO=BsUclVnQ_Fnud(g*IqOjN2SWzy|vT#=e!`{@BQxO?YV=#m~b=%UYI^=p1m8 zmybevn%|%cu0Qt3w`&*f$U@g0XJ6+uc+{ z8r>aFH0@UDxwovchHRINu~NkY3qfJtTd^jDHR8xKi*nhx2ICC+hoN_hRbhIjy1SL( z04 zsh2f(B(dFZTv2h*C32Dq6zSZ^NulhxSFe?>!m|$j*y&C6)nBU-j>G#W>uc-eJZ>y) zCkm6_Hz`?8fdTD>XfXC&L{`MXo8Io3N0n0iV7`(gM_*}Pen*-R0}zr!&l>|we+o>9 zNn2fJV<=7TutQs84u{y{g?}4i+oWBk{TjXG*2SF2%mZpu5B6$eTHqlb=U}Zt+zKz{ zz+ZmV*5N2JC%Pm@YSMdTT+jZjHj_I8`#5lq+H4He*o8!)=Jz<1QbtS?^V9UazN1tu zARJp-MIe7HuDwwBijXte6ORE+j&U#{?ql&^Nm^V{1eMn#h-hW3NB5+iU2hl;dQw#y z&HK{xB4d5HN7pY+Zv{|&F6}0$N*@xExjhGQi#)auY$?^AC9Bw+&qlUXx^r=B;*TR7 z;rfbwm*yd_c+$z9^K7jX7XXv7noghFMe{k>TA7xTD~}K!wSC%&>PrvPYhN8r#7q_M z^F?g%3*3Og!U_FjB&j_wJLPF8a*W}d?uz4hJ?cI({tqELH`08M%MpG$EqXtFijMgB zv1-egeeWLFbxaR`=(>NAwC!Mbf^gt9-~Br?0svPL|HWJPJ2m2epBVuj;%17AMO!$+ zYD!!lLxI*5 zlCP5;v3Koo#ZQ^^;U_u zEfTI@@b#a~!u4}gQI1*-!qWJ9z}6^HUElY8p}EXd3wO9bivVh~j}+tOk(+8`GvJr< zW-kI13>dWm(}p#lmP@Yeq>Smi%aU4M7Y3*4SQRyYw(SFf2{mMxSH%0*YhA5xZQBNf zMqYJJ{Ng?vX&XuPx%S-&>hnz{ALF&6EmgXC+V@J7X`>+=T@6BAZe&*?`x zV=;3(>pJXZCbm1X;T^k+c zb{Tl;)V>l$<9IRWZG7&Ptr4+DnJT%gd(z1E>#j>()qIyLbQS`42i(wO{Ne8y8VM=m9z^J@zKLmv@KJw>4E?Uv1|0`{Dh<95JFwN6>u zdJ5p}QkP^-my(hJ->Uwrp^Jbp@W{d18H&O85vyOrcWvJTfOJ-^y~t4b5N zOs2#^tWc5r)VGeeTw>#BPw218c?=Vz{medMmUODp1sxVT#jAu5 zZKwFkg#KV-I5BiwfZ}5$&<_jULk4r2i9{=i>(LU(+J`JD9tY*%#)wgpV$D)ewYM<9ac!iOn9p@Qh*~yv>(>YE(DfZ3-n|rO*7Nm=g!TTV z6s!4!-MJtXJ?>@YWRA%S7Ev$0ZY=&=Oja&X$6A>2+}dXgUPQ_us0#rK!*;zYDbb!| zTjU;!q&jy*t%#aNstfZvEiSs2jd*UJWiFQ8X&^t?+At5Z-V%=Wt(ujaFCqY$UTM zByIiDK{T?Lv}5d%KcZ_rgVqg;=Y1@faHu#gP=X49rvid=>=P{WN&R;5Q8HIqKKi)5 zmr|0@i#D6%PJ!#AvfQ)1YZwhO7PuC<&-t}b`1h!Oqpo@D{lZS3-)=0yGQ&-_{?wtJ z4{mf#C4~VIVh-p@u|G#0`lSD=&-@?;q2RFhM=hYe)a-z(Z}=vS^41q#P|fnsG=w+= z`1ZG<^;f#_pC}aYyV0L06r$CCQ{!?I1p7}LBDVX>bVI!T6Ce9W?Caf4dgh<}=Kra% z1~L91Hvhi`&Hm4H7Slg!0k=l}sTS~+b=~0k%O@0w7vl@jzu>XKgZ&PF@Ulyl)*Q&8 zH?-g{yeL?b&;GO(5F7bT;SE;p`>Sn66$j^EO~*oRw)yY=?ER{_8vy2tgO_yOeEj|a z;@vIg+qs>7PLTa+3S1)Azr_OBdD#BueDkvYEfxR*nkjBD&LC>r*BcoR7#FhoH{}AH z7CG7v85j2mR^j+z4}{r4(tXe$nEgVxD%}ACrzy3BkAG8fka!S@{p0%cXsL)+ro%TS z7<5jxwv8crG13v4+Y_#2)9f)%??Sg{*x~ZbfCTpO!R67Z!@?ZZ|4TAH>c7dK2mW15 z{l5pZ|MyxAQAjb`I|Hps7oBfYp|Jn3^-3s_`j{F#*p74JcQ22k+ z3iyXo!@qY(e^4QTRsxhc_|GZ_|3ydP-)RN>cRTx)x@6!nqS#Ztpihx7)5N5@u)Hga zX*q>`=sB1AB;l&QUrZ;5Tm@5mEEMAEl7>gf zhQRD2IPhHT+>!M__K!3V#1a*oUd(JUwV4WvgLFkKJ_w}xYwWbHQoUj%$kp1;}poLmq?VPbJA zUba8v{C~mpLE8OqQGnkteO@-+-wFWVs!5>`@@mq1SZv&Ue`zp)2YS*4;{REzkuZ_K zrZ+VG;~G*)O1A$ZEx^nEAEX69jRS~bEvXy+O-n>q{G%h-f2#`o-Yq*DVz)I)b)=$5 zc7^qrBqD{I>cW_ z{OOM0$77@5PBkxTebSHi)8xDs-RLmC+_ zq$h<810q;KaSx1pAa)9QkWBUy7w?n5)#orZkfLxmT_vr2kmB|W$lVk&2(sO+*;hAD z0wKp=^BO1XzvKxx*#Ew4L$C{EQ_1L&DY&@UYJ5`3P;P^t{B`|>yuWX!e_T1of77!Z zf9|keJj*%X%-;k%_2%WKwXY)z?r6}t8Vj{pbsCp3()9xp=@*oz%>OX=kFMP$DJ z_<-fSvDy?3BYn@v^x)fxg_Sm|vHq9#q4&BBhcgpl3A~2g*$|OhnkVk^RLh&CtE0Od z6W8L~^3e>YKI}zRJ_=`T74`;{rNn4#Jn?+F&Z$e$&HYr}aGHlp%!#a~95vYs4}_J4 zySsr)uc}I}(Wt1G3$&#J(WxTzi4&7Nmn-xcCH0WYSsMB$zb+N{&W zH<7~llV{)SO@zvYr{38}aX%%FlK-A#LOB&O3OtZB@}iU&E*ByK>w3!hru=NAtDovb z*?zC4R7B5`lA)w{LL~7rip_*^DlFvLOw_)~op>qgh%OWKc$u6C((hp=H02yqAGT!N zowQG3NHO2_b7#t9u>8$4-X`<31 zb%~%Wqtf}usN+d!s}p4u-T( zqP(m;usok#WlAnzm84x=@BkXAG8|ND5?vIj%B@+gRIOI6Qms*~T&;c}sB*ODEBYVERQO$C=V`YIP<@h z7N#VpgVI46ylB1Xz3AZGF4>}%YTezK+0ya(oD3DwQ!>Hql9uYz(RJPP%h=g^>q`7F z%m-{|;_;HP^oKFt(J0+7Obtv$Oaa&};DFvEyg_09^T`jLWxa#P9+G@Yd{TT`eByj+ zd~$rcd@uM^_+z)Clx1UCKV>- zCY9=@>E`KX=@#i`Flxlo%ErjXn0A|X!@BXiW4hJ5$GW+?tGZpg;oVr>q01yNfEs27 zBY%1-lEA1Yk5Ua~L5^6UGB`hvC2!VJt9v7;^#94Ga> z>S@{S;$!8Df~(Q%ja#m1{8FSvB^f0J*vgu!nwkLx)_K+i*7>cYRbz`A{2TXN^<0Hq zyRM?gkR&1YMiz!|R{x4Wswz;Wsnt+ z<&c$-rIY28Ws?;%tAs0utB0$GYbq)!swt`{YA7lzsw=80Y7Qt3s12wLXbdP1s1K+P zXtF4=sIjQ9Xs{>~7RruhZ)9(*l-0nGu#eN2G@rR!+qel;iB*-a6|Y5xH6m#?g&SNOT+2lmT)4tHk=Rc0Y`yL zz^UM-aD2EroD1#>$AZhlnc%i?Qn(&m2<{C>f{VeQ!Hwa#a8)=5+!>AmmxTiiaBDa* zTn8=y_k!PrOTua3=5Ru|CY%TE4#$Bj!dc+70EgEdDbwQbILQQxqcHPbXnvAXrhij|l3_N##Ld{@iEO5ki-c>0cQdUa`a zYIU>QJGV5q&u(AbKDp(AnToY;@7=QgKib|qtcmCQ9~BW%X%>1(L_|bN=tY`}6s3#O zLhl`sUP45a8hQz#N*74LKth!wy>}8iO7Fcx;O6})-(Pv|bN{=Ud1lXW!4Xl!DX;DK#l0DS0VvDHSQOl#-OLl!lZ^?TcE? zTIE{3+Sgzt-(ZqG+`bz_bXXn?54IRnjCH^`VAnD0SQZQmHWibKg@Q3)>?CFqD}|B5 z)?#Y0ei%ROIp!Qojv>c}U_!7;7$s~wrX98OwlSz``+btS&|u zi^t%x;uvvkC8iSVh4I23V~(*j7#eIeCK{`O(ZKd&`mrDk2wRFN#kyczu-lkzED!_4 zW@0j-SQCs1b`~>>mBYwk8!!!6sCza~O_4)Q2}?~O`1vTJ&m(Kn7gSd{qqJRoJbX@s z5)ZK7sk1S~4eDlII{qZ!8ILe|$;I1W4x4-XCxsSc8)e0_O+M1666YJF{eNPR&)+_+Q&&vKwxhwL9n zJwW)D%c^9eDp%YNbn4VHi?>mg>ukOSGkN{P%j@SW6bIkV>dyksF3(8L0?&v$zrWAe z&$7x5T?M+9@ieF(b#wMmgl5onm`@TCK#Bc(&7xYEJW(bC~kyvu;gh|7=*&SlVL z)MeNOzdf)$vOTno+aBD8j&2WcB0*8V4%z@02%%MzN=3wS%=5Qw7 zWWZ#^WXJ?(GH5btGHimM9he=N9h$|>4$h9w4$tD{2INNMhU9Q^gL0#C!*ckBfrgQW zp$1&TV8dv`a04DX03Cr2L2=MQ=qPj;ioY7T8o3&}!d(eML$er*vY2Yj81v1TMoe#t ze>G#NgUu)cb4myMS6nCsZZZeKez!eqD{8xIA!^}a@dF)<&POK+_UKJAIwLJ$0yt5e zFiu=dKuknTNK8yjP)t;jIhDyH*rF=fCKrbJ%fiIrumJ0g0Y<15OstL3B61Vv+IH0DZSh5LFxgU7ET2(3(yooVEvikut*?#0t)$JlZL1B? zmeFRcSSL7bE5ICCCfIB%WX;^$#%obAXx<}e5GiI+g038Nc4tgigbVg3yKGqS3eYp3 zGoLe^vyd~AGm|rsvxG2)Fo!UOuqZJqF)J}Cv0RUU!NmsIglJmZ?pqYP7NUEqda9*_j01auI?qu^3F6nvDEUO zaq9@lc1O|4p6aC;>)LTM&lIC2X}9|7=;}s8+bxGJn=KcBDZmzB32+3M1MC6T0B68! zGk_hy3gE;q6fGDn8Z8_xt|6cyq9LRqrXi>ysv)c)-Y?KE(l696)-TvE+ArKM4iW%~ zfP_F|AVG#ym7ct%yd@#HLMfmL+P&sLBmH;b7tLz(Ly~7mN5{Bbnsjqto>kT%U+8)9IU- znrNCBn&_ICm}r~8b%Du>Z4;4=cTie5TL+jZZlaIb#>pkJ@`>I9)Eg+y(ji=QG{t(; zbklaza?^3seA9l@deeE+Y}0PjY7{(-x>-E<3@nU%;*dY;*jr`|=EJcTkJ^_n8Tf%W zbwWn%JoNXGr#M;Mb%!i$DK-<^;PKhxyGM-2PmfTKA0EjbRUThGay=3}FxZagZO?Jf z`<~A{|NVUMdFS)-=dEyZGynjtX)$o*Lnj%)4Z4v;hvGrjC4!Q;o}mShdDPJs-&fs11r7+67zNMLDZieg_YsR&eetdv~Ujmh1xQ?ZR$~ z$1K?Gs15aP_y7(D|?fl~bzg5UVz}YoOjO=S*e)NFSs>Olp*$qgX ztU_jf|A5V^+kwy7bx166_|GpL&|P&n@Ho2(iLY0f&EFpITJ<}CoRJV>0$$7ILo)|7 zR&5U4&d3OH0SXQIvjZ-xUI%_>q=eYZ*UV7QU`LJ$!O5>qU5aJBP(3!crG^kM;X6Zbg#|%Pcla+`y_m`{m6#= zC+Yah4O7osQVDEr)HX^#ImWd%Y%4<9nxm}R(evZCH(q<*mqMgBsaqAGhsT*VR6XgX zQq!CJtd`OH<76AJJnz*e8#U3Fb2@U@Ch%Fn(cR;8#N{_#ZHiHIi4`8bK2Eiv==q=) zG2P^BRf(P)XWLNsWT=IvPB(8^9iz|3NjF{|-StbBX#!Y9qua+HY`i(5^-Gay&amo7 zFOO4fC>-7QL)0}HTa}{m<18C$NA!NFbvOhgTXr%?%gOa8y>x6 zaiUkx25hffo`;^^kd4)ti$A56P1Kl|+F?6Y_qVC1m`&Vn^IG=XkvTQ~m7%dr^(z*B zN;%VFvu7(^-2WEt|RB%&_y#-=rQmn+a^BSs>pHI%U7m z3}BQ?1OAR)P}>8A)wx$3&TcM>u3>zJyXz2+Z4p3MKpFXQ_c&T=%w^E^V=o+^irr_4P;1FI z&mB`8xvf;y^ng2-zP=+A*%8*;N^h=$P8>5J{(I?swC*Zs-4DFg`c%*WcF&^K(>!g= z7{>6R<+b1&ReJ4~_kwC04?St6!qQv$&2`bKV@4b7#O@sCD`+GVs;EUT{5n3FJEfIZ zkhszamCXKt39B}D8RUQdx?tu0ev3akTJIr!IHWbe9P0X6LX-6|HGN2^e5={qN7t_s z?^rpb=p$ML=k#3DB#hG@s?&0X#kX?Ly?0HKFiK>nh zZS;$MhSnvlvQ=u%Xg9;##Q&izEif#)m1|CW7ja_f&t6Y!5?0zOJ_p`SKQX>|7yzY} z3(IT;&FSu@o)}%QU(!Ou8d~MV&~#v|D7cbp62q4|(X&+X)2S9dJ-KCZj6EMGY?2(k z@QaZdGj25=1(=swmpap6@jr>nt+J4DhsowmkBxgrHAlWjXGb@Wf{zrB+K!$a{I^vHu64EOmQWiFwX?4|g&~J5lb%}M@y2v_IdL@PDApdwE+eFUB;1Q!AvMybw zZ)OJIqVbb!B7UQjcms=MdS`ym49;}UjL)>rjL!7VOwTmW49|3zR2EE9dFB{Z*o>(i zsn(7YN39C*hNNflv~@rBxMFgXx^{T0YG|Dr z&2xeCkLS0}mCv7^+xo>qU=SoE4e|@}1(FSkgOowSAw`fBNDU+yk`GCOR6wF2C6EkA zJtPp41&M{AAz^i6#^xX_2n!!4x=GzJ-3i@s-AViyegZ#^pA;VxpAa7xpR63KoTwbH zob(#=n(!L;nuH#Y9ZwvOA5YSZ(M-^c(@aK>MX${lM6wjnbAgRey&fK?&pYlrr0P0v z+uAySbl=_K&t*_4)ok(T>*_Cbv2}64uJH`@Xt;p-c~TG2Klhx}oKTD7IuM0$b9pyE zd3+iZ-y-C7^Iny)qvQGri=}B2^IDEQGf(#8b>ueYI`ne_$^G{)y3l_Dd39$8G@UmW z79ZP_edgEAWqNPV+x`l+hKtE}redNK&3$vzm7ER#?Vx4FnbX>nN6^<7QY)){b1AuR zDXFb&oRz|Xa$*W57F~#`uFg&tv^8>5D6(iP>Md^>b7m}0YUgp<@$Z1i)E3qmIy)7* zI5|2Cv_nV5-93_elk^^{kd)a*6}#7R(w|lR@Z*ckXxDv<_2fx>D}T0h^0p8cUS_bK z)7pMiQ7znUFffsu2u?-bUNL5=5ziW`tI#`05hyRl7S`7}sH;G9ZAvS)be9(HeDV`t z5UEM(OOEI1*rXH8i>u_IH-9UB=zgFXy}rOsu>>7?`?v3HW`UxKrp*DFTCx92qePG` zv+uw+fNJrUyLtvGvZzZevb1nIhqWaZ@5TUc|>R7g`#Te7<;+JGIv zO3>1_rB8m`4KnYUoky?jtOC#XML9f_1DJ_EeeF=gx*M%yIGo>nx zsShNFS=L84Ye#mC*3^6HV@AVzCl(M+ZP0|Je96O!ku!b@)WDNIM_l-xi@8#{Og@<6 z?4kT&3Z9FtvU|D~T;f?-Juw|<#6ypAf5Km?5&e9a)}zgqx6&O4{-I*R=)ryVQ+Vs$ zdxW6W);pCv6_nAMZ10{<_<0Vt-%(g9yH7%q7o$GT^~c`L3d+2Y`AcNt5!vLl$D_#t zrTvYHtyy*5W0wNHQ%^ktY{|Nyr0=i@jfroWdR%b<52*uKQQ}pe{Z{5=EWE*iHH4qk z0d$~?1U+LFI{7x@2dP`)(BNfG^!xiNT!M08R&jb_VVsQWU(mmLR~I4ODN!FW(VD%}*9g2sT^@eMC~k|R7C)oqEV3+8 z*``xD^$_tj@z^d#gwqX;iz=yJJX)$adJB~qH|!EzPLg`0PEj*4Iro0nRgfs>Z1lGG zYBc<>=h#r3!d45Cw7(Q{O2AKl}f+ZSmbo6%{oLZZwi59Jv?Hlb17C|X8W^s;i0E7 zKMG0=G^mAWn4~Ps?gpbNn;%&g&K-QEtDO9%y_v|W`~yilFA>P_BA8C!t~4R>!g+=1 zfprD8lG({sf{(g3TQhSUCnnXGP(&M7c0J?m{PRc$Aikb-^_6c7cZWzW4I;4T)zZWL z7_yE>mUN)clsrPD7nD1~js4f;NH5^9b^tYebDoXj6~zVbPI+U0_6+Y@@BbBKWw4&b z%FBIPQKBYvWC11rEPjTQ8dH1!58<7pvN#wG7i*;Qf$ z06vV-|4U5xWHRs$+~hZan&cYX`8R-r^VY?`#cR0nFQSzB@BhJrNd8HH|84}(!(|ab zD(JtZWw;KyVSMY?U2pcZRDZL^y*IG2^8{o3fwLXDfhq6MB!j-1U8by6TTshjdkmps zUu5_s@gN*jyvPH5qHwN5_`R~9v`4v0qQmxjRiX=HmzX*lC_LYYa5ddvWAr0$o9Wb% z(|Boa&KqG@Pr^bE~U|%5Va$_LevI+1IPLTp+ zg@11X+=kCJ0XWF+e2_k%Noodg!FQSf+;EF!wg+(2Wj6YMg4@u4&Jl?A`tRxfOER=g zqGZP#y=w(#_+gb4^P5foA;G#R8tvx)JNDlhsCU@@Nd5bsyd+Ssd1*ETof(a6X9pmK zs`%Huv>GD*%`y<&2Ic-8Ku`F0jQ-R%9)I2@nI)|!_oq1l?4bAl_%U$%goA1PhT9qH99hc8`qy58Xui8*pz`&r2`pcP!Z&=3^a4jGos846(Zt) zpS8{v2bUbt=agIc_y&83J!Io<4B7NB^D`PVW~jh_+w|CdxJ6%7uF@F7=LuJ91u!$4 zGKh_Rqw+KhG8+3oNjx0Z3V3)E_YLJ?<^Zp21+c>VT8XFvVsHyu`J94L$7cUC&E#s6 zXU)%ae#Zie$yFUEE5z4+1L*E^5vw2APdMBVobe|h$H=zKI0 z3_7KPW_K!^gVy+@fAj^d{l5jj)>uh((uS#*ZkQeo)0Knj8lNk}S1~{q&Nd#&fAu7w z+g(oblmD$}k<^p=lb?)UJ|`x_yW0S)N$YGku6qT-H`@S=aF-0=O>&Db^Zi00B3)NoUF7I~hO@5)wFDCXgAO^!XdJqo4dcAUrcPo2uiIktyg^4pAcK=+1L@$Z+iZ78pUpPH&AI^`@SSYn zJ-B8!ac;=kX8X-zb=i(89+Tu&i5Wfk`H0Pt)&1woftNKARDpDG$PODDi9I}ZhmFT# z4M2k7iauHx%(%YB^Sz!JT&uh`b$t!=y}rvobNzjWu3>>WJQq2#{eB}RA#qQy-YbHx z_EFxyroK^sJ7u5{DdJnt%O!S-7=@0ve&I}iEI-GSP>X%1N0VSfw{t=x;bFPJr?Ni4 z$1@?ZhOLtV&rC$+ z#GPFvjw~PlfXD2zu|T1frOB6G=Q_&k2oN^TUuOM(<*5`RSn){k9OR_ngo(xc18AlI zhp3o;Gp-O3TPJ4XIDmLPW#95ZAR^AyEtI@_KF@hIPa?go)VNdXbDLlH;)m@nDf3a5 zY~5eSPkkUy>x+JU`q0TRD-c@h&C^PE1T8WC@F}#)pR@0=9w&|`EYk5u<|NmaE1ROb z5k1~Rro@#Twd3QT?yj+*z;u6m# zV^WghP4&!}WKfE)#cyWA~~3 zyIwr-IpO1HLrNuv=HIOXAOHUGW~2rL2Zi`bkIZKQXb!!9w9Cr?*53T5(O#YYuXcp~ zyVd^phCJ4qQIZ5M`X}sb_5DK#J%#^viXjQOS^4tjq1DG!D@~W1mEeDQ{hNo@#nc>Y z-PswuT{bVtB^SEcO#t}QHPNm`E&k|B+8E;(zIu5cs<2?Q%riixO?CU`cv;zGxd&$$ zB*kxJ1Ph(RidpnC1z${-OHzXuJjyQ|&~xyTeVD%G2# z;IW(-LH63|r)t(CxEU%QOn11tPH2}{S0k@i9~5>+OoyUN&%NW-fsdiZm-epFfU-}b zZrgj|GW=fauBD3wpcbpROE~+G+*4K;4D{aE65JgQwct`aEJB z(5@kyqwq~UIQtXdn@NKrgU#WgoE*NysIsIJs>>fMX-`8NN^rUU4)5wcTKB9a0s2T$ zJ9Du6cv6C+3TCJxTW6vs`cFj>;H>217x~0at>~_xUmK_B&iQu3Kr75>I&m!VDZ04eer-~8amnJZ0WxD# zqs~fk(48eEyZz#oy5-VP$p)#Vi)ZD}qoC5Q+@|0q;vQ-NI#7~IZVEnd#KvzCBDZ<| zl%`=K#ALI%^yshd`A#w9q+9mF3V2yY108RN!J-k2a$r7k!;?YT3tPF6J;{XrEdP=s zap@2<4sT|b#$mmzXXdS0p>!dSbXddnT%Z0QjLswlysHTK2>$VyjT(Ba1&E5LY3~e~ zUubsS`zvw!(a~Q*OqP`e7!?_f5CjUF2UHkPSAF#MmyiyiUUYk!DSv91W%B9l)rPGq z;+Hh%d1-=Se*$v9G~s=Jf}xQp8Kfn-^ZjHv`fI^;@_rnkBG_;2{?=bAdm0w|I@J&6 zx||g-KLo5%r{7ln8$HwpgYVzkurJ6djujm3Sg^Nbc>M?4q|%Bh4qA07DD&TVuI}NB z-;_aDkKjb>@}%?1>x#|9;wZd_?r8lQC?1p1Egj@Bj5PUcKX*qrUZ*PMSJNo}bm>i4 zY`;SyO*kpFTpHb|F@uNHke=hvN3$ z4yEYEi8*|u7e91#-LB@*5=atEs~ISgmP%rue3&}$LfXi5$41~pnDGL^sw}6QPWgkf z<9Y_}j<*4i>8HGFt+WE2?;3}}B=LM?(yep?t3<|-BpyU2JxV8VTf1@Ch$LQ+OnQ;d z^!1&GrPpC^NFGCVK5KD*?ztntPZnc9qL_c}6Hnt9?Tb%jjOo`qO0LaoUt6U!{d(tN z!*!Sz$z#3GTF*XHQV6J%#h8;Q7G3+q+o(tP(_ahT{OJvKx1eO2N^EnPYDvvT&|(g2 zQgjh1D5zldE~zkb?z_puzt>^rS+ClhF$8N+ROZc6PM0ch+>8qjF)M3aUIZH@83 zwwL)BUl6Sf$qp{>jsvtF%g%Ci4NS1=zL-Cocy6ty^(_`=pAh$z)(Amn@YBhq7Dm^{O`(q(L$m2%Z+V+S_Z1jj>+dMCqD)(uEMOA!78uW7yJ-04 zD1Z&BMY(QoIuo9lfG0l1+^5uI`teR@Kk(kLX^RM>V5CO_FOIZakETaw7!3&Z_*KJu z)0>`DI)Wsl^_o)c+PkNjO*Kz(x7Ufp9@T13l9Vgi2(3Y&j=9(Oi0MF~y3h~LY3^s@ zt#8`E^@cSmqF{u6R!`M*1*B~IH~6%80z-WfT< zJkWn}tv3xAA`;7dJmjArZN-^DEZl`VGLANE*^*+`1#;1?qpkG13}7>>2+eX`f>7Yb z%T?nKf{dT+3cM65Kjd*p%F#ZH#+aM}E=Qk~)4w6rmaw&1oK<`69<$&&uylA1}rm;&vBbjE?SRylfWwFxqVRVf#VBnUy)O&&ji*W6;)Q&FjM- z49Bi9pEjXC#utC&4bD6I-xC+`6^rtFzts`~`KV7|v@vUaU^1$Wo(n7O`j#8Gl2a8i zx;7tS@1w;wsWm++5#DNIP;%CiTDW!kBjEIdPUGih8OnbS z%evjV$EFWWNDTFVY>j`$Q9LzyaeCeP^Yt_Ze+MWvW;6Fsk8T6m$6xawB$*|cB(6Sq z_GTOZvQ63`CfZ~9^gI!r_V=2Q5?I4SMJ9t z_a7*ij%FA}p1Fyx^^dOD5NoEAZcvmXT>anzbJW>L`7U+iY?b~~IU)MYuOg@5QutpL z|EJ!Z<&*V7XhYk{z5`6|zlWO|XQFGpqqa(0a?rj1T#3w(!)l(66oL8hT=Z<5DDh3> zf4rhx`IQ#5-}7L@D_>FS-!lJG^#LnX<~$uGcv&XeW>V31(v4$;jx*1Lz&SI9k)8{e z91SKMGXIt_>DU3&Tsla7CAZf3?`t|Fj11|bj%*wb%As7w`8WUT73KV*8Zx{Q#Co(X zF0AZf4XTm5@It{$q5q2eA8Co#Y2(wND0RWSxpS41;TU<4vAKdEo}6u*d9#DqBu8>< z|1_Scx;?}NdyxFcw4}-u-;dzQR3kor6c@Kq>+s01;ulA)pn9MF09Dklx7bL;lPU%J zNHi7KXpa_mmoG@a$jyB%QaCg;W#Ftl^f8W{`eN_nA9x69gEZ^O;@?IP4S9gi82P#x z5E%mb2{`)g`yVF$rF0tQ++WMPG~{1=#<);fIB$fg=cw$K@ zorx6!9WdTV^OB2)njtI~c1p7#c_Uyk4$^qU+7;Pnw;{Y056(gX~6!9N%tWG}+*hN#mZ6mx) z(`wKY3|1t0ovUsNnJMbkF3Ni#VW-_G1xx)2#Z7woj0m=<6n7((Ri}?-67ho}RYu*R(PholuVH(al>_ZM6=0=65F7c;s@l-|Q<` z9jh8LY}=wTjiRZSj^S+c6Tn{c`rKsuReFlIg- zUO59Wrun@S$5GEp)xpk_o(hyKfIprk?h~km;vQWYC+$*{jFvG+ignXBI;KO)F}&ISqp*!9h?M zx6oAQn11k~VjU$5Op&Qiz%so})gqsgMp!-RZ{bqGYrzJAhM2$jB*#>2I49W3$!gJx zQ7@3PU9XG**O%lNMg(9<3?ey@Rzd-phe%43pT>!QQ*o(6{&-)FU?4cNbBAJGg(<*^ z@US@(m1%Vna!4K)z+sS>rBFyI38fR-P&n`SDaZD(`GcK$u*Hf5Q&hnNONp?qdZmUj z-sbee4XuNSUZJU=E%s*LXXgqwn&Y4v@oA-Cio%imG6?{+_cfuNXZj{M-C)u&QzmLN zdCMw#uu3q?&sZU(g@@1q0@U0)Zp##9aX($nJl;~`+Z#2-hI_ottBy64U^cx7%1ONf z%4Iafs!C2uFPQ7+11oPaDWzbBpA?pG+P?r@=w0@6erme*duptpD5A;SmR6yFFg@OR zm6l$ifDmup;O($ut1j|6d8RAnj)@kVSGWg+z5>-#9eL726Rl?%tb4>)Ra1uky&*0g)jJQ~~Hb>eyCDI_~H^RmsW>^Q;I?vJGe zv^i-OKJC~azq;?_gC9E|i?F<4JlA8A>y%ZPkqWxak=k*^U6%K&p)G!T0eWiGJp$~A zcE4c+I!)h{vMS=gQdW4D`cgf~>&Kgg?+kQNS0sNO+pktG{(J3ki5LWp`cuKA1Kn2RN%vIT7U zV7FvsCx1@9a5DB?rb&En3(Xw)JFWnRtGn$woAr+^Xnu-6HanQiw>;J>_G>dhRYLq! zhHPCpu+Jv}Hqjh>N00sPBOW-EisELZ3oFHhW}V>^QZLq=*d<41`ehSX&4BzK(5DS< zLpGXK-5>hOzTW@=2wR43t{ElqoF1fA4g7zw?Osv7RJp92tI0`KO`xyIes zh_HF1`0KIpqtpm|i-TpvikEdKG-+_VCl0l^a{k$or+r#C_i6pT*?8AErCk;TBjF40 z_;1`o=;WKIDp~{+p^QiJZB*%I$0Nz8Cvn3Yot}s^ZjYa#hTP{h2nmi$!W4YoBpr3R zw6SNBws~1xmN*+XJw7w)tQOFY-D4>k1Xb~05pd28GtAN4*)C_tEMIq^E?4$v4mY4r z0Cv-tBwW-t9HZl_Lkmv_D#(zi`?id1AgT?P)(c(y!zA7!O} zgQ#QGffiSeI{DC1WO+-UkGW9$2}AHbuW$F4t~4KY6?CM@Xd$n%dOn)d?rVp{q9>P? zXgJa*H5kQVtOBwP%>reP(7mslA)V*herglY@5fiVvbBopA1capBZca&@Yv&1ljV)t zxU^zCzS2FemC9L(w7M*-K1a30#WqdH!RN1g!ESPoZsedYKP60XkW6)TYA;O=D?o$9h%tXg%@j zu}d!ApsgD!+!!1bt(3RhfXSwFo@eQ_WnQq*hcsK+wm^jE~_0@QWqwIDH!dy?{!w_177wV_}|K+J}kD9VLb)PbnNu#l%5@L<l7oG z+ozWOmLk8UPSC>0tuXMd%+OgU?iqUK8MjM!Klxjp+&?T()1Oq!Z;HRS>zK*d(PhLX zJuJJE8Vb+*@FQO5FW;O(1CozPZf-Y?cU;`s;J#b_eYd6W$-=tPl5V}p!uTjjw<^o- z%FgG4+mSJ8qi=C=P#FVp&qvcd&qP^WUIK}cNhV;45Hwflr0d*>_i_yU$8 zsucrw#@@l_&^1lCuZY6%NC8tyB=XyZbp_Wfx5-lzyY;o8!zU0q!Uqef`4{sN^N;6S z7i)x%V>t4o90A~YeWK#p4N0xDYVmlbMEocS+Ynj5^wI6Xuz00tdy2M2>Y0F6>!Rz% z;o~DG)`+dXddr_jF$V(tx^0D=2;YpO7Z>_1?iI|6Q0{Peg5Tq?y4aR_a8^l(mhN5r zp=o7}Vyj2qTtZeEIhjzB>XX`-)iU6wW!AwsLu|a23I7v#{Cel+Lcm^?WdpwRe8Fu` z=G2J#zBc+)V`$zO3Hsa6@`?LOG6}v1w5Wz%aV!$`0W{64U)!P$pN;4lKXdu6%>Uq3 zSDugwv{aA(9>l!*{Xx`XUQ^VfkeRYiVUJDgr!Z4uURz!eoi#6fcQ)5BAG8E*`E>h= zCrRZr6a6dU3eatJ;bON4zs292_lo!-l?7cU{_`t*=$OdXsX1C-LAa^VR&nHm2#2DM z2uImK5B)&L(tt8GGxsYF5)q+0%(t^*?~9Z{=|sw?MB+jeE50dKl-R!Zri%=9SKxT0 zJs7&f!+ftWT(RXz*;RxBJFX)sR`KgObVQkn+3t&CN>(glpo7xZ(#1BH)FO`}W%aA| zL>7YZ9YIR;S+Rty*wcZI>$a9AwwCN7Wi%o}EX)YfNX$zP)PORD$PlB0rL*+ArB*02 z;t)F0!DwqKWozkYYso4iM9+-48M$#Qa)UB*<3{AhwaAUzkt6aPRE#{sS%|vt2&300-D-sqZDkO^Q0PHF=T@eM9v$eb?B6N$H=~m=Hh@wu2 zBJQ&y?u#Pst77mgj&*qsmRB4sP~zbw2g?f%2YHV57aZ%aI5-4!g5`ySvJfA>BiILe ziUw3?^*D-Kne{=qj-R%y3&Of0R*d%a*!%!y_?egJPMLL*lTsU-Db0%_tPk};c?kD4CN>v2 zeIFPxpYD;S%M74l-=`{pb5-Q{jDE;AXKh(%XBy5Rbr zKf3zh^V&z%$I$1E&j+7cusWP_iEB6hwEI_-)YKwCV^`$ZC)ma(O0Idv2KbX^TxrAN z==Qlt3MeiG3d^YUy*igvnt9ON;kg%({NhR68_RH3PN|X=_C2?g>I*stx3W@JDWkQs zwVOElwcs^HT++q3ZN)qLIcSmJJ8|fR;*povw&4eJr-SVzPoaWNarV=jne;np<@O0C zY%#emUk})Y8k){`N8^^WsxF}cQNy~+gKkP#+&$M-s9Ky2&7;Y}78yRyLuxfyEsHDY z(+nn~PDvivhfVUY_PX<0AxJb`oLf5hi`5f4Wbs zF6{mM0%T+Y0rJr~1w-?zod+Vm)O9f9SMVW~Rkj0bU!J;1;}@BEpyB1!hy$v#`w(d4 z)Myyx(QByfVYY-`-a+Q>^5i6_mwX`d1tpP&*sloFNRJy!FNi&f2tKXRZb z;~ancX}H3YrgN3b(&f|713qfbtLQpVpi9xpSq36?3YDc6FQPUK&E=zg8~E<~i*Xh1 zycgrgC?j=+#Tj zsf_+(LVe$MnxBx@7OzcT+G(brOT7Mu&TAvLF+)$5n6^zv+1emJQ?EzVwG>tJ&K1ei z%}GD~#@}Hea$sm5z?5e!$dU7-@@@Y$;t1$c{;q;Fd4aSdKJj<^mZD`X!-*wuvY+~T z-ia5?;J3rhQ$TOJba4Bg1fZX=(>F zWl!O6UH|qp}e%nmP?*+7OZ53O44F!MF=SpgS zPO9zEI)jUxBNP$7gFL?y6(Tn81dZP{9XCUMrqd~}4f$*hv@Ra!aHIlvgbLiUF|8$2Hz3&xws#^ zu3y#?h>k|rLc3%wGRr|@@QrKd;e-$(-e2K0G=Xef(DO^WC3|0W6UuP@X63H3^D_0; zob%RSsKT^BTgPa#eu03g?d?~MX z0&VrDZ3vrfW!NRc=KVQ9bG4@h7vKO!gF9h*_dr4l6oRj5!o*=-*Q>yenJTuRlh+L^yqHs(DTr6uO}!aE+;Z1yt69UtG-_*5YhXtd8m76@||gQ zhtTjR_^90>c-?@-$K=3yxA(ANVRrk99U91mQL)YZsNICReat1Dykqq0so;~r%rS1X z(%knJ_ORyr6c1cfrxNtyP6Fn*!e*ZU)R4;I%FOBRRzqrUDmnR-4bm{ucJf0FamH_- z8}4VPl-tiFiLr0y2WK5jiRz-NU3-HZrX3tgrmH-MCv5Nl6Bb_)0y--?QZh^DCp27< zE^DAuGgL&E^u#I;W4OW@6upphO1ZM=Tpw3DN7Nt4g3AnadtFFWC`IqQ1o5?M3bOk8 zXgM;tgbVF59ejFk_LhoMsZ(2#8!rzk{|+Y`=$7ef9_aR6Au8j~b}4n4t$dRQ#SW+d zRkEzUF4A{DD(+4(RXe1A2@<~Ofi{dn8=;S0KDOkvf4RD zvD$Ya2F^ZZ|0k|~bA2ru527F6jMt0fvvV9u$Ypx7A4mUWIvyjmx|?hBok7u;DOL>q zcgDTqiC=Gm=rFzvi*|58@fn<#V&zI?Na{oa9LH|otb6q{aARlHzCLxj+pEy%q@6bt{;g)`*wiWy$8o{NI!ig-GTZ1XwUVdlQcuP{ zuG*Zh(Z1Y=3y;5&)%V>?50}!YhwP!kxw&R9PEX^XMnaal!%MifQMO*6Iy)b5ZJTW@ zh<_&ttSK>_mkfIelY(jdTcKm@$O2M_<6Y8df7jkXa;8af+RRB-TaWLpflK5mfDVa) zg%|Urk<=p6F`nOl2l|q~qse9cp*{2P!hfmwQQMK+qMB_~xbH6~CS`AqYxoE3Z~u{u3VeI2e9{QzTPA8(2E@+a zTHbTl#1&2%4t%lCqyIvG<+*&~Kd5u?Ex0{ypOHL;#DGz@n5bD+#A@9$WD-!pYu;1S zSHtd)tNC3+chTFG@{B`Jru7}eu8&hjf35!3!n6;~O#Ja&oeyvZf01#qX}DKT@yFFh zVaj~`dV>_#oY>^+$0F zo(DDQi=y4@N#ewg(HFh5O;nvHY8^X~I+C_NcFjxXExE7VGCIfX$|u)Fd|`{Luq(CY zoG6~~?1m>1l1P(+f`@G#s$iaquvn|A$fJ8EO8#`ake0zv7br)4*a?5O^rO4G)lSwe zaNPx~)&hm2OU4&MLElE}olFJzO0a1*7PnLmnKv*k80 za{G4rJ*kTa`X>;fqw$gb>m%N#XYaFa8x?~n&BAZFl}JvdaXMO?>@)4_qXLuiMMs9P ziUt;1%@>-l!=IwUswe!%3@s`cJnuOfKVe-8;A>8^@DwQT#aYY!6`4fnFDbhvjQ9Q; z{59ohQ6Wmvd)qq7C*m|pa+KBfNTgI4D0rSM(*y3Efm(CzKS33qg4~L$$Ngt`#WICW z1WZIKlRYAFw|^T_=+z_pHFH1$6`1mQLoj` z=aJ4j(nC-sp}xtY-m%`^8GmNKjVMJ-_UQKDosLuddir6tJ^j6(?%8aKCLv~%&tZ{m z()09Ci&+2irmE>=s~!g9{m-tIq4={@C0J{lOxyK&9gDD2ERz5YBIH~DMPC(O+E!I` zR=`@RM`TN!p1G1qSm6u$x1O`K>69H(03bdqGAlMKs?rPU)#wGmlp;OaAZ=_*?MwXo z56XL{oOnfbSfUvnVAv&SPi0RjhGgQ!J{Ve_g>V)dx@i~GTVq|M-;Z<=6BvG-t$bfp zfv-I3D6nE!%%t{xttv}_QOUpTEF2p6a@1vId@q=EuADXln;M&`i-e@;5)rg-mN=L6 z$|EFu(#(zRsRg-GPnTM)L2hZ|vpvGKDPAe*Se_n|rCa+XZYh#uzlMIz{QAu+04){U z7KA5zrAG9g_gF2}ExmKA@QL+7jZd?>_}ds;@Qc_aTl5Srsg~y;9A+HV#eqV)DV2!* zp2^4VFUH8n0eVhc(lfb z?LRa`8E)r7vX<@65BetHz6?$cGasbBFFTMQI#1~OdTlz?g&YCv3g`#?>}FT$u=2jZ zO>kYQr`~n}q~I7IwL*&7J`9}Dg2WsJ$?8$8$zyPiMOf$Hd z`R1}ES8UjQmTelpsI&l_}|be;ZbE?_KRBw$^} z#)XGM@HUP7Lccm&c!2ga*CO93S(yVWl{!*x(T!?YEmoW}ygd%bzd9v*c?!ns=LW8j z$+xSlb55C;$(L9A_Z#}2m~O_yJzY#Hz-e46trBVZtN8Y$Tfch2+6CnS<@x0a<@Mze z<>l6O)<`)cn-@32A>2O9oc*bi3*i+i>@9nCV4&~ETH6-W<=)U}fdPjg{OiYmZ7IFE zSFIN9k>1;3LS9NDrAkUoeL;*`LV#IhdBSv?X5utQ57Bn0>XC^N-B?;a&;fBxmkXf<=LPue^8L`F^@Zc?(|rw3$j9_UAqO#Ra`7Wg)w!@bB z$M)1O_<)lMiJL6qSofh<*Vfb!HdDwYj?F)Kr5v@<@%kmCr+I#=2iei*XA`mObW>`Yh-iOg;f7pT(@v@=65G zmw4e%5ejb!GeGixdFcI0#E{4Mfo?DsjCdw-qNdKpVFP?*Pk zt1m%UJG5f1>?rjc(PjrwO#dXAVd-F zxGMY>N*P*k!cF>p^@VkDu3FncqEp7H;ai4@lM^)!!#I6ynajDDMub)~W2<~)8JdRk zsKj&9O{;Kn;Esm$?6jJaUyT)-vz zj#iI4R-np@oO)l7yuX88b=*>wg`I#HZFRHzrTus>!faJwz()Rvhqp42%I&A;DRcQr z>JnqQje?|SswPj}a=PqNL)pyv&R=D7q85`cmZu}Z=Cch$-j~*F#yXK)kNjpcE|Ot| zOyv$(5FR4~V6`I2gvRA+pjnHu9{(RtsjJ<~}sU2?{HSa-|41_hg0fqF5+ zO3klj$0s984Mi#prFR%Kx5~)1tz3t~9oE|o^01M%0I$#rnx|`Ti6iMFG zzDUf-;y7;lQje%F*VK}ZYt#%>+?@HxL|V($nnOI!Ll(5d*$?YjH8 z8jWV$wpcTNG8^|$8M6b(_yN82_(~}ALLFm7QwI-a-I&yQOzgsv2;C4)^7gx>;)alb zrGwxipx;e?D^+4Za^7KHzEZ!nq+czLa22IA(KBqmAmHoqtkp`f)DQo)DT_bGoTsjA zleRpPcsMoCuEWcv@};e&hp%bB;)hIAkw0te4)w`DJ+_PC8{LL-F>>|93RD>f3F((h zX6VS;jXvH zT;JGyj^3tsL4Vndh9{@G!H3p3BkB7~|s_JSx$=`s~7GF<(4anpYdb zb7vtM^rtCYE5kvz_$<_5tyN!cj4z@eS;$)?4~m%Xt{YmMZSPOtA_sJR4-73ye=p6` zG+>#eKrEoCgSUTIz#%6m07rZJuvqgeGO~yA)PtUvx z?DuInOJfbtuN@20#xguJ$SBq=VRs}CY#2~^+CxhImiAW1xx04BsK|+KUwEgf(?h~V zvWRc-@RL`lx{u6abt@&b=e8_jv{@K5fO=>A={|$<6rEbx=YxXD@1hPrz+4<#crZ>z zjTepI$H(qwX)>BDC8=g@1RCyRERHruG5A81iXuH(nXp%RTM0H31vPHNz1L=Ht~q7* zH+2~;Y|4p=i10$c) zMZ>a$3~g=d1FXC~19L|_e5J~jlB^Lb+Bedcg&=$7`P;l@UDjM8*M-O#Sem+$nbUq7 z&E|i9I|GUM#mB1rCjX!_T#EnkMxJ4=;2m;i@XGLT!bziYvy*)YSqWP<*%Q}pwlTl5 zuu#Zrg5u<_R~Y9hJII@P-&IFC0X27c4~7A#wO~e$6YB1nev*MY-ic(c@~7F}KaC0@ za%G$0_eM8X*i%T3s97<8e!3U)8m7H@)0f$?jVMbDYyN{9^b4=C7|QFZhCgU<2jVI^ zn$~VNHB;*?1WQ11V0a;0XDuyBhik2r5RFuan7+cohvTO>hqS%BsEE;8pl??8YW}wM zN7}+6#X6m=SlD)7t_pE#o9v8Cl*3Z7U{Z>0-Ekqxm<6^lje~PyZvP`;eR=~@t!B`l z76D$)-Oyux^^*!^b~Y|)75);g*%jYAf~dOde=`JnO~dpoM09#qG&o1m%#uH3$}=<4 zJL^)HHB$6*jDnW+q({Y(Wyq5&)z^-#{<{FILpzZUHfO+t3_N>N=j1m{?PV_ zdqz@d(87`kQ>(7&dElHx!LVyY)tw^s_QQgQYfnP zGEX=pw|a)pg*jx7>oRoRE6v^>UaOTdHi=AKZGA2`)EY9p`{NTa^Q@b~e-pWO_(FY8 zz{%!i7WAe31rK@YH(-{4u}nW6r$20v6o@@=s%+A zz8j}1dB40X=!K}1DRZvE?%sh8?rHvft=sM--T#sX8hXe!15B63^NeMkVT8|LA75>a zcEoLkT_xEnkP@x0>SH`+Z(}^_bYpx5YX-lK_69FK$!VC6s@^7Z>4N@LIwTya=;kjO zSWAQxYvOB`us9ISESR^}Eg1UCMSoPbh}TsNN%_enKWEx6hfJe!hp+V6>% z4-_&*hT_9!@K&H}gcwE{D$X9+IV>5GlzhK~S&B190e+B<=Bpb>N>OF^g;cODyy9*a z1#6wsI>t+IQY>LmX~!3js`+Xy@LNh?Ena6tWULZ-P$soUTk~5kN=Zra4W~C8tWCA= z;w@$!RDa=r(g6)05FPau3PyTu@?~(DmJjo_@IUiC=VIIK|JvumakT!Okj|=YI=Yf_ zShmQ(4DNpui!~2S^7!Rx}cI}-+^6PbMyvv0tZZZ zjx%RfX#g#HFN^NPf~SnXdKPK9d{!SA6#wC50GB$tLW)30J0#5X=sfdM^~G*(#t}Pr ze_w54tVeM;?ON`=cr9=Y|M)>D9%UQGlczH{D!WkG@R17QAmpRCqj4b(kr7G(^;PaI zTo61&cz(_rGQHG(wCadv*}lKth3I#rR&H88=6MRPcZEH$Lo_>5ga^VNuOTq6=s*V0 z*>iv801gI5qOM5aVo0`yFSjB7ZDK?n_d0ItDQA2m{Da*r=PmEG6^)&c@nC$9Frjy@ zNR*jLHZ5wvmI14b4l{M|(C>Axl6RPf_pdie`?zE>8*KJ>z=!rI)_;H=-xx8&dJU>S zRYSZCQhqY4zw2(aE{j~{-f0@x6F~5oL7JB_{{^G2cvlMU>oy{a2 zz5@$CGu*%)MnFHV^+>+J1MS~|*fq~+Tb#Di&ce=0AR8z;e@Ewy+(d0g3BS|x?kAs7 zvyOM4aGr!-WW74U--L^R{H$zl3QYG}2~G|%ZloR#?o>sIm2lk-i6Z}cgoNt(?1pF( zq=XA2B_btVrE4WTDZDiVOn*3i!rH8EWQj_>`K^3|JZQTdMWOWJ6X1x9pq;w*x3jZEuyVY+zkM`*ult7^;N2Jzp&Kv0siT|r{ z#BNbFA!lMrclYlLxcO z-E0Q2-9P!Yjy)~4qV(G{Q%M2I84Wq!fyhzyy=_SbYqF21@kD|4D6kRY#jr|U7sPgt`bc$3BR@ubj)01Q(M3ZjiTkDz z`0>bSQY{;x%PtjJ@V5Cl_F)ytceS|DZ!aixj{h6txBGzMS>x(k=Ehp7&w?WBC8j2ya-Us|hdubwF-|bzF0u^T~w}|H1Ws!T| zMBlrdauzY;RKI2p8d|jYPp9>U&Sn*;_4=5Q&y&A_Nu5b+(s17i*j1<&jNjbDf2ZAG zD&R#N8C6RR`qf4QmcGQpSfC7l)~71|se5E>=0$kmFzGt^3H74VooQSiMi;h)*uP=U zJR4SoLBvwz_*;}8mv80=ET7Czf-vs*b?`TIW+(^jlX{c;*$$I9*%)T~rjyc2Ftq;4 zBQEM?5|hRsTH-B*KV-mU*M5){%=c@a>t`N_V13);c|+XRk3fS-`ijA2hrIXlc{1W) z)#}K;%Aw!)!0Er)O^LP&o=Md=X#<`_Flh~*1Q+O{7@UL6LWK!ym?4aR>%JPF7ARx- zV2RkZwBwmz*fGos+IN1Ij!boDBV-Q%zX+u@0dQ z-`}~Hou?5`6={j8a$qjM4VU3b)@;vmR7be1_HVZ7w=|Ky?1k)h^+|oa8;$;Ru{2y1 zsdnJ~kF}QHw)^B~)c*ddFYDou{cjUuYY6TzH_T6N!4OHj-&&tD5<`d|R#0A!q9{Cz zn{Wq|Ne@BU{64(sRovBZj#apIpXxBPl6cm;;8{S!N4edZGY7UlKT-Zs%>&JSWYefV>iStvVhQzzNmK zz!|g((;CBwe2&+JrLnQ1c2Uf%V@oySH>cJ}8BZtH3!#!lb(u-qRL(Jorwdfi=Nic# zb1aPl`;Er9UT1szoZpd;q3F z6hd%@vOcTvJvPIvQM(WkF8u4C3fH&fPwiL(imV;&MvA*tg$|?2yeGw<991Hl=>}Hf z4Hbs_(p9d}yV?eM>2U7jRuh6@e{nL{d7=)`*n1)j=<fPjIkYDo)x~}C8^8_usqM2DvuGCdfg@f8V|RkYfg|gGmn5^oruGeP zn&G^d#j+N%C*BXdpXD!4}Q4F(j?|h z1(IR1FL9zik_4_8UhT}$PqpTczaEV?=gObzIAN#!NHrZ2B#0B>U;r+)$T?c33M2+r zQg8q7&}y~np--~P0K6n9oJ;0$;HTz=ufzNU+Ev$_X~jcX3PX8%Gx|*qrWdUQi422j z1+EsHC}Q8FC~6*af05so*rZf;)Q}~n7_`VubMhXI_cr(J{j^H$&(O@oT%7y^3A#gg zJ_BTh2$As(6D>iga3H75;cmF}mY>u;7KcG>9om5MkcCt-?hCYmK%}FR4Vsa;*L^fI z^p+msxs(v9;;vO`{<(B0I(^iEUB-ucqCA~#=MhuN@F z%QbSIE8$ty@BjEQ2%0t_L4wldP5vIZj1Ve&-wNwI5iX*Su>m-KRNy{7I*bQ~l8tV5i(^BeBV%Sa=G%?Qp&E<7D7d8&-n%7afYMz?% z&<^S&c20PYacT+Ae*=fHE(FHxydg6G3gdI;*;4fn?-7UgVa=R(M-?c5H`(=?8>Bb% zwT1c2rJ3=Y7ob%ks(fh};TgBIj9n$z<{>_=7}UjX3Ue1@QfI4 z)^>FpDxYQf6J`>fL$59rL<9(<{9Piojc@$DvN1g*K6r@CjepQ#y2l8mz^-e47Ve&RUzuqxg>r2De6Ci%&*{WKy)KIObyg^ku!5liye|Wrdxuh_c!TD z`G|rQI-%=6d{QlB`Lqh7^{Iv6(+D4y&oFVkG77qqDcTXEXof^lEu0f}&iIETr0oAK zDd5c|=8UuXsZ1zl@6$|PV;nrf-$49*5=;+BPo@H;Dd5Fd!l!ywfyZ1vhPJmysPMMGf2zi+L8R{ ziqAjl!yLDYWJyQ)0?r?M{mKG666)tbpY=~gF`&%IKgfT|4)G38$qD(uf#yy9aZ>z4 zD%@At3jEO0z^xKC9ksyHVLLUvir9aJI#O+wS)bIrMT-J5vxZ;=z1!`+D^}7!QVCmEcvDyUQ!!AsoWw9OQ(-v#uqWMO^AU!|vhI@%n9h*rY*e5YV&)$UE5x`YX&{MO<$MyJ06}10C@Xh3llnq`&w9Pw=kCkNaen&eYz>tbG$d9x?y=ngG%S4QiBVOT*TeVsC@I?B)jo59w``Ee} zZ|AwiDSl}?@U75!_WHa& zzb;V*7$NylTvO`~(rW%3+EbstRNf7gjzSnTyb=n=SMqlTff10#X=dlYp%KM}5G|RB z%HtA-T|rQb7;0Oz*EaWs;>CHeqT+VC1%IVncBd4=k?k0 zdRR12srbBWBa_4fPz#O&38lLv7t@J3>M{}%6|ULjl$ z{o>{Lu&@$=09kJ$aME{t9>~mq)OR#KwWrOL>qQUHA?96zesz7=-2O(T&isfKuIY&% z5*WJkQUrQ`^xxD3Z@Q$xB>@`3wy#TVIu8f}0q216Ib*qbZeY|FE7^Z*#COgxvq zOjnAV;Rry##nW5^Z~h*GZ{e%^3$LYz=L45-@|aHZHfruU+hwl;S5`MaA2}{W*B%`+ z1lKOulP{iOfh?z&;ga@fGd{l;mX~Ki%eRw8|2KTgwrrZ0KGT73H*RC+BIZCzQa%9j znlE|F;u(nRn7-EDB+*9xDPY6D;mrd$CpAJ4>*ut| zoAoeGmfpKp%QrHP7Zmq(;knN1C*PXR&il^QYZVu3=AB2eZede5)z|$=-poU__MW>i z&B2F0D}Ue(R5kpZq&FG4#pk4JaoeVHFF!JFHgn71A~;gA7FPL`wE%n^e!>8J1;@&+ z8l?}O?RU?4q}T)IB!3+8J8(XMb)c^&k@mH#7_p^0v5pEr2)9+4-}RmXCSAEc3{89{ zqpBh+^QNlV{61v$@rSiD#SbE`xG|CTMzZ{BiSGdNqCo?uHKQSerbgOrn8`&$8&ld?tt)m~kE5#;m&R)aZQ20r z1=PtGA%7H8#0NMbU#7jhN2(KIFmGr2>Hy6Jyj2QhP0v|4Ym}xI_5l;jsr|R`>iC}w zn4&YLe2e=!ZLtS}4Mx-+Gre9sK@&=vFa|8&iL_DWyVsAN4Uy|Z=SERit&gi#f}KI@ zJ;dAhm(Poz-(_7UiWi)o$jiM8m$xS%PiP?BdQYM)80%Wz6T>4@xF^eyWzhD`So=}d zlVQ2P@e*CVyYc!|?)B<{;Kb<_8whLv>vBPKBL51tKD4%F?8(irn|0ZK;-xo!4^*Q( zg2B-VmtqjOXMYl`@KY?&pZ~Z;vH18IJ86==SRmaKVANA_e(d;8@BkRIIhXxe`Zvbv zKj|s48-1+YEZkl!R&k`w7F_B;dodkKYC9DbX$t+cY*HOKCS9R7xd#k;BzKTCaOeRsjHUN)@m>N7Vnyv088e+S8tdB!8wDB zI6MjC8aBx_nL*=2Jc#@*l;zQQEBhf5LrAh@=@?g<`%6e&8A;eVbA-l5i zJXDeErM(Q7p2b@l5Qq?!vh>bKe5#B*xHC4_=yF%4A$II7e}~rVf&B`=Ie2t_^!f{N zs?STESXYHD_Iva=qB>H2^?9%F#GPx{YT#UWyH~dOlBkoYFI*ZPb+!wzU^>lhN43M!>z`yF+L#&kn)dzhOK z4g-gol~2szgmFFncp(E~3X=|OgV&x~pJ)uSUsGNantr}Tfpx+c0IuX@6Sy8sZi2XQ zX@kt>aUB{P?uE4DKF@3TYj}HD41p6)^bJnA3%Eb;TrA}>$onarE)u zfyKf9H#W9YYnKG#OxgSzH<*4B+5$t`qBecnA~wh<$r8k0!vwM+6<34>7m*i!zWbK~ z@49ReBCs9Y%!86peDlLsp>TDA(467FHLc=T_jAIbP8S`e`7oa9v!5Oe(%NN#?#aQ%tm_K*6a>iDPO zD=mOYwa~LH`FGjoTgt$uBSGARQ`|&^|AbfI?e@f#sq(T(2i|U$AI@DDqHq)&OBasR zU!2ZQ9azM?c*Jf54*FJT8Aeo@0Lmuc})gJ z+dOgB1JV^AXlR=WI$A$_-kWZCZ2q~4#JWz!M)xkId&7oyfCq0<4g!Ji6`?-lLPQ@9A>gD3Zt;?*Z&0%^~4RCZ5&qQ&e zy+{D_x=5%1G${%uG#LuI-%sx5dvC*Y{fO#&onG=jI9A`{EdzVjBSJdK+;L?C%$+F% zjvZD5#_LeoUMgC*;wDTg7K|hjVw!%D4jrAy*zG>o_;gb0?Asv&wy^i+Md?puRtY(g z^$Ki_Jllm}%b&vbnXG4NVF<16S4it6fV#n7IMICG$H}x`u;QS59i(Bp7e7 zS#u>kJ;i|9F-*IciBWG9y_R&H-X=gmdo)l$YSc$SV^pHGF=To2On?>TcAeSAG-F37 z^ywVaC3iKzfXuz=JEK8;@9LIKybdFFZN(O`J<2h8VlY+oIo7?X9(`i&?Q^e}nODls zz|?a9=RObOP)&FRy#+P+j;>a^rmqfl!bS-TVr41qvlxsDmLfIGl3bq;yFFMo++x+K z7qRM6Qw*jd#R(xFR17O5vqeuM6{g7iD<{a1X?)siQjK@zxWzm8Z%TPNY)j&T$pDe# zE!Gv@aFM=26s*~XSV;(T zFgrxNgsH1jJP{*#r)P@_(SE5h*GtHk&`ZC671m1AP>gKQ0~xD zA=Kzri$$vEk`>a@jpqKLFW$IKc-jEWW$;~FV!y2YG)KzJ`E{?6N;md1bXv!J96dpf z3c~?0A7&>}Ms~0~UOifyp`5HydFh)?XJa7f3QV`G`9eG8*rrn?gG_GTei!31^H7?>g6Cfzv97@XblUG@^rT zKKG8049Q@C4B3cMAVZI4ORpWHr~yxbEYbjBmt7KDg&M z*V)m>c-Rs{=j@g_+PC1A&$|mH$4YykBgANsY9lEL4+@(d@q^Iqha=%4Vt=H%pxSp3 zxuRL{97ly_GBqnn7}TC)4cr)z-~1DJOhdcU-m0fGS+KC+#7m-$ru*i@%|@n7dQ72A z>i7{xs4Mmc>q%^s9-#1bnr%E@){J~jeZ}8dxaB5=CfYhNeR{te-Lm{d^vZh0x`w6$ zkKi8#-EK2#ZAqw;xGEdpB8`33R0+Y?#=nvqtT7G}@$De`Y zbS9lmmMl`HnKd)M-Q~VR|51l7S*P9;jFy0_oGZqi(<3mO8o@`!H+xZx_#v)0SS&he z0>5hQTNpj6259GA?1v^m4Y0}?NMR}Oe%qt?q)DQ@`)lVrp*h7Tb1_xT;CV^XU5rRV zaUKWK&F>jw67-ZD=2QToIn{pxPlRV0`BO83wO}}|hG7(W|88)5mLvmP|1RdX!=1pg zFJTCqwf}#@Ni+pNM=nFDK$2F4CcYSLxUPmfnnz!r!2>Y_W2>&lC7Nebf#I1Oon~cd z@%elDmWhHrdtpYMy`E9g{`P!jp#8B%Ptz^@w&cZAo6u3rcW&RpOO8SGbIFU}nO`(> z*WlKYxdQ>lYTHi}8+g%FA0s!$T-gT;?W-c}s?zNKC)*L*_AFP;`v+dT@~?fV>FsrE z6SPIqBsa{6uI_hqV`kXNaHSbUr_y#aUBk;e8{W);V{P2=dmx?nMcMPyq|Vvj^Uq8} zcefEeXvWLg|1LU_0nd$ts(vQ-v)TK?o~Rq>b$Z~0;QzX`e5_~mxv=NhG!*X41fl!^ zLw7=%QmGS<+HP^@go}?(`6s`4VrRiW0$=Y&_|CRbfej{Xgx zlO5uUP7gt(Unw0ZV;e96--B2Nw*^iA0QZ#~K>MefyPw)MR=GhRlE!Z@zW(hFT~G?m zo$GNKLNu7)HHq-<1TljC=mGH>L|07fn&Bq{dWC%%FY82I`7$o*q+R)vF6z34ce82& zJyDeEMT=S}-qJ_T%U*o}pQn2$K%2q8T)umr*S|dPK?B0DL%0<*dDhsqh_HD=*!`dU z`&ICbxTbeehBMu|G_cls&aNTCt|9F|*%@}j3d$(NnxsiQ_mm^s8jBbIs|%O@8HfIR z2PUKq7VV1o`=AF8**PD%wh=VEG^8Bkbsi4Th6fzG*U|ht)wTqrh{%tDoZu_WL71D#P6#6y+lMSL~+GvQqAM2P| z8>N$%na|K&L=p!*Xvu5?qFq3uYhG|}_f$KpLD4QqWam1fYn^=#y{{$11JdkqkbVN^C{g)j3z||yEOHlS7 zm}EY!`=Pc;!*%eJJ=pkfv|{+4OTr0-pn8()yGRhCNlosb_uV%g74d{N$C-8HJt#wh z2}2I!;AUvh3l`vKEd39ix^M9H-7~(nOD5|9G;)<_|I7OSe|d;MJA8ycd!t&0(KQ_% zmbkLl?-@(jH8&PcPX+4i4{le-Q&Ym%foaVf{4$TT#faXO{3%?jy)Aa|d2Nm^bBHxlb zeHu|^Q6H$`3FU)eI*F4XCHJP5YLMSuklrN+rrN3&))pMe2Y*{CYAm`={zmA)Z<#wT z#W5|>uA=Lk{;o?XOK~S5kNf#(`Mc?e%n9p>G%wyP^alXJ%>OwnHHS?5*3<%D6Rws! zmo$rhvrlvjy#thheIQ;(NoBPVWd88)l8jSFE=Oqbk9vZk)sXDZQ;vA;;@!ARWz7Ya z!8CM%hb0mg!DPF(>(zW$3+F#E#_}GcDYjDzFef^PlNLXSv$e)hP~iC)B)f*{A1NbkXX6$y_kE?q?5WGe z?dPcAsK^C5C3IewunSS+xTZ&CAgt3Lq^R?!Lj@Y@IWzrW@BJvN>A3MaR>sfpIkYuh zX$3yJDelB{6P@|BYDMkQB8D;cks`O=Y-}O;jvNT8Oi&bkFw8B*9m(nv;*9B}pl0xT zY?a9|E^r;b%HGw_AFUbtk?U!(XtP*xQs1WUCib{;mB{&nu92_oi)<)o|I);d1-^fL zy=?RD)wc#C`SVlrQ;8#GhUJD#+hs{wEcH4z8OFLsc(%G_#C0p)yiZdtVnTvdXWcqY zWzRtNb?W?iowF9~F?@O4ytJ{FMmd8w1l2m1zHV`eZ!WLB>{Myl?A+4Wg8S6*)UiIQ z0rV_$TKXb|SOi`F?u0q_S4#=8Bwz{t)Sr)VL$nCzFtwtT;|CsDglWDVUKn0jHxeP=Pi@_H8Gaeg z^_P|_bAcM41)s${E_@-JyS_9$Dk7@hGGZd4vaYxv2={ibwI6&?Z|(E!@f2&FTQNSH zH%ZG%%d%`tc^+k{ciV%y_U2kgN(R==T$0yQ*3DfcN5hkgnd(+;(kfSt#iq|1$jrm) zJrKB>U_Dx!O#5vK;xIL0L4>B4r|%sHrVArC5A35?Ion7efu;3Vic1+_xRUsD_u*ub4wp$p+4Tp5jB5Ge@Noad!Ul18V<_uy!(8D9?g- zDq_^XQqzIc&Wj-i>t_GDrhJj7KjtQ4AK}^-P;~y%Og~IP)7~QpZ)SVpny{Jxuj31g z5iz7AZWX$kNR{86+}qxi+Z*v%^0MX5;}kqb_9I8qhXOgjDzYAbyhN-n^gixz2AEG~ zqm-BX>&-vb?4CS31N_|Lg4^05Q?pU-B6k{hgWLjO?cWo=*|vqYrhh+!Tol#8_Dxc2 z%vD2AHB!pUS2X-ulI_H5NBm!OE5n|;v`MgQ8Nk0(yExZc1zLa{4J}cf=5xArll_|R zx(A$JIYIj6EevGNinD76IUP(e9-jPL*gRM5#>&t3HoSZMfYMLGEHdkn1Pmw2Bitt) z=5lknSTA(*me6ebg$_?%6oQ;uFJ&y}Fq(~taBWmCT*DPQ>#4PcIDKv}M4i(2smxR7 z#?>U@dA*V5(M$`)M(*0iJ7i}N#eRR5`9z}8M6FBGLKDgo>~heu)bk|!zJl$f(74bL zIO5$RslclOcy~pr_R=I&f4^+P3@@q*9gGa~^^H_hV7OzEd#SOfqfgHOnCYOf!n$nn zD)ee>Uja{o2f-YG!;R9j{aZ^DcV6|O$73lg>EW>51^I zr${le?K~PO#fVH|ZR}Rq(ppk?^&0^YC@NSFx4k!xpk2US?S^mNBxppN-#zb~ZsO!X zeyVQ@^ltHcBmfhTq=)v{a#Rm9En>W$UpX24-m~dkQThPhr`w<&!uMS;J{% zeF7|-uXY493J-qWOngC`Z=@7<#N?rj@;^7gmGyERbqeS^OR*0l(%YfrE#Ucq;9DVA z*cXG{*w-j|v;;NM!)I|g*v&_9Iz`m{7^h!rMVNu-a5_MA? zi9*;)=%GtM^h^ZR($VNKuy{@Cbjb5jF=JzSgD23km508c5{uC>(l1EoB=u-{(;ryd zYUGtKTy32?Ok8qsPSS|blzCSiGCDt1fmltM&KW1HI*(Rq@9Ec7##I-V*+}YE8maf7 z0bh0^PL6A9`v&KRMC0^D+z|!SOa>otfY;aj&GD(V%63rRi}biOt?-argd_e_{YoRW zUZX4op^kfoS7ZG9iGE6Y7^2gHE6{ngexMV0#gJjyCNjLf;W^xl*I^!3+xuAHCZqJA=S(+@K z_gaozRu3&smJWt*h@9$giJf;JB=h8O9!9bo!%7QFft6on1I*ckw*Nd5fY!hk$)^5( zCdUXDd1ra1o0fuBljgNZl%_rX4n!S9UD@cwR`tH~*yr+N>jl0AzH`+D$v3_QYK`hf zMxljzENiPM7N_=81($ZIPWsM)_o>MG<0^)OrxdUl7%XQLjyUwbany2CQ&BTfQ7+F=9}P{O zvtMLAHVie$3~?hf(H=cU2R2GjzRvF!xg>SsdIEA?x+B&t^5^r(6s!XVk((;z$q0=w z@Xa>-T6V2ogYxFxA8qv-l-eUTAFiX6Po zB{vw=Glr&Wn{WV~ECiLG#aaKI9k5$nYOv5}gH+l5PrkZOjbXYIE!o=g#Mzvn+IFCW zMzEH$Ig&CpcopZlUf^jVhnbWCFgck3FQ-VmN6mb%P=ZzGN$~U&>`ptJ5{b!tF)d&o z5MWje9YB=%nEx=Jo+4oW51MVu*+a{{MnFnHN@2Ubn*&g+pjn?;W}j5qz=KzHki614 zN;yc`Y8D!IG5Ls~eUhRqk%?DxK0ES)zWgvh=)QYfQ)arLY0feYu{bQNcExr}bf5Q7 z_g43tADH7~cMBDmaMio8x^6q8yY<|7^j<1R-K|Dw&yASj{M=^9dSsXxdc+s=j}9mS z4Cj7se+CQ#M)E?8q8#_5%B`kgWo~aHWTh;y7xr>qZA&Md?P42EM z2Tk_&aa$E3Y1rKCHa06Cv#Xfw!?qLq%EPsxcbw*RvIM0}k6%w9P003&eb$l7=o;wv zCM%Im8TPGI;1GUX7uqwk6?>NJr8fG(&0ANDUqDQK`)zxK4_ed@Em8_}(h@ma?OrMZ zMBi7pwahi_Fdu+azgX`Yy6A+SWO;=5X|!{(Mp#VmqZt0A(k7P zPaxmAmDb_bFRfjY=gyPVw$&~Sl)s=zJL%Z;_YnrzMSkH9-S^`7Zxfy`WcLI!6>J2X zz0Y2<>kXPw2%*RLaT7m7_JQWamOIR1%2bV!a4i_oU+Oq zhi1X$X7)`8QRt$iLZy;)(t{>Bjl)iGpi(c(zZa8I2_BQ`H^-=4&#>=f^v*WCz zBlz<3b07{Qv;xt7+D>bK(k=VDV--~gw@>|k?uo*>P3M5d8UF!)JdCzTyxlCU03w67 zMio|T+1Pp4)VAWq0&$Ds!IyWPaDNw+^$YJS^K0ho>ub&{+H3Xe*Sk~X3Xt4VM2(^V zr$1=-di9=D3xz&R)MQTbtL_WNvr9XGp;vj`RU9%UujF&&F3fuigYYQ;p0}gfoQ@#=>yt|Z0c(PuS{dUec zfo|oEXEIL7yNS(1Rg@VA&I{NUV#}0JKrvpw(r5wV%h+fHAz@4(wo_xgHO^T)UdulU zcI7+g(@nE>l|^!}M?HjYOp1k;SoDuyFO5|TyqDZlmULwe6=QCzDrq~@cjV)3e^?8K z&?voXtM2I@Eqm2~b*QdUl*ZMEc@;R5)Ei=@1e1(KYu?&$=D1>jCkWmpe=+1cy)erx zw&$nIxn7*_<1G256@RX@iy^wI%XY&cG03}Yi|BIVa0$5=gm?=D__$W=2*m6VQKnJa zlD!J-el1~&br2$ZMZF9&>)0xK?dk2L>=4?K>d13g%P;Q`=Pb)lC)G`mdpuWC(2b>0 zjno~U1sY;p(RP701qY$I+HV!49llqMF<81(j=fBj461Lm^Z?F~P3rLir3Q7}sZ){; zVgAzIk0A=x<>wran7n|~_v*2F^iEt)BB6{gMD+k+P>ich~Q8mo3OI=Vtl9f1Nv6a!O73qv{-@6rZm^iNh{!Do)RR{Mp+l>ZdQ0p%;bfr z%b(?NhO8}QUy>4Z%Nw<06Q3nYB^KWq^>7`J@%JoVa5LmbP%n-0xGd!ancEj_xQ=uO zYzzSO3Z`3@;v6M!mnVM&Z*lPdl-kHCrwlr^5UBSEcE^(E#Zeiz>>UX?Cx8E%#7o>P z4lLs3a)ETy!xGvpwBAbOO2jQ#xTDd-wBZnfP{x-4vH`;lnl7?Pr`J(ma-59_AT(V8`q_BF9GVCw*@YKgLdpXX-8~R znneen6?E@8^0EIF3B{}O1AVM5=~~Rg*R9Hcq%Lj}902`|l|$q%+7;$DQC%e zn);G7VNt|WI00$-pGHnW-4CtU^8|=yO_qkJ=Eg(}$=c86^Fen#npbFDZMjFr*%*kN z<3+j>PR+GYU9IdZYkgC|gJb+P`q1tBXJUGy+Sgaq{=Ong)u{2Lt$B4i%-ZlLQ}&fC zLAv;+1-P=pzl5dRci%!m&H4t>=kvh2^e7ILEz)JkKvo{_47SZp=be2*-J;)xq}4qU zUKY}t3SCOnN#ZNLeu%9Ne*fJfT^QbS}NK!hu+{ndwI(f>o)I|q021#hF9>~3t^ zwvFA`+}O6wNjBct`a~N$8{4*R+vd&pcUAAbf4wtx>U5v3nXZ}YnmT7r_w#JC!Gwo! zdDw-^fijz^vlKEa11)pMy(B6mYc@hP@x;C1>af=3EzqpJ7E6&3t%9FBGpY&N6Lw>N z0gV%+=Hv*JzT8*Z+d7|*tolHAMr{-ZX<-Hg#QdNhI+5^Acy#VYku6T-Fu1@c_h*ePL%PGJnTOj2_Efe9&FxMFr2z+?Z zUWVN1!O8Z#kMB2C7>Dhp&+(u3Lb4O$zN5Js%Ka#8Yw(ZyJGkCoT53wc&q_Ze(;n87RMZyC9%k72x)Vm}P9vrq zgO^~5Y?4XL-l0Zj4oyl%=W#tzo*$eapFn3hnAw5|f>)FAu|2x8Z;IwY&)IvD!jTBs zpvvFCM{-QP#-t#)?-%W8`%zz~*ju6xBZWc+VJR%e5ED*&db*Kp!4M?Vp6Yo#{_g6b zGKb3=#OH?2zRs)54w#)+`LTpRu}!HZ+o%bCYiJuk9}Mqzbk`c+{M3J)?d-GRmsaX> z+vb_v?cndEZ1AhH{umT~SCppMRT2JsfvF#W0W2Xtrb#vA`%2c%%g*c6UX%#T?If8=Zq z#An~b#&@skqO(FR7PX$v)e&)7-srEcDjPRIr&fDJi!sWclTlSj?cNQ4%n$ zs#b*OLJrIoB^4daD&4hu{%kAKRV|(6wJh~ivr)b%wyYDzSIsIWJ$7Rdux3h#VQ7)}JsTFMF4AJhfw2JzJ!hYT?o#e}Pq0rO=4HGJqn{58ob7{2#^j)rr<)k&{);%_))}%JM*10xDDdl!88>*Hs88$pO zrq+ndrppA?V}|G9XF4k!D;qW|HWy1JHoVrnsRM>D{vOnd3u5r$&rHV(vj?L-llkjX z(R0cvec6Z$;)jUG(Z^1A9-jz_#qFwqirxU7mrwe;+y49s;i1BAJ5(6te?6g2%9_8q&4H7!w%KUrv8eeRGl+rbmTo9wA^6Ef}e1k=`HnUP`=w83u#8G1R!D zy|%0Px97qU4!OXm#*hRnfx(h{Ei|sk6Edji2m+B64j(Oc3|4B>B+uxm({c{dz*x}g z2(zC{3N~q-3&TKcts4*LR*PjC&J#Ml?0T49u=B1|^5hPsx&i(d)z>9NbG_D%_$rul zvUk7UU|3XgaAeTEaU+A=lMF8pHCAMjGDoi#7-q(=Bw}Ot70cXyzvJJEJUTP~Imk}7 z=UNun1QX-_#s%ljTE!Xlj^Fq-Nucw@zfFJRn>W5X%qw^!!I3s`(Zba6CLyu8mw{a% z0b<#K)l>=A-VfmLjolV@1-!hIxl^^14dlY>xGBB~tq(=a2kt{SAbkV$M|Hk6-rFI! z{P5Hz%^EAWk7ihf*>JxFQXgC*Tg6^b7xid6-!;GAFW^*lxca}gx>U#{RUiEeHsXVKipBf>rr;T@W8IC zk-F=_v@*iF>#1J0$928Xe7Ptkbk_^o^jQO6U$FV?5Y`u%F580x9@xQKD`Pi(A|WnL z5H8#M{U6u~S}VVA`l$Fl)FHK2Qg*#~!n9UOUAAKcJlw&#>rMDS)Sb=Uja`GNzru14&x*YKHaR4B3r)33&irAONN z*!(r3lDF%z88)KwO5a=d%Z?QZmR|hlIAlcSkiK`K-<8Yf!ldKtjuj7%c<%rVl;%#R>IgdnUw%mBTEn$9f*RZ*1+@ z#T7x=dIH|T0|W=8J2? zNXf)IiBtxsio$R;abG#2g+c|J@HFz4&YMxVVKEf>l=^NVAnr_gqw>Sq-%D~c1@Ow( z+oZQr9ffE$8H+BKTE^$cI*55`A!!y(fq!=(V##o!%*EN*2ZRf_NH1 zaa?Np4Xv}(RGrG0IGL<-`_0X#lH}$r^u^fPGn;{f+{MgU^0+>*-a}W4w_}4ij3F{J zY=hgsInTzw`S589T@o@5L0nCY5xDYtEq%gg>L85L#b{&kl)ZgEl!Zes}3I;fm(XErN2S77JL%&;p@VrL~ z9HpaCg>T>jF&lI@xci5!O^}aoEPJlpAKQ`eVH^7!qa7Y%g*Q`o>#UD9K*YaZu2u0z zdbXNSlmd$6#{hqpOACsDf`N#g20CVH=A+jWMr%XNRBsXl<_TO@A`?p)Mcd>Q;&pcB z+(xwC(;F}Eq}|3=C7Q2w9=Z%*6-FNUVCj_5`B$X^kKrU8q7uy*< zfkdsTL7-h_xY2J*=SU8w;WX&2wkSQS{YTbK7Pf5ghQj&oQHNE#rYYem08Pqcf*x9cXGb zjEXsZCL082XB($8z}QrgsK7?W@(<5Uh33g#cEjDhU85TY_fanqEt!=AYgkqW6mpKD zLMqlm)>7Rui?@sQ|1|zJ{qr%pF>1NK>qU^@!qrCA+U1vXagjKsGM#pJL>Xs^4o+o- zhBd@|MCfAxWHdljhL{5kd#{l?1e^rk*!HG|rG|)o1Sa-~}?PpIaIZJwo&{^PW#%G z5CnbTgONpQVz9p0+Z7g|JhaUi%?P#M>js%+s_=;@6Z-fMbCLDxrpv`*yFmdKoB_VZ zJPGJ!v@)Fu#Abije`T$o)%s0S@B-OVc>CbV@bZU3B8fLbqUF!YY z)R`m6uyr4PJ_cv2f{O9&7zM*~{zio<7lQtBIS?MH$_jkAL&0M!+}oyiNH=CAf}99f8iUg4>RCjy;fv}$7z->%?8NcS6<>FCXkO8yq3d_N>npr4tO!eE`R4bo02~#R<$a#L}iLR)l*(HVF|&h}~o`I(!uYC1pv;3jxrg z7Bb^Pifh_Cqy+Vh;#S$-*XpLZ6BSEuZ}l3DHcIkku+dq#8tNDdpVSdZo+)ei7Kl%r zZC`n5dTe{5d&Ir&UKx8j@@4R$XMzLR$=25k8PZvLkM|y)4|&%Im|cmpNl8zU zyJ8!T@vJ*mC)iWHaaW_acn_mjqd=jmcVyvoO&}ht`ur`;U-zh&rtfEm8d;u?;9f!7 zTu=qWl9$TI{E?%`ruSh(JkYFiY21_)BVuurUjwu*VDD{x4#C|5#fc?JhWa0J!hUwYB7Z#QS;OSRz5%Xmsiczp z)V03G>7ZW{%y8|U7?Nqo?nxRXyTd)NF?0H%W#-!DXmD)aX1uq1*(RpbNelen&N?9nv~IShW;Q zD2Tzb)#?NdwF;?JSOSTf8&gkKWegU|Ky2bsNMg0QZX4NR4s7Dh0Dz76;@d@Fg7Rii z=&S|(YQ!uy-}u?;aKbOGlCcgd7g8s&Po!7^Rt-`LysaR~<0wP8xbjlfGdV^}EQx)0 z-iy%ykDE$WK=QOWzLy}q4JuYz%7 zf&J7oP-mkG7s*xBfRpT0ENG2u<~zqT#Z$p^!HenB{xilS2JnpWlJuPPqWUzyZ+mNV zsq)=rLshTNuECBl`nyla?-6hD0NUc<+3VH71M+s|_L}w^HeQW*P7ZY`7oo{mYnl^? zIes^LiifYhm4b&8L{UcV zWx4Blbd~V{DL(hU;O6H%;%Gy-BgCR|9$3~pu#9agk%NiJYlyv)gd+Q7-TV#01NzDKK#b%~v+G%L7 z@Im$>Z9TwV;@R((L?}t|D1I>VD}zi{q5!*(?X&Z9MtZy7J!T=JtX^h2O&g7m%`-%I z`O(}F5HjsnctOgSrW@}|^Je}0OJuLD_J}O^}BTfC>{s3R)gGvb8WneE-*sO_<+n0c`g*O%?;eX#|aQzuEus4!aC2+2nM-hT1ZygLt`w`6}^T<-Dp$je;-Q^2) zAn^Ownb_$@(ZrJumQp*CgU&=wSf3-~QRy%AE!qf{c;Og~rNN1<+3>)c9Ki2##E(5< zyLI~^ESkhD^Op_O#TQkUKNmTSfm!X ze)cwMmhT<}P0Ih=K=eVnbZf*E2;>u&>?WOr^~?2J_(JQi(g39%{=o@E&IRiT-ue-!}vR zjXeeAt~o%uEPi|&q0#oDpySm~ErfxtOp+%J61-fo#M234da>6&cDgS{${p>V>eyMG zv4lQgtuUcEmH$H7dChYhjci2h-0DAl?1$Lph=02?srN-7S{>y{cMvPE=G(p1*3HD^ z0o;3`l|@iff3=awUbA?p!ULku6Okt z@1fgI!S5e4IUR6sVu!%*EWX2qt@Bn$X=*x7;yQ<_)8F}w!yaFi1p3Po8!f@I{&~+S zb+tp>f4N3bg$rY8j)(`=*)(OPipxZSNpScilmzW)^;1l!-zF) zJ!wV$r1;J|$KSq2+$1c}oSY+UG3mOO{|;84;=NJRpGpaQ;mGvpOE;odw@HC4<19;f zty!4*qWY>VMHlmpW~X+I6wGF&L}tW+X`H~W?@|wabOZMo)E(6^^@Kl=@2Mv{ z#O+)-Upv5G#%%O_+_Tn28nPD9A?kUbi)C4>iZ+(p8JcXShL ztk=_!^)GK8co~qb@C)qx+ROY@(4)P)V{H+Sfr?IFDuYZy__{^`vI zz$|R85r`4$!*YMMopqNlx{^3UvI`Vn!(+2E%&`_n7V8kmV~o?|Sq=c6`C|Y!hc%Ux^^d zTImln=S0|ARbNE>%js4eS>$l&F|}@KZnyC>qI_zDocJ4U2=xrpaXXsLtQ(XK!!lK2 zU-ynByPq?r5^#s5REM{f%{ZCV{ecI1F+23h77V|Hjp+{A`mlWb2(a9|3OkMzXaKhv zMDFeO{DJP!64IDNT;U|qgCh6!u2nu8PMMH~xBEjC^ir!aqThs^1R0CSssD==@qWCD zQB2B{nEVLJiE$sw$1nOSO&~##Z=Vm1po>Mzv9X$%0XV;F25Z?gCv}Dv@gn)?eDCAD z6vXhQ0JrMNCA~-eKI?Y{^`U#um}}qwmIW>V--{=bcD9%c^#n&p>K`haL<*Yl6P_x7 zkAGqP$1YUh9jj z`KgBbv||tivH04J$1%}#aw&TcZ7CBzpfs=!hw*Oz2*1Vd7YtyU*=_Wu%I|=GfSof} zizZIi?JgP(<8!-|K~m%S`cI7{&|}|w9%L761`y62u5pcx#P0h@+}I{8qSc6i0V0;N z75h@PMv0w*;DlhRU#va}1Yjp#N*pd0QQ)<|j2Iuf2|W<$MoiY$W2FuVf54t5f3*wg zgMWMIG_k}JGj~cYhSCXnr@O_>Zc%X4g=mjN;`nBo=SLuKMMgW?CZ*=tf=-GZ$~X@5sYf_0lSIpRUiQsQt2Rmhqtl$Tpu{xD4eUnG0l|LMvz{$(}hX1xw(di=?tGv_94;FcR=8_vDX{r-u)GG7GGC_|D-*>?p2Xu6< zQaoSXpbxlBtWAB^flWc!q*8+;@Nm?mt zid9P&{5)X767&K#e%EFDrLt>^7O<~Hjq=pLKxo5^(v8+$8_C6lAJuKHu-sK*H{5Er z|9WfE>A6X;X}F0sJAkWrFLV0UTgu{)nIFp{op{#hRUyrDpZOZHAW-U(Y;J3xgJXieKZGryg`p9L5GeVNQ zvpInRhD}sQ#n$ICpunnbc_B^bB^VUHkUR%hF87jZ$}y@G0g21}^FFT4oMBGo(9$m1F8X%nb383j{9TeqU(-z?W6eW$`{g?e=Xa6ObvS=PE{rB&`*&CF)a zX4SpSjaZUKvb-16Tinda-3inIEptCD0}zXamv4@%p8q@_#2@3@)bUv5FvpS)8!nX4 z$%QL>t)N(i&DEy{)lKvM8+BVjELWuh&FWMNGPC zO3~*pza$+2NszTVNg;GKwQHZdZkVssnsBC7AJ)~Q^q?5qIbs0yJLA%S7vMT*mj+XUoNe}{~1 zmtmGciCP}5K^RYP;xvC?Y;_VoZ^AOv-2EIY^Y6T2Z)m-h=M(Dl%yfn5Db1$HCc=A$ zV~Rt%y~k>5Fc}XA?1D(EwYR3FE#R1 z>=J8W6i!9)^Gg*>&41iegqTQbsW&UI7r}$(B7yyBN@imHRcB~gd62$hUm$lDMVHJ^%hg|#9& zXWYk?1pRbJJ@4GjD1nOBDfay*$%JWGiCZdaN&V8rzm42?TcGpZZ`l?Ye2?*rUdk?6 zevf#=u8UvFKK6N$dXcIN|C9(nJ-4KSl?doV6g|giyjT*l{+I(Z^#e+x&k9cqXBAC- zN*GfvilbOJlr!|(3!jG_rX7^#ST>Y>Z1_z13gmF)u>ggQqM3@w`=3!X3)TYyFHkS) z;u|SA2c`>RYQa9gOD8jS)z9TvJbCMRIC&7T-_FSIl?ISr@XP|*79Hm61}z#bb&Nn> zhT{VuH;~(z1IRJb0WfRskCElFsX(t_j>7Q@@}b!BhN)TNF2Q?|!BjTli7Fl9MhIF% zGVA$%z;(hVGvL6+9TlFD+poB@d}wWs@@LCh+F{I<-tp842Q%EK%t}Vu;Wob%x-hH) z#^a}2($?|~EOj1N4~k2|G-!!T%&yQJWtd${+QHVjT;BojFW~MgO65k2CwwSH6>@fy z9ysA_6H($oCX(@o2iJw*!79rKVS{?Q$1Uu90?Eq)F5_gi0CsJE++CLW^iWZjFFY?rQ-Q-D5G3RRnQaZw~G7DH4*9`6IZUdMt@kMjj z$3OXn?IvsPqC7DNG}_X4=+;tcn*Y$;8zf=3QPvp+0nhqADZ2f9u0E{-8XHCOGiHZ1 zLrN8l(^=#XzuSfM$}4k8)1N-LZZrO4;%oaMSVlNwb@ad{nX#^)?7Fr->@Z7UMuzR{ z6}M(**K?P)JzRUR$g4!`T4 z!xHKUEdE8PepP;FD8!P`oFCLHO{BNl?iStNm#nHWZzEHeiytuwFyy%KokUj{(ij!YtzlFXv zzU93|w5_in7P+e9A=LU{1_2H!^vf&SpNVZiX)a^~_N*A3J(^-k2$vXlKQ{$;0Z#$1 zDfd1P1{X$JU3vxJ;LV&koPX7~g~T#xS>{;gVx9e--7z(!BH`07)?J>Expsw)23fb4 zAdg)k)I1`Ne}I38oTh1B3+^@QC_-)mhc8UHwHmBy9&IH9r?n~e99E|y0zI#f7Oa&tP`a&z)Fq&}Um9<2)J7tee6?N;5S)XaONX=l`Q#RS{dvNQ%O z;j=GerHVyOQMWHrF*Pd-oHKjQ@Z$i+Xt<PH72$W-}p%3 z`1@$10tJ{lx(7g`K_2$NB{KMy*#{-l0DjZ~p|xPhgJMvQ&a0}_( zOq3oR6sXLUT99jqZK#vA02E$uu9Lsomn&D%6-YiPZ){h_D)1zlyaVaHGc4c|T3xk< z;ot{=x){B|dI@B0txef88CqVU*>jn$_gt;9cD$u@U5J_c_IqNOR)BfSYJq3Qq z$_M#?pSCP9T>0v%l9(+EeIRgmAej^3!}anqShRcb!L$*C9>Am6@uG9l(V(Y5Ww~@_ zZJFU9m0>)QT{=AW##;w9%mBw$M46COe6qjv+a>s-)!e%anY@y+gfC!D5qeQQgUtLb z!=JSALMh>oY4kbh_F0X3^Mmw{pxHEtO(VRv0F+D5$JX!Ms~B9J-WR=8SL^*sfi_u{a392hDhYdnQZZiO;d8thiF$6tRaHw$FEuqZu>H zH*wc=;>>l=P`vNdp#mWKb9R9+GY;Ph*&O*Q0y)Yu$18M4f{AEycMM0VM~!O)KArpQ zUY6?_I;)u(OfBL%G|gFU1E^%EKT&@R)hX)3yLP1p$B@x$J2L4Y>$q%UV!Hd~t$J(R z)8YexWDa_*(K=Bf$+0BT%N|!z<~kII1jDk4Y*8bZ-wli)e4r%QM{W^i7iEd$v<>R$ z1{R~7x8f-n!&morRu?_pfqqi}lT>f$w^)*CQLR|=6x5!N?Y>gtQ6tl6)hL&i{jE}^ z`3~5z{t~Sk>NQ(S@wSA&aIvyYGot2^jE0GUL`Fux-Gh`qRCauQ&3Zg{!dYsh| zE-d6Co3?QeBmt*&-kQhI8imVc)n*stS!x`kb?c7ROgln5#-FQeRQp1I8gRE#_N#Pz zlPjE{)31%bw|lN()i+YxVVLKpM+=N^w3J+9V0fF+Zjiqov}#Dwe@SK);{N5@iP>q> zrFGa@MvUCKOy`fWK+Gj$)HImmgQ+u+Q$*@a&pA`{fDHIVy;JEZa_G!JwbK|yC|>C$ z))IDMh85z>B)HbpA(#)O(VM%WucS+--D}PEm|@R_Vwhoe6YPG-!6mc#md-gl^9gyj z2AS~EUDQ=&V+{2K$|l)Xm65(4ta^*D1Ycw{FGpB-HvJIaTlUj zc3dUXmY0-%!aa%4XP6|~?)6+yfMOAmpajOnz8LygdX1qrzlt61@n*D+G0}E z0+p?ULwRHhruKaqYB{}F#hjNhL2R`ne+%y{40zBK51frNm#=9Zcq)0yX%Hu9(NKG$ zKkpp3mlrovT;;gLi)MSOePnq2RX*v|w?jpTGO;!nPyhPi-qrDqbo#n8$cr{>yMEcx zBD|#y;%$nMF@YNTJVQ&He6u2#gXb8*%>5%q-GZ3Ui296?&^Y1S)*Hk}Ss5KhcR+nWJ=OKpcH&DKUS*^H!V&;w=+9YCfbQ=MS!!9|c%M}{j=B2gdrEB=&X2~)0Ts%ka{ z1T)}}*ABa9Kq)tv1h@K;)Za^D2*AbZU51HR;P=K}bD=sunf$zbiwi162@()lu039b}+Rc!R3|aE(LZ-ta`w zH`TA`rjP2>G=VDFLh8yifpbkl>i8Ui=u<-K0iRl-&_z(J=HVoP19?tUJ-I3@>=jMK zO%bEa-}&0eB*`-iN=wBStF~el{5*8!5uT*wc@&#ARVn&YJR5cnLfo78$GE#Z0D zWel5^dg+x?{5*k!MprfFREKe*xLh8EE1F6>ySO4k7&r!Tv3) zLeXM})GHrt)&UZf26cP_m{!g~nOk*=)PyY1Ss{B9k%CAJW*<2R`WjuO1B#x8N2?oy zSFL}rCP_SQeIl|D11+)o=0;JG8*Zlhk)}Tc^kN$`eg1TDl`>wc>LZ*6Wb1*oA>OWc zreg~SMUK*r`sHI@Hgw|p@%!=nzd@yYqQkdI!3+>TrU5qNcjF5gxF9<&PMp@He`}NQ zEyy;H5hy#pJ77D+Mp2vWa7_qT$9b(KSe1hy;c4j7_Q@1bKZebvF7Njggb^gE9qy7I zR~+v5X@@BJg=XMZ4LveO`sT)?L4;x62Lt2LqGkt_nxs6*pg3pMnmLU#FiU8`q!8 zZz2v)_)cCGZ#e^hy7emrYoRFuiM0JV3s~O`Kj*d?Q{oBOZxQd?l16^an!l7TZe!F< z_+)&hTAca8@^lrNI|{H#3bjbq=8Ht68ls$6VpS=pEs4r~^XlNImk}(+L^K)2HEUw# zt@GGJrl0d0ho8{%8%dQ`v8mfJsN2D)+hdhL)V87ysrB)n-W(cyjGo|^Mv>`AG{@eO9f>PR2-S$OM;OBmxyKC&sc#>; z;S9mWEs>cRXmP(O9VvxNm}8WwPWsxV%_>fm<4EX2t(dD;sK%F(E=dTLcl_0rK7%7% z5$^cKLf^OVfpLs82NuTz6YlBb60uwL1Xvvr-1l_Ukrm1UT$J7w`GF#o7ABc?M|K6t z3oE;~n#(B%S_o+lnk-{%HF}Q|%rhp`P%kI=2u2EvA5bXACv>RY4vA?8TBgB07Rd7e zEk@dd*8a!D#K#7j^mj?}A(S{1GPdTbGUA-rpde415eyU@admT${*u*xVWL<+aoC})k7sWR0ZxLO8RN}@u13u3go=ct;Ym3z&^~;R3PBjoX zorpgp+BehH$VcD2D>yobWq!T|VDEqvT;8#7?MI%}W;m|D9YheesodiVDq=h4SaYrG%_B@2O>8cDJeK&`K{DBchubt`l9ZS%zJPv8nsaLoc%V zq{rp0<6j0lt8$eoos+Y2(F{mXN-iJl8zMVOwlSYiCFLCgU(&fxdfOw?pc9`Qb^A>h zo9~zkqCOaWsuofmCa-N!0xDup_9&V}ZIfGebv+aaa`x0+L(<7iFJss2?ltfr%aIHv}$ z@QL|>liyz~X<3q1VOrc|>91LYQJR0*0uoj%l^EyD>PQM&g>Y0s1For6%3Vu+j$?RA zEX^rqcGmJ_%{R9(?O zb_m~fsh?s=Ik5{F0eCR`CklPE>*I=chB5>1gpe2`Hxa|#xzfkD><*NLdT7Pp)R#A@ zLii#+u+`zzUh`_d8DxTGIf5?+_Ps_19x@`{xW`YxuLUKb(Z1qBR=IKYPi)pe98tnW z{+Ft2WOP>gVQ^eE@0*zynSc(5tz_1uD3YN z?nv*0mqJVV7sEl|7gZS<>_^WQfYpsx!m|}VhH9>Se8m^|R5s(6NE5V_rB56UxlS(p zD3u4f?w8T0wr4ll^wnO+JqxKhIy$&wx9~BCu6-xRdio(+xCHSZ>#{&%H2 zqFd&{c#BD|Zs45@U?#B*(M2fhyc75)i1OST{l4r;p73l5S1e` z0$r?s^-lyUtcUNG_wZBMP4u`ATS;qg6_)DH0KEXQ$zX$CDBQ@kfNl%pNr?%QRnt|9 z?TD4g7137at`s5^b2PU~iQbtwW1JCwqSpQZw!b$TX6rsv<kNP!JnquhIHS;`1GK*@6PDq zN3DC8ZK~EtDu%S)XFZP_Lrvm?O>TI4CIe2H=3#@Wtes!0xMC*sIut!NgC&Z?ABT8`?e@j`x+@ewXIS;g6Ssd~7z&`WSY#i-QjX z-SV=*o8@pPpX>>l#nR1g@!icRO$o3CwmDC;X;rr9Mn}i8YZR@Tg;fOP%~k>3%?vEH zeFkd`%a&R_&BD$za=|W?cY+!QYuUP<-s&A93_u)hw&m&dwxD1L0G(3(_)3q@oxW3$Z4AZwTfBRxtNsGZ*GCRy12w*Gtjk z48&LA{)Su`{6XDR#5Q~xoN?Pje^VA+3Q}xI+(<2C57;sso*2iU4v^kDxCEfCt&*zY)S~;VBv-}4@g2Z&(u_`@r%5&2c;4h zC@;_uTds*kb5*t@zE8(EU4rpaFIaH2J!8}#Gx!rOHqW7Dh0LqWo; z=V&!awO!Dc`S)3U1SVo3bKAs(tOm#m|il~z4!Y-N%%6}fdUhBa-6|{0p|4?I8%g`{l^}K!i{8VH2 z=Pd0lK^zrukT2K-#qL_cd0)5T0a4Swj8g3$j1h`6(BtWVIn05-aY{dseLhQBLCzpFAam z?*r*cA!hcAyCx)zucZx(i7dp}o8Y3dyNFiLNU< zQI?~jV}@8E*XY)`w-8GQYp^FR(lR#3i991U&Ve`4L)5dLN!VpA_l8S7yOPpIA(8q) zjHOS^w{YuN`fAbtQGowN``=UE^pK77j@rCshlGNu9(z*h5 z>X7nEXag(p>j)%8e2HPnbym@a*hfiS%9Fe zE4VTB$U7iNr!$xZ|6xb>E-0P~Nd{wLYwYCgXkuUkW0L%~Oaw{J%1OjTWM^mz!_Laa z%JQH6KZT2x>;D>NX60n%NdDtUsEWbL{W+$j1H<^sPQ}*3$j;b=h>MLW8L|_fFd5y6 z5Dkne*+88L6^uE)3ycELneDP%`GM4b)skuGMU@A+Fg-q6@wFdGTgu5Ccl#F1*y0Sw zQgU#d*iO&lgCYpV`f*a~-4`x1nlRHfJfwc3Fvy!>&8hje(kLEd<>F3(t|3~Fpk-!` zKC8cdDZi8#)a=@t;qcQ}X;y!Y=Pm{hU>3z<(8UEI~@3o(ifcENDK+s!KHn_6aQYMK;t2b&_&@VLQcA!y z&#ESCNGBegaHsw#F%zUP8WOfs=xEoasCO{qHmf&s)>ilH+$L&EYsDG&$ydunsF-Zb|92d6vj4wP$elc?OoX3&lu4kE$;R?u_`xu$5oy6NYcVk}>9A|D zF>xhpxe^+qv1qY#vV0D)vT3ogvN13badC4u^t%$WfPt|jXQ>fUCzodvASJW76Q-iD z{?B~`1pXg4Y{|?uM5w52Z2zYN853JGXLIJy;Aa1yNY3+t1fj9N00o6`ZJ~euJKR}o zcw4MC+A?xN{n)&?&y#jG8+j{3^)X@Z*S$nL*S#*<9@bkHTi#h~Ht?gomKGjvKDrLB zjjJWwhiXzUZe-$yP=b)A!_9Y*Sc=Q*a&Mlq%JNzE=!Gyc1e&n|NA!GNl!cd>z02)&?Q6Kf}&8cHmB!wFEu8}Cxq@}(I(KF+1Pf?*XCY)I9a4=i(6x(Dyg|CUs<)oDXmpk zE;Kcby}{{|d*rwcRneAEF4SwimpZ*=%m;{0$O1gFMmyY`tb8(9w$BQ~uIHGZo^+}` z;CBV~M2QK@4N*YV@TvYvFqGl~_LN7)>QIFz6w3mf#5Toxyu!z9oMd zBGe(WYSL7hf|%k@06IBW65e>7!3tx}YTl)QQ^|W0uXr9&%H+77A>>_KM~J5gJV`mC zfw-F?6vtG<7$dZJIaOTDo=2v(G|rHtBa25+tB5W|&0zAbl_OiKY}z0m zOEOzLh9j~C`AZDPv>cBF<`LOToX0L~HKE3j{rI;b|J^T+xJ@Z|G6-=yXMn;r`cv>~ z4pg72Cv{t*fRx@f=9AV@;jJ13)z=|G7)1!`fW$d8QS85E6=gYP#c(R~O7p7oiow(; zG$+(2@p?mc!}ca$O@vKIO#-X`Rfkmd(-1uANK#w$sj*0@4pD1S zY0+p=YtgPytZBB*6BMw^BNY2-b`s7KuZ9tZznT1Hkz9(^7OzmF zpjA#N9%eIXu8yy+sSd9$t;T%{c$E|&A*5}g^`i2k@uK#kbs2`s*R@cP8kWgdOwDJb zu1VyUs$o&HP}EH1Fd=j-oUU-D%83 zPzk62Q~}BX6@&6Y<)Bk>F#K>NFf2PfHcUTUzN@{*vFEynuqU_2uxGnRu&28xu;;r6w)b<7c+X%D zc~5bVdCy@FdQWnXde34HdrxDJd(UI<`=00?`JTxh`ku-j`<}}l{Qtq$dw|3Bw14Ai zNTMY~w?rg*uhAn~5CqYqcNWpZvL}f|i5_KjiQZ+^XsfT@S*#$)E>^E$wf}yf=lT8K z=Y6mLbS{=&NXMwnK_^P{$R8){1`V32xE?s!vte)Vw5oK7+VZAMjs=J@y3v1 zG%>swR}2%z%)Vhib028g582P%PuQ>CkK8ZaPv39a58E%?hwazz$7;M*F)+}YGEfpX z(9Gx2Z{T@twv~TucvciV1$6;@-%Gy&4z1Smbw%l zY=28A8Z>?T1WO7FCTnn|4C0zG`rbHNTr$oOhr&tV>TrH87W_rEF1qBCuR!H7x;-T; zlUq}JI11b?-yCW6dELx1ZQa6>iOF@GHf|UvfUCf{ zvQV&4vG9GNcp-nGd?9zCbfIveQvREKk$j$fnS73XiF|>4h5UESG+8&KT)1Ym(G~6PRKd?sK z;Gc#G4uc3c?r-wXB)CJ)vMER4K` zR(O2#DDudQ9hF2$j!90b;nLT04~LEz=f}+FC-ehN{~kqUO?l&K@yU2YJPI#?ufzKV zS_rPy2I^8CzG5wp9qYlZ9Bv)$;VJO9f^+267XjVuGM%wP+{EEJUK>A*7r2QLDX&yH&2;!xUf*NVaa{`!4vtwU8<{dYG;GmYRP&gYIn-{^Tr|oq+$kKH zrdvDPAXy{9k*t$!gsp|)!q!QTI*-^7*^hD$Rq$hYVLTk~iQmKD!AIcL@qKu1d@;;w z1oVWI25)nr5gdVdZCL<|8v%s_g43-Nt<%6LFbRwUC}0ej0w#dztI?~;tMMz;m2miX z`jYPqjn?!9)(n$Y#FC$^nOdS22yR>}$41sX$b^U)L!#P|F35YfzP9AHTDC>-WOyAs zMtIP8+IYlxk=`9_1$F}4MF~krNC-=at1_lD+7`b)+_O z7%70PK)NHhku1n8qy=(8HB-2=NRlz?tMG)Am;-|r5^NhY1|AeQjWWy~n(1+pl#bHQ z9hjL;aoltqlmuw$&zMN)Nf=2ONSMOt!x+ODNTWNW*`wH_bE8y{V@P2n9O;SNL*79~ zAk~q5NN!{?(iypqWI(1OO^~xlDP#jO0C|ceLViZ7AiI%Ikoib^BnC-?v{})xjet)Y zJG`-fxyDeu014{Bj|zl)1y+m$QHYK1qZqfsarKDh3sSNhlUs@ zgv}>J^&J58;ZRhnxHpy-n~XKYqOcO!I;@|=0$)n4!x-7%D6?CPa8KIG;MUL{mI8ar zJ4dST*H{KvTevW7VsIU+jUC1cU@Nfh*ljEeHVbQkU2w>h>MWCF8vH6X0Ty#i)xv_k zV`jm_;%0+})kD8}z>+e9+SLQUrZXJ39fu_Wx|FkYk`$6Ol2nrPu#~X0uvF5a&LQ?e z_MzNC73>&R7z@XGV)w9jun|~wY#){zTa0zau45UnsaO;2ELIBJfDOQ&Vu`Syu`1YZ z>=SH0)*g$&(qL^4G`u4kCf_(%*ju<+*jl(+I9hltSS>g$*e!q;Y!+M=92VSx1?vUp z1^WfJ1=|JJ1;+&sc`JD*c{_Qqyp6nzyo0>EytTZuyuG}eysf;eyraAa!V2MputR_m zHV7Al1Hv6)jc`WTBisw7!UJjrb%NSK!B88h3)BJX4z-3lL+zn%P+O?0fMly^ zt0W)awApb#Z8dBDdazWj5^>rn8)p9MWO|Gr0jS(Ltc#0V@U1W53vvPBCvy1*AQ6~YH zs8uyhH_0s zk)|tUTjhHw3e+vv9PvK%SQ=OhUSK*=wobsc4xpZr60G}MTGi{QbBd2o}ltk_9zUB24%CM;Tl0;|6z>+`0EKaqxH}q&>CnJv`Yc8uU>n^{4;(49VI905u<)W*>fO-8Y{Wzz^nH3E?&b?T_CLKqS6SD5&bK5+# zLUB4zY2DPvt&swxI-S2UcC`Ms@%nt6yRzD7^g4%+zVugjRkg7pXL8>nO}VrjXWRtY z&^R+N|IuB&KF4grZLQ8nCasWYpQk)ug>f`4roeX1SUSdCr)L7Rc1t>5J4a@`&*yHY zM&a1H4`-w3{O4^A|JY9fXUyq!cdHO-uO-Ez-H z{m_as&UEvz;oP&aQ=jYe*(}c}^9Xdp>uiSSrw=DG-steWLLFtF}_2*KaHh`&?@3R*`k*F6sX@gx@smnv5US3(^R3PhsU2dy}& z>FuLDIZ}oK;R|Jy8v}UwCHNXsFEP9wEH3e>d>CcrTJ;^wUngM}MsB-Nbu@zqKb?E; z)+=GdK7#~P*KsrTN!aGjV9P?K2JKli;bI3Sq4p**ZtXywof*7*Rsw8R2O6lpQEIP3 z`y(#e!FI-2BF1e5Sq+-GB@wS>BU9A}zMI}(0AB}l)``x2-s<8HRg4-J^SH@YL_;ln}ZG6p21JS*XOc9Z4`DS@Q_)y z%~yW(W{iYQ24gq@@d|;LaEZp>!-&%84#E+&a&AhY1ej2_pOTMY1Ns;Sd(Xx+)_smig=A#cFX>y%e_9O7sS<+3F zV=72$ONWJhC4738X;bT%7Lwl5xnREo|2s>vsdRk*EG4)@-aZ>XGE29qc}#Pb7Tk%j zAAmtASy+Jzujq|mzd7okVxqhSehxwQ7Mdw{2F~^_gRZgmlI*nyiOYYg9G?E|y8k_h zA0c5GM!B-Fe{_Nmdb;@DqgQg7{RA0Ajo@bOlU&I?!8V7={KBy4?1}vi2z3mI@o2CA zW42d*DiLIc0F4~nsKltS?8e1nZBLBlV?0KB4nV-kE%|tzWtsiHpu5@qg?sBkoCwjy z&pZA8D@_M-Cs{#)2+7J7(RXqlzn{n_NbZ|7M~q;---%`qn7!lmSUKDETWFUFpj(8E zteowg23=pwW^JSVL$Vig%69$=N^jXqxvI9yeySUEUm=aPGZxdcw{m*tTp3EGkec10 zgDC{|CQcd7UlK@~(z829Fspk9r$pz^q4!%;EIR}-u)Tp(njqoUuYyaOry@|A)-=n` zO3d`$#wq!^DwMi4b+N+(Q@=NN3Od(@(zT{9cJ5#ZoQtP7&lNB40VxU{teDuno>OW9 zJIezgjX<=B8QEJsB|TTUqykb~J1jAk{Cm@%ZWrj)Dvrqwn5eqr7YrOb~OPlxfT*MLWHsZp{WdejT z{>yh8et4a+8X5J*m!mGc&Ci)&w6@hSw5i8wymX$rf zJ~hdBq)k&8G11Mi{L(Y|saXd5FwH7M#6dUF@^jDlpT=(<3DCeI2D)i%;6L^F?!%^I zSwpT5z|MYwga8XakEYo9>21fq^&~Slw-k@9AmWhlmd2LQmIAp+ivf!{iyjt-O4mxq zN)O6<$sdw6l2vLmOmpco>1g(?p-tUmtY7rjOvTnLw~X7FA95Hi1tEoKLU~r z#2-Ql(SZm;Jer2Htf%M5{ra+;CDGNJ9FRJ>9{0LcG{0Zzyu*%d{T#@zaNd5$b)@=l z_39ky=Ec^{&6`^xn;~0Dn@U@qo1c%Dj_)7GAL|}JI&(UsKQlgidiL(@)|v9z<1@Rn z2WPKgybGYmWM_9F@ZkKGE(;gIYM9vqVPaFoisF39q+n5=3HGfOo0|ON`Y^K0cTo?b z7VHWs&d__yCf6%wH{3r`Uh3iD2FLY}4~{qqZkdT}*jQuCn9R&HyvrJ^9@HLbZ5^3= zJ4(QgsgHP<1KpHd3oQh1RvTN=8BDyQRWWfiFQmDacPs82ncf#7O1p+eJYG+eQxJHf z%X`hIm~ZIY8(VH#8=v}6F+bPdwIa4?k#L!{p8|QDNFQF|QnLtQQ5^cnL`0~^PeNQW zaj?MH*mexdQ4;`e7}B!uj#Al3>(>LxXuGBHBYitlS{_-rhpZ|&Y)VCMjBRjUTfCt6^rG0Xmi0_xOq$S1x)?G z9&YId;~$e%%O}U3w3Ppvjzg7`WSo~ZQTj5x( z4>IG8s=Ht$H>Mc`zo*|=T$mdc_=c0xM5r*C)Ia%5RviCPI#qagx^ zR;CRk=5V2cTFF{5MswX6SF}dUIu2^D)k!z|`94CwUSfEIb}`>9=<>_Y2G@o#Qk!;v zbKyj~$GW)M6p_WKFa;FD}cC01f$qs{8j)G@ff5q^Y9PW@e@`f#PCG zXibn7Xpd$@vVN!}GPew<$gi!QeB)A59a0y=G5h{$DskpX5SZ8IxT`@c9^X$l(P)pQ zUQK2kNX3iyZSq<(2q#-``JxzdH?YIykxW>O9_{X-IYuq5OSEA4tFYV+vARlE*V2TW z(Cw&DY2Ppb-{-JK?}X2^MG0v&ebuJX+*;Az8#Tqg=Cr1{T4}&k-c*09I!MbtC1{vs zu3RNJ4(>IyL8UU2zdbK#(75<|{j#khDKc4x4mRzmoaq`R?I@O*CbPjenJ*aLNEh@Kh(yLh>{ys4zplu;klvf-82dII;MI!G|)h_FvE zuAn+_{c8Mi$w=t2sKIzf9xZ2ax4MgGg6Xe3T1n^P^qLVZoOi-;gZhxWUUmB9<`Z#< z`jCZQHEgX-Q>gh?=l@3RNmhAOQLjJ7YY6E9caV2m{#WBY%t+i#pn~dk=xCg%N4y*_ zc{!f^pP=W>Q7n}(nW647{8-#EA+1^+sJ^2r(ca5JKYNQk-O7$S3j8r%OUUbvsz7`1 z6Z(c*>@cf8R8em}#+!}B($u~dvXhOFQs-l661Skz{GWya|FrDm(qnpFbcV%PeOZIP zEhMwX;-KHAu*x8nj?r4C zG{~{P3X*3SVYnv=KgOX)Un}ecP~&4$hAtj1Zi3SZL;1|r<&*b4%|@pd7z^<+k$YUW zC(xiCO`wM&d87C2$K)7yaQ?8~&4kdJ$;qds-pTV)n$pskcVQ{BH6Bmg{d*;9f9Duo zoF5lpu?6@UufNgd(BRU%`Kr?g^UD{F-E-^|vE;eDVZwHdA~#d{2htc{kc@vme5i{c z#<&K(nAF!V<|IiCivraO-R?9FwdS{jZ{GWC4>S42Kbh?IeC&e{n=Lcv?v36bd;?oa zRT+!qa<?zCZs0qqz^l*V6CkzHbe({0f+1`#XlgBfb1@5o8UE89T>N)dBNSb9({+B zYv(uqmD&1_;8~q_mv8_qF2By77>giUn-Jy<~Q@B7_F=JwrXGWxM&}w@jP=`<-ixd;NKtBmuA;9d7g9 z{#EW?vBy!*PA?NhNK-=wm1rNjvPH%Tu>{b^!p2fqAHXczStyAAtNeS9b|c#aZ?xV% z|3|2#UxKy#0Z9N#zr)%nKhWI}yk&8_`QAIWjPxMuwl8;LW^N`~Oh>sp!$%nMk1XS9 z8`$Kkx+lbRO?PJCnl3z+97%^?1bHz7tQ;z5hC!Wc2iWnK>(>o4RMuttYn(CZQy)ZE z+EP8OHbL|d668Xkp}dZw%{X5qcNv)Y-!-;zq0s*D;AUal2mRk|+;6?wMy|6Cf4I5Y z_5o(s!SWDBnnw62`qsg62e#b7!cKITM)r_0xs!zxw%ftN4YOSZQNyfOLA3uwcYuG& z_yG6+pW^;Uq(jb?%g(mFYZ6)zh^i-D+3NU@Xr^CGIf49tbN_t+fj9YoZn@$G1i8h^^3gkh2CO@5j7kd1d(Rb)qV zX7^0{O4L3il7q#pftYzBdz|QE$J~*0dl_$oylj=*WC)NY%0D%OTlDnVPiTd&;?uj^oB3Edt<5(z%Ug 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

      EpbAY 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 diff --git a/ts/Main.ts b/ts/Main.ts index 6b527d9..3f4f782 100644 --- a/ts/Main.ts +++ b/ts/Main.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/Swordfish.ts b/ts/Swordfish.ts index f8000ae..90f04e4 100644 --- a/ts/Swordfish.ts +++ b/ts/Swordfish.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -11,12 +11,13 @@ *******************************************************************************/ import { ChildProcessWithoutNullStreams, execFileSync, spawn } from "child_process"; -import { app, BrowserWindow, ClientRequest, clipboard, dialog, ipcMain, IpcMainEvent, Menu, MenuItem, nativeTheme, net, Rectangle, screen, session, shell, Size } from "electron"; +import { BrowserWindow, ClientRequest, IpcMainEvent, Menu, MenuItem, Rectangle, Size, app, clipboard, dialog, ipcMain, nativeTheme, net, screen, session, shell } from "electron"; import { IncomingMessage } from "electron/main"; import { appendFileSync, existsSync, lstatSync, mkdirSync, readFile, readFileSync, unlinkSync, writeFileSync } from "fs"; import { Locations, Point } from "./locations"; +import { MTManager } from "./mtManager"; -class Swordfish { +export class Swordfish { static path = require('path'); @@ -111,9 +112,9 @@ class Swordfish { chatGpt: { enabled: false, apiKey: '', - model: 'gpt-3.5-turbo-instruct', + model: 'gpt-3.5-turbo', }, - myMemory: { + modernmt: { enabled: false, apiKey: '', srcLang: 'none', @@ -168,19 +169,15 @@ class Swordfish { static locations: Locations; constructor() { - if (!app.requestSingleInstanceLock()) { app.quit(); - } else { - if (Swordfish.mainWindow) { - // Someone tried to run a second instance, we should focus our window. - if (Swordfish.mainWindow.isMinimized()) { - Swordfish.mainWindow.restore(); - } - Swordfish.mainWindow.focus(); + } else if (Swordfish.mainWindow) { + // Someone tried to run a second instance, we should focus our window. + if (Swordfish.mainWindow.isMinimized()) { + Swordfish.mainWindow.restore(); } + Swordfish.mainWindow.focus(); } - if (process.platform === 'darwin' && process.arch === 'arm64') { Swordfish.verticalPadding = 56; } @@ -195,7 +192,6 @@ class Swordfish { } this.ls = spawn(this.javapath, ['-cp', 'lib/h2-1.4.200.jar', '--module-path', 'lib', '-m', 'swordfish/com.maxprograms.swordfish.TmsServer', '-port', '8070'], { cwd: app.getAppPath(), windowsHide: true }); - this.ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); @@ -1298,13 +1294,19 @@ class Swordfish { let data: Buffer = readFileSync(preferencesFile); let json: Preferences = JSON.parse(data.toString()); if (!json.hasOwnProperty('chatGpt')) { - json.chatGpt = { enabled: false, apiKey: '', model: 'gpt-3.5-turbo-instruct' }; + json.chatGpt = { enabled: false, apiKey: '', model: 'gpt-3.5-turbo' }; } - // Davinci, Babbage and Curie models were deprecated, replacing with the only one supported at this moment - json.chatGpt.model = 'gpt-3.5-turbo-instruct'; if (!json.hasOwnProperty('caseSensitiveMatches')) { json.caseSensitiveMatches = true; } + if (!json.hasOwnProperty('modernmt')) { + json.modernmt = { + enabled: false, + apiKey: '', + srcLang: 'none', + tgtLang: 'none' + } + } Swordfish.currentPreferences = json; if (!Swordfish.currentPreferences.projectsFolder || !existsSync(Swordfish.currentPreferences.projectsFolder)) { Swordfish.currentPreferences.projectsFolder = Swordfish.path.join(app.getPath('appData'), app.name, 'projects'); @@ -1853,14 +1855,8 @@ class Swordfish { } getMtLanguages(event: IpcMainEvent): void { - Swordfish.sendRequest('/services/getMTLanguages', {}, - (data: any) => { - event.sender.send('set-mt-languages', data); - }, - (reason: string) => { - Swordfish.showMessage({ type: 'error', message: reason }); - } - ); + let mtManager: MTManager = new MTManager(Swordfish.currentPreferences, '', ''); + event.sender.send('set-mt-languages', mtManager.getMTLanguages()); } static viewMemories(): void { @@ -2299,13 +2295,11 @@ class Swordfish { this.updatesWindow.on('close', () => { this.mainWindow.focus(); }); - } else { - if (!silent) { - Swordfish.showMessage({ - type: 'info', - message: 'There are currently no updates available' - }); - } + } else if (!silent) { + Swordfish.showMessage({ + type: 'info', + message: 'There are currently no updates available' + }); } } catch (reason: any) { if (!silent) { @@ -3070,26 +3064,16 @@ class Swordfish { } static machineTranslate(arg: any): void { - Swordfish.mainWindow.webContents.send('start-waiting'); - Swordfish.mainWindow.webContents.send('set-status', 'Getting Translations'); - Swordfish.sendRequest('/projects/machineTranslate', arg, - (data: any) => { - Swordfish.mainWindow.webContents.send('end-waiting'); - Swordfish.mainWindow.webContents.send('set-status', ''); - if (data.status !== Swordfish.SUCCESS) { - Swordfish.showMessage({ type: 'error', message: data.reason }); - return; - } - if (data.matches.length > 0) { - Swordfish.mainWindow.webContents.send('set-matches', { project: arg.project, matches: data.matches }); - } - }, - (reason: string) => { - Swordfish.mainWindow.webContents.send('end-waiting'); - Swordfish.mainWindow.webContents.send('set-status', ''); - Swordfish.showMessage({ type: 'error', message: reason }); + let mtManager: MTManager = new MTManager(Swordfish.currentPreferences, arg.srcLang, arg.tgtLang); + try { + mtManager.translateSegment(arg); + } catch (error: any) { + if (error instanceof Error) { + console.error(error.message); + } else { + console.error(JSON.stringify(error)); } - ); + } } static assembleMatches(arg: any): void { @@ -4045,7 +4029,7 @@ class Swordfish { } static closeTagsWindow(): void { - if (this.tagsWindow && this.tagsWindow.isVisible()) { + if (this.tagsWindow?.isVisible()) { Swordfish.destroyWindow(Swordfish.tagsWindow); } } @@ -4162,7 +4146,7 @@ class Swordfish { }).then((selection: Electron.MessageBoxReturnValue) => { if (selection.response === 0) { Swordfish.mainWindow.webContents.send('start-waiting'); - Swordfish.mainWindow.webContents.send('set-status', 'Applying MT'); + Swordfish.mainWindow.webContents.send('set-status', 'Selecting segments...'); Swordfish.sendRequest('/projects/applyMtAll', arg, (data: any) => { if (data.status !== Swordfish.SUCCESS) { @@ -4175,9 +4159,23 @@ class Swordfish { let intervalObject = setInterval(() => { if (Swordfish.currentStatus.progress) { if (Swordfish.currentStatus.progress === Swordfish.COMPLETED) { + clearInterval(intervalObject); + Swordfish.mainWindow.webContents.send('set-status', 'Translating...'); + + let exportedFile: string = Swordfish.path.join(Swordfish.appHome, 'projects', arg.project, 'applymt.xlf'); + if (!existsSync(exportedFile)) { + Swordfish.mainWindow.webContents.send('end-waiting'); + Swordfish.mainWindow.webContents.send('set-status', ''); + Swordfish.showMessage({ type: 'error', message: 'Unable to find exported file' }); + return; + } + + let mtManager: MTManager = new MTManager(this.currentPreferences, arg.srcLang, arg.tgtLang); + mtManager.translateProject(arg.project, exportedFile); + unlinkSync(exportedFile); + Swordfish.mainWindow.webContents.send('end-waiting'); Swordfish.mainWindow.webContents.send('set-status', ''); - clearInterval(intervalObject); Swordfish.mainWindow.webContents.send('reload-page', { project: arg.project }); return; } else if (Swordfish.currentStatus.progress === Swordfish.PROCESSING) { diff --git a/ts/about.ts b/ts/about.ts index 8e09edf..0964f30 100644 --- a/ts/about.ts +++ b/ts/about.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addFile.ts b/ts/addFile.ts index e74a724..de9a71c 100644 --- a/ts/addFile.ts +++ b/ts/addFile.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addGlossary.ts b/ts/addGlossary.ts index a0c1799..b4d4fdd 100644 --- a/ts/addGlossary.ts +++ b/ts/addGlossary.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addMemory.ts b/ts/addMemory.ts index 200bfc4..ad4b96c 100644 --- a/ts/addMemory.ts +++ b/ts/addMemory.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addNote.ts b/ts/addNote.ts index 4d1d5fc..61c3ac9 100644 --- a/ts/addNote.ts +++ b/ts/addNote.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addProject.ts b/ts/addProject.ts index 3702a02..1e8aea1 100644 --- a/ts/addProject.ts +++ b/ts/addProject.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addTerm.ts b/ts/addTerm.ts index 0936951..6095676 100644 --- a/ts/addTerm.ts +++ b/ts/addTerm.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/addXmlConfiguration.ts b/ts/addXmlConfiguration.ts index 177602c..c4388b4 100644 --- a/ts/addXmlConfiguration.ts +++ b/ts/addXmlConfiguration.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/applyTm.ts b/ts/applyTm.ts index 40eb602..ae8174f 100644 --- a/ts/applyTm.ts +++ b/ts/applyTm.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -51,7 +51,6 @@ class ApplyTM { let numberKeys: string[] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'Backspace', 'Delete', 'Escape', 'Enter', 'NumpadEnter']; if (!numberKeys.includes(event.key)) { event.preventDefault(); - event.cancelBubble = true; } }); document.getElementById('applyTmButton').addEventListener('click', () => { diff --git a/ts/browseDatabases.ts b/ts/browseDatabases.ts index bbf51b9..3bc97ca 100644 --- a/ts/browseDatabases.ts +++ b/ts/browseDatabases.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/changeCase.ts b/ts/changeCase.ts index e881521..1a2c5c0 100644 --- a/ts/changeCase.ts +++ b/ts/changeCase.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/concordanceSearch.ts b/ts/concordanceSearch.ts index 39d753b..03dcf5c 100644 --- a/ts/concordanceSearch.ts +++ b/ts/concordanceSearch.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/defaultLangs.ts b/ts/defaultLangs.ts index f46b99a..5fa917d 100644 --- a/ts/defaultLangs.ts +++ b/ts/defaultLangs.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/divider.ts b/ts/divider.ts index 803457f..908e3e0 100644 --- a/ts/divider.ts +++ b/ts/divider.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/elementConfig.ts b/ts/elementConfig.ts index b211e06..5869f05 100644 --- a/ts/elementConfig.ts +++ b/ts/elementConfig.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/filterConfig.ts b/ts/filterConfig.ts index 6e0967d..c101050 100644 --- a/ts/filterConfig.ts +++ b/ts/filterConfig.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/filterSegments.ts b/ts/filterSegments.ts index da1e609..30d2eb1 100644 --- a/ts/filterSegments.ts +++ b/ts/filterSegments.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/gettingStarted.ts b/ts/gettingStarted.ts index eb381a0..4e1e966 100644 --- a/ts/gettingStarted.ts +++ b/ts/gettingStarted.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/glossaries.ts b/ts/glossaries.ts index 11580ae..00292d5 100644 --- a/ts/glossaries.ts +++ b/ts/glossaries.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/goTo.ts b/ts/goTo.ts index 4acf033..2350aa6 100644 --- a/ts/goTo.ts +++ b/ts/goTo.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/htmlViewer.ts b/ts/htmlViewer.ts index 1c48244..b324459 100644 --- a/ts/htmlViewer.ts +++ b/ts/htmlViewer.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/importGlossary.ts b/ts/importGlossary.ts index fc9a570..0670a5b 100644 --- a/ts/importGlossary.ts +++ b/ts/importGlossary.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/importTmx.ts b/ts/importTmx.ts index f78dedc..11c5e00 100644 --- a/ts/importTmx.ts +++ b/ts/importTmx.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/importXliff.ts b/ts/importXliff.ts index ca9dcf8..c0d977a 100644 --- a/ts/importXliff.ts +++ b/ts/importXliff.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/keyboardHandler.ts b/ts/keyboardHandler.ts index 6f2eb8f..8db5e03 100644 --- a/ts/keyboardHandler.ts +++ b/ts/keyboardHandler.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/licenses.ts b/ts/licenses.ts index 0fa1938..23bbcaa 100644 --- a/ts/licenses.ts +++ b/ts/licenses.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/locations.ts b/ts/locations.ts index 6916333..cabf1ae 100644 --- a/ts/locations.ts +++ b/ts/locations.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -52,7 +52,7 @@ export class Locations { this.locations.set(window, point); let text: string = '{'; this.locations.forEach((value: Point, key: string) => { - text = text + '\"' + key + '\": {\"x\":' + value.x + ', \"y\":' + value.y + '},'; + text = text + '"' + key + '": {"x":' + value.x + ', "y":' + value.y + '},'; }); text = text.substring(0, text.length - 1) + '}' let json = JSON.parse(text); diff --git a/ts/memories.ts b/ts/memories.ts index e953da9..9e45d9b 100644 --- a/ts/memories.ts +++ b/ts/memories.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/messages.ts b/ts/messages.ts index f6ed561..805bd18 100644 --- a/ts/messages.ts +++ b/ts/messages.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/mtContentHandler.ts b/ts/mtContentHandler.ts new file mode 100644 index 0000000..2e92224 --- /dev/null +++ b/ts/mtContentHandler.ts @@ -0,0 +1,139 @@ +/******************************************************************************* + * Copyright (c) 2007 - 2024 Maxprograms. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/org/documents/epl-v10.html + * + * Contributors: + * Maxprograms - initial API and implementation + *******************************************************************************/ +import { Catalog, ContentHandler, XMLAttribute, XMLElement } from "typesxml"; +import { MTManager } from "./mtManager"; + +export class MTContentHandler implements ContentHandler { + + mtManager: MTManager; + project: string; + file: string; + unit: string; + segment: string; + srcLang: string; + tgtLang: string; + + stack: Array + + constructor(mtManager: MTManager, project: string) { + this.mtManager = mtManager; + this.project = project; + this.stack = new Array(); + } + + initialize(): void { + // do nothing + } + + setCatalog(catalog: Catalog): void { + // do nothing + } + + startDocument(): void { + // do nothing + } + + endDocument(): void { + // do nothing + } + + xmlDeclaration(version: string, encoding: string, standalone: string): void { + // do nothing + } + + startElement(name: string, atts: XMLAttribute[]): void { + let element: XMLElement = new XMLElement(name); + atts.forEach(att => { + element.setAttribute(att); + }); + if (name === 'xliff') { + this.srcLang = element.getAttribute('srcLang').getValue(); + this.tgtLang = element.getAttribute('tgtLang').getValue(); + return; + } + if (name === 'file') { + this.file = element.getAttribute('id').getValue(); + return; + } + if (name === 'unit') { + this.unit = element.getAttribute('id').getValue(); + return; + } + if (name === 'segment') { + this.segment = element.getAttribute('id').getValue(); + } + if (this.stack.length > 0) { + this.stack[this.stack.length - 1].addElement(element); + } + this.stack.push(element); + } + + endElement(name: string): void { + if (name === 'xliff' || name === 'file' || name === 'unit') { + return; + } + let e: XMLElement = this.stack.pop(); + if (name === 'segment') { + this.translate(e); + this.stack = new Array(); + } + } + + internalSubset(declaration: string): void { + // do nothing + } + + characters(ch: string): void { + if (this.stack.length > 0) { + this.stack[this.stack.length - 1].addString(ch); + } + } + + ignorableWhitespace(ch: string): void { + // do nothing + } + + comment(ch: string): void { + // do + } + + processingInstruction(target: string, data: string): void { + // do nothing + } + + startCDATA(): void { + // do nothing + } + + endCDATA(): void { + // do nothing + } + + startDTD(name: string, publicId: string, systemId: string): void { + // do nothing + } + + endDTD(): void { + // do nothing + } + + skippedEntity(name: string): void { + console.log('skippedEntity: ' + name); + } + + translate(segment: XMLElement): void { + let source: XMLElement = segment.getChild('source'); + + this.mtManager.translateElement(source, this.project, this.file, this.unit, this.segment); + + } +} \ No newline at end of file diff --git a/ts/mtManager.ts b/ts/mtManager.ts new file mode 100644 index 0000000..f117195 --- /dev/null +++ b/ts/mtManager.ts @@ -0,0 +1,279 @@ +/******************************************************************************* + * Copyright (c) 2007 - 2024 Maxprograms. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 1.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/org/documents/epl-v10.html + * + * Contributors: + * Maxprograms - initial API and implementation + *******************************************************************************/ + +import { AzureTranslator, ChatGPTTranslator, DeepLTranslator, GoogleTranslator, MTEngine, MTMatch, MTUtils, ModernMTTranslator, YandexTranslator } from "mtengines"; +import { Language, LanguageUtils } from "typesbcp47"; +import { Swordfish } from "./Swordfish"; +import { SAXParser, XMLElement } from "typesxml"; +import { MTContentHandler } from "./mtContentHandler"; + +export class MTManager { + + mtEngines: MTEngine[]; + srcLang: string; + tgtLang: string; + + readonly mtLanguages: any = { + google: { + srcLangs: ["af", "ak", "am", "ar", "as", "ay", "az", "be", "bg", "bho", "bm", "bn", "bs", "ca", "ceb", "ckb", "co", "cs", "cy", "da", "de", "doi", "dv", "ee", "el", "en", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gd", "gl", "gn", "gom", "gu", "ha", "haw", "he", "hi", "hmn", "hr", "ht", "hu", "hy", "id", "ig", "ilo", "is", "it", "iw", "ja", "jv", "jw", "ka", "kk", "km", "kn", "ko", "kri", "ku", "ky", "la", "lb", "lg", "ln", "lo", "lt", "lus", "lv", "mai", "mg", "mi", "mk", "ml", "mn", "mni-Mtei", "mr", "ms", "mt", "my", "ne", "nl", "no", "nso", "ny", "om", "or", "pa", "pl", "ps", "pt", "qu", "ro", "ru", "rw", "sa", "sd", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "ti", "tk", "tl", "tr", "ts", "tt", "ug", "uk", "ur", "uz", "vi", "xh", "yi", "yo", "zh", "zh-CN", "zh-TW", "zu"], + tgtLangs: ["af", "ak", "am", "ar", "as", "ay", "az", "be", "bg", "bho", "bm", "bn", "bs", "ca", "ceb", "ckb", "co", "cs", "cy", "da", "de", "doi", "dv", "ee", "el", "en", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gd", "gl", "gn", "gom", "gu", "ha", "haw", "he", "hi", "hmn", "hr", "ht", "hu", "hy", "id", "ig", "ilo", "is", "it", "iw", "ja", "jv", "jw", "ka", "kk", "km", "kn", "ko", "kri", "ku", "ky", "la", "lb", "lg", "ln", "lo", "lt", "lus", "lv", "mai", "mg", "mi", "mk", "ml", "mn", "mni-Mtei", "mr", "ms", "mt", "my", "ne", "nl", "no", "nso", "ny", "om", "or", "pa", "pl", "ps", "pt", "qu", "ro", "ru", "rw", "sa", "sd", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "ti", "tk", "tl", "tr", "ts", "tt", "ug", "uk", "ur", "uz", "vi", "xh", "yi", "yo", "zh", "zh-CN", "zh-TW", "zu"], + nmtSrcLangs: ["af", "ak", "am", "ar", "as", "ay", "az", "be", "bg", "bho", "bm", "bn", "bs", "ca", "ceb", "ckb", "co", "cs", "cy", "da", "de", "doi", "dv", "ee", "el", "en", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gd", "gl", "gn", "gom", "gu", "ha", "haw", "he", "hi", "hmn", "hr", "ht", "hu", "hy", "id", "ig", "ilo", "is", "it", "iw", "ja", "jv", "jw", "ka", "kk", "km", "kn", "ko", "kri", "ku", "ky", "la", "lb", "lg", "ln", "lo", "lt", "lus", "lv", "mai", "mg", "mi", "mk", "ml", "mn", "mni-Mtei", "mr", "ms", "mt", "my", "ne", "nl", "no", "nso", "ny", "om", "or", "pa", "pl", "ps", "pt", "qu", "ro", "ru", "rw", "sa", "sd", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "ti", "tk", "tl", "tr", "ts", "tt", "ug", "uk", "ur", "uz", "vi", "xh", "yi", "yo", "zh", "zh-CN", "zh-TW", "zu"], + nmtTgtLangs: ["af", "ak", "am", "ar", "as", "ay", "az", "be", "bg", "bho", "bm", "bn", "bs", "ca", "ceb", "ckb", "co", "cs", "cy", "da", "de", "doi", "dv", "ee", "el", "en", "eo", "es", "et", "eu", "fa", "fi", "fr", "fy", "ga", "gd", "gl", "gn", "gom", "gu", "ha", "haw", "he", "hi", "hmn", "hr", "ht", "hu", "hy", "id", "ig", "ilo", "is", "it", "iw", "ja", "jv", "jw", "ka", "kk", "km", "kn", "ko", "kri", "ku", "ky", "la", "lb", "lg", "ln", "lo", "lt", "lus", "lv", "mai", "mg", "mi", "mk", "ml", "mn", "mni-Mtei", "mr", "ms", "mt", "my", "ne", "nl", "no", "nso", "ny", "om", "or", "pa", "pl", "ps", "pt", "qu", "ro", "ru", "rw", "sa", "sd", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "ti", "tk", "tl", "tr", "ts", "tt", "ug", "uk", "ur", "uz", "vi", "xh", "yi", "yo", "zh", "zh-CN", "zh-TW", "zu"] + }, + azure: { + srcLangs: ["af", "am", "ar", "as", "az", "ba", "bg", "bho", "bn", "bo", "brx", "bs", "ca", "cs", "cy", "da", "de", "doi", "dsb", "dv", "el", "en", "es", "et", "eu", "fa", "fi", "fil", "fj", "fo", "fr", "fr-CA", "ga", "gl", "gom", "gu", "ha", "he", "hi", "hr", "hsb", "ht", "hu", "hy", "id", "ig", "ikt", "is", "it", "iu", "iu-Latn", "ja", "ka", "kk", "km", "kmr", "kn", "ko", "ks", "ku", "ky", "ln", "lo", "lt", "lug", "lv", "lzh", "mai", "mg", "mi", "mk", "ml", "mn-Cyrl", "mn-Mong", "mr", "ms", "mt", "mww", "my", "nb", "ne", "nl", "nso", "nya", "or", "otq", "pa", "pl", "prs", "ps", "pt", "pt-PT", "ro", "ru", "run", "rw", "sd", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr-Cyrl", "sr-Latn", "st", "sv", "sw", "ta", "te", "th", "ti", "tk", "tlh-Latn", "tlh-Piqd", "tn", "to", "tr", "tt", "ty", "ug", "uk", "ur", "uz", "vi", "xh", "yo", "yua", "yue", "zh-Hans", "zh-Hant", "zu"], + tgtLangs: ["af", "am", "ar", "as", "az", "ba", "bg", "bho", "bn", "bo", "brx", "bs", "ca", "cs", "cy", "da", "de", "doi", "dsb", "dv", "el", "en", "es", "et", "eu", "fa", "fi", "fil", "fj", "fo", "fr", "fr-CA", "ga", "gl", "gom", "gu", "ha", "he", "hi", "hr", "hsb", "ht", "hu", "hy", "id", "ig", "ikt", "is", "it", "iu", "iu-Latn", "ja", "ka", "kk", "km", "kmr", "kn", "ko", "ks", "ku", "ky", "ln", "lo", "lt", "lug", "lv", "lzh", "mai", "mg", "mi", "mk", "ml", "mn-Cyrl", "mn-Mong", "mr", "ms", "mt", "mww", "my", "nb", "ne", "nl", "nso", "nya", "or", "otq", "pa", "pl", "prs", "ps", "pt", "pt-PT", "ro", "ru", "run", "rw", "sd", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr-Cyrl", "sr-Latn", "st", "sv", "sw", "ta", "te", "th", "ti", "tk", "tlh-Latn", "tlh-Piqd", "tn", "to", "tr", "tt", "ty", "ug", "uk", "ur", "uz", "vi", "xh", "yo", "yua", "yue", "zh-Hans", "zh-Hant", "zu"] + }, + yandex: { + srcLangs: ["az", "be", "bg", "ca", "cs", "da", "de", "el", "en", "es", "et", "fi", "fr", "hr", "hu", "hy", "it", "lt", "lv", "mk", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr", "sv", "tr", "uk"], + tgtLangs: ["az", "be", "bg", "ca", "cs", "da", "de", "el", "en", "es", "et", "fi", "fr", "hr", "hu", "hy", "it", "lt", "lv", "mk", "nl", "no", "pl", "pt", "ro", "ru", "sk", "sl", "sq", "sr", "sv", "tr", "uk"] + }, + deepl: { + srcLangs: ["bg", "cs", "da", "de", "el", "en", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"], + tgtLangs: ["bg", "cs", "da", "de", "el", "en-GB", "en-US", "es", "et", "fi", "fr", "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "pt-BR", "pt-PT", "ro", "ru", "sk", "sl", "sv", "tr", "uk", "zh"] + }, + modernmt: { + srcLangs: ["azb", "tk", "tl", "de", "ace", "azj", "li", "ti", "lg", "tg", "th", "tum", "bho", "te", "hne", "dz", "la", "ta", "lb", "tw", "lv", "min", "zsm", "ts", "lt", "tt", "tr", "lo", "ln", "tn", "bs", "bug", "dyu", "prs", "cs", "kk", "sk", "ki", "si", "kg", "sg", "sd", "cy", "ca", "sc", "ka", "sa", "da", "ky", "sv", "ast", "zh-TW", "sw", "st", "su", "sr", "ks", "ss", "sq", "kn", "sn", "ko", "so", "be", "ceb", "sl", "km", "sm", "nn", "bjn", "nl", "vi", "ne", "ga", "nb", "gd", "ilo", "khk", "ltg", "zh-CN", "ny", "mni", "uzn", "fj", "fi", "awa", "fo", "fr", "ml", "et", "mk", "uk", "mi", "ba", "cjk", "mg", "ug", "taq", "vec", "mos", "tpi", "ee", "my", "mt", "bg", "ckb", "el", "mr", "ur", "eo", "ms", "en", "es-ES", "mn", "knc", "pt-PT", "hy", "pl", "xh", "id", "ig", "pa", "hi", "hr", "ps", "ht", "hu", "wo", "az", "crh", "als", "ayr", "ha", "oc", "he", "gl", "gn", "or", "kmr", "plt", "gu", "ro", "rn", "kmb", "war", "rw", "ru", "zu", "jv", "af", "dik", "yo", "diq", "ja", "ydd", "is", "it", "kea", "pag", "es-419", "pap", "bm", "bn", "bo", "pbt", "ban", "ak", "tzm", "gaz", "pes", "am", "bem", "ar", "as", "umb", "pt-BR", "quy", "fon", "kas", "kam", "kab", "kac", "fur", "kbp", "fuv", "lij", "lmo", "es", "luo", "lus", "lua", "lvs", "nso", "sat", "mag", "mai", "scn", "shn", "szl", "nus", "zh", "pt"], + tgtLangs: ["azb", "tk", "tl", "de", "ace", "azj", "li", "ti", "lg", "tg", "th", "tum", "bho", "te", "hne", "dz", "la", "ta", "lb", "tw", "lv", "min", "zsm", "ts", "lt", "tt", "tr", "lo", "ln", "tn", "bs", "bug", "dyu", "prs", "cs", "kk", "sk", "ki", "si", "kg", "sg", "sd", "cy", "ca", "sc", "ka", "sa", "da", "ky", "sv", "ast", "zh-TW", "sw", "st", "su", "sr", "ks", "ss", "sq", "kn", "sn", "ko", "so", "be", "ceb", "sl", "km", "sm", "nn", "bjn", "nl", "vi", "ne", "ga", "nb", "gd", "ilo", "khk", "ltg", "zh-CN", "ny", "mni", "uzn", "fj", "fi", "awa", "fo", "fr", "ml", "et", "mk", "uk", "mi", "ba", "cjk", "mg", "ug", "taq", "vec", "mos", "tpi", "ee", "my", "mt", "bg", "ckb", "el", "mr", "ur", "eo", "ms", "en", "es-ES", "mn", "knc", "pt-PT", "hy", "pl", "xh", "id", "ig", "pa", "hi", "hr", "ps", "ht", "hu", "wo", "az", "crh", "als", "ayr", "ha", "oc", "he", "gl", "gn", "or", "kmr", "plt", "gu", "ro", "rn", "kmb", "war", "rw", "ru", "zu", "jv", "af", "dik", "yo", "diq", "ja", "ydd", "is", "it", "kea", "pag", "es-419", "pap", "bm", "bn", "bo", "pbt", "ban", "ak", "tzm", "gaz", "pes", "am", "bem", "ar", "as", "umb", "pt-BR", "quy", "fon", "kas", "kam", "kab", "kac", "fur", "kbp", "fuv", "lij", "lmo", "es", "luo", "lus", "lua", "lvs", "nso", "sat", "mag", "mai", "scn", "shn", "szl", "nus", "zh", "pt"] + } + }; + + constructor(preferences: Preferences, srcLang: string, tgtLang: string) { + this.mtEngines = []; + this.srcLang = srcLang; + this.tgtLang = tgtLang; + if (preferences.google.enabled) { + let googleTranslator: GoogleTranslator = new GoogleTranslator(preferences.google.apiKey, preferences.google.neural); + googleTranslator.setSourceLanguage(preferences.google.srcLang); + googleTranslator.setTargetLanguage(preferences.google.tgtLang); + this.mtEngines.push(googleTranslator); + } + if (preferences.azure.enabled) { + let azureTranslator: AzureTranslator = new AzureTranslator(preferences.azure.apiKey); + azureTranslator.setSourceLanguage(preferences.azure.srcLang); + azureTranslator.setTargetLanguage(preferences.azure.tgtLang); + this.mtEngines.push(azureTranslator); + } + if (preferences.yandex.enabled) { + let yandexTranslator: YandexTranslator = new YandexTranslator(preferences.yandex.apiKey); + yandexTranslator.setSourceLanguage(preferences.yandex.srcLang); + yandexTranslator.setTargetLanguage(preferences.yandex.tgtLang); + this.mtEngines.push(yandexTranslator); + } + if (preferences.deepl.enabled) { + let deeplTranslator: DeepLTranslator = new DeepLTranslator(preferences.deepl.apiKey, preferences.deepl.proPlan); + deeplTranslator.setSourceLanguage(preferences.deepl.srcLang); + deeplTranslator.setTargetLanguage(preferences.deepl.tgtLang); + this.mtEngines.push(deeplTranslator); + } + if (preferences.chatGpt.enabled) { + let chatGptTranslator: ChatGPTTranslator = new ChatGPTTranslator(preferences.chatGpt.apiKey, preferences.chatGpt.model); + chatGptTranslator.setSourceLanguage(srcLang); + chatGptTranslator.setTargetLanguage(tgtLang); + this.mtEngines.push(chatGptTranslator); + } + if (preferences.modernmt.enabled) { + let modernmtTranslator: ModernMTTranslator = new ModernMTTranslator(preferences.modernmt.apiKey); + modernmtTranslator.setSourceLanguage(preferences.modernmt.srcLang); + modernmtTranslator.setTargetLanguage(preferences.modernmt.tgtLang); + this.mtEngines.push(modernmtTranslator); + } + } + + translateProject(project: string, exportedFile: string) { + let parser: SAXParser = new SAXParser(); + let handler: MTContentHandler = new MTContentHandler(this, project); + parser.setContentHandler(handler); + parser.parseFile(exportedFile); + } + + translateElement(source: XMLElement, project: string, file: string, unit: string, segment: string) { + console.log(source.toString()); + let promises: Promise[] = []; + for (let mtEngine of this.mtEngines) { + if (mtEngine.handlesTags()) { + promises.push(mtEngine.getMTMatch(source)); + } else { + let plainText: string = MTUtils.plainText(source); + let plainSource: XMLElement = MTUtils.toXMLElement('' + plainText + ''); + promises.push(mtEngine.getMTMatch(plainSource)); + } + } + Promise.all(promises).then((values: MTMatch[]) => { + let translations: MTMatch[] = []; + for (let value of values) { + translations.push(value); + } + this.setMTMatches({ + project: project, + file: file, + unit: unit, + segment: segment, + srcLang: this.srcLang, + tgtLang: this.tgtLang, + translations: translations + }); + }, (reason: any) => { + if (reason instanceof Error) { + console.log(reason.message); + throw reason; + } + throw new Error(reason); + }); + } + + translateSegment(params: any) { + Swordfish.mainWindow.webContents.send('start-waiting'); + Swordfish.mainWindow.webContents.send('set-status', 'Getting Translations'); + this.getSourceSegment(params, (segment: any) => { + let promises: Promise[] = []; + for (let mtEngine of this.mtEngines) { + if (mtEngine.handlesTags()) { + promises.push(mtEngine.getMTMatch(MTUtils.toXMLElement(segment.source))); + } else { + promises.push(mtEngine.getMTMatch(MTUtils.toXMLElement(segment.plainText))); + } + } + Promise.all(promises).then((values: MTMatch[]) => { + let translations: MTMatch[] = []; + for (let value of values) { + translations.push(value); + } + params.translations = translations; + this.setMTMatches(params); + Swordfish.mainWindow.webContents.send('end-waiting'); + Swordfish.mainWindow.webContents.send('set-status', ''); + }, (reason: any) => { + Swordfish.mainWindow.webContents.send('end-waiting'); + Swordfish.mainWindow.webContents.send('set-status', ''); + if (reason instanceof Error) { + throw reason; + } + throw new Error(reason); + }); + }, (reason: any) => { + Swordfish.mainWindow.webContents.send('end-waiting'); + Swordfish.mainWindow.webContents.send('set-status', ''); + if (reason instanceof Error) { + throw reason; + } + console.log(JSON.stringify(reason, null, 2)); + throw new Error(reason); + }); + } + + getSourceSegment(params: any, resolve: Function, reject: Function): void { + fetch('http://127.0.0.1:8070/projects/segmentSource', { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then((response: Response) => { + if (response.ok) { + response.json().then((result: any) => { + if (result.status === 'Success') { + resolve(result); + return; + } + reject(result.reason); + }); + } else { + throw new Error("Error getting source segment"); + } + }).catch((error: any) => { + if (error instanceof Error) { + reject(error.message); + return; + } + reject('Error getting source segment'); + }); + } + + setMTMatches(params: any): void { + fetch('http://127.0.0.1:8070/projects/setMTMatches', { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(params) + }).then((response: Response) => { + if (response.ok) { + response.json().then((result: any) => { + if (result.status === 'Success') { + Swordfish.getMatches({ + project: params.project, + file: params.file, + unit: params.unit, + segment: params.segment + }); + } else { + throw new Error(result.reason); + } + }); + } else { + throw new Error("Error setting MT matches"); + } + }).catch((error: any) => { + if (error instanceof Error) { + throw error; + } + throw new Error("Error setting MT matches"); + }); + } + + getMTLanguages(): any { + return { + google: { + srcLangs: this.getLanguages(this.mtLanguages.google.srcLangs), + tgtLangs: this.getLanguages(this.mtLanguages.google.tgtLangs), + nmtSrclangs: this.getLanguages(this.mtLanguages.google.nmtSrcLangs), + nmtTgtLangs: this.getLanguages(this.mtLanguages.google.nmtTgtLangs) + }, + azure: { + srcLangs: this.getLanguages(this.mtLanguages.azure.srcLangs), + tgtLangs: this.getLanguages(this.mtLanguages.azure.tgtLangs) + }, + yandex: { + srcLangs: this.getLanguages(this.mtLanguages.yandex.srcLangs), + tgtLangs: this.getLanguages(this.mtLanguages.yandex.tgtLangs), + directions: YandexTranslator.getDirections() + }, + deepl: { + srcLangs: this.getLanguages(this.mtLanguages.deepl.srcLangs), + tgtLangs: this.getLanguages(this.mtLanguages.deepl.tgtLangs) + }, + modernmt: { + srcLangs: this.getLanguages(this.mtLanguages.modernmt.srcLangs), + tgtLangs: this.getLanguages(this.mtLanguages.modernmt.tgtLangs) + } + }; + + } + + getLanguages(langs: string[]): Language[] { + let result: Language[] = []; + for (let lang of langs) { + try { + result.push(LanguageUtils.getLanguage(lang)); + } catch (error) { + // ignore unsupported tags + // console.log('unsupported tag', lang); + } + } + result.sort((a: Language, b: Language) => { + return a.description.localeCompare(b.description); + }); + return result; + } + +} \ No newline at end of file diff --git a/ts/mtMatches.ts b/ts/mtMatches.ts index d75e670..f2496c2 100644 --- a/ts/mtMatches.ts +++ b/ts/mtMatches.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/notes.ts b/ts/notes.ts index 4fb9398..2e2971e 100644 --- a/ts/notes.ts +++ b/ts/notes.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/preferences.ts b/ts/preferences.ts index bb82497..86e569e 100644 --- a/ts/preferences.ts +++ b/ts/preferences.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -56,7 +56,7 @@ class Preferences { apiKey: string; model: string; }; - myMemory: { + modernmt: { enabled: boolean; apiKey: string; srcLang: string; diff --git a/ts/preferencesDialog.ts b/ts/preferencesDialog.ts index 445ef40..b7b5cf1 100644 --- a/ts/preferencesDialog.ts +++ b/ts/preferencesDialog.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -61,10 +61,10 @@ class PreferencesDialog { chatGPTKey: HTMLInputElement; chatGPTModel: HTMLSelectElement; - enableMyMemory: HTMLInputElement; - myMemoryKey: HTMLInputElement; - myMemorySrcLang: HTMLSelectElement; - myMemoryTgtLang: HTMLSelectElement; + enableModernmt: HTMLInputElement; + modernmtKey: HTMLInputElement; + modernmtSrcLang: HTMLSelectElement; + modernmtTgtLang: HTMLSelectElement; defaultEnglish: HTMLSelectElement; defaultPortuguese: HTMLSelectElement; @@ -252,17 +252,17 @@ class PreferencesDialog { this.chatGPTKey.value = preferences.chatGpt.apiKey; this.chatGPTModel.value = preferences.chatGpt.model; - this.enableMyMemory.checked = preferences.myMemory.enabled; - this.myMemoryKey.value = preferences.myMemory.apiKey; - this.myMemorySrcLang.value = preferences.myMemory.srcLang; - this.myMemoryTgtLang.value = preferences.myMemory.tgtLang; - this.myMemoryKey.disabled = !preferences.myMemory.enabled; - this.myMemorySrcLang.disabled = !preferences.myMemory.enabled; - this.myMemoryTgtLang.disabled = !preferences.myMemory.enabled; - this.enableMyMemory.addEventListener('change', () => { - this.myMemoryKey.disabled = !this.enableMyMemory.checked; - this.myMemorySrcLang.disabled = !this.enableMyMemory.checked; - this.myMemoryTgtLang.disabled = !this.enableMyMemory.checked; + this.enableModernmt.checked = preferences.modernmt.enabled; + this.modernmtKey.value = preferences.modernmt.apiKey; + this.modernmtSrcLang.value = preferences.modernmt.srcLang; + this.modernmtTgtLang.value = preferences.modernmt.tgtLang; + this.modernmtKey.disabled = !preferences.modernmt.enabled; + this.modernmtSrcLang.disabled = !preferences.modernmt.enabled; + this.modernmtTgtLang.disabled = !preferences.modernmt.enabled; + this.enableModernmt.addEventListener('change', () => { + this.modernmtKey.disabled = !this.enableModernmt.checked; + this.modernmtSrcLang.disabled = !this.enableModernmt.checked; + this.modernmtTgtLang.disabled = !this.enableModernmt.checked; }); this.os = preferences.os; @@ -276,9 +276,6 @@ class PreferencesDialog { this.srcLangSelect.innerHTML = languageOptions; this.tgtLangSelect.innerHTML = languageOptions; - this.myMemorySrcLang.innerHTML = languageOptions; - this.myMemoryTgtLang.innerHTML = languageOptions; - this.electron.ipcRenderer.send('get-mt-languages'); } @@ -330,12 +327,12 @@ class PreferencesDialog { return; } - if (this.enableMyMemory.checked && this.myMemoryKey.value === '') { - this.electron.ipcRenderer.send('show-message', { type: 'warning', message: 'Enter MyMemory API key', parent: 'preferences' }); + if (this.enableModernmt.checked && this.modernmtKey.value === '') { + this.electron.ipcRenderer.send('show-message', { type: 'warning', message: 'Enter ModernMT API key', parent: 'preferences' }); return; } - if (this.enableMyMemory.checked && (this.myMemorySrcLang.value === 'none' || this.myMemoryTgtLang.value === 'none')) { - this.electron.ipcRenderer.send('show-message', { type: 'warning', message: 'Select MyMemory languages', parent: 'preferences' }); + if (this.enableModernmt.checked && (this.modernmtSrcLang.value === 'none' || this.modernmtTgtLang.value === 'none')) { + this.electron.ipcRenderer.send('show-message', { type: 'warning', message: 'Select ModernMT languages', parent: 'preferences' }); return; } @@ -385,11 +382,11 @@ class PreferencesDialog { apiKey: this.chatGPTKey.value, model: this.chatGPTModel.value }, - myMemory: { - enabled: this.enableMyMemory.checked, - apiKey: this.myMemoryKey.value, - srcLang: this.myMemorySrcLang.value, - tgtLang: this.myMemoryTgtLang.value + modernmt: { + enabled: this.enableModernmt.checked, + apiKey: this.modernmtKey.value, + srcLang: this.modernmtSrcLang.value, + tgtLang: this.modernmtTgtLang.value }, spellchecker: { defaultEnglish: 'en-US', @@ -990,12 +987,12 @@ class PreferencesDialog { mtHolder.addTab(chatGptTab); this.populateChatGptTab(chatGptTab.getContainer()); - let myMemoryTab: Tab = new Tab('myMemoryTab', 'MyMemory', false); - myMemoryTab.getLabelDiv().addEventListener('click', () => { + let modernmtTab: Tab = new Tab('modernmtTab', 'ModernMT', false); + modernmtTab.getLabelDiv().addEventListener('click', () => { this.electron.ipcRenderer.send('settings-height', { width: document.body.clientWidth, height: document.body.clientHeight }); }); - mtHolder.addTab(myMemoryTab); - this.populateMyMemoryTab(myMemoryTab.getContainer()); + mtHolder.addTab(modernmtTab); + this.populateModernmtTab(modernmtTab.getContainer()); } populateGoogleTab(container: HTMLDivElement): void { @@ -1316,7 +1313,7 @@ class PreferencesDialog { td = document.createElement('td'); td.classList.add('middle'); td.classList.add('fill_width'); - td.innerHTML = ''; + td.innerHTML = ''; tr.appendChild(td); this.enableChatGPT = document.getElementById('enableChatGPT') as HTMLInputElement; @@ -1324,15 +1321,15 @@ class PreferencesDialog { this.chatGPTModel = document.getElementById('chatGPTModel') as HTMLSelectElement; } - populateMyMemoryTab(container: HTMLDivElement): void { + populateModernmtTab(container: HTMLDivElement): void { container.style.paddingTop = '10px'; - let myMemoryDiv: HTMLDivElement = document.createElement('div'); - myMemoryDiv.classList.add('middle'); - myMemoryDiv.classList.add('row'); - myMemoryDiv.style.paddingLeft = '4px'; - myMemoryDiv.innerHTML = ''; - container.appendChild(myMemoryDiv); + let modernmtDiv: HTMLDivElement = document.createElement('div'); + modernmtDiv.classList.add('middle'); + modernmtDiv.classList.add('row'); + modernmtDiv.style.paddingLeft = '4px'; + modernmtDiv.innerHTML = ''; + container.appendChild(modernmtDiv); let langsTable: HTMLTableElement = document.createElement('table'); langsTable.classList.add('fill_width'); @@ -1344,13 +1341,13 @@ class PreferencesDialog { let td: HTMLTableCellElement = document.createElement('td'); td.classList.add('middle'); td.classList.add('noWrap'); - td.innerHTML = '' + td.innerHTML = '' tr.appendChild(td); td = document.createElement('td'); td.classList.add('middle'); td.classList.add('fill_width'); - td.innerHTML = ''; + td.innerHTML = ''; tr.appendChild(td); tr = document.createElement('tr'); @@ -1359,13 +1356,13 @@ class PreferencesDialog { td = document.createElement('td'); td.classList.add('middle'); td.classList.add('noWrap'); - td.innerHTML = ''; + td.innerHTML = ''; tr.appendChild(td); td = document.createElement('td'); td.classList.add('middle'); td.classList.add('fill_width'); - td.innerHTML = ''; + td.innerHTML = ''; tr.appendChild(td); tr = document.createElement('tr'); @@ -1374,19 +1371,19 @@ class PreferencesDialog { td = document.createElement('td'); td.classList.add('middle'); td.classList.add('noWrap'); - td.innerHTML = ''; + td.innerHTML = ''; tr.appendChild(td); td = document.createElement('td'); td.classList.add('middle'); td.classList.add('fill_width'); - td.innerHTML = ''; + td.innerHTML = ''; tr.appendChild(td); - this.enableMyMemory = document.getElementById('enableMyMemory') as HTMLInputElement; - this.myMemoryKey = document.getElementById('myMemoryKey') as HTMLInputElement; - this.myMemorySrcLang = document.getElementById('myMemorySrcLang') as HTMLSelectElement; - this.myMemoryTgtLang = document.getElementById('myMemoryTgtLang') as HTMLSelectElement; + this.enableModernmt = document.getElementById('enablemodernmt') as HTMLInputElement; + this.modernmtKey = document.getElementById('modernmtKey') as HTMLInputElement; + this.modernmtSrcLang = document.getElementById('modernmtSrcLang') as HTMLSelectElement; + this.modernmtTgtLang = document.getElementById('modernmtTgtLang') as HTMLSelectElement; } setMtLanguages(arg: any): void { @@ -1403,6 +1400,9 @@ class PreferencesDialog { this.deeplSrcLang.innerHTML = this.getOptions(arg.deepl.srcLangs); this.deeplTgtLang.innerHTML = this.getOptions(arg.deepl.tgtLangs); + this.modernmtSrcLang.innerHTML = this.getOptions(arg.modernmt.srcLangs); + this.modernmtTgtLang.innerHTML = this.getOptions(arg.modernmt.tgtLangs); + this.electron.ipcRenderer.send('get-preferences'); this.googleNeural.addEventListener('change', (event: InputEvent) => { diff --git a/ts/projects.ts b/ts/projects.ts index a6508d7..72f453b 100644 --- a/ts/projects.ts +++ b/ts/projects.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/replaceText.ts b/ts/replaceText.ts index 478625b..724621b 100644 --- a/ts/replaceText.ts +++ b/ts/replaceText.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/serverSettings.ts b/ts/serverSettings.ts index 9f23825..18af544 100644 --- a/ts/serverSettings.ts +++ b/ts/serverSettings.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/sortSegments.ts b/ts/sortSegments.ts index 2cffa34..ad3cc96 100644 --- a/ts/sortSegments.ts +++ b/ts/sortSegments.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/spaceAnalysis.ts b/ts/spaceAnalysis.ts index 8e4c8bf..9878a7c 100644 --- a/ts/spaceAnalysis.ts +++ b/ts/spaceAnalysis.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/spellingLangs.ts b/ts/spellingLangs.ts index 036c3fc..90553f4 100644 --- a/ts/spellingLangs.ts +++ b/ts/spellingLangs.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/systemInfo.ts b/ts/systemInfo.ts index 3b70dd9..5217315 100644 --- a/ts/systemInfo.ts +++ b/ts/systemInfo.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/tabs.ts b/ts/tabs.ts index 3c6e640..8372194 100644 --- a/ts/tabs.ts +++ b/ts/tabs.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/tags.ts b/ts/tags.ts index 80fdb4f..aaa9d21 100644 --- a/ts/tags.ts +++ b/ts/tags.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/tagsAnalysis.ts b/ts/tagsAnalysis.ts index fe43c28..7b8143e 100644 --- a/ts/tagsAnalysis.ts +++ b/ts/tagsAnalysis.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/termSearch.ts b/ts/termSearch.ts index a1ffa19..91daa01 100644 --- a/ts/termSearch.ts +++ b/ts/termSearch.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/termsPanel.ts b/ts/termsPanel.ts index 21b30cd..d5f8722 100644 --- a/ts/termsPanel.ts +++ b/ts/termsPanel.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/tmMatches.ts b/ts/tmMatches.ts index ced1ec8..922a912 100644 --- a/ts/tmMatches.ts +++ b/ts/tmMatches.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/ts/translation.ts b/ts/translation.ts index 2132963..fd8e2ec 100644 --- a/ts/translation.ts +++ b/ts/translation.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -147,150 +147,121 @@ class TranslationView { this.container.addEventListener('keydown', (event: KeyboardEvent) => { if (event.key === 'PageDown' && !(event.ctrlKey || event.metaKey)) { event.preventDefault(); - event.cancelBubble = true; this.gotoNext(); } if (event.key === 'PageUp' && !(event.ctrlKey || event.metaKey)) { event.preventDefault(); - event.cancelBubble = true; this.gotoPrevious(); } if (event.key === 'PageDown' && (event.ctrlKey || event.metaKey) && !event.shiftKey) { event.preventDefault(); - event.cancelBubble = true; this.nextPage(); } if (event.key === 'PageUp' && (event.ctrlKey || event.metaKey) && !event.shiftKey) { event.preventDefault(); - event.cancelBubble = true; this.previousPage(); } if (event.key === 'PageDown' && (event.ctrlKey || event.metaKey) && event.shiftKey) { event.preventDefault(); - event.cancelBubble = true; this.lastPage(); } if (event.key === 'PageUp' && (event.ctrlKey || event.metaKey) && event.shiftKey) { event.preventDefault(); - event.cancelBubble = true; this.firstPage(); } if ((event.ctrlKey || event.metaKey) && (event.key === 'b' || event.key === 'B')) { event.preventDefault(); - event.cancelBubble = true; this.addTerm(); } if ((event.ctrlKey || event.metaKey) && (event.key === 'u' || event.key === 'U') && !event.shiftKey) { event.preventDefault(); - event.cancelBubble = true; this.nextUntranslated(); } if ((event.ctrlKey || event.metaKey) && (event.key === 'u' || event.key === 'U') && event.shiftKey) { event.preventDefault(); - event.cancelBubble = true; this.nextUnconfirmed(); } // Insert tags with numeric keypad if (event.code === 'Numpad1' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 1 }); } if (event.code === 'Numpad2' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 2 }); } if (event.code === 'Numpad3' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 3 }); } if (event.code === 'Numpad4' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 4 }); } if (event.code === 'Numpad5' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 5 }); } if (event.code === 'Numpad6' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 6 }); } if (event.code === 'Numpad7' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 7 }); } if (event.code === 'Numpad8' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 8 }); } if (event.code === 'Numpad9' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 9 }); } if (event.code === 'Numpad0' && (event.ctrlKey || event.metaKey) && !event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTag({ tag: 10 }); } // Insert terms with numeric keypad if (event.code === 'Numpad1' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 1 }); } if (event.code === 'Numpad2' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 2 }); } if (event.code === 'Numpad3' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 3 }); } if (event.code === 'Numpad4' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 4 }); } if (event.code === 'Numpad5' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 5 }); } if (event.code === 'Numpad6' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 6 }); } if (event.code === 'Numpad7' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 7 }); } if (event.code === 'Numpad8' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 8 }); } if (event.code === 'Numpad9' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 9 }); } if (event.code === 'Numpad0' && (event.ctrlKey || event.metaKey) && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.insertTerm({ term: 10 }); } }); @@ -1173,16 +1144,18 @@ class TranslationView { this.saveEdit({ confirm: false, next: 'clicked', segment: clickedRow.rowIndex }); } - getMachineTranslations() { + getMachineTranslations(): void { this.electron.ipcRenderer.send('machine-translate', { project: this.projectId, file: this.currentId.file, unit: this.currentId.unit, - segment: this.currentId.id + segment: this.currentId.id, + srcLang: this.srcLang, + tgtLang: this.tgtLang }); } - getAssembledMatches() { + getAssembledMatches(): void { if (this.memSelect.value === 'none') { this.electron.ipcRenderer.send('show-message', { type: 'warning', message: 'Select memory' }); return; @@ -1201,7 +1174,7 @@ class TranslationView { }); } - getTmMatches() { + getTmMatches(): void { if (this.memSelect.value === 'none') { this.electron.ipcRenderer.send('show-message', { type: 'warning', message: 'Select memory' }); return; @@ -1394,7 +1367,7 @@ class TranslationView { } } - selectRow(row: HTMLTableRowElement) { + selectRow(row: HTMLTableRowElement): void { if (this.currentRow) { this.currentRow.classList.remove('currentRow'); } @@ -1474,7 +1447,6 @@ class TranslationView { } if (event.key === 'Enter' && event.altKey) { event.preventDefault(); - event.cancelBubble = true; this.saveSource(segmentId, source, originalSource); this.currentCell.contentEditable = 'true'; this.currentCell.focus(); @@ -1864,7 +1836,7 @@ class TranslationView { unit: this.currentId.unit, segment: this.currentId.id } - this.electron.ipcRenderer.send('apply-mt-all', { project: this.projectId }); + this.electron.ipcRenderer.send('apply-mt-all', { project: this.projectId, srcLang: this.srcLang, tgtLang: this.tgtLang }); } assembleMatchesAll(): void { @@ -2184,7 +2156,6 @@ class TranslationView { let allowedKeys: string[] = ['Escape', 'Enter', 'NumpadEnter', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Alt']; if (!allowedKeys.includes(event.key)) { event.preventDefault(); - event.cancelBubble = true; return; } if (event.key === 'Escape') { @@ -2196,7 +2167,6 @@ class TranslationView { if (event.key === 'Enter' || event.key === 'NumpadEnter') { event.preventDefault(); - event.cancelBubble = true; let selection: Selection = window.getSelection(); if (selection.rangeCount !== 0) { let source: HTMLTableCellElement = event.currentTarget as HTMLTableCellElement; diff --git a/ts/updates.ts b/ts/updates.ts index ee1f1a4..6228011 100644 --- a/ts/updates.ts +++ b/ts/updates.ts @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0

      482&!Q3hqQ)Td9jo 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 BrA+_; diff --git a/package.json b/package.json index 6233f5d..42c8a2a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "swordfish", "productName": "Swordfish", - "version": "4.28.1", + "version": "4.29.0", "description": "Swordfish Translation Editor", "main": "js/Swordfish.js", "scripts": { @@ -20,7 +20,12 @@ "url": "https://github.com/rmraya/Swordfish.git" }, "devDependencies": { - "electron": "^27.0.2", - "typescript": "^5.2.2" + "electron": "^28.1.3", + "typescript": "^5.3.3" + }, + "dependencies": { + "mtengines": "^1.2.1", + "typesbcp47": "^1.2.0", + "typesxml": "^1.2.1" } -} +} \ No newline at end of file diff --git a/src/com/maxprograms/swordfish/CheckURL.java b/src/com/maxprograms/swordfish/CheckURL.java index a6a1fea..6561331 100644 --- a/src/com/maxprograms/swordfish/CheckURL.java +++ b/src/com/maxprograms/swordfish/CheckURL.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -16,6 +16,8 @@ import java.lang.System.Logger; import java.lang.System.Logger.Level; import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; public class CheckURL { @@ -36,7 +38,7 @@ protected static void checkURL(String string) { try { connect(string); waiting = false; - } catch (IOException e) { + } catch (IOException | URISyntaxException e) { try { Thread.sleep(500); count++; @@ -53,8 +55,8 @@ protected static void checkURL(String string) { } } - private static void connect(String string) throws IOException { - URL url = new URL(string); + private static void connect(String string) throws IOException, URISyntaxException { + URL url = new URI(string).toURL(); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setConnectTimeout(1000); connection.connect(); diff --git a/src/com/maxprograms/swordfish/Constants.java b/src/com/maxprograms/swordfish/Constants.java index 9e48d61..dfc4add 100644 --- a/src/com/maxprograms/swordfish/Constants.java +++ b/src/com/maxprograms/swordfish/Constants.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -19,8 +19,8 @@ private Constants() { } public static final String APPNAME = "Swordfish"; - public static final String VERSION = "4.28.1"; - public static final String BUILD = "20231028_0741"; + public static final String VERSION = "4.29.0"; + public static final String BUILD = "20240122_0818"; public static final String REASON = "reason"; public static final String STATUS = "status"; diff --git a/src/com/maxprograms/swordfish/GlossariesHandler.java b/src/com/maxprograms/swordfish/GlossariesHandler.java index edcf5cc..c9b810c 100644 --- a/src/com/maxprograms/swordfish/GlossariesHandler.java +++ b/src/com/maxprograms/swordfish/GlossariesHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -245,7 +245,7 @@ private static JSONObject deleteGlossary(String request) { JSONObject completed = new JSONObject(); completed.put(Constants.PROGRESS, Constants.COMPLETED); openTasks.put(process, completed); - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -311,7 +311,7 @@ private static JSONObject exportGlossary(String request) { JSONObject completed = new JSONObject(); completed.put(Constants.PROGRESS, Constants.COMPLETED); openTasks.put(process, completed); - } catch (IOException | JSONException | SAXException | ParserConfigurationException | SQLException e) { + } catch (IOException | JSONException | SAXException | ParserConfigurationException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -322,14 +322,14 @@ private static JSONObject exportGlossary(String request) { return result; } - public static synchronized void openGlossary(String id) throws IOException, SQLException { + public static synchronized void openGlossary(String id) throws IOException, SQLException, URISyntaxException { if (glossaries == null) { loadGlossariesList(); } openGlossary(glossaries.get(id)); } - public static synchronized void openGlossary(Memory memory) throws IOException, SQLException { + public static synchronized void openGlossary(Memory memory) throws IOException, SQLException, URISyntaxException { if (glossaries == null) { loadGlossariesList(); } @@ -338,7 +338,7 @@ public static synchronized void openGlossary(Memory memory) throws IOException, engines.put(memory.getId(), engine); } - public static ITmEngine getEngine(String id) throws IOException, SQLException { + public static ITmEngine getEngine(String id) throws IOException, SQLException, URISyntaxException { if (glossaries == null) { loadGlossariesList(); } @@ -349,14 +349,14 @@ public static ITmEngine getEngine(String id) throws IOException, SQLException { } - public static synchronized void closeGlossary(String id) throws IOException, SQLException { + public static synchronized void closeGlossary(String id) throws IOException, SQLException, URISyntaxException { if (engines != null && engines.containsKey(id)) { engines.get(id).close(); engines.remove(id); } } - public static synchronized void closeAll() throws IOException, SQLException { + public static synchronized void closeAll() throws IOException, SQLException, URISyntaxException { Set keys = engines.keySet(); Iterator it = keys.iterator(); while (it.hasNext()) { @@ -516,7 +516,7 @@ private JSONObject addTerm(String request) { engine.storeTu(tu); engine.commit(); closeGlossary(glossary); - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e); result.put("result", Constants.ERROR); result.put(Constants.REASON, e.getMessage()); @@ -543,7 +543,7 @@ public static JSONObject searchTerm(String request) { closeGlossary(glossary); result.put("count", matches.size()); result.put("html", generateHTML(matches)); - } catch (IOException | SAXException | ParserConfigurationException | SQLException e) { + } catch (IOException | SAXException | ParserConfigurationException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e); result.put("result", Constants.ERROR); result.put(Constants.REASON, e.getMessage()); diff --git a/src/com/maxprograms/swordfish/MemoriesHandler.java b/src/com/maxprograms/swordfish/MemoriesHandler.java index ddf5523..788ed1e 100644 --- a/src/com/maxprograms/swordfish/MemoriesHandler.java +++ b/src/com/maxprograms/swordfish/MemoriesHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -20,6 +20,7 @@ import java.lang.System.Logger; import java.lang.System.Logger.Level; import java.net.URI; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.sql.SQLException; @@ -38,6 +39,7 @@ import javax.xml.parsers.ParserConfigurationException; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.xml.sax.SAXException; @@ -157,7 +159,7 @@ private static JSONObject getLanguages(String request) { completed.put("languages", array); completed.put(Constants.PROGRESS, Constants.COMPLETED); openTasks.put(process, completed); - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -228,7 +230,7 @@ private JSONObject concordanceSearch(String request) { result.put("html", generateHTML(matches, searchStr, isRegexp, caseSensitive)); result.put(Constants.PROGRESS, Constants.COMPLETED); openTasks.put(process, result); - } catch (IOException | SAXException | ParserConfigurationException | SQLException e) { + } catch (IOException | SAXException | ParserConfigurationException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -287,7 +289,7 @@ private static JSONObject importTMX(String request) { logger.log(Level.ERROR, e.getMessage(), e); } close(memory); - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -342,7 +344,7 @@ private static JSONObject exportMemory(String request) { JSONObject completed = new JSONObject(); completed.put(Constants.PROGRESS, Constants.COMPLETED); openTasks.put(process, completed); - } catch (IOException | SAXException | ParserConfigurationException | SQLException e) { + } catch (IOException | SAXException | ParserConfigurationException | SQLException | JSONException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -382,7 +384,7 @@ private static JSONObject deleteMemory(String request) { JSONObject completed = new JSONObject(); completed.put(Constants.PROGRESS, Constants.COMPLETED); openTasks.put(process, completed); - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e.getMessage(), e); JSONObject error = new JSONObject(); error.put(Constants.REASON, e.getMessage()); @@ -502,7 +504,7 @@ public static String getWorkFolder() throws IOException { return home.getAbsolutePath(); } - public static synchronized void open(String id) throws IOException, SQLException { + public static synchronized void open(String id) throws IOException, SQLException, URISyntaxException { if (memories == null) { loadMemoriesList(); } @@ -514,14 +516,14 @@ public static synchronized void open(String id) throws IOException, SQLException } } - public static synchronized void close(String id) throws IOException, SQLException { + public static synchronized void close(String id) throws IOException, SQLException, URISyntaxException { if (engines != null && engines.containsKey(id)) { engines.get(id).close(); engines.remove(id); } } - public static synchronized void closeAll() throws IOException, SQLException { + public static synchronized void closeAll() throws IOException, SQLException, URISyntaxException { Set keys = engines.keySet(); Iterator it = keys.iterator(); while (it.hasNext()) { @@ -533,7 +535,7 @@ public static synchronized void closeAll() throws IOException, SQLException { } } - public static ITmEngine getEngine(String id) throws IOException, SQLException { + public static ITmEngine getEngine(String id) throws IOException, SQLException, URISyntaxException { if (memories == null) { loadMemoriesList(); } diff --git a/src/com/maxprograms/swordfish/ProjectsHandler.java b/src/com/maxprograms/swordfish/ProjectsHandler.java index 0de19d1..cd455ac 100644 --- a/src/com/maxprograms/swordfish/ProjectsHandler.java +++ b/src/com/maxprograms/swordfish/ProjectsHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -52,7 +52,6 @@ import com.maxprograms.languages.LanguageUtils; import com.maxprograms.swordfish.models.Project; import com.maxprograms.swordfish.models.SourceFile; -import com.maxprograms.swordfish.mt.MT; import com.maxprograms.swordfish.xliff.Skeletons; import com.maxprograms.swordfish.xliff.XliffStore; import com.maxprograms.swordfish.xliff.XliffUtils; @@ -132,6 +131,10 @@ private JSONObject processRequest(String url, String request) { response = getProjectFiles(request); } else if ("/projects/segments".equals(url)) { response = getSegments(request); + } else if ("/projects/segmentSource".equals(url)) { + response = getSegmentSource(request); + } else if ("/projects/setMTMatches".equals(url)) { + response = setMTMatches(request); } else if ("/projects/count".equals(url)) { response = getSegmentsCount(request); } else if ("/projects/save".equals(url)) { @@ -140,8 +143,6 @@ private JSONObject processRequest(String url, String request) { response = saveSource(request); } else if ("/projects/matches".equals(url)) { response = getMatches(request); - } else if ("/projects/machineTranslate".equals(url)) { - response = machineTranslate(request); } else if ("/projects/assembleMatches".equals(url)) { response = assembleMatches(request); } else if ("/projects/applyAmAll".equals(url)) { @@ -215,7 +216,7 @@ private JSONObject processRequest(String url, String request) { } else if ("/projects/removeNote".equals(url)) { response = removeNote(request); } else { - response.put(Constants.REASON, "Unknown request"); + response.put(Constants.REASON, "Unknown request " + url); } if (!response.has(Constants.REASON)) { @@ -231,6 +232,19 @@ private JSONObject processRequest(String url, String request) { return response; } + private JSONObject setMTMatches(String request) + throws JSONException, SQLException, IOException, SAXException, ParserConfigurationException { + JSONObject result = new JSONObject(); + JSONObject json = new JSONObject(request); + String project = json.getString("project"); + if (!projects.containsKey(project)) { + result.put(Constants.REASON, "Project does not exist"); + return result; + } + projectStores.get(project).setMTMatches(json); + return result; + } + private JSONObject getProject(String request) throws IOException, JSONException { JSONObject json = new JSONObject(request); if (!projects.containsKey(json.getString("project"))) { @@ -500,6 +514,36 @@ private synchronized void saveProjectsList() throws IOException { } } + private JSONObject getSegmentSource(String request) { + JSONObject result = new JSONObject(); + JSONObject json = new JSONObject(request); + String project = json.getString("project"); + if (project == null) { + logger.log(Level.ERROR, "Null project requested"); + result.put(Constants.REASON, "Null project requested"); + return result; + } + if (!projectStores.containsKey(project)) { + try { + Project prj = projects.get(project); + XliffStore store = new XliffStore(prj.getXliff(), prj.getSourceLang().getCode(), + prj.getTargetLang().getCode()); + projectStores.put(project, store); + } catch (SAXException | IOException | ParserConfigurationException | URISyntaxException | SQLException e) { + logger.log(Level.ERROR, "Error creating project store", e); + result.put(Constants.REASON, e.getMessage()); + return result; + } + } + try { + result = projectStores.get(project).getSegmentSource(json); + } catch (SQLException | SAXException | IOException | ParserConfigurationException | JSONException e) { + logger.log(Level.ERROR, e); + result.put(Constants.REASON, e.getMessage()); + } + return result; + } + private JSONObject getSegments(String request) { JSONObject result = new JSONObject(); JSONObject json = new JSONObject(request); @@ -853,30 +897,6 @@ private JSONObject getMatches(String request) { return result; } - private JSONObject machineTranslate(String request) { - JSONObject result = new JSONObject(); - try { - MT translator = new MT(); - if (!translator.hasEngines()) { - result.put(Constants.REASON, "MT engines not enabled"); - return result; - } - JSONObject json = new JSONObject(request); - String project = json.getString("project"); - if (projectStores.containsKey(project)) { - result.put("matches", projectStores.get(project).machineTranslate(json, translator)); - } - } catch (IOException | SQLException | JSONException | SAXException | DataFormatException - | ParserConfigurationException e) { - logger.log(Level.ERROR, e); - result.put(Constants.REASON, e.getMessage()); - } catch (InterruptedException e) { - logger.log(Level.WARNING, "MT interrupted", e); - Thread.currentThread().interrupt(); - } - return result; - } - private JSONObject tmTranslate(String request) { JSONObject result = new JSONObject(); try { @@ -886,7 +906,7 @@ private JSONObject tmTranslate(String request) { result.put("matches", projectStores.get(project).tmTranslate(json)); } } catch (IOException | SQLException | JSONException | SAXException | DataFormatException - | ParserConfigurationException e) { + | ParserConfigurationException | URISyntaxException e) { logger.log(Level.ERROR, e); result.put(Constants.REASON, e.getMessage()); } @@ -903,7 +923,7 @@ private JSONObject assembleMatches(String request) { result.put("matches", projectStores.get(project).getTaggedtMatches(json)); } } catch (IOException | SQLException | JSONException | SAXException | DataFormatException - | ParserConfigurationException e) { + | ParserConfigurationException | URISyntaxException e) { logger.log(Level.ERROR, e); result.put(Constants.REASON, e.getMessage()); } @@ -937,7 +957,8 @@ private JSONObject assembleMatchesAll(String request) { } obj.put(Constants.PROGRESS, Constants.COMPLETED); processes.put(id, obj); - } catch (IOException | SQLException | JSONException | SAXException | ParserConfigurationException e) { + } catch (IOException | SQLException | JSONException | SAXException | ParserConfigurationException + | URISyntaxException e) { logger.log(Level.WARNING, e.getMessage(), e); obj.put(Constants.PROGRESS, Constants.ERROR); obj.put(Constants.REASON, e.getMessage()); @@ -979,7 +1000,8 @@ private JSONObject tmTranslateAll(String request) { projectStores.get(project).tmTranslateAll(memory, penalization, processes, id)); obj.put(Constants.PROGRESS, Constants.COMPLETED); processes.put(id, obj); - } catch (JSONException | IOException | SQLException | SAXException | ParserConfigurationException e) { + } catch (JSONException | IOException | SQLException | SAXException | ParserConfigurationException + | URISyntaxException e) { logger.log(Level.WARNING, e.getMessage(), e); obj.put(Constants.PROGRESS, Constants.ERROR); obj.put(Constants.REASON, e.getMessage()); @@ -1266,7 +1288,8 @@ private JSONObject confirmAllTranslations(String request) { } obj.put(Constants.PROGRESS, Constants.COMPLETED); processes.put(id, obj); - } catch (IOException | SQLException | SAXException | ParserConfigurationException e) { + } catch (IOException | SQLException | SAXException | ParserConfigurationException + | URISyntaxException e) { logger.log(Level.WARNING, e.getMessage(), e); obj.put(Constants.PROGRESS, Constants.ERROR); obj.put(Constants.REASON, e.getMessage()); @@ -1373,46 +1396,30 @@ private JSONObject replaceText(String request) { private JSONObject applyMtAll(String request) { JSONObject result = new JSONObject(); - try { - MT translator = new MT(); - if (!translator.hasEngines()) { - result.put(Constants.REASON, "MT engines not enabled"); - return result; - } - String id = "" + System.currentTimeMillis(); - result.put("process", id); - if (processes == null) { - processes = new Hashtable<>(); - } - JSONObject obj = new JSONObject(); - obj.put(Constants.PROGRESS, Constants.PROCESSING); - processes.put(id, obj); - new Thread(() -> { - try { - JSONObject json = new JSONObject(request); - String project = json.getString("project"); - if (projectStores.containsKey(project)) { - projectStores.get(project).applyMtAll(translator); - } - obj.put(Constants.PROGRESS, Constants.COMPLETED); - processes.put(id, obj); - } catch (InterruptedException e) { - logger.log(Level.WARNING, "MT interrupted", e); - obj.put(Constants.PROGRESS, Constants.ERROR); - obj.put(Constants.REASON, e.getMessage()); - processes.put(id, obj); - Thread.currentThread().interrupt(); - } catch (IOException | SQLException | JSONException | SAXException | ParserConfigurationException e) { - logger.log(Level.WARNING, e.getMessage(), e); - obj.put(Constants.PROGRESS, Constants.ERROR); - obj.put(Constants.REASON, e.getMessage()); - processes.put(id, obj); - } - }).start(); - } catch (IOException e) { - logger.log(Level.ERROR, e); - result.put(Constants.REASON, e.getMessage()); + String id = "" + System.currentTimeMillis(); + result.put("process", id); + if (processes == null) { + processes = new Hashtable<>(); } + JSONObject obj = new JSONObject(); + obj.put(Constants.PROGRESS, Constants.PROCESSING); + processes.put(id, obj); + new Thread(() -> { + try { + JSONObject json = new JSONObject(request); + String project = json.getString("project"); + if (projectStores.containsKey(project)) { + projectStores.get(project).applyMtAll(project); + } + obj.put(Constants.PROGRESS, Constants.COMPLETED); + processes.put(id, obj); + } catch (IOException | SQLException | JSONException | SAXException | ParserConfigurationException e) { + logger.log(Level.WARNING, e.getMessage(), e); + obj.put(Constants.PROGRESS, Constants.ERROR); + obj.put(Constants.REASON, e.getMessage()); + processes.put(id, obj); + } + }).start(); return result; } @@ -1457,7 +1464,8 @@ private JSONObject getSegmentTerms(String request) { if (projectStores.containsKey(project)) { result.put("terms", projectStores.get(project).getSegmentTerms(json)); } - } catch (SQLException | JSONException | IOException | SAXException | ParserConfigurationException e) { + } catch (SQLException | JSONException | IOException | SAXException | ParserConfigurationException + | URISyntaxException e) { logger.log(Level.ERROR, e); result.put(Constants.REASON, e.getMessage()); } diff --git a/src/com/maxprograms/swordfish/RemoteUtils.java b/src/com/maxprograms/swordfish/RemoteUtils.java index 977ede3..a7746b7 100644 --- a/src/com/maxprograms/swordfish/RemoteUtils.java +++ b/src/com/maxprograms/swordfish/RemoteUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -16,6 +16,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -23,6 +25,7 @@ import javax.net.ssl.HttpsURLConnection; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; public class RemoteUtils { @@ -31,7 +34,7 @@ private RemoteUtils() { // empty for security } - public static JSONObject remoteDatabases(String request) { + public static JSONObject remoteDatabases(String request) throws JSONException, URISyntaxException { JSONObject result = new JSONObject(); JSONObject json = new JSONObject(request); try { @@ -45,8 +48,8 @@ public static JSONObject remoteDatabases(String request) { return result; } - public static JSONArray getRemoteMemories(String server, String ticket) throws IOException { - URL serverUrl = new URL(server + "/memories"); + public static JSONArray getRemoteMemories(String server, String ticket) throws IOException, URISyntaxException { + URL serverUrl = new URI(server + "/memories").toURL(); HttpsURLConnection connection = (HttpsURLConnection) serverUrl.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Session", ticket); @@ -69,11 +72,11 @@ public static JSONArray getRemoteMemories(String server, String ticket) throws I throw new IOException(result.getString(Constants.REASON)); } - public static String getTicket(String server, String user, String password) throws IOException { + public static String getTicket(String server, String user, String password) throws IOException, URISyntaxException { if (server.endsWith("/")) { server = server.substring(0, server.length() - 1); } - URL serverUrl = new URL(server + "/remote"); + URL serverUrl = new URI(server + "/remote").toURL(); HttpsURLConnection connection = (HttpsURLConnection) serverUrl.openConnection(); connection.setRequestMethod("GET"); connection.setRequestProperty("Accept", "application/json"); diff --git a/src/com/maxprograms/swordfish/ServicesHandler.java b/src/com/maxprograms/swordfish/ServicesHandler.java index bcb14c2..d103d4e 100644 --- a/src/com/maxprograms/swordfish/ServicesHandler.java +++ b/src/com/maxprograms/swordfish/ServicesHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -40,7 +40,6 @@ import javax.xml.parsers.ParserConfigurationException; import org.json.JSONArray; -import org.json.JSONException; import org.json.JSONObject; import org.xml.sax.SAXException; @@ -49,7 +48,6 @@ import com.maxprograms.languages.Language; import com.maxprograms.languages.LanguageUtils; import com.maxprograms.swordfish.models.Memory; -import com.maxprograms.swordfish.mt.MTUtils; import com.maxprograms.xml.Attribute; import com.maxprograms.xml.Catalog; import com.maxprograms.xml.Document; @@ -111,8 +109,6 @@ private JSONObject processRequest(String url, String request) { result = getSubjects(); } else if ("/services/getProjects".equals(url)) { result = getProjects(); - } else if ("/services/getMTLanguages".equals(url)) { - result = getMTLanguages(); } else if ("/services/getSpellingLanguages".equals(url)) { result = getSpellingLanguages(request); } else if ("/services/remoteDatabases".equals(url)) { @@ -478,17 +474,6 @@ private JSONObject getLanguages() { return result; } - private static JSONObject getMTLanguages() { - JSONObject result = new JSONObject(); - try { - result = MTUtils.getMTLanguages(); - } catch (IOException | JSONException | SAXException | ParserConfigurationException e) { - logger.log(Level.ERROR, "Error getting MT languages", e); - result.put(Constants.REASON, e.getMessage()); - } - return result; - } - private static JSONObject getClients() throws IOException { if (clients != null) { return clients; diff --git a/src/com/maxprograms/swordfish/TmsServer.java b/src/com/maxprograms/swordfish/TmsServer.java index d04755b..7fe17c8 100644 --- a/src/com/maxprograms/swordfish/TmsServer.java +++ b/src/com/maxprograms/swordfish/TmsServer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -23,6 +23,7 @@ import java.lang.System.Logger; import java.lang.System.Logger.Level; import java.net.InetSocketAddress; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.sql.SQLException; @@ -132,7 +133,7 @@ public void handle(HttpExchange t) throws IOException { try (DataOutputStream stream = new DataOutputStream(t.getResponseBody())) { stream.writeBytes(response); } - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e); obj.put(Constants.STATUS, Constants.ERROR); obj.put(Constants.REASON, e.getMessage()); @@ -144,7 +145,7 @@ public void handle(HttpExchange t) throws IOException { } } - private void closeAll() throws IOException, SQLException { + private void closeAll() throws IOException, SQLException, URISyntaxException { MemoriesHandler.closeAll(); ProjectsHandler.closeAll(); GlossariesHandler.closeAll(); diff --git a/src/com/maxprograms/swordfish/am/MatchAssembler.java b/src/com/maxprograms/swordfish/am/MatchAssembler.java index 549f1a8..4698f8b 100644 --- a/src/com/maxprograms/swordfish/am/MatchAssembler.java +++ b/src/com/maxprograms/swordfish/am/MatchAssembler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -14,6 +14,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; +import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.sql.SQLException; import java.util.Collections; @@ -61,7 +62,8 @@ private MatchAssembler() { } public static Match assembleMatch(String textOnly, List tmMatches, ITmEngine glossEngine, String srcLang, - String tgtLang) throws IOException, ParserConfigurationException, SAXException, SQLException { + String tgtLang) + throws IOException, ParserConfigurationException, SAXException, SQLException, URISyntaxException { List result = new Vector<>(); String pureText = clean(textOnly.trim()); @@ -110,15 +112,6 @@ public static Match assembleMatch(String textOnly, List tmMatches, ITmEng + "\" value=\"auto-translation\">" + srcDiff + ""); mrkId++; } - } else if (isEmail(srcDiff) && isEmail(tgtDiff)) { - // if difference is an email address - if (countInstances(pureTarget, tgtDiff) == 1 && countInstances(pureSource, tgtDiff) == 1) { - pureSource = pureSource.replace(tgtDiff, "" + srcDiff + ""); - pureTarget = pureTarget.replace(tgtDiff, "" + srcDiff + ""); - mrkId++; - } } else { // difference may be term List tgtList = glossEngine.searchTranslation(tgtDiff, srcLang, tgtLang, 100, true); @@ -267,10 +260,6 @@ public static boolean isNumeric(String string) { return numeric; } - public static boolean isEmail(String string) { - return string.matches("\\s*\\w+([-+.]\\w)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*\\s*"); - } - private static String clean(String string) { return string.replace("<", "\uE0A0").replace("&", "\uE0A1"); } diff --git a/src/com/maxprograms/swordfish/am/Term.java b/src/com/maxprograms/swordfish/am/Term.java index c35a8d0..ff1334b 100644 --- a/src/com/maxprograms/swordfish/am/Term.java +++ b/src/com/maxprograms/swordfish/am/Term.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/models/Memory.java b/src/com/maxprograms/swordfish/models/Memory.java index 671a98d..b2d215e 100644 --- a/src/com/maxprograms/swordfish/models/Memory.java +++ b/src/com/maxprograms/swordfish/models/Memory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/models/Project.java b/src/com/maxprograms/swordfish/models/Project.java index 8a1f56e..f08637e 100644 --- a/src/com/maxprograms/swordfish/models/Project.java +++ b/src/com/maxprograms/swordfish/models/Project.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/models/SourceFile.java b/src/com/maxprograms/swordfish/models/SourceFile.java index ecde36b..f9185c6 100644 --- a/src/com/maxprograms/swordfish/models/SourceFile.java +++ b/src/com/maxprograms/swordfish/models/SourceFile.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/mt/MT.java b/src/com/maxprograms/swordfish/mt/MT.java deleted file mode 100644 index fb23ce0..0000000 --- a/src/com/maxprograms/swordfish/mt/MT.java +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2023 Maxprograms. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 1.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/org/documents/epl-v10.html - * - * Contributors: - * Maxprograms - initial API and implementation - *******************************************************************************/ - -package com.maxprograms.swordfish.mt; - -import java.io.IOException; -import java.text.MessageFormat; -import java.util.List; - -import org.json.JSONException; -import org.json.JSONObject; - -import com.maxprograms.mt.AzureTranslator; -import com.maxprograms.mt.ChatGptTranslator; -import com.maxprograms.mt.DeepLTranslator; -import com.maxprograms.mt.GoogleTranslator; -import com.maxprograms.mt.MTranslator; -import com.maxprograms.mt.MyMemoryTranslator; -import com.maxprograms.mt.YandexTranslator; -import com.maxprograms.swordfish.TmsServer; - -public class MT { - - private MTranslator translator; - - private String srcLang; - private String tgtLang; - - private boolean googleEnabled; - private String googleKey; - private String googleSrcLang; - private String googleTgtLang; - private boolean neural; - - private boolean azureEnabled; - private String azureKey; - private String azureSrcLang; - private String azureTgtLang; - - private boolean yandexEnabled; - private String yandexKey; - private String yandexSrcLang; - private String yandexTgtLang; - - private boolean deeplEnabled; - private String deeplKey; - private boolean deeplProPlan; - private String deeplSrcLang; - private String deeplTgtLang; - - private boolean chatGptEnabled; - private String chatGptKey; - private String model; - - private boolean myMemoryEnabled; - private String myMemoryKey; - private String myMemorySrcLang; - private String myMemoryTgtLang; - - private ChatGptTranslator chatGpt; - - public MT() throws IOException { - loadDefaults(); - translator = new MTranslator(); - if (azureEnabled) { - AzureTranslator az = new AzureTranslator(azureKey); - az.setSourceLanguage(azureSrcLang); - az.setTargetLanguage(azureTgtLang); - translator.addEngine(az); - } - if (googleEnabled) { - GoogleTranslator gt = new GoogleTranslator(googleKey, neural); - gt.setSourceLanguage(googleSrcLang); - gt.setTargetLanguage(googleTgtLang); - translator.addEngine(gt); - } - if (yandexEnabled) { - YandexTranslator yt = new YandexTranslator(yandexKey); - yt.setSourceLanguage(yandexSrcLang); - yt.setTargetLanguage(yandexTgtLang); - translator.addEngine(yt); - } - if (deeplEnabled) { - DeepLTranslator dl = new DeepLTranslator(deeplKey, deeplProPlan); - dl.setSourceLanguage(deeplSrcLang); - dl.setTargetLanguage(deeplTgtLang); - translator.addEngine(dl); - } - if (chatGptEnabled) { - chatGpt = new ChatGptTranslator(chatGptKey, model); - translator.addEngine(chatGpt); - } - if (myMemoryEnabled) { - MyMemoryTranslator mm = new MyMemoryTranslator(myMemoryKey); - mm.setSourceLanguage(myMemorySrcLang); - mm.setTargetLanguage(myMemoryTgtLang); - translator.addEngine(mm); - } - } - - public boolean hasEngines() { - return translator.hasEngines(); - } - - private void loadDefaults() throws IOException, JSONException { - JSONObject json = TmsServer.getPreferences(); - - JSONObject google = json.getJSONObject("google"); - googleEnabled = google.getBoolean("enabled"); - googleKey = google.getString("apiKey"); - googleSrcLang = google.getString("srcLang"); - googleTgtLang = google.getString("tgtLang"); - neural = google.getBoolean("neural"); - - JSONObject azure = json.getJSONObject("azure"); - azureEnabled = azure.getBoolean("enabled"); - azureKey = azure.getString("apiKey"); - azureSrcLang = azure.getString("srcLang"); - azureTgtLang = azure.getString("tgtLang"); - - JSONObject yandex = json.getJSONObject("yandex"); - yandexEnabled = yandex.getBoolean("enabled"); - yandexKey = yandex.getString("apiKey"); - yandexSrcLang = yandex.getString("srcLang"); - yandexTgtLang = yandex.getString("tgtLang"); - - JSONObject deepl = json.getJSONObject("deepl"); - deeplEnabled = deepl.getBoolean("enabled"); - deeplKey = deepl.getString("apiKey"); - if (deepl.has("proPlan")) { - deeplProPlan = deepl.getBoolean("proPlan"); - } else { - deeplProPlan = true; - } - deeplProPlan = deepl.getBoolean("proPlan"); - deeplSrcLang = deepl.getString("srcLang"); - deeplTgtLang = deepl.getString("tgtLang"); - - if (json.has("chatGpt")) { - JSONObject chatGptOption = json.getJSONObject("chatGpt"); - chatGptEnabled = chatGptOption.getBoolean("enabled"); - chatGptKey = chatGptOption.getString("apiKey"); - switch (chatGptOption.getString("model")) { - case "gpt-3.5-turbo-instruct": - model = ChatGptTranslator.TURBO_INSTRUCT; - break; - default: - MessageFormat mf = new MessageFormat("Invalid ChatGPT model: {0}"); - throw new JSONException(mf.format(new String[] { chatGptOption.getString("model") })); - } - } else { - chatGptEnabled = false; - } - - JSONObject myMemory = json.getJSONObject("myMemory"); - myMemoryEnabled = myMemory.getBoolean("enabled"); - myMemoryKey = myMemory.getString("apiKey"); - myMemorySrcLang = myMemory.getString("srcLang"); - myMemoryTgtLang = myMemory.getString("tgtLang"); - } - - public List translate(String text) throws IOException, InterruptedException { - if (chatGptEnabled) { - chatGpt.setSourceLanguage(srcLang); - chatGpt.setTargetLanguage(tgtLang); - } - return translator.translate(text); - } - - public void setProjectSourceLanguage(String srcLang) { - this.srcLang = srcLang; - } - - public void setProjectTargetLanguage(String tgtLang) { - this.tgtLang = tgtLang; - } -} \ No newline at end of file diff --git a/src/com/maxprograms/swordfish/mt/MTUtils.java b/src/com/maxprograms/swordfish/mt/MTUtils.java deleted file mode 100644 index 575e425..0000000 --- a/src/com/maxprograms/swordfish/mt/MTUtils.java +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2023 Maxprograms. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 1.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/org/documents/epl-v10.html - * - * Contributors: - * Maxprograms - initial API and implementation - *******************************************************************************/ - -package com.maxprograms.swordfish.mt; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.xml.parsers.ParserConfigurationException; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; -import org.xml.sax.SAXException; - -import com.maxprograms.languages.Language; -import com.maxprograms.languages.LanguageUtils; - -public class MTUtils { - - private MTUtils() { - // empty for security - } - - private static String[] azureSrcLanguages = { "rn", "ny", "lg", "af", "sq", "am", "ar", "hy", "as", "az", - "ba", "eu", "bn", "bs", "bg", "my", "ca", "zh-Hans", "zh-Hant", "hr", "cs", "da", "prs", "dv", - "nl", "en", "et", "fo", "fj", "fil", "fi", "fr", "fr-CA", "gl", "ka", "de", "el", "gu", "ht", - "ha", "he", "hi", "mww", "hu", "is", "ig", "id", "ikt", "iu", "iu-Latn", "ga", "it", "ja", "kn", - "kk", "km", "rw", "ky", "tlh-Piqd", "tlh-Latn", "ko", "ku", "lo", "lv", "ln", "lzh", "lt", "mk", - "mg", "ms", "ml", "mt", "mi", "mr", "mn-Cyrl", "mn-Mong", "ne", "kmr", "nb", "or", "pa", "nso", - "fa", "pl", "pt", "pt-PT", "ps", "otq", "ro", "ru", "sm", "sr-Cyrl", "sr-Latn", "sn", "sk", - "sl", "so", "st", "es", "sw", "sv", "ty", "ta", "tt", "te", "th", "bo", "ti", "to", "tn", "tr", - "tk", "ug", "uk", "hsb", "ur", "uz", "vi", "cy", "xh", "yo", "yua", "yue", "zu" }; - - private static String[] azureTgtLanguages = { "rn", "ny", "lg", "af", "sq", "am", "ar", "hy", "as", "az", - "ba", "eu", "bn", "bs", "bg", "my", "ca", "zh-Hans", "zh-Hant", "hr", "cs", "da", "prs", "dv", - "nl", "en", "et", "fo", "fj", "fil", "fi", "fr", "fr-CA", "gl", "ka", "de", "el", "gu", "ht", - "ha", "he", "hi", "mww", "hu", "is", "ig", "id", "ikt", "iu", "iu-Latn", "ga", "it", "ja", "kn", - "kk", "km", "rw", "ky", "tlh-Piqd", "tlh-Latn", "ko", "ku", "lo", "lv", "ln", "lzh", "lt", "mk", - "mg", "ms", "ml", "mt", "mi", "mr", "mn-Cyrl", "mn-Mong", "ne", "kmr", "nb", "or", "pa", "nso", - "fa", "pl", "pt", "pt-PT", "ps", "otq", "ro", "ru", "sm", "sr-Cyrl", "sr-Latn", "sn", "sk", - "sl", "so", "st", "es", "sw", "sv", "ty", "ta", "tt", "te", "th", "bo", "ti", "to", "tn", "tr", - "tk", "ug", "uk", "hsb", "ur", "uz", "vi", "cy", "xh", "yo", "yua", "yue", "zu" }; - - private static String[] gtSrcLanguages = { "af", "ak", "sq", "am", "ar", "hy", "as", "ay", "az", "bm", "eu", - "be", "bn", "bho", "bs", "bg", "my", "ca", "ceb", "ckb", "zh", "zh-CN", "zh-TW", "co", "hr", - "cs", "da", "dv", "doi", "nl", "en", "eo", "et", "ee", "fi", "fr", "gl", "lg", "ka", "de", - "gom", "el", "gn", "gu", "ht", "ha", "haw", "he", "iw", "hi", "hmn", "hu", "is", "ig", "ilo", - "id", "ga", "it", "ja", "jv", "jw", "kn", "kk", "km", "rw", "ky", "ko", "kri", "ku", "lo", "la", - "lv", "ln", "lt", "lus", "lb", "mk", "mai", "mg", "ms", "ml", "mt", "mni-Mtei", "mi", "mr", - "mn", "ne", "no", "ny", "or", "om", "pa", "nso", "fa", "pl", "pt", "ps", "qu", "ro", "ru", "sm", - "sa", "gd", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "es", "su", "sw", "sv", "tl", "tg", - "ta", "tt", "te", "th", "ti", "ts", "tr", "tk", "ug", "uk", "ur", "uz", "vi", "cy", "fy", "xh", - "yi", "yo", "zu" }; - - private static String[] gtTgtLanguages = { "af", "ak", "sq", "am", "ar", "hy", "as", "ay", "az", "bm", "eu", - "be", "bn", "bho", "bs", "bg", "my", "ca", "ceb", "ckb", "zh", "zh-CN", "zh-TW", "co", "hr", - "cs", "da", "dv", "doi", "nl", "en", "eo", "et", "ee", "fi", "fr", "gl", "lg", "ka", "de", - "gom", "el", "gn", "gu", "ht", "ha", "haw", "he", "iw", "hi", "hmn", "hu", "is", "ig", "ilo", - "id", "ga", "it", "ja", "jv", "jw", "kn", "kk", "km", "rw", "ky", "ko", "kri", "ku", "lo", "la", - "lv", "ln", "lt", "lus", "lb", "mk", "mai", "mg", "ms", "ml", "mt", "mni-Mtei", "mi", "mr", - "mn", "ne", "no", "ny", "or", "om", "pa", "nso", "fa", "pl", "pt", "ps", "qu", "ro", "ru", "sm", - "sa", "gd", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "es", "su", "sw", "sv", "tl", "tg", - "ta", "tt", "te", "th", "ti", "ts", "tr", "tk", "ug", "uk", "ur", "uz", "vi", "cy", "fy", "xh", - "yi", "yo", "zu" }; - - private static String[] gtSrcNmtLangs = { "af", "ak", "sq", "am", "ar", "hy", "as", "ay", "az", "bm", "eu", - "be", "bn", "bho", "bs", "bg", "my", "ca", "ceb", "ckb", "zh", "zh-CN", "zh-TW", "co", "hr", - "cs", "da", "dv", "doi", "nl", "en", "eo", "et", "ee", "fi", "fr", "gl", "lg", "ka", "de", - "gom", "el", "gn", "gu", "ht", "ha", "haw", "he", "iw", "hi", "hmn", "hu", "is", "ig", "ilo", - "id", "ga", "it", "ja", "jv", "jw", "kn", "kk", "km", "rw", "ky", "ko", "kri", "ku", "lo", "la", - "lv", "ln", "lt", "lus", "lb", "mk", "mai", "mg", "ms", "ml", "mt", "mni-Mtei", "mi", "mr", - "mn", "ne", "no", "ny", "or", "om", "pa", "nso", "fa", "pl", "pt", "ps", "qu", "ro", "ru", "sm", - "sa", "gd", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "es", "su", "sw", "sv", "tl", "tg", - "ta", "tt", "te", "th", "ti", "ts", "tr", "tk", "ug", "uk", "ur", "uz", "vi", "cy", "fy", "xh", - "yi", "yo", "zu" }; - - private static String[] gtTgtNmtLangs = { "af", "ak", "sq", "am", "ar", "hy", "as", "ay", "az", "bm", "eu", - "be", "bn", "bho", "bs", "bg", "my", "ca", "ceb", "ckb", "zh", "zh-CN", "zh-TW", "co", "hr", - "cs", "da", "dv", "doi", "nl", "en", "eo", "et", "ee", "fi", "fr", "gl", "lg", "ka", "de", - "gom", "el", "gn", "gu", "ht", "ha", "haw", "he", "iw", "hi", "hmn", "hu", "is", "ig", "ilo", - "id", "ga", "it", "ja", "jv", "jw", "kn", "kk", "km", "rw", "ky", "ko", "kri", "ku", "lo", "la", - "lv", "ln", "lt", "lus", "lb", "mk", "mai", "mg", "ms", "ml", "mt", "mni-Mtei", "mi", "mr", - "mn", "ne", "no", "ny", "or", "om", "pa", "nso", "fa", "pl", "pt", "ps", "qu", "ro", "ru", "sm", - "sa", "gd", "sr", "sn", "sd", "si", "sk", "sl", "so", "st", "es", "su", "sw", "sv", "tl", "tg", - "ta", "tt", "te", "th", "ti", "ts", "tr", "tk", "ug", "uk", "ur", "uz", "vi", "cy", "fy", "xh", - "yi", "yo", "zu" }; - - private static String[] yandexSrcLanguages = { "az", "be", "bg", "ca", "cs", "da", "de", "el", "en", "es", "et", - "fi", "fr", "hr", "hu", "hy", "it", "lt", "lv", "mk", "nl", "no", "pl", "pt", "ro", "ru", "sk", - "sl", "sq", "sr", "sv", "tr", "uk" }; - - private static String[] yandexTgtLanguages = { "az", "be", "bg", "ca", "cs", "da", "de", "el", "en", "es", "et", - "fi", "fr", "hr", "hu", "hy", "it", "lt", "lv", "mk", "nl", "no", "pl", "pt", "ro", "ru", "sk", - "sl", "sq", "sr", "sv", "tr", "uk" }; - - private static String[] yandexDirections = { "az-ru", "be-bg", "be-cs", "be-de", "be-en", "be-es", "be-fr", - "be-it", "be-pl", "be-ro", "be-ru", "be-sr", "be-tr", "bg-be", "bg-ru", "bg-uk", "ca-en", - "ca-ru", "cs-be", "cs-en", "cs-ru", "cs-uk", "da-en", "da-ru", "de-be", "de-en", "de-es", - "de-fr", "de-it", "de-ru", "de-tr", "de-uk", "el-en", "el-ru", "en-be", "en-ca", "en-cs", - "en-da", "en-de", "en-el", "en-es", "en-et", "en-fi", "en-fr", "en-hu", "en-it", "en-lt", - "en-lv", "en-mk", "en-nl", "en-no", "en-pt", "en-ru", "en-sk", "en-sl", "en-sq", "en-sv", - "en-tr", "en-uk", "es-be", "es-de", "es-en", "es-ru", "es-uk", "et-en", "et-ru", "fi-en", - "fi-ru", "fr-be", "fr-de", "fr-en", "fr-ru", "fr-uk", "hr-ru", "hu-en", "hu-ru", "hy-ru", - "it-be", "it-de", "it-en", "it-ru", "it-uk", "lt-en", "lt-ru", "lv-en", "lv-ru", "mk-en", - "mk-ru", "nl-en", "nl-ru", "no-en", "no-ru", "pl-be", "pl-ru", "pl-uk", "pt-en", "pt-ru", - "ro-be", "ro-ru", "ro-uk", "ru-az", "ru-be", "ru-bg", "ru-ca", "ru-cs", "ru-da", "ru-de", - "ru-el", "ru-en", "ru-es", "ru-et", "ru-fi", "ru-fr", "ru-hr", "ru-hu", "ru-hy", "ru-it", - "ru-lt", "ru-lv", "ru-mk", "ru-nl", "ru-no", "ru-pl", "ru-pt", "ru-ro", "ru-sk", "ru-sl", - "ru-sq", "ru-sr", "ru-sv", "ru-tr", "ru-uk", "sk-en", "sk-ru", "sl-en", "sl-ru", "sq-en", - "sq-ru", "sr-be", "sr-ru", "sr-uk", "sv-en", "sv-ru", "tr-be", "tr-de", "tr-en", "tr-ru", - "tr-uk", "uk-bg", "uk-cs", "uk-de", "uk-en", "uk-es", "uk-fr", "uk-it", "uk-pl", "uk-ro", - "uk-ru", "uk-sr", "uk-tr" }; - - private static String[] deepLsrcLang = { "bg", "cs", "da", "de", "el", "en", "es", "et", "fi", "fr", "hu", "id", - "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "pt", "ro", "ru", "sk", "sl", "sv", "tr", "uk", - "zh" }; - - private static String[] deepLtgtLang = { "bg", "cs", "da", "de", "el", "en-GB", "en-US", "es", "et", "fi", "fr", - "hu", "id", "it", "ja", "ko", "lt", "lv", "nb", "nl", "pl", "pt-BR", "pt-PT", "ro", "ru", "sk", - "sl", "sv", "tr", "uk", "zh" }; - - public static JSONObject getMTLanguages() throws IOException, JSONException, SAXException, ParserConfigurationException { - JSONObject result = new JSONObject(); - - JSONObject google = new JSONObject(); - google.put("srcLangs", getLanguages(gtSrcLanguages)); - google.put("tgtLangs", getLanguages(gtTgtLanguages)); - google.put("nmtSrcLangs", getLanguages(gtSrcNmtLangs)); - google.put("nmtTgtLangs", getLanguages(gtTgtNmtLangs)); - result.put("google", google); - - JSONObject azure = new JSONObject(); - azure.put("srcLangs", getLanguages(azureSrcLanguages)); - azure.put("tgtLangs", getLanguages(azureTgtLanguages)); - result.put("azure", azure); - - JSONObject yandex = new JSONObject(); - yandex.put("srcLangs", getLanguages(yandexSrcLanguages)); - yandex.put("tgtLangs", getLanguages(yandexTgtLanguages)); - yandex.put("directions", getDirections(yandexDirections)); - result.put("yandex", yandex); - - JSONObject deepL = new JSONObject(); - deepL.put("srcLangs", getLanguages(deepLsrcLang)); - deepL.put("tgtLangs", getLanguages(deepLtgtLang)); - result.put("deepl", deepL); - - return result; - } - - private static JSONArray getLanguages(String[] langs) - throws IOException, SAXException, ParserConfigurationException { - JSONArray array = new JSONArray(); - List languages = new ArrayList<>(); - for (int i = 0; i < langs.length; i++) { - languages.add(LanguageUtils.getLanguage(langs[i])); - } - Collections.sort(languages); - for (int i = 0; i < languages.size(); i++) { - Language lang = languages.get(i); - JSONObject obj = new JSONObject(); - obj.put("code", lang.getCode()); - obj.put("description", lang.getDescription()); - array.put(obj); - } - return array; - } - - private static JSONArray getDirections(String[] dirs) { - JSONArray array = new JSONArray(); - for (int i = 0; i < dirs.length; i++) { - array.put(dirs[i]); - } - return array; - } -} \ No newline at end of file diff --git a/src/com/maxprograms/swordfish/tbx/Tbx2Tmx.java b/src/com/maxprograms/swordfish/tbx/Tbx2Tmx.java index c3d2c31..83da4bb 100644 --- a/src/com/maxprograms/swordfish/tbx/Tbx2Tmx.java +++ b/src/com/maxprograms/swordfish/tbx/Tbx2Tmx.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -10,7 +10,7 @@ * Maxprograms - initial API and implementation *******************************************************************************/ - package com.maxprograms.swordfish.tbx; +package com.maxprograms.swordfish.tbx; import java.io.FileOutputStream; import java.io.IOException; @@ -88,7 +88,7 @@ private void recurse(Element e) throws IOException { if ("langSet".equals(e.getName()) || "langSec".equals(e.getName())) { currentLang = e.getAttributeValue("xml:lang"); } - if ("tig".equals(e.getName()) || "termSec".equals(e.getName())) { + if ("tig".equals(e.getName()) || "termGrp".equals(e.getName()) || "termSec".equals(e.getName())) { currentTUV = new Element("tuv"); currentTUV.setAttribute("xml:lang", currentLang); currentTU.addContent(currentTUV); @@ -147,8 +147,8 @@ private void recurse(Element e) throws IOException { while (it.hasNext()) { recurse(it.next()); } - if ("tig".equals(e.getName()) || "termSec".equals(e.getName())) { - inTUV = false; + if ("tig".equals(e.getName()) || "termGrp".equals(e.getName()) || "termSec".equals(e.getName())) { + inTUV = false; } } } diff --git a/src/com/maxprograms/swordfish/tm/FuzzyIndex.java b/src/com/maxprograms/swordfish/tm/FuzzyIndex.java index c68f6e1..906b642 100755 --- a/src/com/maxprograms/swordfish/tm/FuzzyIndex.java +++ b/src/com/maxprograms/swordfish/tm/FuzzyIndex.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/ITmEngine.java b/src/com/maxprograms/swordfish/tm/ITmEngine.java index a0aa292..539e2b3 100644 --- a/src/com/maxprograms/swordfish/tm/ITmEngine.java +++ b/src/com/maxprograms/swordfish/tm/ITmEngine.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -13,61 +13,64 @@ package com.maxprograms.swordfish.tm; import java.io.IOException; +import java.net.URISyntaxException; import java.sql.SQLException; import java.util.List; import java.util.Set; import javax.xml.parsers.ParserConfigurationException; -import com.maxprograms.xml.Element; - import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.xml.sax.SAXException; +import com.maxprograms.xml.Element; + public interface ITmEngine { public abstract String getType(); - public abstract void close() throws IOException, SQLException; + public abstract void close() throws IOException, SQLException, URISyntaxException; public abstract String getName(); public abstract int storeTMX(String tmxFile, String project, String customer, String subject) - throws SAXException, IOException, ParserConfigurationException, SQLException; + throws SAXException, IOException, ParserConfigurationException, SQLException, URISyntaxException; public abstract void exportMemory(String tmxfile, Set langs, String srcLang) - throws IOException, SAXException, ParserConfigurationException, SQLException; + throws IOException, SAXException, ParserConfigurationException, SQLException, JSONException, + URISyntaxException; - public abstract Set getAllClients() throws SQLException, IOException; + public abstract Set getAllClients() throws SQLException, IOException, URISyntaxException; - public abstract Set getAllLanguages() throws SQLException, IOException; + public abstract Set getAllLanguages() throws SQLException, IOException, URISyntaxException; - public abstract Set getAllProjects() throws SQLException, IOException; + public abstract Set getAllProjects() throws SQLException, IOException, URISyntaxException; - public abstract Set getAllSubjects() throws SQLException, IOException; + public abstract Set getAllSubjects() throws SQLException, IOException, URISyntaxException; public abstract List searchTranslation(String searchStr, String srcLang, String tgtLang, int similarity, - boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException, SQLException; + boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException, SQLException, URISyntaxException; public abstract List searchAll(String searchStr, String srcLang, int similarity, boolean caseSensitive) - throws IOException, SAXException, ParserConfigurationException, SQLException; + throws IOException, SAXException, ParserConfigurationException, SQLException, URISyntaxException; public abstract List concordanceSearch(String searchStr, String srcLang, int limit, boolean isRegexp, - boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException, SQLException; + boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException, SQLException, URISyntaxException; - public abstract void storeTu(Element tu) throws IOException, SQLException; + public abstract void storeTu(Element tu) throws IOException, SQLException, URISyntaxException; - public abstract void commit() throws SQLException, IOException; + public abstract void commit() throws SQLException, IOException, URISyntaxException; public abstract Element getTu(String tuid) - throws IOException, SAXException, ParserConfigurationException, SQLException; + throws IOException, SAXException, ParserConfigurationException, SQLException, URISyntaxException; public abstract void removeTu(String tuid) - throws IOException, SAXException, ParserConfigurationException, SQLException; + throws IOException, SAXException, ParserConfigurationException, SQLException, URISyntaxException; - public abstract void deleteDatabase() throws IOException, SQLException; + public abstract void deleteDatabase() throws IOException, SQLException, URISyntaxException; public abstract JSONArray batchTranslate(JSONObject params) - throws IOException, SAXException, ParserConfigurationException, SQLException; + throws IOException, SAXException, ParserConfigurationException, SQLException, URISyntaxException; } diff --git a/src/com/maxprograms/swordfish/tm/InternalDatabase.java b/src/com/maxprograms/swordfish/tm/InternalDatabase.java index 31b7667..0b87d5f 100755 --- a/src/com/maxprograms/swordfish/tm/InternalDatabase.java +++ b/src/com/maxprograms/swordfish/tm/InternalDatabase.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -202,7 +202,9 @@ public void exportMemory(String tmxfile, Set langs, String srcLang) thro output = new FileOutputStream(tmxfile); writeHeader(srcLang); writeString("\n"); - + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement("SELECT lang, seg FROM tuv WHERE tuid=?")) { try (Statement tus = conn.createStatement()) { try (ResultSet tuKeys = tus.executeQuery("SELECT DISTINCT TUID from TUV")) { @@ -236,7 +238,6 @@ public void exportMemory(String tmxfile, Set langs, String srcLang) thro } } } - writeString("\n"); writeString("\n"); output.close(); @@ -265,6 +266,9 @@ public Set getAllClients() { @Override public Set getAllLanguages() throws SQLException { Set result = Collections.synchronizedSortedSet(new TreeSet<>()); + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (Statement stmt = conn.createStatement()) { try (ResultSet rs = stmt.executeQuery("SELECT DISTINCT lang FROM tuv")) { while (rs.next()) { @@ -305,6 +309,9 @@ public List searchTranslation(String searchStr, String srcLang, String tg Hashtable candidates = new Hashtable<>(); + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement( "SELECT puretext, seg, textlength FROM tuv WHERE lang=? AND tuid=? AND textlength>=? AND textlength<=?")) { stmt.setString(1, srcLang); @@ -386,6 +393,9 @@ public List concordanceSearch(String searchStr, String srcLang, int lim boolean caseSensitive) throws SQLException, SAXException, IOException, ParserConfigurationException { List result = new Vector<>(); Vector candidates = new Vector<>(); + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } if (isRegexp) { try (PreparedStatement stmt = conn .prepareStatement("SELECT tuid, puretext FROM tuv WHERE lang=? AND puretext REGEXP ? LIMIT ?")) { @@ -549,6 +559,9 @@ private void delete(String tuid, String lang) throws SQLException { public void setProject(String project) throws SQLException { String query = "UPDATE databases SET project=? WHERE dbname=?"; + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement(query)) { stmt.setString(1, project); stmt.setString(2, dbname); @@ -558,6 +571,9 @@ public void setProject(String project) throws SQLException { public void setCustomer(String customer) throws SQLException { String query = "UPDATE databases SET client=? WHERE dbname=?"; + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement(query)) { stmt.setString(1, customer); stmt.setString(2, dbname); @@ -567,6 +583,9 @@ public void setCustomer(String customer) throws SQLException { public void setSubject(String subject) throws SQLException { String query = "UPDATE databases SET subject=? WHERE dbname=?"; + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement(query)) { stmt.setString(1, subject); stmt.setString(2, dbname); @@ -581,6 +600,9 @@ public void setCreationDate(String date) { @Override public Element getTu(String tuid) throws SQLException, SAXException, IOException, ParserConfigurationException { Element tu = tuDb.getTu(tuid); + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement("SELECT lang, seg FROM tuv WHERE tuid=?")) { stmt.setString(1, tuid); try (ResultSet rs = stmt.executeQuery()) { @@ -639,7 +661,9 @@ public List searchAll(String searchStr, String srcLang, int similarity, int maxLength = searchStr.length() * (200 - similarity) / 100; Map candidates = new Hashtable<>(); - + if (conn.isClosed()) { + conn = DriverManager.getConnection(url); + } try (PreparedStatement stmt = conn.prepareStatement( "SELECT puretext FROM tuv WHERE lang=? AND tuid=? AND textlength>=? AND textlength<=?")) { stmt.setString(1, srcLang); diff --git a/src/com/maxprograms/swordfish/tm/Match.java b/src/com/maxprograms/swordfish/tm/Match.java index b150f4f..b506dad 100644 --- a/src/com/maxprograms/swordfish/tm/Match.java +++ b/src/com/maxprograms/swordfish/tm/Match.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/MatchQuality.java b/src/com/maxprograms/swordfish/tm/MatchQuality.java index d0646ce..c795303 100755 --- a/src/com/maxprograms/swordfish/tm/MatchQuality.java +++ b/src/com/maxprograms/swordfish/tm/MatchQuality.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/NGrams.java b/src/com/maxprograms/swordfish/tm/NGrams.java index 5f550f9..058775c 100755 --- a/src/com/maxprograms/swordfish/tm/NGrams.java +++ b/src/com/maxprograms/swordfish/tm/NGrams.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/RemoteDatabase.java b/src/com/maxprograms/swordfish/tm/RemoteDatabase.java index d55cafa..12f6368 100644 --- a/src/com/maxprograms/swordfish/tm/RemoteDatabase.java +++ b/src/com/maxprograms/swordfish/tm/RemoteDatabase.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -21,6 +21,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -39,16 +41,17 @@ import javax.net.ssl.HttpsURLConnection; import javax.xml.parsers.ParserConfigurationException; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.xml.sax.SAXException; + import com.maxprograms.swordfish.Constants; import com.maxprograms.swordfish.RemoteUtils; import com.maxprograms.swordfish.TmsServer; import com.maxprograms.xml.Element; import com.maxprograms.xml.SAXBuilder; -import org.json.JSONArray; -import org.json.JSONObject; -import org.xml.sax.SAXException; - public class RemoteDatabase implements ITmEngine { private String server; @@ -56,7 +59,7 @@ public class RemoteDatabase implements ITmEngine { private String ticket; private SAXBuilder builder; - public RemoteDatabase(String server, String user, String password, String dbname) throws IOException { + public RemoteDatabase(String server, String user, String password, String dbname) throws IOException, URISyntaxException { if (server.endsWith("/")) { server = server.substring(0, server.length() - 1); } @@ -67,9 +70,9 @@ public RemoteDatabase(String server, String user, String password, String dbname open(); } - private JSONObject postMessage(String servlet, JSONObject json) throws IOException { + private JSONObject postMessage(String servlet, JSONObject json) throws IOException, URISyntaxException { byte[] bytes = json.toString(2).getBytes(StandardCharsets.UTF_8); - URL serverUrl = new URL(server + servlet); + URL serverUrl = new URI(server + servlet).toURL(); HttpsURLConnection connection = (HttpsURLConnection) serverUrl.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Session", ticket); @@ -111,7 +114,7 @@ public String getType() { return RemoteDatabase.class.getName(); } - private void open() throws IOException { + private void open() throws IOException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "openMemory"); params.put("memory", dbname); @@ -119,7 +122,7 @@ private void open() throws IOException { } @Override - public void close() throws IOException { + public void close() throws IOException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "closeMemory"); params.put("memory", dbname); @@ -132,7 +135,7 @@ public String getName() { } @Override - public int storeTMX(String tmxFile, String project, String customer, String subject) throws IOException { + public int storeTMX(String tmxFile, String project, String customer, String subject) throws IOException, URISyntaxException { File zipFile = zip(tmxFile); String uploaded = upload(zipFile); JSONObject params = new JSONObject(); @@ -171,8 +174,8 @@ protected static void writeEntry(ZipOutputStream zip, File file) throws IOExcept } } - private String upload(File zipFile) throws IOException { - URL serverUrl = new URL(server + "/upload"); + private String upload(File zipFile) throws IOException, URISyntaxException { + URL serverUrl = new URI(server + "/upload").toURL(); HttpsURLConnection connection = (HttpsURLConnection) serverUrl.openConnection(); connection.setRequestProperty("Session", ticket); connection.setRequestProperty("Accept", "application/json"); @@ -210,7 +213,7 @@ private String upload(File zipFile) throws IOException { @Override public void exportMemory(String tmxfile, Set langs, String srcLang) - throws IOException, SAXException, ParserConfigurationException { + throws IOException, SAXException, ParserConfigurationException, JSONException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "exportMemory"); params.put("memory", dbname); @@ -227,9 +230,9 @@ public void exportMemory(String tmxfile, Set langs, String srcLang) download(tmxfile, json.getString("file")); } - private void download(String tmxFile, String file) throws IOException { - URL serverUrl = new URL(server + "/download?session=" + URLEncoder.encode(ticket, StandardCharsets.UTF_8) - + "&file=" + URLEncoder.encode(file, StandardCharsets.UTF_8)); + private void download(String tmxFile, String file) throws IOException, URISyntaxException { + URL serverUrl = new URI(server + "/download?session=" + URLEncoder.encode(ticket, StandardCharsets.UTF_8) + + "&file=" + URLEncoder.encode(file, StandardCharsets.UTF_8)).toURL(); HttpsURLConnection connection = (HttpsURLConnection) serverUrl.openConnection(); connection.setRequestMethod("GET"); connection.connect(); @@ -245,7 +248,7 @@ private void download(String tmxFile, String file) throws IOException { } @Override - public Set getAllClients() throws IOException { + public Set getAllClients() throws IOException, URISyntaxException { Set result = new TreeSet<>(); JSONObject params = new JSONObject(); params.put("command", "memoryClients"); @@ -259,7 +262,7 @@ public Set getAllClients() throws IOException { } @Override - public Set getAllLanguages() throws IOException { + public Set getAllLanguages() throws IOException, URISyntaxException { Set result = new TreeSet<>(); JSONObject params = new JSONObject(); params.put("command", "memoryLanguages"); @@ -273,7 +276,7 @@ public Set getAllLanguages() throws IOException { } @Override - public Set getAllProjects() throws IOException { + public Set getAllProjects() throws IOException, URISyntaxException { Set result = new TreeSet<>(); JSONObject params = new JSONObject(); params.put("command", "memoryProjects"); @@ -287,7 +290,7 @@ public Set getAllProjects() throws IOException { } @Override - public Set getAllSubjects() throws IOException { + public Set getAllSubjects() throws IOException, URISyntaxException { Set result = new TreeSet<>(); JSONObject params = new JSONObject(); params.put("command", "memorySubjects"); @@ -302,7 +305,7 @@ public Set getAllSubjects() throws IOException { @Override public List searchTranslation(String searchStr, String srcLang, String tgtLang, int similarity, - boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException { + boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "searchTranslation"); params.put("memory", dbname); @@ -322,7 +325,7 @@ public List searchTranslation(String searchStr, String srcLang, String tg @Override public List searchAll(String searchStr, String srcLang, int similarity, boolean caseSensitive) - throws IOException, SAXException, ParserConfigurationException { + throws IOException, SAXException, ParserConfigurationException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "searchAll"); params.put("memory", dbname); @@ -341,7 +344,7 @@ public List searchAll(String searchStr, String srcLang, int similarity, @Override public List concordanceSearch(String searchStr, String srcLang, int limit, boolean isRegexp, - boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException { + boolean caseSensitive) throws IOException, SAXException, ParserConfigurationException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "concordanceSearch"); params.put("memory", dbname); @@ -360,7 +363,7 @@ public List concordanceSearch(String searchStr, String srcLang, int lim } @Override - public void storeTu(Element tu) throws IOException { + public void storeTu(Element tu) throws IOException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "storeTu"); params.put("memory", dbname); @@ -369,7 +372,7 @@ public void storeTu(Element tu) throws IOException { } @Override - public void commit() throws IOException { + public void commit() throws IOException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "commit"); params.put("memory", dbname); @@ -377,7 +380,7 @@ public void commit() throws IOException { } @Override - public Element getTu(String tuid) throws IOException, SAXException, ParserConfigurationException { + public Element getTu(String tuid) throws IOException, SAXException, ParserConfigurationException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "getTu"); params.put("memory", dbname); @@ -387,7 +390,7 @@ public Element getTu(String tuid) throws IOException, SAXException, ParserConfig } @Override - public void removeTu(String tuid) throws IOException, SAXException, ParserConfigurationException { + public void removeTu(String tuid) throws IOException, SAXException, ParserConfigurationException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "removeTu"); params.put("memory", dbname); @@ -396,7 +399,7 @@ public void removeTu(String tuid) throws IOException, SAXException, ParserConfig } @Override - public void deleteDatabase() throws IOException { + public void deleteDatabase() throws IOException, URISyntaxException { JSONObject params = new JSONObject(); params.put("command", "removeMemory"); params.put("memory", dbname); @@ -426,7 +429,7 @@ private Element toElement(String string) throws SAXException, IOException, Parse } @Override - public JSONArray batchTranslate(JSONObject params) throws IOException { + public JSONArray batchTranslate(JSONObject params) throws IOException, URISyntaxException { params.put("command", "batchTranslate"); params.put("memory", dbname); JSONObject json = postMessage("/memories", params); diff --git a/src/com/maxprograms/swordfish/tm/TMUtils.java b/src/com/maxprograms/swordfish/tm/TMUtils.java index 25de2e4..6e4cb8f 100644 --- a/src/com/maxprograms/swordfish/tm/TMUtils.java +++ b/src/com/maxprograms/swordfish/tm/TMUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/TU.java b/src/com/maxprograms/swordfish/tm/TU.java index 42dc2c1..acafc12 100755 --- a/src/com/maxprograms/swordfish/tm/TU.java +++ b/src/com/maxprograms/swordfish/tm/TU.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/TuData.java b/src/com/maxprograms/swordfish/tm/TuData.java index ba9f215..751eb11 100755 --- a/src/com/maxprograms/swordfish/tm/TuData.java +++ b/src/com/maxprograms/swordfish/tm/TuData.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/TuDatabase.java b/src/com/maxprograms/swordfish/tm/TuDatabase.java index 729d183..fa3f4fe 100755 --- a/src/com/maxprograms/swordfish/tm/TuDatabase.java +++ b/src/com/maxprograms/swordfish/tm/TuDatabase.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tm/Tuv.java b/src/com/maxprograms/swordfish/tm/Tuv.java index 9f7e622..473423e 100755 --- a/src/com/maxprograms/swordfish/tm/Tuv.java +++ b/src/com/maxprograms/swordfish/tm/Tuv.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tmx/TMXContentHandler.java b/src/com/maxprograms/swordfish/tmx/TMXContentHandler.java index 5913585..940bf7c 100644 --- a/src/com/maxprograms/swordfish/tmx/TMXContentHandler.java +++ b/src/com/maxprograms/swordfish/tmx/TMXContentHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -15,6 +15,7 @@ import java.io.IOException; import java.lang.System.Logger; import java.lang.System.Logger.Level; +import java.net.URISyntaxException; import java.sql.SQLException; import java.util.Deque; import java.util.concurrent.ConcurrentLinkedDeque; @@ -64,7 +65,7 @@ public void endElement(String uri, String localName, String qName) throws SAXExc if (count % 500 == 0) { db.commit(); } - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { // ignore logger.log(Level.WARNING, "Error storing " + current, e); } diff --git a/src/com/maxprograms/swordfish/tmx/TMXReader.java b/src/com/maxprograms/swordfish/tmx/TMXReader.java index 10392b3..b157d9d 100644 --- a/src/com/maxprograms/swordfish/tmx/TMXReader.java +++ b/src/com/maxprograms/swordfish/tmx/TMXReader.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/tmx/TMXResolver.java b/src/com/maxprograms/swordfish/tmx/TMXResolver.java index ec84781..d903098 100644 --- a/src/com/maxprograms/swordfish/tmx/TMXResolver.java +++ b/src/com/maxprograms/swordfish/tmx/TMXResolver.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/xliff/Compression.java b/src/com/maxprograms/swordfish/xliff/Compression.java index ae373b0..11fb19d 100644 --- a/src/com/maxprograms/swordfish/xliff/Compression.java +++ b/src/com/maxprograms/swordfish/xliff/Compression.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/xliff/DifferenceTagger.java b/src/com/maxprograms/swordfish/xliff/DifferenceTagger.java index ff60bf2..bdf7391 100755 --- a/src/com/maxprograms/swordfish/xliff/DifferenceTagger.java +++ b/src/com/maxprograms/swordfish/xliff/DifferenceTagger.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/xliff/Skeletons.java b/src/com/maxprograms/swordfish/xliff/Skeletons.java index 7595178..e4e7dae 100644 --- a/src/com/maxprograms/swordfish/xliff/Skeletons.java +++ b/src/com/maxprograms/swordfish/xliff/Skeletons.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/xliff/Split.java b/src/com/maxprograms/swordfish/xliff/Split.java index bc44b88..7845c54 100644 --- a/src/com/maxprograms/swordfish/xliff/Split.java +++ b/src/com/maxprograms/swordfish/xliff/Split.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 diff --git a/src/com/maxprograms/swordfish/xliff/XliffStore.java b/src/com/maxprograms/swordfish/xliff/XliffStore.java index f76d338..7db735a 100644 --- a/src/com/maxprograms/swordfish/xliff/XliffStore.java +++ b/src/com/maxprograms/swordfish/xliff/XliffStore.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -45,6 +45,7 @@ import javax.xml.parsers.ParserConfigurationException; import org.json.JSONArray; +import org.json.JSONException; import org.json.JSONObject; import org.jsoup.Jsoup; import org.xml.sax.SAXException; @@ -61,7 +62,6 @@ import com.maxprograms.swordfish.TmsServer; import com.maxprograms.swordfish.am.MatchAssembler; import com.maxprograms.swordfish.am.Term; -import com.maxprograms.swordfish.mt.MT; import com.maxprograms.swordfish.tm.ITmEngine; import com.maxprograms.swordfish.tm.Match; import com.maxprograms.swordfish.tm.MatchQuality; @@ -873,7 +873,10 @@ private static void getPreferences() throws IOException { JSONObject json = TmsServer.getPreferences(); acceptUnconfirmed = json.getBoolean("acceptUnconfirmed"); caseSensitiveTermSearches = json.getBoolean("caseSensitiveSearches"); - caseSensitiveMatches = json.has("caseSensitiveMatches") ? json.getBoolean("caseSensitiveMatches") : true; + caseSensitiveMatches = true; + if (json.has("caseSensitiveMatches")) { + caseSensitiveMatches = json.getBoolean("caseSensitiveMatches"); + } fuzzyTermSearches = json.getBoolean("fuzzyTermSearches"); catalog = json.getString("catalog"); } @@ -964,7 +967,7 @@ public synchronized JSONObject saveSegment(JSONObject json) engine.storeTu(XliffUtils.toTu(key.toString(), source, target, tags, srcLang, tgtLang)); engine.commit(); MemoriesHandler.close(memory); - } catch (IOException | SQLException e) { + } catch (IOException | SQLException | URISyntaxException e) { logger.log(Level.ERROR, e); } }).start(); @@ -2231,42 +2234,8 @@ private Element getUnitTerms(String file, String unit) throws SQLException, IOEx return glossary.getChildren().isEmpty() ? null : glossary; } - public JSONArray machineTranslate(JSONObject json, MT translator) throws SQLException, IOException, - InterruptedException, SAXException, ParserConfigurationException, DataFormatException { - String file = json.getString("file"); - String unit = json.getString("unit"); - String segment = json.getString("segment"); - - String sourceText = ""; - getSource.setString(1, file); - getSource.setString(2, unit); - getSource.setString(3, segment); - try (ResultSet rs = getSource.executeQuery()) { - while (rs.next()) { - sourceText = TMUtils.getString(rs.getNCharacterStream(2)); - } - } - Element source = XliffUtils.buildElement("" + XMLUtils.cleanText(sourceText) + ""); - JSONObject tagsData = new JSONObject(); - translator.setProjectSourceLanguage(srcLang); - translator.setProjectTargetLanguage(tgtLang); - List translations = translator.translate(sourceText); - Iterator it = translations.iterator(); - while (it.hasNext()) { - JSONObject translation = it.next(); - String origin = translation.getString("key"); - source.setAttribute("xml:lang", translation.getString("srcLang")); - String targetText = "" + XMLUtils.cleanText(translation.getString("target")) + ""; - Element target = XliffUtils.buildElement(targetText); - target.setAttribute("xml:lang", translation.getString("tgtLang")); - insertMatch(file, unit, segment, origin, Constants.MT, 0, source, target, tagsData); - } - conn.commit(); - return getTaggedtMatches(json); - } - public void assembleMatches(JSONObject json) - throws SAXException, IOException, ParserConfigurationException, SQLException { + throws SAXException, IOException, ParserConfigurationException, SQLException, URISyntaxException { String file = json.getString("file"); String unit = json.getString("unit"); String segment = json.getString("segment"); @@ -2305,7 +2274,7 @@ public void assembleMatches(JSONObject json) } public void assembleMatchesAll(JSONObject json) - throws IOException, SQLException, SAXException, ParserConfigurationException { + throws IOException, SQLException, SAXException, ParserConfigurationException, URISyntaxException { String memory = json.getString("memory"); MemoriesHandler.open(memory); @@ -2350,7 +2319,8 @@ public void assembleMatchesAll(JSONObject json) } public JSONArray tmTranslate(JSONObject json) - throws SAXException, IOException, ParserConfigurationException, SQLException, DataFormatException { + throws SAXException, IOException, ParserConfigurationException, SQLException, DataFormatException, + URISyntaxException { String file = json.getString("file"); String unit = json.getString("unit"); String segment = json.getString("segment"); @@ -2390,7 +2360,7 @@ public JSONArray tmTranslate(JSONObject json) } public int tmTranslateAll(String memory, int penalization, Map processes, String processId) - throws IOException, SQLException, SAXException, ParserConfigurationException { + throws IOException, SQLException, SAXException, ParserConfigurationException, URISyntaxException { String memoryName = MemoriesHandler.getName(memory); MemoriesHandler.open(memory); ITmEngine engine = MemoriesHandler.getEngine(memory); @@ -2420,7 +2390,7 @@ public int tmTranslateAll(String memory, int penalization, Map'' AND translate='Y' "); conn.commit(); @@ -3361,32 +3331,47 @@ private Element replaceText(Element target, String searchText, String replaceTex return target; } - public void applyMtAll(MT translator) - throws SQLException, SAXException, IOException, ParserConfigurationException, InterruptedException { - String sql = "SELECT file, unitId, segId, sourceText FROM segments WHERE type='S' AND (state='initial' OR targetText='') AND translate='Y' "; - try (ResultSet rs = stmt.executeQuery(sql)) { - while (rs.next()) { - String file = rs.getString(1); - String unit = rs.getString(2); - String segment = rs.getString(3); - String sourceText = TMUtils.getString(rs.getNCharacterStream(4)); + public void applyMtAll(String projectId) + throws SQLException, SAXException, IOException, ParserConfigurationException { + File projectFolder = new File(TmsServer.getProjectsFolder(), projectId); + try (FileOutputStream out = new FileOutputStream(new File(projectFolder, "applymt.xlf"))) { + String oldFile = ""; + String oldUnit = ""; + out.write(("\n") + .getBytes(StandardCharsets.UTF_8)); + String sql = "SELECT file, unitId, segId, source FROM segments WHERE type='S' AND (state='initial' OR targetText='') AND translate='Y' "; + try (ResultSet rs = stmt.executeQuery(sql)) { + while (rs.next()) { + String file = rs.getString(1); + String unit = rs.getString(2); + String segment = rs.getString(3); + String sourceText = TMUtils.getString(rs.getNCharacterStream(4)); - Element matchSource = XliffUtils - .buildElement("" + XMLUtils.cleanText(sourceText) + ""); + Element matchSource = XliffUtils.buildElement(sourceText); - JSONObject tagsData = new JSONObject(); - List translations = translator.translate(sourceText); - Iterator it = translations.iterator(); - while (it.hasNext()) { - JSONObject translation = it.next(); - String origin = translation.getString("key"); - matchSource.setAttribute("xml:lang", translation.getString("srcLang")); - String targetText = "" + XMLUtils.cleanText(translation.getString("target")) + ""; - Element matchTarget = XliffUtils.buildElement(targetText); - matchTarget.setAttribute("xml:lang", translation.getString("tgtLang")); - insertMatch(file, unit, segment, origin, Constants.MT, 0, matchSource, matchTarget, tagsData); + if (!oldFile.equals(file)) { + if (!oldFile.isEmpty()) { + out.write("\n".getBytes(StandardCharsets.UTF_8)); + } + oldFile = file; + out.write(("\n").getBytes(StandardCharsets.UTF_8)); + } + if (!oldUnit.equals(unit)) { + if (!oldUnit.isEmpty()) { + out.write("\n".getBytes(StandardCharsets.UTF_8)); + } + oldUnit = unit; + out.write(("\n").getBytes(StandardCharsets.UTF_8)); + } + Element seg = new Element("segment"); + seg.setAttribute("id", segment); + seg.addContent(matchSource); + out.write(seg.toString().getBytes(StandardCharsets.UTF_8)); + out.write("\n".getBytes(StandardCharsets.UTF_8)); } - conn.commit(); + out.write("\n".getBytes(StandardCharsets.UTF_8)); + out.write("\n".getBytes(StandardCharsets.UTF_8)); + out.write(("").getBytes(StandardCharsets.UTF_8)); } } } @@ -3451,7 +3436,7 @@ public JSONArray getTerms(JSONObject json) throws SQLException, IOException { } public JSONArray getSegmentTerms(JSONObject json) - throws SQLException, IOException, SAXException, ParserConfigurationException { + throws SQLException, IOException, SAXException, ParserConfigurationException, URISyntaxException { JSONArray result = new JSONArray(); getPreferences(); @@ -3527,7 +3512,7 @@ private JSONArray sortTerms(JSONArray array) { } public int getProjectTerms(String glossary) - throws IOException, SQLException, SAXException, ParserConfigurationException { + throws IOException, SQLException, SAXException, ParserConfigurationException, URISyntaxException { getPreferences(); Language sourceLanguage = LanguageUtils.getLanguage(srcLang); int similarity = fuzzyTermSearches ? 70 : 100; @@ -4423,4 +4408,38 @@ private void indexSegments() throws SQLException { } conn.commit(); } + + public JSONObject getSegmentSource(JSONObject json) + throws JSONException, SQLException, SAXException, IOException, ParserConfigurationException { + getSource.setString(1, json.getString("file")); + getSource.setString(2, json.getString("unit")); + getSource.setString(3, json.getString("segment")); + String src = ""; + try (ResultSet rs = getSource.executeQuery()) { + while (rs.next()) { + src = TMUtils.getString(rs.getNCharacterStream(1)); + } + } + Element source = XliffUtils.buildElement(src); + String plainText = XliffUtils.pureText(source); + JSONObject result = new JSONObject(); + result.put("source", source.toString()); + result.put("plainText", "" + plainText + ""); + return result; + } + + public void setMTMatches(JSONObject json) + throws SQLException, IOException, JSONException, SAXException, ParserConfigurationException { + String file = json.getString("file"); + String unit = json.getString("unit"); + String segment = json.getString("segment"); + JSONArray translations = json.getJSONArray("translations"); + for (int i = 0; i < translations.length(); i++) { + JSONObject translation = translations.getJSONObject(i); + Element source = XliffUtils.buildElement(translation.getString("source")); + Element target = XliffUtils.buildElement(translation.getString("target")); + String origin = translation.getString("origin"); + insertMatch(file, unit, segment, origin, Constants.MT, 0, source, target, new JSONObject()); + } + } } \ No newline at end of file diff --git a/src/com/maxprograms/swordfish/xliff/XliffUtils.java b/src/com/maxprograms/swordfish/xliff/XliffUtils.java index 55ee36f..d0652b1 100644 --- a/src/com/maxprograms/swordfish/xliff/XliffUtils.java +++ b/src/com/maxprograms/swordfish/xliff/XliffUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Maxprograms. + * Copyright (c) 2007 - 2024 Maxprograms. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 1.0 @@ -51,7 +51,6 @@ public class XliffUtils { private static final String NOTSWORDFISH = "Selected file is not a Swordfish project"; private static int maxTag = 0; private static JSONObject tags; - private static SAXBuilder builder; private XliffUtils() { // empty for security @@ -184,7 +183,7 @@ public static String cleanQuote(String string) { } public static String unquote(String string) { - return string.replaceAll("\"", "\u200B\u2033"); + return string.replace("\"", "\u200B\u2033"); } public static List harvestTags(String source) { @@ -330,9 +329,7 @@ private static List toTmx(Element element, Map tags) { public static JSONObject getProjectDetails(File xliffFile) throws IOException { try { JSONObject result = new JSONObject(); - if (builder == null) { - builder = new SAXBuilder(); - } + SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(xliffFile); Element xliff = doc.getRootElement(); if (!"xliff".equals(xliff.getName())) { @@ -469,9 +466,7 @@ public static String pureText(Element e) { } public static Element buildElement(String string) throws SAXException, IOException, ParserConfigurationException { - if (builder == null) { - builder = new SAXBuilder(); - } + SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(new ByteArrayInputStream(string.getBytes(StandardCharsets.UTF_8))); return doc.getRootElement(); } diff --git a/swordfish.pdf b/swordfish.pdf index fffdf45387ad5a4a3026d095c7390cebfdd90ec3..767dd8d7086047a0a6ce46bab938d8067b503696 100644 GIT binary patch delta 514014 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%0DtC}yG)3%d#02%-;p;^=G3)ZV*td9iBO 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