--- /dev/null jeu. janv. 01 00:00:00 1970 +0000
+++ b/RelaxNG/publiset.rnc sam. juin 04 09:01:30 2011 +0200
@@ -0,0 +1,207 @@
+# $Id$
+
+start = publiset
+
+
+publiset = element publiset {
+ publiset.attributes,
+ publiset.content
+}
+
+# ~~~~~~ attributes
+publiset.attributes =
+ version.attribute
+
+version.attribute = attribute version { "1.0" }
+
+# ~~~~~~ content
+publiset.content =
+ (composition | selection)+
+
+
+# =============================================================================
+# Top level
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ composition ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+composition = element composition {
+ composition.attributes,
+ composition.content
+}
+
+# ~~~~~~ attributes
+composition.attributes =
+ composition.id.attribute
+ & base.attribute?
+ & remap.attributes
+
+composition.id.attribute = attribute xml:id { xsd:ID }
+base.attribute = attribute xml:base { xsd:anyURI }
+
+# ~~~~~~ content
+composition.content =
+ composition.metadata?,
+ (composition.file | composition.division)+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ selection ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+selection = element selection {
+ selection.attributes,
+ selection.content
+}
+
+# ~~~~~~ attributes
+selection.attributes =
+ base.attribute?
+
+selection.id.attribute = attribute xml:id { xsd:ID }
+
+# ~~~~~~ content
+selection.content =
+ selection.metadata?,
+ (selection.file | selection.division)+
+
+
+# =============================================================================
+# Metadata level
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+composition.metadata = element metadata {
+ metadata.attributes,
+ metadata.content
+}
+
+selection.metadata = element metadata { metadata.content }
+
+# ~~~~~~ attributes
+metadata.attributes =
+ remap.attributes
+
+# ~~~~~~ content
+metadata.content =
+ title?,
+ subtitle?,
+ source?
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ title, subtitle ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+title = element title { title.content }
+title.content = inlines
+
+subtitle = element subtitle { title.content }
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+source = element source {
+ source.attributes,
+ ( (attribute type { "book" }, source.content.book)
+ | (attribute type { "file" }))
+}
+
+# ~~~~~~ Attributes
+source.attributes =
+ source.id.attribute?
+ & remap.attributes
+
+source.id.attribute = attribute id { xsd:NMTOKEN }
+
+# ~~~~~~ Content
+source.content.book =
+ title?,
+ pagenumber?
+
+pagenumber = element pagenumber { pagenumber.attributes }
+pagenumber.attributes =
+ pagenumber.value.attribute
+pagenumber.value.attribute = attribute value { pagenumber.value.enumeration }
+pagenumber.value.enumeration = xsd:positiveInteger
+
+
+# =============================================================================
+# Division level
+# =============================================================================
+
+composition.division = element division {
+ composition.division.attributes,
+ composition.division.content
+}
+
+selection.division = element division {
+ selection.division.attributes,
+ selection.division.content
+}
+
+# ~~~~~~ attributes
+composition.division.attributes =
+ base.attribute?
+ & remap.attributes
+
+selection.division.attributes =
+ base.attribute?
+
+# ~~~~~~ content
+composition.division.content =
+ composition.metadata?,
+ (composition.file | composition.division)+
+
+selection.division.content =
+ selection.metadata?,
+ (selection.file | selection.division)+
+
+
+# =============================================================================
+# File level
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ file ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+composition.file = element file { composition.file.attributes }
+
+selection.file = element file { selection.file.attributes }
+
+# ~~~~~~ attributes
+composition.file.attributes =
+ name.attribute
+ & xpath.attribute?
+ & remap.attributes
+
+selection.file.attributes =
+ name.attribute
+ & xpath.attribute?
+
+name.attribute = attribute name { text }
+xpath.attribute = attribute xpath { text }
+
+
+# =============================================================================
+# Inline level
+# =============================================================================
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inlines ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+inlines = mixed {
+ sup*
+ & sub*
+}
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sub, sup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+sup = element sup { inlines }
+
+sub = element sub { inlines }
+
+
+# =============================================================================
+# Remap attributes
+# =============================================================================
+
+remap.attributes =
+ as.attribute?
+ & attributes.attribute?
+
+as.attribute = attribute as { xsd:QName }
+attributes.attribute =
+ attribute attributes {list { (xsd:token {pattern = "\c+=\S+"})+ }}