aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sisu/relaxng.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sisu/relaxng.rb')
-rw-r--r--lib/sisu/relaxng.rb1153
1 files changed, 1153 insertions, 0 deletions
diff --git a/lib/sisu/relaxng.rb b/lib/sisu/relaxng.rb
new file mode 100644
index 00000000..60cc446d
--- /dev/null
+++ b/lib/sisu/relaxng.rb
@@ -0,0 +1,1153 @@
+# encoding: utf-8
+=begin
+
+* Name: SiSU
+
+** Description: documents, structuring, processing, publishing, search
+*** relaxng flow/logic
+
+** Author: Ralph Amissah
+ <ralph@amissah.com>
+ <ralph.amissah@gmail.com>
+
+** Copyright: (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Ralph Amissah,
+ All Rights Reserved.
+
+** License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licensing/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+
+ <http://www.sisudoc.org/sisu/en/manifest/gpl.fsf.html>
+
+** SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+** Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+** Git
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=summary>
+ <http://git.sisudoc.org/gitweb/?p=code/sisu.git;a=blob;f=lib/sisu/relaxng.rb;hb=HEAD>
+
+=end
+module SiSU_Relaxng
+ require_relative 'se' # se.rb
+ class RelaxNG
+ def gpl3_or_later
+ @gpl3_or_later =<<RELAXNG
+=begin
+
+ * Name: SiSU generated relaxng
+
+ * Description: generated relaxng for SiSU
+ (SiSU is a framework for document structuring, publishing and search)
+
+ * Author: Ralph Amissah
+
+ * Copyright: (C) 1997 - 2013 Ralph Amissah All Rights Reserved.
+
+ * License: GPL 3 or later:
+
+ SiSU, a framework for document structuring, publishing and search
+
+ Copyright: (C) 1997 - 2013 Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see <http://www.gnu.org/licenses/>.
+
+ If you have Internet connection, the latest version of the GPL should be
+ available at these locations:
+ <http://www.fsf.org/licenses/gpl.html>
+ <http://www.gnu.org/licenses/gpl.html>
+ <http://www.jus.uio.no/sisu/gpl.fsf>
+
+ * SiSU uses:
+ * Standard SiSU markup syntax,
+ * Standard SiSU meta-markup syntax, and the
+ * Standard SiSU object citation numbering and system
+
+ * Hompages:
+ <http://www.jus.uio.no/sisu>
+ <http://www.sisudoc.org>
+
+ * Ralph Amissah
+ <ralph@amissah.com>
+ <ralph.amissah@gmail.com>
+
+=end
+RELAXNG
+ end
+ def rnc_name
+ def output_sax
+ 'sisu_sax.rnc'
+ end
+ def output_dom
+ 'sisu_dom.rnc'
+ end
+ def output_xhtml
+ 'sisu_xhtml.rnc'
+ end
+ def input_sax
+ 'sisu_sax.rnc'
+ end
+ def input_dom
+ 'sisu_dom.rnc'
+ end
+ def input_node
+ 'sisu_node.rnc'
+ end
+ self
+ end
+ def rng_name
+ def output_sax
+ 'sisu_sax.rng'
+ end
+ def output_dom
+ 'sisu_dom.rng'
+ end
+ def output_xhtml
+ 'sisu_xhtml.rng'
+ end
+ def input_sax
+ 'sisu_sax.rng'
+ end
+ def input_dom
+ 'sisu_dom.rng'
+ end
+ def input_node
+ 'sisu_node.rng'
+ end
+ self
+ end
+ def xsd_name
+ def output_sax
+ 'sisu_sax.xsd'
+ end
+ def output_dom
+ 'sisu_dom.xsd'
+ end
+ def output_xhtml
+ 'sisu_xhtml.xsd'
+ end
+ def input_sax
+ 'sisu_sax.xsd'
+ end
+ def input_dom
+ 'sisu_dom.xsd'
+ end
+ def input_node
+ 'sisu_node.xsd'
+ end
+ self
+ end
+ def rnc_sisu_object_input
+ @relaxng =<<RELAXNG
+#%% sisu object model: input
+#{gpl3_or_later}
+#%% definitions
+# dublin core:
+element-semantic =
+ element semantic {
+ # dublin core:
+ element title { text }
+ & element creator { text }?
+ & element subject { text }?
+ & element description { text }?
+ & element publisher { text }?
+ & element contributor { text }?
+ & element date { text }?
+ & element date.created { text }?
+ & element date.issued { text }?
+ & element date.available { text }?
+ & element date.valid { text }?
+ & element date.modified { text }?
+ & element type { text }?
+ & element format { text }?
+ & element identifier { text }?
+ & element source { text }?
+ & element relation { text }?
+ & element coverage { text }?
+ & element rights { text }?
+ & element keywords { text }?
+ # extended semantic metadata:
+ & attribute subtitle { text }?
+ & attribute illustrator { text }?
+ & attribute translator { text }?
+ & attribute prepared_by { text }?
+ & attribute digitized_by { text }?
+ & attribute language { text }?
+ & attribute language.original { text }?
+ & attribute classify.pg { text }?
+ & attribute classify.isbn { text }?
+ & attribute classify.dewey { text }?
+ & attribute classify.loc { text }?
+ & attribute prefix.a { text }?
+ & attribute prefix.b { text }?
+ & attribute suffix { text }?
+ & attribute comments { text }?
+ & attribute abstract { text }?
+ # & attribute information { text }?
+ & attribute contact { text }?
+ & attribute links { text }?
+ }
+element-processing =
+ element processing {
+ attribute structure { text }?
+ & attribute level { text }?
+ & attribute markup { text }?
+ & attribute bold { text }?
+ & attribute italics { text }?
+ & attribute papersize { text }?
+ & attribute vocabulary { text }?
+ & element date_scheme { text }?
+ & element date.issued.scheme { text }?
+ & element date.available.scheme { text }?
+ & element date.valid.scheme { text }?
+ & element date.modified.scheme { text }?
+ }?
+element-head =
+ element head {
+ # processing instructions, and semantic data, distinguish?:
+ element metadata {
+ element title { text },
+ element file { text },
+ element generator { text },
+ element-semantic,
+ element-processing
+ }+
+ }
+# body text/contents
+# includes <b> <i> <u> <del> <ins> <indent1> <bullet> etc.
+element-txt =
+ element txt {
+ text*
+ & element b { text }*
+ & element i { text }*
+ & element u { text }*
+ & element ins { text }*
+ & element del { text }*
+ }
+element-endnote =
+ element endnote {
+ element number { text },
+ element note { element-txt }+
+ }+
+element-para =
+ element para {
+ # attribute paragraph_format { text },
+ element-txt+
+ & element-endnote?
+ }
+element-external_space =
+ element external_space {
+ # ignored by sisu, provide program needs
+ element program {
+ # e.g. kdissert
+ element name { text },
+ element xpos { text },
+ element ypos { text },
+ element font { text },
+ element outline_color { text },
+ element text_color { text },
+ element comment { text }
+ }*
+ }*,
+#%% structure
+ element document {
+ # document head:
+ element-head,
+ # document body:
+ element body {
+ # object, a unit of text, usually a paragraph with any associated endnotes
+ element node {
+ element structure {
+ # structure document using either node:heading levels or node:heading relationships:
+ # (i) sisu default uses node:heading levels (1-6 or A-C,1-3) to build document structure
+ element level { text }?,
+ # (ii) sisu alternatively could use node:heading relationship information to build document structure
+ element node.id { text },
+ element node.parent { text },
+ element node.child { text }*
+ },
+ element node.objects {
+ element object.heading {
+ # nametag used only in headings, especially important for segmented html
+ element nametag { text },
+ element-para
+ },
+ element object.para {
+ element-para
+ }*
+ }+,
+ element-external_space
+ }+
+ }
+ }
+RELAXNG
+ end
+ def rnc_sisu_object_ao
+ @relaxng =<<RELAXNG
+#%% sisu object model: ao
+#{gpl3_or_later}
+#%% definitions
+# dublin core:
+element-semantic =
+ element semantic {
+ # dublin core:
+ element title { text }
+ & element creator { text }?
+ & element subject { text }?
+ & element description { text }?
+ & element publisher { text }?
+ & element contributor { text }?
+ & element date { text }?
+ & element date.created { text }?
+ & element date.issued { text }?
+ & element date.available { text }?
+ & element date.valid { text }?
+ & element date.modified { text }?
+ & element type { text }?
+ & element format { text }?
+ & element identifier { text }?
+ & element source { text }?
+ & element relation { text }?
+ & element coverage { text }?
+ & element rights { text }?
+ & element keywords { text }?
+ # extended semantic metadata:
+ & attribute subtitle { text }?
+ & attribute illustrator { text }?
+ & attribute translator { text }?
+ & attribute prepared_by { text }?
+ & attribute digitized_by { text }?
+ & attribute language { text }?
+ & attribute language.original { text }?
+ & attribute classify.pg { text }?
+ & attribute classify.isbn { text }?
+ & attribute classify.dewey { text }?
+ & attribute classify.loc { text }?
+ & attribute prefix.a { text }?
+ & attribute prefix.b { text }?
+ & attribute suffix { text }?
+ & attribute comments { text }?
+ & attribute abstract { text }?
+ # & attribute information { text }?
+ & attribute contact { text }?
+ & attribute links { text }?
+ }
+element-processing =
+ element processing {
+ attribute structure { text }?
+ & attribute level { text }?
+ & attribute markup { text }?
+ & attribute bold { text }?
+ & attribute italics { text }?
+ & attribute papersize { text }?
+ & attribute vocabulary { text }?
+ & element date_scheme { text }?
+ & element date.issued.scheme { text }?
+ & element date.available.scheme { text }?
+ & element date.valid.scheme { text }?
+ & element date.modified.scheme { text }?
+ }?
+element-head =
+ element head {
+ # processing instructions, and semantic data, distinguish?:
+ element metadata {
+ element title { text },
+ element file { text },
+ element generator { text },
+ element-semantic,
+ element-processing
+ }+
+ }
+# body text/contents
+# includes <b> <i> <u> <del> <ins> <indent1> <bullet> etc.
+element-txt =
+ element txt {
+ text*
+ & element b { text }*
+ & element i { text }*
+ & element u { text }*
+ & element ins { text }*
+ & element del { text }*
+ }
+element-checksum.endnote = element checksum.clean { text }
+element-endnote =
+ element endnote {
+ element number { text },
+ element note { element-txt }+,
+ element-checksum.endnote
+ }+
+element-checksum.para =
+ element checksum.para {
+ element checksum.clean { text },
+ element checksum.marked { text }
+ }
+element-para =
+ element para {
+ # attribute paragraph_format { text },
+ element-txt+
+ & element-endnote?
+ }
+element-object =
+ element object {
+ element-para,
+ element-checksum.para
+ }
+# object citation number, unique sequential number for objects:
+element-ocn = element ocn { text }
+element-object_structure_summary =
+ element-ocn,
+ # type: heading level value 1 -6, or normal text
+ element type { text },
+ # type number: sequential number for designated type
+ element type_number { text },
+ # type category: sequential number for designated category, e.g. sequentially counting all headers
+ element category_number { text }
+element-external_space =
+ element external_space {
+ # ignored by sisu, provide program needs
+ element program {
+ # e.g. kdissert
+ element name { text },
+ element xpos { text },
+ element ypos { text },
+ element font { text },
+ element outline_color { text },
+ element text_color { text },
+ element comment { text }
+ }*
+ }*,
+#%% structure
+ element document {
+ # document head:
+ element-head,
+ # document body:
+ element body {
+ # object, a unit of text, usually a paragraph with any associated endnotes
+ element node {
+ element structure {
+ # structure document using either node:heading levels or node:heading relationships:
+ # (i) sisu default uses node:heading levels (1-6 or A-C,1-3) to build document structure
+ element level { text }?,
+ # (ii) sisu alternatively could use node:heading relationship information to build document structure
+ element node.id { text },
+ element node.parent { text },
+ element node.child { text }*
+ },
+ element node.objects {
+ element object.heading {
+ element-object_structure_summary,
+ # nametag used only in headings, especially important for segmented html
+ element nametag { text },
+ element-object
+ },
+ element object.para {
+ element-object_structure_summary,
+ element-object
+ }*
+ }+,
+ element-external_space
+ }+
+ }
+ }
+RELAXNG
+ end
+ def rnc_model_output_sax
+ @relaxng =<<RELAXNG
+#% sax output model, part of SiSU and distributed under the same license
+default namespace = ""
+namespace xl = "http://www.w3.org/1999/xlink"
+start =
+ element document {
+ element head {
+ (br
+ | meta
+ | element creator {
+ attribute class { xsd:NCName },
+ (text
+ | element link {
+ attribute xl:href { xsd:anyURI },
+ attribute xl:type { xsd:NCName },
+ xsd:anyURI
+ })+
+ }
+ | element date {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_available {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_created {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_issued {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_modified {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_valid {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element keywords {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element language {
+ attribute class { xsd:NCName },
+ xsd:NCName
+ }
+ | element meta { xsd:NMTOKEN }
+ | element rights {
+ attribute class { xsd:NCName },
+ (text | link)+
+ }
+ | element source {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element structure {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element subject {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element title {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element type {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element source_control {
+ (br
+ | meta
+ | element sc {
+ attribute class { xsd:NCName },
+ text
+ })+
+ })+
+ },
+ element body {
+ element object {
+ attribute id { text },
+ element ocn {
+ text
+ },
+ element text {
+ attribute class { xsd:NCName },
+ (text
+ | b
+ | br
+ | del
+ | en
+ | i
+ | link
+ | sub
+ | sup
+ | u
+ | element image {
+ attribute alt { text }?,
+ attribute height { xsd:integer }?,
+ attribute width { xsd:integer }?,
+ attribute xl:actuate { xsd:NCName },
+ attribute xl:href { text },
+ attribute xl:show { xsd:NCName },
+ attribute xl:type { xsd:NCName }
+ })+
+ }?,
+ element table {
+ attribute align { xsd:NCName },
+ attribute bgcolor { xsd:NCName },
+ attribute border { xsd:integer },
+ attribute cellpadding { xsd:integer },
+ attribute summary { text },
+ attribute width { text },
+ element tr {
+ element td {
+ attribute valign { xsd:NCName },
+ attribute width { text },
+ (text | b | i)+
+ }+
+ }+
+ }?,
+ element endnote {
+ attribute notenumber { xsd:integer }?,
+ attribute symbol { text }?,
+ (element number { xsd:integer }
+ | element symbol { text }),
+ element note {
+ (text
+ | b
+ | br
+ | del
+ | i
+ | link
+ | sup
+ | u
+ | element em { xsd:NCName }
+ | element sub { xsd:NCName })+
+ }
+ }*
+ }+
+ }
+ }
+meta = element meta { text }
+br = element br { empty }
+b = element b { (text | en | i | link | sup)+ }
+i = element i { (text | b | br | sup)+ }
+en = element en { text }
+sub = element sub { xsd:NCName }
+sup = element sup { xsd:NCName }
+link =
+ element link {
+ attribute xl:href { xsd:anyURI },
+ attribute xl:type { xsd:NCName },
+ (xsd:anyURI | text | b | i | sup)+
+ }
+u = element u { (text | b | i)+ }
+del = element del { (text | b | i | link)+ }
+RELAXNG
+ end
+ def rnc_model_output_dom
+ @relaxng =<<RELAXNG
+#% dom output model, part of SiSU and distributed under the same license
+default namespace = ""
+namespace xl = "http://www.w3.org/1999/xlink"
+start =
+ element document {
+ element head {
+ element header {
+ meta,
+ (element creator { text }
+ | element date { xsd:NMTOKEN }
+ | element date_available { xsd:NMTOKEN }
+ | element date_created { xsd:NMTOKEN }
+ | element date_issued { xsd:NMTOKEN }
+ | element date_modified { xsd:NMTOKEN }
+ | element date_valid { xsd:NMTOKEN }
+ | element keywords { text }
+ | element language { xsd:NCName }
+ | element rights { (text | link)+ }
+ | element source { text }
+ | element structure { text }
+ | element subject { text }
+ | element title { text }
+ | element type { text }
+ | element source_control {
+ (br
+ | meta
+ | element sc {
+ attribute class { xsd:NCName },
+ text
+ })+
+ })
+ }+
+ },
+ element body {
+ element heading1 {
+ heading,
+ contents1*,
+ element heading2 {
+ heading,
+ contents1*,
+ element heading3 {
+ heading,
+ element contents1 {
+ heading,
+ content,
+ element contents2 {
+ heading,
+ content,
+ element contents3 { heading, content }*
+ }*
+ }+
+ }*
+ }*
+ }+
+ }
+ }
+meta = element meta { text }
+br = element br { empty }
+heading = element heading { object }
+contents1 =
+ element contents1 {
+ heading,
+ content,
+ element contents2 {
+ heading,
+ content,
+ element contents3 { heading, content }*
+ }*
+ }
+content = element content { object* }
+object =
+ element object {
+ attribute id { xsd:integer },
+ element ocn { text },
+ element nametag { text }?,
+ (element table {
+ attribute align { xsd:NCName },
+ attribute bgcolor { xsd:NCName },
+ attribute border { xsd:integer },
+ attribute cellpadding { xsd:integer },
+ attribute summary { text },
+ attribute width { text },
+ element tr {
+ element td {
+ attribute valign { xsd:NCName },
+ attribute width { text },
+ (text | b | i)+
+ }+
+ }+
+ }
+ | element text {
+ attribute class { xsd:NCName }?,
+ (text
+ | b
+ | del
+ | endnote
+ | i
+ | link
+ | element br { empty }
+ | element endnote {
+ element number { xsd:integer },
+ element note { (text | i | link)+ }
+ }
+ | element image {
+ attribute height { xsd:integer },
+ attribute width { xsd:integer },
+ attribute xl:actuate { xsd:NCName },
+ attribute xl:href { text },
+ attribute xl:show { xsd:NCName },
+ attribute xl:type { xsd:NCName }
+ }
+ | element sub { text })+
+ })
+ }
+i = element i { text }
+b = element i { text }
+u = element u { (text | b | i)+ }
+sub = element sub { xsd:NCName }
+sup = element sup { xsd:NCName }
+del = element del { (text | b | i | link)+ }
+link =
+ element link {
+ attribute xl:href { xsd:anyURI },
+ attribute xl:type { xsd:NCName },
+ xsd:anyURI
+ }
+endnote =
+ element endnote {
+ (element number { xsd:integer }
+ | element symbol { text }),
+ element note {
+ (text
+ | b
+ | br
+ | del
+ | i
+ | link
+ | sub
+ | sup
+ | u
+ | element em { xsd:NCName }
+ | element sub { xsd:NCName })+
+ }
+ }
+RELAXNG
+ end
+ def rnc_model_output_xhtml #not done
+ @relaxng =<<RELAXNG
+#% xhtml output model, part of SiSU and distributed under the same license
+default namespace = ""
+namespace xl = "http://www.w3.org/1999/xlink"
+start =
+ element document {
+ element head {
+ (br
+ | element creator {
+ attribute class { xsd:NCName },
+ (text
+ | element link {
+ attribute xl:href { xsd:anyURI },
+ attribute xl:type { xsd:NCName },
+ xsd:anyURI
+ })+
+ }
+ | element date {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_available {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_created {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_issued {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_modified {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element date_valid {
+ attribute class { xsd:NCName },
+ xsd:NMTOKEN
+ }
+ | element language {
+ attribute class { xsd:NCName },
+ xsd:NCName
+ }
+ | element keywords {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element meta {
+ attribute content { text }?,
+ attribute http-equiv { xsd:NCName }?,
+ text
+ }
+ | element rights {
+ attribute class { xsd:NCName },
+ (text | link)+
+ }
+ | element source {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element structure {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element subject {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element title {
+ attribute class { xsd:NCName },
+ text
+ }
+ | element type {
+ attribute class { xsd:NCName },
+ xsd:NCName
+ })+
+ },
+ element body {
+ element object {
+ attribute id { xsd:integer },
+ (element endnote {
+ attribute notenumber { xsd:integer }?,
+ attribute symbol { text }?,
+ (text
+ | b
+ | br
+ | del
+ | i
+ | link
+ | sup
+ | u
+ | element em { xsd:NCName }
+ | element sub { xsd:NCName })+
+ }
+ | element ocn { text }
+ | element text {
+ attribute class { xsd:NCName },
+ (text
+ | b
+ | br
+ | del
+ | en
+ | i
+ | link
+ | sup
+ | u
+ | element image {
+ attribute alt { text }?,
+ attribute height { xsd:integer }?,
+ attribute width { xsd:integer }?,
+ attribute xl:actuate { xsd:NCName },
+ attribute xl:href { text },
+ attribute xl:show { xsd:NCName },
+ attribute xl:type { xsd:NCName }
+ }
+ | element sub { text })+
+ })+,
+ element table {
+ attribute align { xsd:NCName },
+ attribute bgcolor { xsd:NCName },
+ attribute border { xsd:integer },
+ attribute cellpadding { xsd:integer },
+ attribute summary { text },
+ attribute width { text },
+ element tr {
+ element td {
+ attribute valign { xsd:NCName },
+ attribute width { text },
+ (text | b | i)+
+ }+
+ }+
+ }?
+ }+
+ }
+ }
+br = element br { empty }
+en = element en { text }
+sup = element sup { xsd:NCName }
+i = element i { (text | b | br | sup)+ }
+link =
+ element link {
+ attribute xl:href { xsd:anyURI },
+ attribute xl:type { xsd:NCName },
+ (text | b | i | sup)+
+ }
+b = element b { (text | en | i | link | sup)+ }
+u = element u { (text | b | i)+ }
+del = element del { (text | b | i | link)+ }
+RELAXNG
+ end
+ def rnc_model_input_sax
+ @relaxng =<<RELAXNG
+#% sax input model, part of SiSU and distributed under the same license
+default namespace = ""
+start =
+ element document {
+ element head {
+ element header {
+ attribute class { xsd:NCName },
+ (element creator { text }
+ | element date { xsd:NMTOKEN }
+ | element date.available { xsd:NMTOKEN }
+ | element date.created { xsd:NMTOKEN }
+ | element date.issued { xsd:NMTOKEN }
+ | element date.modified { xsd:NMTOKEN }
+ | element date.valid { xsd:NMTOKEN }
+ | element italicize { text }
+ | element language { xsd:NCName }
+ | element links { text }
+ | element markup { text }
+ | element rights { text }
+ | element subject { text }
+ | element title { text }
+ | element type { xsd:NCName }
+ | element vocabulary { xsd:NCName })
+ }+
+ },
+ element body {
+ element object {
+ element text {
+ attribute class { xsd:NCName },
+ (text
+ | b
+ | i
+ | element endnote {
+ attribute symbol { xsd:NCName },
+ (text
+ | i
+ | element br { empty })+
+ }
+ | element u { i }
+ | element image.path { text })+
+ }?
+ }+
+ }
+ }
+i = element i { text }
+b = element b { text }
+RELAXNG
+ end
+ def rnc_model_input_dom
+ @relaxng =<<RELAXNG
+#% dom input model, part of SiSU and distributed under the same license
+default namespace = ""
+start =
+ element document {
+ element head {
+ element header {
+ attribute class { xsd:NCName },
+ (element creator { text }
+ | element date { xsd:NMTOKEN }
+ | element date.available { xsd:NMTOKEN }
+ | element date.created { xsd:NMTOKEN }
+ | element date.issued { xsd:NMTOKEN }
+ | element date.modified { xsd:NMTOKEN }
+ | element date.valid { xsd:NMTOKEN }
+ | element italicize { text }
+ | element language { xsd:NCName }
+ | element links { text }
+ | element markup { text }
+ | element rights { text }
+ | element subject { text }
+ | element title { text }
+ | element type { xsd:NCName }
+ | element vocabulary { xsd:NCName })
+ }+
+ },
+ element body {
+ element heading1 {
+ heading,
+ element heading2 {
+ heading,
+ contents1+,
+ element heading3 { heading, contents1+ }+
+ }
+ }
+ }
+ }
+heading = element heading { object }
+contents1 =
+ element contents1 {
+ heading,
+ content,
+ element contents2 {
+ heading,
+ content,
+ element contents3 { heading, content }*
+ }*
+ }
+object =
+ element object {
+ element text {
+ (text
+ | italic
+ | element bold { xsd:NMTOKEN }
+ | element endnote {
+ element symbol { text }?,
+ element note {
+ (text
+ | italic
+ | element br { empty })+
+ }
+ }
+ | element underscore { italic }
+ | element image.path { text }
+ | element italic { text })+
+ }
+ }
+italic = element italic { text }
+content = element content { object+ }
+RELAXNG
+ end
+ def rnc_model_input_node
+ @relaxng =<<RELAXNG
+#% node input model, part of SiSU and distributed under the same license
+default namespace = ""
+start =
+ element document {
+ element head {
+ element header {
+ attribute class { xsd:NCName },
+ (element creator { text }
+ | element date { xsd:NMTOKEN }
+ | element date.available { xsd:NMTOKEN }
+ | element date.created { xsd:NMTOKEN }
+ | element date.issued { xsd:NMTOKEN }
+ | element date.modified { xsd:NMTOKEN }
+ | element date.valid { xsd:NMTOKEN }
+ | element italicize { (text | i)+ }
+ | element language { xsd:NCName }
+ | element links { text }
+ | element markup { text }
+ | element rights { text }
+ | element subject { text }
+ | element title { text }
+ | element type { xsd:NCName }
+ | element vocabulary { xsd:NCName })
+ }+
+ },
+ element body {
+ element object {
+ (element text {
+ attribute class { xsd:NCName },
+ (text
+ | b
+ | i
+ | element br { empty }
+ | element endnote {
+ attribute symbol { xsd:NCName },
+ (text | i)+
+ }
+ | element image.path { text }
+ | element sub { text })+
+ }
+ | (element ocn { empty },
+ element table {
+ attribute align { xsd:NCName },
+ attribute bgcolor { xsd:NCName },
+ attribute border { xsd:integer },
+ attribute cellpadding { xsd:integer },
+ attribute summary { text },
+ attribute width { text },
+ element tr {
+ element td {
+ attribute valign { xsd:NCName },
+ attribute width { text },
+ (text | b)+
+ }+
+ }+
+ })),
+ element node {
+ element id { xsd:integer },
+ element parent { xsd:integer },
+ element offspring { text }?
+ }
+ }+
+ }
+ }
+b = element b { text }
+i = element i { text }
+RELAXNG
+ end
+ end
+end
+__END__
+needs updating