Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

1174 lines (976 sloc) 35.907 kb
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace bibo = "http://purl.org/ontology/bibo/"
namespace cs = "http://purl.org/net/xbiblio/csl"
namespace dc = "http://purl.org/dc/elements/1.1/"
namespace sch = "http://www.ascc.net/xml/schematron"
namespace xhtml = "http://www.w3.org/1999/xhtml"
# CSL schema metadata
dc:title [ "Citation Style Language" ]
dc:creator [ "Bruce D'Arcus" ]
dc:creator [ "Simon Kornblith" ]
bibo:editor [ "Frank Bennett" ]
bibo:editor [ "Rintze Zelle" ]
dc:rights [
"Copyright 2007-2012 by Frank Bennett, Bruce D'Arcus, Simon Kornblith, and Rintze Zelle. Permission to freely use, copy and distribute."
]
dc:description [
"RELAX NG compact schema for the Citation Style Language (CSL)."
]
# Embedded Schematron rules to detect calls to nonexistent macros
sch:ns [ uri = "http://purl.org/net/xbiblio/csl" prefix = "cs" ]
sch:pattern [
name = "Non-existing macros"
sch:rule [
context = "//cs:text[@macro]"
sch:assert [
test = "@macro = /cs:style/cs:macro/@name"
"This macro call has no corresponding macro."
]
]
sch:rule [
context = "//cs:key[@macro]"
sch:assert [
test = "@macro = /cs:style/cs:macro/@name"
"This macro call has no corresponding macro."
]
]
]
## Subparts of the CSL schema
include "csl-terms.rnc"
include "csl-types.rnc"
include "csl-variables.rnc"
include "csl-categories.rnc"
[
a:documentation [
xhtml:h2 [ "cs:style and cs:locale - Root Elements" ]
]
]
div {
start =
independent-style.style | dependent-style.style | locale-file.locale
independent-style.style =
element cs:style {
## Select whether citations appear in-text or as notes.
attribute class { "in-text" | "note" },
style.default-locale,
style.options,
version,
independent-style.style.info,
(style.locale*
& style.macro*
& style.citation
& style.bibliography?)
}
dependent-style.style =
element cs:style {
style.default-locale,
version,
dependent-style.style.info,
dependent-style.style.legacy-attributes
}
locale-file.locale =
element cs:locale {
## Specify the locale of the locale file.
attribute xml:lang { xsd:language },
version,
locale-file.locale.info?,
(locale.style-options & locale.date+ & locale.terms)
}
style.default-locale =
## Set a default style locale.
attribute default-locale { xsd:language }?
version =
## Indicate CSL version compatibility ("1.0" for CSL 1.0).
[ a:defaultValue = "1.0" ] attribute version { "1.0" }
## Obsolete for dependent styles. Will be disallowed with CSL 1.1.
dependent-style.style.legacy-attributes =
attribute class { "in-text" | "note" }?,
style.options
}
[
a:documentation [
xhtml:h2 [ "cs:info - Style and Locale File Metadata" ]
]
]
div {
## Metadata for independent styles.
independent-style.style.info =
element cs:info {
info.author*
& info.category*
& info.contributor*
& info.id
& info.issn*
& info.eissn?
& info.issnl?
& independent-style.info.link*
& info.published?
& info.rights?
& info.summary?
& info.title
& info.title-short?
& info.updated
}
## Metadata for dependent styles.
dependent-style.style.info =
element cs:info {
info.author*
& info.category*
& info.contributor*
& info.id
& info.issn*
& info.eissn?
& info.issnl?
& dependent-style.info.link+
& info.published?
& info.rights?
& info.summary?
& info.title
& info.title-short?
& info.updated
}
## Metadata for locale files.
locale-file.locale.info =
element cs:info { info.translator* & info.rights? & info.updated? }
info.author = element cs:author { personal-details }
info.contributor = element cs:contributor { personal-details }
info.translator = element cs:translator { personal-details }
personal-details =
element cs:name { text }
& element cs:email { text }?
& element cs:uri { xsd:anyURI }?
info.category =
## Specify the citation format of the style (using the "citation-format"
## attribute) or the fields and disciplines for which the style is
## relevant (using the "field" attribute).
element cs:category {
attribute citation-format { category.citation-format }
| attribute field { category.field }
}
info.id =
## Specify the URI to establish the identity of the style. The URI
## should be stable, unique and dereferenceable URI.
element cs:id { xsd:anyURI }
info.issn =
## Specify the journal's ISSN(s) for journal-specific styles. An ISSN
## must consist of four digits, a hyphen, three digits, and a check
## digit (a numeral digit or roman X), e.g. "1234-1231".
element cs:issn { issn }
info.eissn =
## Specify the journal's eISSN for journal-specific styles.
element cs:eissn { issn }
info.issnl =
## Specify the journal's ISSN-L for journal-specific styles.
element cs:issnl { issn }
issn = xsd:string { pattern = "\d{4}\-\d{3}(\d|x|X)" }
independent-style.info.link =
element cs:link {
attribute href { xsd:anyURI },
## Specify how the URL relates to the style.
attribute rel {
## The URI of the CSL style itself.
"self"
|
## URI of the style from which the current style is derived.
"template"
|
## URI of style documentation.
"documentation"
|
## Obsolete for independent styles. Will be disallowed with
## CSL 1.1.
"independent-parent"
},
info-text
}
dependent-style.info.link =
element cs:link {
attribute href { xsd:anyURI },
## Specify how the URL relates to the style.
attribute rel {
## The URI of the CSL style itself.
"self"
|
## URI of the CSL style whose content should be used for
## processing. Required for dependent styles.
"independent-parent"
|
## URI of style documentation.
"documentation"
|
## Obsolete for dependent styles. Will be disallowed with CSL
## 1.1.
"template"
},
info-text
}
info.published =
## Specify when the style was initially created or made available.
element cs:published { xsd:dateTime }
info.rights =
element cs:rights {
attribute license { xsd:anyURI }?,
info-text
}
info.summary = element cs:summary { info-text }
info.title = element cs:title { info-text }
info.title-short =
## Specify an abbreviated style title (e.g., "APA")
element cs:title-short { info-text }
info.updated =
## Specify when the style was last updated (e.g.,
## "2007-10-26T21:32:52+02:00")
element cs:updated { xsd:dateTime }
info-text =
attribute xml:lang { xsd:language }?,
text
}
[ a:documentation [ xhtml:h2 [ "cs:locale in Independent Styles" ] ] ]
div {
style.locale =
## Use to (re)define localized terms, dates and options.
element cs:locale {
## Specify the affected locale(s). If "xml:lang" is not set, the
## "cs:locale" element affects all locales.
attribute xml:lang { xsd:language }?,
(locale.style-options? & locale.date* & locale.terms?)
}
}
[
a:documentation [
xhtml:h2 [ "cs:locale Contents - Localization Data" ]
]
]
div {
## Localized global options are specified as attributes in the
## cs:style-options element. If future versions of CSL include localized
## options that are citation or bibliography specific, the elements
## cs:citation-options and cs:bibliography-options can be added.
locale.style-options =
element cs:style-options {
## Limit the "ordinal" form to the first day of the month.
[ a:defaultValue = "false" ]
attribute limit-day-ordinals-to-day-1 { xsd:boolean }?,
## Specify whether punctuation (a period or comma) is placed within
## or outside (default) the closing quotation mark.
[ a:defaultValue = "false" ]
attribute punctuation-in-quote { xsd:boolean }?
}
locale.date =
element cs:date {
date.form,
delimiter,
font-formatting,
text-case,
locale.date.date-part+
}
date.form =
## Select the localized date format ("text" or "numeric").
attribute form {
## Text date form (e.g., "December 15, 2005").
"text"
|
## Numeric date form (e.g., "2005-12-15").
"numeric"
}
locale.date.date-part =
element cs:date-part {
affixes, font-formatting, text-case, (day | month | year)
}
locale.terms = element cs:terms { terms.term+ }
## The "cs:term" element can either hold a basic string, or "cs:single" and
## "cs:multiple" child elements to give singular and plural forms of the term.
terms.term =
element cs:term {
term.attributes,
(text | (term.single, term.multiple))
}
term.attributes =
(attribute name { terms },
[ a:defaultValue = "long" ] attribute form { term.form }?)
| (attribute name { terms.ordinals },
attribute form { "long" }?,
attribute gender-form { "masculine" | "feminine" }?,
attribute match { "last-digit" | "last-two-digits" | "whole-number" }?)
| (attribute name { terms.long-ordinals },
attribute form { "long" }?,
attribute gender-form { "masculine" | "feminine" })
| (attribute name { terms.gender-assignable },
attribute form { "long" }?,
attribute gender { "masculine" | "feminine" })
## "verb-short" reverts to "verb" if the "verb-short" form is not available.
## "symbol" reverts to "short" if the "symbol" form is not available.
## "verb" and "short" revert to "long" if the specified form is not available.
term.form = "long" | "verb" | "short" | "verb-short" | "symbol"
term.single =
## Singular version of the term.
element cs:single { text }
term.multiple =
## Plural version of the term.
element cs:multiple { text }
}
[ a:documentation [ xhtml:h2 [ "cs:macro" ] ] ]
div {
style.macro =
## Use to create collections of (reusable) formatting instructions.
element cs:macro {
attribute name { xsd:NMTOKEN },
rendering-element+
}
rendering-element =
rendering-element.names
| rendering-element.date
| rendering-element.label
| rendering-element.text
| rendering-element.number
| rendering-element.choose
| rendering-element.group
}
[ a:documentation [ xhtml:h2 [ "cs:citation and cs:bibliography" ] ] ]
div {
style.citation =
## Use to describe the formatting of citations.
element cs:citation { citation.options, sort?, citation.layout }
style.bibliography =
## Use to describe the formatting of the bibliography.
element cs:bibliography {
bibliography.options, sort?, bibliography.layout
}
citation.layout =
element cs:layout {
affixes, delimiter, font-formatting, rendering-element+
}
bibliography.layout =
element cs:layout { affixes, font-formatting, rendering-element+ }
}
[ a:documentation [ xhtml:h2 [ "cs:names Rendering Element" ] ] ]
div {
rendering-element.names =
element cs:names {
names.attributes,
((names.name?, names.et-al?) & names.label?),
names.substitute?
}
names.attributes =
attribute variable {
list { variables.names+ }
},
affixes,
## Specify the delimiter for name lists of name variables rendered by
## the same cs:names element.
delimiter,
display,
font-formatting
names.name =
element cs:name {
name.attributes,
## Select the "long" (first name + last name, for Western names),
## "short" (last name only, for Western names), or "count" name form
## (returning the number of names in the name variable, which can be
## useful for some sorting algorithms).
[ a:defaultValue = "long" ]
attribute form { "long" | "short" | "count" }?,
affixes,
## Set the delimiter for names in a name variable (e.g., ", " in
## "Doe, Smith")
[ a:defaultValue = ", " ] delimiter,
font-formatting,
name.name-part*
}
name.attributes =
## Use to separate the second-to-last and last name of a name list by
## the "and" term or ampersand.
attribute and {
## Use the "and" term (e.g., "Doe, Johnson and Smith").
"text"
|
## Use the "ampersand" (e.g., "Doe, Johnson & Smith").
"symbol"
}?,
## Specify when the name delimiter is used between a truncated name list
## and the "et-al" (or "and others") term in case of et-al abbreviation
## (e.g., "Smith, Doe et al." or "Smith, Doe, et al.").
[ a:defaultValue = "contextual" ]
attribute delimiter-precedes-et-al {
## The name delimiter is only used when the truncated name list
## consists of two or more names.
"contextual"
|
## The name delimiter is always used.
"always"
|
## The name delimiter is never used.
"never"
|
## The name delimiter is only used if the preceding name is inverted as
## a result of the "name-as-sort-order" attribute.
"after-inverted-name"
}?,
## Specify when the name delimiter is used between the second-to-last
## and last name of a non-truncated name list. Only has an effect when
## the "and" term or ampersand is used (e.g., "Doe and Smith" or "Doe,
## and Smith").
[ a:defaultValue = "contextual" ]
attribute delimiter-precedes-last {
## The name delimiter is only used when the name list consists of
## three or more names.
"contextual"
|
## The name delimiter is always used.
"always"
|
## The name delimiter is never used.
"never"
|
## The name delimiter is only used if the preceding name is inverted as
## a result of the "name-as-sort-order" attribute.
"after-inverted-name"
}?,
## Set the minimum number of names needed in a name variable to activate
## et-al abbreviation.
attribute et-al-min { xsd:integer }?,
## Set the number of names to render when et-al abbreviation is active.
attribute et-al-use-first { xsd:integer }?,
## As "et-al-min", but only affecting subsequent citations to an item.
attribute et-al-subsequent-min { xsd:integer }?,
## As "et-al-use-first", but only affecting subsequent citations to an
## item.
attribute et-al-subsequent-use-first { xsd:integer }?,
## If set to "true", the "et-al" (or "and others") term is replaced by
## an ellipsis followed by the last name of the name variable.
[ a:defaultValue = "false" ]
attribute et-al-use-last { xsd:boolean }?,
## If set to "false", names are not initialized and "initialize-with"
## only affects initials already present in the input data.
[ a:defaultValue = "true" ] attribute initialize { xsd:boolean }?,
## Activate initializing of given names. The attribute value is appended
## to each initial (e.g., with ". ", "Orson Welles" becomes "O. Welles").
attribute initialize-with { text }?,
## Specify whether (and which) names should be rendered in their sort
## order (e.g., "Doe, John" instead of "John Doe").
attribute name-as-sort-order {
## Render the first name of each name variable in sort order.
"first"
|
## Render all names in sort order.
"all"
}?,
## Sets the delimiter for name-parts that have switched positions as a
## result of "name-as-sort-order" (e.g., ", " in "Doe, John").
[ a:defaultValue = ", " ] attribute sort-separator { text }?
name.name-part =
## Use to format individual name parts (e.g., "Jane DOE").
element cs:name-part {
attribute name { "family" | "given" },
affixes,
font-formatting,
text-case
}
names.et-al =
## Specify the term used for et-al abbreviation and its formatting.
element cs:et-al {
## Select the term to use for et-al abbreviation.
[ a:defaultValue = "et-al" ]
attribute term { "et-al" | "and others" }?,
font-formatting,
names.et-al.legacy-attributes
}
## Ignored in CSL 1.0.1. Will be disallowed with CSL 1.1.
names.et-al.legacy-attributes = affixes
## Inherits variable from the parent cs:names element.
names.label =
element cs:label {
[ a:defaultValue = "long" ] attribute form { term.form }?,
label.attributes-shared
}
names.substitute =
## Specify substitution options when the name variables selected on the
## parent cs:names element are empty.
element cs:substitute { (substitute.names | rendering-element)+ }
## Short version of cs:names, without children, allowed in cs:substitute.
substitute.names = element cs:names { names.attributes }
}
[ a:documentation [ xhtml:h2 [ "cs:date Rendering Element" ] ] ]
div {
rendering-element.date =
element cs:date {
attribute variable { variables.dates },
((
## Limit the date parts rendered.
[ a:defaultValue = "year-month-day" ]
attribute date-parts {
## Year, month and day
"year-month-day"
|
## Year and month
"year-month"
|
## Year only
"year"
}?,
date.form,
rendering-element.date.date-part.localized*)
| (rendering-element.date.date-part.non-localized+, delimiter)),
affixes,
display,
font-formatting,
text-case
}
rendering-element.date.date-part.localized =
## Specify overriding formatting for localized dates (affixes
## cannot be overridden, as these are considered locale-specific).
## Example uses are forcing the use of leading-zeros, or of the
## "short" month form. Has no effect on which, and in what order,
## date parts are rendered.
element cs:date-part {
font-formatting, text-case, (day | month | year)
}
rendering-element.date.date-part.non-localized =
## Specify, in the desired order, the date parts that should be
## rendered and their formatting.
element cs:date-part {
affixes, font-formatting, text-case, (day | month | year)
}
day =
attribute name { "day" },
## Day forms: "numeric" ("5"), "numeric-leading-zeros" ("05"), "ordinal"
## ("5th").
[ a:defaultValue = "numeric" ]
attribute form { "numeric" | "numeric-leading-zeros" | "ordinal" }?,
range-delimiter
month =
attribute name { "month" },
## Months forms: "long" (e.g., "January"), "short" ("Jan."), "numeric"
## ("1"), and "numeric-leading-zeros" ("01").
[ a:defaultValue = "long" ]
attribute form {
"long" | "short" | "numeric" | "numeric-leading-zeros"
}?,
range-delimiter,
strip-periods
year =
attribute name { "year" },
## Year forms: "long" ("2005"), "short" ("05").
[ a:defaultValue = "long" ] attribute form { "short" | "long" }?,
range-delimiter
range-delimiter =
## Specify a delimiter for date ranges (by default the en-dash). A custom
## delimiter is retrieved from the largest date part ("day", "month" or
## "year") that differs between the two dates.
[ a:defaultValue = "–" ] attribute range-delimiter { text }?
}
[ a:documentation [ xhtml:h2 [ "cs:text Rendering Element" ] ] ]
div {
rendering-element.text =
## Use to call macros, render variables, terms, or verbatim text.
element cs:text {
text.attributes,
affixes,
display,
font-formatting,
quotes,
strip-periods,
text-case
}
text.attributes =
## Select a macro.
attribute macro { xsd:NMTOKEN }
| (
## Select a term.
attribute term { terms },
[ a:defaultValue = "long" ] attribute form { term.form }?,
## Specify term plurality: singular ("false") or plural ("true").
[ a:defaultValue = "false" ] attribute plural { xsd:boolean }?)
|
## Specify verbatim text.
attribute value { text }
| (
## Select a variable.
attribute variable { variables.standard },
[ a:defaultValue = "long" ] attribute form { "short" | "long" }?)
}
[ a:documentation [ xhtml:h2 [ "cs:number Rendering Element" ] ] ]
div {
rendering-element.number =
## Use to render a number variable.
element cs:number {
number.attributes, affixes, display, font-formatting, text-case
}
number.attributes =
attribute variable { variables.numbers },
## Number forms: "numeric" ("4"), "ordinal" ("4th"), "long-ordinal"
## ("fourth"), "roman" ("iv").
[ a:defaultValue = "numeric" ]
attribute form { "numeric" | "ordinal" | "long-ordinal" | "roman" }?
}
[ a:documentation [ xhtml:h2 [ "cs:label Rendering Element" ] ] ]
div {
rendering-element.label =
## Use to render a term whose pluralization depends on the content of a
## variable. E.g., if "page" variable holds a range, the plural label
## "pp." is selected instead of the singular "p.".
element cs:label { label.attributes, label.attributes-shared }
label.attributes =
attribute variable { variables.numbers | "locator" | "page" },
[ a:defaultValue = "long" ]
attribute form { "long" | "short" | "symbol" }?
label.attributes-shared =
## Specify when the plural version of a term is selected.
[ a:defaultValue = "contextual" ]
attribute plural { "always" | "never" | "contextual" }?,
affixes,
font-formatting,
strip-periods,
text-case
}
[ a:documentation [ xhtml:h2 [ "cs:group Rendering Element" ] ] ]
div {
rendering-element.group =
## Use to group rendering elements. Groups are useful for setting a
## delimiter for the group children, for organizing the layout of
## bibliographic entries (using the "display" attribute), and for
## suppressing the rendering of terms and verbatim text when variables
## are empty.
element cs:group {
group.attributes,
affixes,
delimiter,
display,
font-formatting,
rendering-element+
}
group.attributes = notAllowed?
}
[ a:documentation [ xhtml:h2 [ "Options" ] ] ]
div {
style.options =
style.demote-non-dropping-particle,
style.initialize-with-hyphen,
style.page-range-format,
names-inheritable-options,
name-inheritable-options
citation.options =
citation.cite-group-delimiter,
citation.collapse-options,
citation.disambiguate-options,
citation.near-note-distance,
names-inheritable-options,
name-inheritable-options
bibliography.options =
bibliography.hanging-indent,
bibliography.line-formatting-options,
bibliography.second-field-align,
bibliography.subsequent-author-substitute-options,
names-inheritable-options,
name-inheritable-options
style.demote-non-dropping-particle =
## Specify whether the non-dropping particle is demoted in inverted
## names (e.g., "Koning, W. de").
[ a:defaultValue = "display-and-sort" ]
attribute demote-non-dropping-particle {
"never" | "sort-only" | "display-and-sort"
}?
style.initialize-with-hyphen =
## Specify whether compound given names (e.g., "Jean-Luc") are
## initialized with ("J-L") or without a hyphen ("JL").
[ a:defaultValue = "true" ]
attribute initialize-with-hyphen { xsd:boolean }?
style.page-range-format =
## Reformat page ranges in the "page" variable.
attribute page-range-format {
"chicago" | "expanded" | "minimal" | "minimal-two"
}?
citation.cite-group-delimiter =
## Activate cite grouping and specify the delimiter for cites within a
## cite group.
[ a:defaultValue = ", " ] attribute cite-group-delimiter { text }?
citation.collapse-options =
## Activate cite grouping and specify the method of citation collapsing.
attribute collapse {
## Collapse ranges of numeric cites, e.g. from "[1,2,3]" to "[1-3]".
"citation-number"
|
## Collapse cites by suppressing repeated names, e.g. from "(Doe
## 2000, Doe 2001)" to "(Doe 2000, 2001)".
"year"
|
## Collapse cites as with "year", but also suppresses repeated
## years, e.g. from "(Doe 2000a, Doe 2000b)" to "(Doe 2000a, b)".
"year-suffix"
|
## Collapses cites as with "year-suffix", but also collapses
## ranges of year-suffixes, e.g. from "(Doe 2000a, Doe 2000b,
## Doe 2000c)" to "(Doe 2000a-c)".
"year-suffix-ranged"
}?,
## Specify the delimiter between year-suffixes. Defaults to the cite
## delimiter.
attribute year-suffix-delimiter { text }?,
## Specify the delimiter following a group of collapsed cites. Defaults
## to the cite delimiter.
attribute after-collapse-delimiter { text }?
citation.disambiguate-options =
## Set to "true" to activate disambiguation by showing names that were
## originally hidden as a result of et-al abbreviation.
[ a:defaultValue = "false" ]
attribute disambiguate-add-names { xsd:boolean }?,
## Set to "true" to activate disambiguation by expanding names, showing
## initials or full given names.
[ a:defaultValue = "false" ]
attribute disambiguate-add-givenname { xsd:boolean }?,
## Set to "true" to activate disambiguation by adding year-suffixes
## (e.g., "(Doe 2007a, Doe 2007b)") for items from the same author(s)
## and year.
[ a:defaultValue = "false" ]
attribute disambiguate-add-year-suffix { xsd:boolean }?,
## Specify how name are expanded for disambiguation.
[ a:defaultValue = "by-cite" ]
attribute givenname-disambiguation-rule {
## Each ambiguous names is progressively transformed until
## disambiguated (when disambiguation is not possible, the name
## remains in its original form).
"all-names"
|
## As "all-names", but name expansion is limited to showing
## initials.
"all-names-with-initials"
|
## As "all-names", but disambiguation is limited to the first name
## of each cite.
"primary-name"
|
## As "all-names-with-initials", but disambiguation is limited to
## the first name of each cite.
"primary-name-with-initials"
|
## As "all-names", but only ambiguous names in ambiguous cites are
## expanded.
"by-cite"
}?
citation.near-note-distance =
## Set the number of preceding notes (footnotes or endnotes) within
## which the current item needs to have been previously cited in order
## for the "near-note" position to be "true".
[ a:defaultValue = "5" ]
attribute near-note-distance { xsd:integer }?
bibliography.hanging-indent =
## Set to "true" to render bibliographic entries with hanging indents.
[ a:defaultValue = "false" ]
attribute hanging-indent { xsd:boolean }?
bibliography.line-formatting-options =
## Set the spacing between bibliographic entries.
[ a:defaultValue = "1" ]
attribute entry-spacing { xsd:nonNegativeInteger }?,
## Set the spacing between bibliographic lines.
[ a:defaultValue = "1" ]
attribute line-spacing {
xsd:integer { minExclusive = "0" }
}?
bibliography.second-field-align =
## Use to align any subsequent lines of bibliographic entries with the
## beginning of the second field.
attribute second-field-align {
## Align the first field with the margin.
"flush"
|
## Put the first field in the margin and align all subsequent
## lines of text with the margin.
"margin"
}?
bibliography.subsequent-author-substitute-options =
## Substitute names that repeat in subsequent bibliographic entries by
## the attribute value.
attribute subsequent-author-substitute { text }?,
## Specify the method of substitution of names repeated in subsequent
## bibliographic entries.
[ a:defaultValue = "complete-all" ]
attribute subsequent-author-substitute-rule {
## Requires a match of all rendered names in the name variable, and
## substitutes once for all names.
"complete-all"
|
## Requires a match of all rendered names in the name variable,
## and substitutes for each name.
"complete-each"
|
## Substitutes for each name, until the first mismatch.
"partial-each"
|
## Substitutes the first name if it matches.
"partial-first"
}?
## Options affecting cs:names, for cs:style, cs:citation and cs:bibliography.
names-inheritable-options =
## Inheritable name option, companion for "delimiter" on cs:names.
attribute names-delimiter { text }?
## Options affecting cs:name, for cs:style, cs:citation and cs:bibliography.
name-inheritable-options =
name.attributes,
## Inheritable name option, companion for "delimiter" on cs:name.
attribute name-delimiter { text }?,
## Inheritable name option, companion for "form" on cs:name.
[ a:defaultValue = "long" ]
attribute name-form { "long" | "short" | "count" }?
}
[ a:documentation [ xhtml:h2 [ "cs:sort - Sorting" ] ] ]
div {
sort =
## Specify how cites and bibliographic entries should be sorted. By
## default, items appear in the order in which they were cited.
element cs:sort { sort.key+ }
sort.key =
element cs:key {
(attribute variable { variables }
| attribute macro { xsd:NMTOKEN }),
## The minimum number of names needed in a name variable to activate
## name list truncation. Overrides the values set on any
## "et-al-(subsequent-)min" attributes.
attribute names-min { xsd:integer }?,
## The number of names to render when name list truncation is
## activated. Overrides the values set on the
## "et-al-(subsequent-)use-first" attributes.
attribute names-use-first { xsd:integer }?,
## Use to override the value of the "et-at-use-last" attribute.
attribute names-use-last { xsd:boolean }?,
## Select between an ascending and descending sort.
[ a:defaultValue = "ascending" ]
attribute sort { "ascending" | "descending" }?
}
}
[
a:documentation [ xhtml:h2 [ "cs:choose - Conditional Statements" ] ]
]
div {
rendering-element.choose =
## Use to conditionally render rendering elements.
element cs:choose { choose.if, choose.else-if*, choose.else? }
choose.if = element cs:if { condition+, match, rendering-element* }
choose.else-if =
element cs:else-if { condition+, match, rendering-element* }
choose.else = element cs:else { rendering-element+ }
condition =
## If used, the element content is only rendered if it disambiguates two
## otherwise identical citations. This attempt at disambiguation is only
## made after all other disambiguation methods have failed.
[ a:defaultValue = "true" ] attribute disambiguate { "true" }
|
## Tests whether the given variables contain numeric text.
attribute is-numeric {
list { variables+ }
}
|
## Tests whether the given date variables contain approximate dates.
attribute is-uncertain-date {
list { variables.dates+ }
}
|
## Tests whether the locator matches the given locator types.
attribute locator {
list { (terms.locator.testable | "sub-verbo")+ }
}
|
## Tests whether the cite position matches the given positions.
attribute position {
list {
("first"
| "subsequent"
| "ibid"
| "ibid-with-locator"
| "near-note")+
}
}
|
## Tests whether the item matches the given types.
attribute type {
list { item-types+ }
}
|
## Tests whether the default ("long") forms of the given variables
## contain non-empty values.
attribute variable {
list { variables+ }
}
match =
## Set the testing logic.
[ a:defaultValue = "all" ]
attribute match {
## Element only tests "true" when all conditions test "true" for all
## given test values.
"all"
|
## Element tests "true" when any condition tests "true" for any given
## test value.
"any"
|
## Element only tests "true" when none of the conditions test "true"
## for any given test value.
"none"
}?
}
## Formatting attributes.
div {
affixes =
[ a:defaultValue = "" ] attribute prefix { text }?,
[ a:defaultValue = "" ] attribute suffix { text }?
delimiter = attribute delimiter { text }?
display =
## By default, bibliographic entries consist of continuous runs of text.
## With the "display" attribute, portions of each entry can be
## individually positioned.
attribute display {
## Places the content in a block stretching from margin to margin.
"block"
|
## Places the content in a block starting at the left margin.
"left-margin"
|
## Places the content in a block to the right of a preceding
## "left-margin" block.
"right-inline"
|
## Places the content in a block indented to the right by a standard
## amount.
"indent"
}?
## The font-formatting attributes are based on those of CSS and XSL-FO.
font-formatting =
[ a:defaultValue = "normal" ]
attribute font-style { "italic" | "normal" | "oblique" }?,
[ a:defaultValue = "normal" ]
attribute font-variant { "normal" | "small-caps" }?,
[ a:defaultValue = "normal" ]
attribute font-weight { "normal" | "bold" | "light" }?,
[ a:defaultValue = "none" ]
attribute text-decoration { "none" | "underline" }?,
[ a:defaultValue = "baseline" ]
attribute vertical-align { "baseline" | "sup" | "sub" }?
quotes =
## When set to "true", quotes are placed around the rendered text.
[ a:defaultValue = "false" ] attribute quotes { xsd:boolean }?
strip-periods =
## When set to "true", periods are removed from the rendered text.
[ a:defaultValue = "false" ]
attribute strip-periods { xsd:boolean }?
text-case =
attribute text-case {
## Renders text in lowercase.
"lowercase"
|
## Renders text in uppercase.
"uppercase"
|
## Capitalizes the first character (other characters remain in
## their original case).
"capitalize-first"
|
## Capitalizes the first character of every word (other characters
## remain in their original case).
"capitalize-all"
|
## Renders text in title case.
"title"
|
## Renders text in sentence case.
"sentence"
}?
}
Jump to Line
Something went wrong with that request. Please try again.