1default namespace bib = "http://biblatex-biber.sourceforge.net/biblatexml"
2namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
3datatypes xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
4namespace user = "http://localhost/biblatexml/user"
5## TODO?  change namespace of bib:emphasis, bib:superscript, bib:subscript
6##        to db = "http://docbook.org/ns/docbook"
7## XDATA, IDS are not in here
8
9start = element entries {
10     (article |
11      bibnote |
12      book |
13      bookmisc |
14      booklet |
15      books |
16      collmisc |
17      collections |
18      inmisc |
19      inproceedings |
20      manual |
21      misc |
22      online |
23      patent |
24      periodical |
25      proceedings |
26      report |
27      set |
28      thesis |
29      unpublished |
30      misctypes)+
31}
32
33BibLaTeXML.common.fields =
34      abstract? &
35      annotation? &
36      crossref? &
37      entryset? &
38      entrysubtype? &
39      execute? &
40      file? &
41      hyphenation? &
42      indextitle* &
43      indexsorttitle* &
44      isan? &
45      ismn? &
46      iswc? &
47      keywords? &
48      label? &
49      library? &
50      nameaddon* &
51      options? &
52      origlocation* &
53      origpublisher* &
54      origtitle* &
55      presort? &
56      related? &
57      shortauthor* &
58      shorteditor* &
59      shorthand* &
60      shorthandintro* &
61      shortjournal* &
62      shortseries* &
63      shorttitle* &
64      sortkey? &
65      sortname* &
66      sorttitle* &
67      sortyear? &
68      xref?
69
70#########################################################
71## We now define the biblatexml elements
72
73formattext = (emphasis?, superscript?, subscript?, quote?, math?, text?)*
74emphasis = element emphasis { text }
75superscript = element superscript { text }
76subscript = element subscript { text }
77quote = element quote { text }
78## The textual content of bib:math should be in (La)TeX notation
79## MathML mathml:* insertions would also be possible with http://xsltml.sourceforge.net/
80## the optional attribute "text" gives a Unicode representation of the mathematical expression (if feasible), e.g., x³+y³=z³
81math = element math { attribute text { text }?, text }
82
83att.form = attribute form { "original" | "romanised" | "translated" | "uniform" }
84att.lang = attribute xml:lang {xsd:language}
85
86abstract = element abstract { att.form?, att.lang?, formattext }
87addendum = element addendum { att.form?, att.lang?, formattext }
88annotation = element annotation { att.form?, att.lang?, formattext }
89booksubtitle = element booksubtitle { att.form?, att.lang?, formattext }
90booktitle = element booktitle { att.form?, att.lang?, formattext }
91booktitleaddon = element booktitleaddon { att.form?, att.lang?, formattext }
92chapter = element chapter { text }
93crossref = element crossref { text }
94doi = element doi { text }
95edition = element edition { xsd:integer | ( attribute string { text } ) }
96eid = element eid { text }
97entryset = element entryset { item+ | text }
98entrysubtype = element entrysubtype { text }
99eprint = element eprint { attribute type {text}, attribute class {text}?, text }
100eventtitle = element eventtitle { att.form?, att.lang?, formattext }
101execute = element execute { text }
102file = element file { text }
103hyphenation = element hyphenation { text }
104pdf = element pdf { text }
105id = element id { text }
106indexsorttitle = element indexsorttitle { text }
107indextitle = element indextitle { text }
108isan = element isan { text } #TODO validate with pattern
109isbn = element isbn { text } #TODO validate with pattern
110oclc = element oclc { text } #TODO validate with pattern
111lccn = element lccn { text } #TODO validate with pattern
112ismn = element ismn { text } #TODO validate with pattern
113isrn = element isrn { text } #TODO validate with pattern
114issn = element issn { text } #TODO validate with pattern
115issue = element issue { att.form?, att.lang?, formattext }
116issuetitle = element issuetitle { att.form?, att.lang?, formattext }
117issuesubtitle = element issuesubtitle { att.form?, att.lang?, formattext }
118iswc = element iswc { text }
119journaltitle = element journaltitle { att.form?, att.lang?, formattext }
120journalsubtitle = element journalsubtitle { att.form?, att.lang?, formattext }
121label = element label { text }
122user.field = element user:* { text }
123library = element library { libraryitem+ }
124libraryitem = element item { attribute location {text}?,
125                             attribute ref {text}?,
126                             attribute url {xsd:anyURI}?,
127                             attribute note {text}? }
128mainsubtitle = element mainsubtitle { att.form?, att.lang?, formattext }
129maintitle = element maintitle { att.form?, att.lang?, formattext }
130maintitleaddon = element maintitleaddon { att.form?, att.lang?, formattext }
131nameaddon = element nameaddon { text }
132note = element note { att.form?, att.lang?, formattext }
133number = element number { text }
134options = element options {
135  element option {
136      attribute key { text},
137      attribute value { text }?,
138    empty
139  }
140}
141origtitle = element origtitle { att.form?, att.lang?, formattext }
142pagetotal = element pagetotal { text }
143part = element part { text }
144presort = element presort { text }
145series = element series { att.form?, att.lang?, formattext }
146shorthand = element shorthand { att.form?, att.lang?, text }
147shorthandintro = element shorthandintro { att.form?, att.lang?, text }
148shorttitle = element shorttitle { att.form?, att.lang?, formattext }
149shortjournal = element shortjournal { att.form?, att.lang?, formattext }
150shortseries = element shortseries { att.form?, att.lang?, formattext }
151sortkey = element sortkey { text }
152sortyear = element sortyear { text }
153sorttitle = element sorttitle { text }
154subtitle = element subtitle { att.form?, att.lang?, formattext }
155title = element title { att.form?, att.lang?, formattext }
156titleaddon = element titleaddon { att.form?, att.lang?, formattext }
157url = element url { xsd:anyURI }
158useprefix = element useprefix { text }
159venue = element venue { att.form?, att.lang?, formattext }
160version = element version { text }
161volume = element volume { ( text | volume.range )}
162volume.range = ( volume.list | range )
163volume.list = element list { element item { ( text | volume.range ) }+ }
164volumes = element volumes { text }
165xref = element xref { text }
166
167# dates
168attlist.year = attribute appeared { date.type }?, attribute type { "approximate" | "assumed" }?, attribute note { text }?
169attlist.dates = attribute datetype { "orig" | "event" | "url" }
170date = element date { attlist.dates?, attlist.year?, (date.type | date.range) }
171pubstate = element pubstate { text }
172date.type = (xsd:date | xsd:gYearMonth | xsd:gYear)
173date.range = (date.range.list | (date.range.start, date.range.end?) )
174date.range.start = element start { xsd:date | xsd:gYear }
175date.range.end = element end { xsd:date | xsd:gYear | "" }
176date.range.list = element list { element item { (date.type|date.range) }+ }
177
178# pages
179pages = element pages { attlist.pages?, (text | range | pagelist ) }
180pagelist = element list { ( text | element item {( text | range )}+  ) }
181attlist.pages =
182  attribute pagination { "page" | "column" | "line" | "verse" | "paragraph" | "none" }?,
183  attribute bookpagination { "page" | "column" | "line" | "verse" | "paragraph" | "none" }?,
184  attribute part { text }? ## e.g. when a book has parts in different scripts, with respective paginations
185range = range.start, range.end
186range.start = element start { text }
187range.end = element end { text }
188
189# literal lists
190att.lists = att.form?, attribute morelist { "1" | "true" }?
191institution = element institution { att.lists?, ( text | item+ ) }
192organisation = (element organisation { att.lists?, ( text | item+ ) } |
193                element organization { att.lists?, ( text | item+ ) } )
194location = element location { att.lang?, att.lists?, ( text | item+ ) }
195origlocation = element origlocation { att.lists?, ( text | item+ ) }
196publisher = element publisher { att.lang?, att.lists?, ( text | pubitem+ ) }
197origpublisher = element origpublisher { att.lists?, ( text | pubitem+ ) }
198item = element item { formattext }
199pubitem = element item { (text | (publishername, location)) }
200publishername = element name { attribute id {text}?, formattext }
201publocation = element location { attribute id {text}?, text }
202
203# key lists
204language = element language { xsd:language | itemlang+ }
205origlanguage = element origlanguage { xsd:language | itemlang+ }
206itemlang = element item { xsd:language }
207script.list = "Arab" | "Armi" | "Armn" | "Avst" | "Bali" | "Batk" | "Beng" | "Blis" | "Bopo" | "Brah" | "Brai" | "Bugi" | "Buhd" | "Cakm" | "Cans" | "Cari" | "Cham" | "Cher" | "Cirt" | "Copt" | "Cprt" | "Cyrl" | "Cyrs" | "Deva" | "Dsrt" | "Egyd" | "Egyh" | "Egyp" | "Ethi" | "Geok" | "Geor" | "Glag" | "Goth" | "Grek" | "Gujr" | "Guru" | "Hang" | "Hani" | "Hano" | "Hans" | "Hant" | "Hebr" | "Hira" | "Hmng" | "Hrkt" | "Hung" | "Inds" | "Ital" | "Java" | "Jpan" | "Kali" | "Kana" | "Khar" | "Khmr" | "Knda" | "Kore" | "Kthi" | "Lana" | "Laoo" | "Latf" | "Latg" | "Latn" | "Lepc" | "Limb" | "Lina" | "Linb" | "Lisu" | "Lyci" | "Lydi" | "Mand" | "Mani" | "Maya" | "Mero" | "Mlym" | "Mong" | "Moon" | "Mtei" | "Mymr" | "Nkgb" | "Nkoo" | "Ogam" | "Olck" | "Orkh" | "Orya" | "Osma" | "Perm" | "Phag" | "Phli" | "Phlp" | "Phlv" | "Phnx" | "Plrd" | "Prti" | "Qaaa" | "Qabx" | "Rjng" | "Roro" | "Runr" | "Samr" | "Sara" | "Saur" | "Sgnw" | "Shaw" | "Sinh" | "Sund" | "Sylo" | "Syrc" | "Syre" | "Syrj" | "Syrn" | "Tagb" | "Tale" | "Talu" | "Taml" | "Tavt" | "Telu" | "Teng" | "Tfng" | "Tglg" | "Thaa" | "Thai" | "Tibt" | "Ugar" | "Vaii" | "Visp" | "Xpeo" | "Xsux" | "Yiii" | "Zinh" | "Zmth" | "Zsym" | "Zxxx" | "Zyyy" | "Zzzz"
208script = element script { script.list | itemscript+ }
209origscript = element origscript { script.list | itemscript+ }
210itemscript = element item { script.list }
211# NAME LISTS
212attlist.name =   att.form?, attribute class { "sub" | "vol" | "main" }?, att.gender?, attribute morenames {"1" | "true"}?
213att.gender = attribute gender { "sf" | "sm" | "sn" | "pf" | "pm" | "pn" | "pp" }
214author = element author { attlist.name?, ( text | person+ ) }
215editor = element editor { attlist.name?, (text | person+) }
216afterword = element afterword { attlist.name?, (text | person+) }
217annotator = element annotator { attlist.name?, (text | person+) }
218bookauthor = element bookauthor { attlist.name?, (text | person+) }
219commentator = element commentator { attlist.name?, (text | person+) }
220foreword = element foreword { attlist.name?, (text | person+) }
221holder = element holder { attlist.name?, (text | person+) }
222introduction = element introduction { attlist.name?, (text | person+) }
223translator = element translator { attlist.name?, (text | person+) }
224shortauthor = element shortauthor { attlist.name?, (text | person+) }
225shorteditor = element shorteditor { attlist.name?, (text | person+) }
226sortname = element sortname { attlist.name?, (text | person+) }
227person = element person {
228    attlist.person,
229    ( text | (first? &
230                prefix? &
231                middle? &
232                last &
233                suffix? ) )
234  }
235attlist.person |=
236  attribute id { text }?,
237  att.gender?,
238  attribute useprefix { "yes" | "no" }?
239att.init = attribute initial { text }
240first = element first { att.init?, (text | namepart+) }
241last = element last { att.init?, (text | namepart+) }
242middle = element middle { att.init?, (text | namepart+) }
243prefix = element prefix { att.init?, (text | namepart+) }
244suffix = element suffix { att.init?, (text | namepart+) }
245namepart = element namepart { att.init?, text }
246keywords = element keywords { list {xsd:string+} | item+ }
247related = element related {
248    element item {
249      attribute type { text },
250      attribute string { text }?,
251      attribute ids { text } }+ # can be comma-sep IDs
252    }
253
254#########################################################
255
256article = element entry {
257  attribute id {text} &
258  attribute entrytype { "article" } &
259  id* &
260  author+ &
261  title+ &
262  journaltitle+ &
263  date+ &
264  addendum? &
265  annotator* &
266  commentator* &
267  doi? &
268  editor? &
269  eid? &
270  eprint? &
271  issn? &
272  issue* &
273  issuetitle* &
274  issuesubtitle* &
275  journalsubtitle* &
276  language? &
277  note? &
278  number? &
279  origlanguage? &
280  pages? &
281  pubstate? &
282  series* &
283  subtitle* &
284  titleaddon* &
285  translator* &
286  url? &
287  version? &
288  volume? &
289  BibLaTeXML.common.fields
290}
291
292#########################################################
293
294bibnote = element entry {
295  attribute id {text} &
296  attribute entrytype { "bibnote" } &
297  id* &
298  element note { text }
299}
300
301#########################################################
302book = element entry {
303  attribute id {text} &
304  attribute entrytype {"book"} &
305  id* &
306  author+ &
307  title+ &
308  date+ &
309  addendum? &
310  afterword* &
311  annotator* &
312  chapter? &
313  commentator* &
314  doi? &
315  edition? &
316  editor? &
317  eprint? &
318  foreword* &
319  introduction* &
320  isbn? &
321  language? &
322  location* &
323  maintitle* &
324  maintitleaddon* &
325  mainsubtitle* &
326  note? &
327  number? &
328  origlanguage? &
329  pages? &
330  pagetotal? &
331  part? &
332  publisher* &
333  pubstate? &
334  series* &
335  subtitle* &
336  titleaddon* &
337  translator* &
338  url? &
339  volume? &
340  volumes? &
341  BibLaTeXML.common.fields
342}
343
344#########################################################
345
346booklet = element entry {
347  attribute id {text} &
348  attribute entrytype {"booklet"} &
349  attribute howpublished { text }? &
350  attribute type { text }? &
351  id* &
352  (author | editor)&
353  title+ &
354  date+ &
355  addendum? &
356  chapter? &
357  doi? &
358  eprint? &
359  language? &
360  location* &
361  note? &
362  pages? &
363  pagetotal? &
364  pubstate? &
365  subtitle* &
366  titleaddon* &
367  url? &
368  BibLaTeXML.common.fields
369}
370
371
372#########################################################
373
374books = element entry {
375  attribute id {text} &
376  attribute entrytype {"books"} &
377  id* &
378  author+ &
379  title+ &
380  date+ &
381  addendum? &
382  afterword* &
383  annotator* &
384  commentator* &
385  doi? &
386  edition? &
387  editor? &
388  eprint? &
389  foreword* &
390  introduction* &
391  isbn? &
392  language? &
393  location* &
394  note? &
395  number? &
396  origlanguage? &
397  publisher* &
398  pubstate? &
399  subtitle* &
400  titleaddon* &
401  translator* &
402  url? &
403  volume? &
404  volumes? &
405  BibLaTeXML.common.fields
406}
407
408#########################################################
409
410bookmisc = element entry {
411  attribute id {text} &
412  attribute entrytype { "inbook" | "bookinbook" | "suppbook" } &
413  id* &
414  author+ &
415  title+ &
416  booktitle+ &
417  date+ &
418  addendum? &
419  afterword* &
420  annotator* &
421  bookauthor* &
422  booksubtitle* &
423  booktitleaddon* &
424  chapter? &
425  commentator* &
426  doi? &
427  edition? &
428  editor? &
429  eprint? &
430  foreword* &
431  introduction* &
432  isbn? &
433  language? &
434  location* &
435  mainsubtitle* &
436  maintitle* &
437  maintitleaddon* &
438  note? &
439  number? &
440  origlanguage? &
441  part? &
442  publisher* &
443  pages? &
444  pubstate? &
445  series* &
446  subtitle* &
447  titleaddon* &
448  translator* &
449  url? &
450  volume? &
451  volumes? &
452  BibLaTeXML.common.fields
453}
454
455#########################################################
456
457collmisc = element entry {
458  attribute id {text} &
459  attribute entrytype { "collection" | "reference" } &
460  id* &
461  editor+ &
462  title+ &
463  date+ &
464  addendum? &
465  afterword* &
466  annotator* &
467  chapter? &
468  commentator* &
469  doi? &
470  edition? &
471  eprint? &
472  foreword* &
473  introduction* &
474  isbn? &
475  language? &
476  location* &
477  mainsubtitle* &
478  maintitle* &
479  maintitleaddon* &
480  note? &
481  number? &
482  origlanguage? &
483  pages? &
484  pagetotal? &
485  part? &
486  publisher* &
487  pubstate? &
488  series* &
489  subtitle* &
490  titleaddon* &
491  translator* &
492  url? &
493  volume? &
494  volumes? &
495  BibLaTeXML.common.fields
496}
497
498#########################################################
499
500collections = element entry {
501  attribute id {text} &
502  attribute entrytype { "collections" } &
503  id* &
504  author+ &
505  title+ &
506  date+ &
507  addendum? &
508  afterword* &
509  annotator* &
510  commentator* &
511  doi? &
512  edition? &
513  editor? &
514  eprint? &
515  foreword* &
516  introduction* &
517  isbn? &
518  language? &
519  location* &
520  note? &
521  number? &
522  origlanguage? &
523  publisher* &
524  pubstate? &
525  subtitle* &
526  titleaddon* &
527  translator* &
528  url? &
529  volume? &
530  volumes? &
531  BibLaTeXML.common.fields
532}
533
534#########################################################
535
536inmisc = element entry {
537  attribute id {text} &
538  attribute entrytype { "incollection" | "suppcollection" | "inreference" } &
539  id* &
540  author+ &
541  editor+ &
542  title+ &
543  booktitle+ &
544  date+ &
545  addendum? &
546  afterword* &
547  annotator* &
548  booksubtitle* &
549  booktitleaddon* &
550  chapter? &
551  commentator* &
552  doi? &
553  edition? &
554  eprint? &
555  foreword* &
556  introduction* &
557  isbn? &
558  language? &
559  location* &
560  mainsubtitle* &
561  maintitle* &
562  maintitleaddon* &
563  note? &
564  number? &
565  origlanguage? &
566  pages? &
567  part? &
568  publisher* &
569  pubstate? &
570  series* &
571  subtitle* &
572  titleaddon* &
573  translator* &
574  url? &
575  volume? &
576  volumes? &
577  BibLaTeXML.common.fields
578}
579
580#########################################################
581
582inproceedings = element entry {
583  attribute id {text} &
584  attribute entrytype { "inproceedings" } &
585  id* &
586  author+ &
587  editor+ &
588  title+ &
589  booktitle+ &
590  date+ &
591  addendum? &
592  booksubtitle* &
593  booktitleaddon* &
594  chapter? &
595  doi? &
596  eprint? &
597  eventtitle* &
598  isbn? &
599  language? &
600  location* &
601  mainsubtitle* &
602  maintitle* &
603  maintitleaddon* &
604  note? &
605  number? &
606  organisation* &
607  pages? &
608  part? &
609  publisher* &
610  pubstate? &
611  series* &
612  subtitle* &
613  titleaddon* &
614  url? &
615  venue* &
616  volume? &
617  volumes? &
618  BibLaTeXML.common.fields
619}
620
621#########################################################
622
623manual = element entry {
624  attribute id {text} &
625  attribute entrytype { "manual" } &
626  attribute type { text } &
627  id* &
628  (author | editor) &
629  title+ &
630  date+ &
631  addendum? &
632  chapter? &
633  doi? &
634  edition? &
635  eprint? &
636  isbn? &
637  language? &
638  location* &
639  note? &
640  number? &
641  organisation* &
642  pages? &
643  pagetotal? &
644  publisher* &
645  pubstate? &
646  series* &
647  subtitle* &
648  titleaddon* &
649  url? &
650  version? &
651  BibLaTeXML.common.fields
652}
653
654#########################################################
655
656misc = element entry {
657  attribute id {text} &
658  attribute entrytype { "misc" } &
659  attribute howpublished { text }? &
660  attribute type { text }? &
661  id* &
662  (author | editor)+ &
663  title+ &
664  date+ &
665  addendum? &
666  doi? &
667  eprint? &
668  language? &
669  location* &
670  note? &
671  organisation* &
672  pubstate? &
673  subtitle* &
674  titleaddon* &
675  url? &
676  version? &
677  BibLaTeXML.common.fields
678}
679
680#########################################################
681
682online = element entry {
683  attribute id {text} &
684  attribute entrytype { "online" } &
685  id* &
686  (author | editor) &
687  title+ &
688  date+ &
689  url &
690  addendum? &
691  language? &
692  note? &
693  organisation* &
694  pubstate? &
695  subtitle* &
696  titleaddon* &
697  version? &
698  BibLaTeXML.common.fields
699}
700
701
702#########################################################
703
704patent = element entry {
705  attribute id {text} &
706  attribute entrytype { "patent" } &
707  attribute type { text } &
708  id* &
709  author+ &
710  title+ &
711  number &
712  date+ &
713  addendum? &
714  doi? &
715  eprint? &
716  holder* &
717  location* &
718  note? &
719  pubstate? &
720  subtitle* &
721  titleaddon* &
722  url? &
723  version? &
724  BibLaTeXML.common.fields
725}
726
727#########################################################
728
729periodical = element entry {
730  attribute id {text} &
731  attribute entrytype { "periodical" } &
732  id* &
733  editor+ &
734  title+ &
735  date+ &
736  addendum? &
737  doi? &
738  eprint? &
739  issn? &
740  issue* &
741  issuesubtitle* &
742  issuetitle* &
743  language? &
744  note? &
745  number? &
746  pubstate? &
747  series* &
748  subtitle* &
749  url? &
750  volume? &
751  BibLaTeXML.common.fields
752}
753
754#########################################################
755
756proceedings = element entry {
757  attribute id {text} &
758  attribute entrytype { "proceedings" } &
759  id* &
760  editor+ &
761  title+ &
762  date+ &
763  addendum? &
764  chapter? &
765  doi? &
766  eprint? &
767  eventtitle* &
768  isbn? &
769  language? &
770  location* &
771  mainsubtitle* &
772  maintitle* &
773  maintitleaddon* &
774  note? &
775  number? &
776  organisation* &
777  pages? &
778  pagetotal? &
779  part? &
780  publisher* &
781  pubstate? &
782  series* &
783  subtitle* &
784  titleaddon* &
785  url? &
786  venue* &
787  volume? &
788  volumes? &
789  BibLaTeXML.common.fields
790}
791
792#########################################################
793
794report = element entry {
795  attribute id {text} &
796  attribute entrytype { "report" } &
797  attribute type { text } &
798  id* &
799  author+ &
800  title+ &
801  institution+ &
802  date+ &
803  addendum? &
804  chapter? &
805  doi? &
806  eprint? &
807  isrn? &
808  language? &
809  location* &
810  note? &
811  number? &
812  pages? &
813  pagetotal? &
814  pubstate? &
815  subtitle* &
816  titleaddon* &
817  url? &
818  version? &
819  BibLaTeXML.common.fields
820}
821
822#########################################################
823
824thesis = element entry {
825  attribute id {text} &
826  attribute entrytype { "thesis" } &
827  attribute type { text } &
828  id* &
829  author+ &
830  title+ &
831  institution+ &
832  date+ &
833  addendum? &
834  chapter? &
835  doi? &
836  eprint? &
837  language? &
838  location* &
839  note? &
840  pages? &
841  pagetotal? &
842  pubstate? &
843  subtitle* &
844  titleaddon* &
845  url? &
846  BibLaTeXML.common.fields
847}
848
849#########################################################
850
851unpublished = element entry {
852  attribute id {text} &
853  attribute entrytype { "unpublished" } &
854  attribute howpublished { text } &
855  id* &
856  author+ &
857  title+ &
858  date+ &
859  addendum? &
860  language? &
861  location* &
862  note? &
863  pubstate? &
864  subtitle* &
865  titleaddon* &
866  url? &
867  BibLaTeXML.common.fields
868}
869
870#########################################################
871
872set = element entry {
873  attribute id {text} &
874  attribute entrytype { "set" } &
875  attribute howpublished { text }? &
876  id* &
877  entryset
878}
879
880#########################################################
881
882misctypes = element entry {
883  attribute id {text} &
884  attribute entrytype {
885    "artwork" | "audio" | "commentary" | "image" | "jurisdiction" |
886    "legal" | "legislation" | "letter" | "movie" | "music" |
887    "performance" | "review" | "software" | "standard" | "video" } &
888  attribute howpublished { text } &
889  id* &
890  author* &
891  title* &
892  date* &
893  addendum? &
894  language? &
895  location* &
896  note? &
897  pubstate? &
898  subtitle* &
899  titleaddon* &
900  url? &
901  BibLaTeXML.common.fields
902}
903# Copyright 2009-2015 François Charette and Philip Kime, all rights reserved.
904
905# This code is free software.  You can redistribute it and/or
906# modify it under the terms of the Artistic License 2.0.
907
908# This program is distributed in the hope that it will be useful,
909# but without any warranty; without even the implied warranty of
910# merchantability or fitness for a particular purpose.
911
912