added schema, added missing libraries to link with
authorJiri Srain <jsrain@suse.cz>
Tue, 15 Nov 2005 14:32:59 +0000 (14:32 +0000)
committerJiri Srain <jsrain@suse.cz>
Tue, 15 Nov 2005 14:32:59 +0000 (14:32 +0000)
25 files changed:
configure.ac
test/Makefile.am
test/devel.jsrain/Makefile.am
test/devel.ma/Makefile.am
zypp/parser/yum/Makefile.am
zypp/parser/yum/schema/Makefile.am [new file with mode: 0644]
zypp/parser/yum/schema/filelists.rnc [new file with mode: 0644]
zypp/parser/yum/schema/filelists.rng [new file with mode: 0644]
zypp/parser/yum/schema/groups.rnc [new file with mode: 0644]
zypp/parser/yum/schema/groups.rng [new file with mode: 0644]
zypp/parser/yum/schema/other.rnc [new file with mode: 0644]
zypp/parser/yum/schema/other.rng [new file with mode: 0644]
zypp/parser/yum/schema/patch.rnc [new file with mode: 0644]
zypp/parser/yum/schema/patch.rng [new file with mode: 0644]
zypp/parser/yum/schema/primary.rnc [new file with mode: 0644]
zypp/parser/yum/schema/primary.rng [new file with mode: 0644]
zypp/parser/yum/schema/product.rnc [new file with mode: 0644]
zypp/parser/yum/schema/product.rng [new file with mode: 0644]
zypp/parser/yum/schema/repomd.rnc [new file with mode: 0644]
zypp/parser/yum/schema/repomd.rng [new file with mode: 0644]
zypp/parser/yum/schema/rnc2rng [new file with mode: 0755]
zypp/parser/yum/schema/rpm-ns.rnc [new file with mode: 0644]
zypp/parser/yum/schema/rpm-ns.rng [new file with mode: 0644]
zypp/parser/yum/schema/suse-primary.rnc [new file with mode: 0644]
zypp/parser/yum/schema/suse-primary.rng [new file with mode: 0644]

index 6b92a14..4623858 100644 (file)
@@ -108,7 +108,8 @@ AC_OUTPUT(  \
        zypp/detail/Makefile    \
        zypp/capability/Makefile        \
        zypp/parser/Makefile            \
-       zypp/parser/yum/Makefile
+       zypp/parser/yum/Makefile        \
+       zypp/parser/yum/schema/Makefile
 )
 dnl ==================================================
 
index fba280c..add4e92 100644 (file)
@@ -11,7 +11,7 @@ noinst_PROGRAMS = Example.createResolvable
 
 ## ##################################################
 
-LDADD =        $(top_srcdir)/zypp/lib@PACKAGE@.la
+LDADD =        $(top_srcdir)/zypp/lib@PACKAGE@.la /usr/lib/libxml2.a /usr/lib/libz.a
 
 ## ##################################################
 
index 45f1784..ffd3d7b 100644 (file)
@@ -14,7 +14,7 @@ AM_LDFLAGS =
 
 AM_CXXFLAGS =  -pg
 
-LDADD =                $(top_srcdir)/zypp/lib@PACKAGE@.la
+LDADD =                $(top_srcdir)/zypp/lib@PACKAGE@.la  /usr/lib/libxml2.a /usr/lib/libz.a
 
 ## ##################################################
 
index bcfa335..dd8b7b4 100644 (file)
@@ -11,7 +11,7 @@ AM_LDFLAGS =
 
 AM_CXXFLAGS =  -pg
 
-LDADD =                $(top_srcdir)/zypp/lib@PACKAGE@.la
+LDADD =                $(top_srcdir)/zypp/lib@PACKAGE@.la  /usr/lib/libxml2.a /usr/lib/libz.a
 
 ## ##################################################
 
index 906cafa..dd2d25a 100644 (file)
@@ -1,7 +1,7 @@
 ## Process this file with automake to produce Makefile.in
 ## ##################################################
 
-SUBDIRS =
+SUBDIRS = schema
 
 INCLUDES = -I$(oldincludedir)/libxml2 -I..
 
diff --git a/zypp/parser/yum/schema/Makefile.am b/zypp/parser/yum/schema/Makefile.am
new file mode 100644 (file)
index 0000000..de8a6c3
--- /dev/null
@@ -0,0 +1,3 @@
+schemafilesdir =  /usr/share/YaST2/schema/packagemanager
+schemafiles_DATA = $(wildcard *.rng *.rnc)
+EXTRA_DIST = $(schemafiles_DATA)
diff --git a/zypp/parser/yum/schema/filelists.rnc b/zypp/parser/yum/schema/filelists.rnc
new file mode 100644 (file)
index 0000000..c4dbaca
--- /dev/null
@@ -0,0 +1,36 @@
+default namespace = "http://linux.duke.edu/metadata/filelists"
+
+element filelists {
+  attribute packages { xsd:nonNegativeInteger },
+  element package {
+    attribute pkgid { text },
+    attribute name { text },
+    attribute arch {
+      "noarch"
+      | "athlon"
+      | "i386"
+      | "i486"
+      | "i586"
+      | "i686"
+      | "ia64"
+      | "ppc"
+      | "ppc64"
+      | "s390"
+      | "s390x"
+      | "x86_64"
+      | "src"
+    },
+    element version {
+      attribute epoch { xsd:nonNegativeInteger },
+      attribute ver { text },
+      attribute rel { text },
+      empty
+    },
+    element file {
+      attribute type { "dir" | "ghost" }?,
+      text
+    }*,
+    empty
+  }+,
+  empty
+}
diff --git a/zypp/parser/yum/schema/filelists.rng b/zypp/parser/yum/schema/filelists.rng
new file mode 100644 (file)
index 0000000..7315d13
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="filelists" ns="http://linux.duke.edu/metadata/filelists" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <attribute name="packages">
+    <data type="nonNegativeInteger"/>
+  </attribute>
+  <oneOrMore>
+    <element name="package">
+      <attribute name="pkgid"/>
+      <attribute name="name"/>
+      <attribute name="arch">
+        <choice>
+          <value>noarch</value>
+          <value>athlon</value>
+          <value>i386</value>
+          <value>i486</value>
+          <value>i586</value>
+          <value>i686</value>
+          <value>ia64</value>
+          <value>ppc</value>
+          <value>ppc64</value>
+          <value>s390</value>
+          <value>s390x</value>
+          <value>x86_64</value>
+          <value>src</value>
+        </choice>
+      </attribute>
+      <element name="version">
+        <attribute name="epoch">
+          <data type="nonNegativeInteger"/>
+        </attribute>
+        <attribute name="ver"/>
+        <attribute name="rel"/>
+        <empty/>
+      </element>
+      <zeroOrMore>
+        <element name="file">
+          <optional>
+            <attribute name="type">
+              <choice>
+                <value>dir</value>
+                <value>ghost</value>
+              </choice>
+            </attribute>
+          </optional>
+          <text/>
+        </element>
+      </zeroOrMore>
+      <empty/>
+    </element>
+  </oneOrMore>
+  <empty/>
+</element>
diff --git a/zypp/parser/yum/schema/groups.rnc b/zypp/parser/yum/schema/groups.rnc
new file mode 100644 (file)
index 0000000..36d660f
--- /dev/null
@@ -0,0 +1,34 @@
+default namespace = "http://linux.duke.edu/metadata/groups"
+
+element groups {
+  element group {
+    element groupid { text },
+    element name {
+      attribute lang { text }?,
+      text
+    }+,
+    element default { "true" | "false" }?,
+    element uservisible { "true" | "false" },
+    element description {
+      attribute lang { text }?,
+      text
+    }+,
+    element grouplist {
+      element metapkg {
+        attribute type { text }?,
+        text
+      }+
+    }?,
+    element packagelist {
+      element packagereq {
+        attribute type { text }?,
+        attribute epoch { xsd:nonNegativeInteger },
+        attribute ver { text },
+        attribute rel { text },
+        text
+      }+
+    }?,
+    empty
+  }+,
+  empty
+}
diff --git a/zypp/parser/yum/schema/groups.rng b/zypp/parser/yum/schema/groups.rng
new file mode 100644 (file)
index 0000000..64abe2d
--- /dev/null
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="groups" ns="http://linux.duke.edu/metadata/groups" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <oneOrMore>
+    <element name="group">
+      <element name="groupid">
+        <text/>
+      </element>
+      <oneOrMore>
+        <element name="name">
+          <optional>
+            <attribute name="lang"/>
+          </optional>
+          <text/>
+        </element>
+      </oneOrMore>
+      <optional>
+        <element name="default">
+          <choice>
+            <value>true</value>
+            <value>false</value>
+          </choice>
+        </element>
+      </optional>
+      <element name="uservisible">
+        <choice>
+          <value>true</value>
+          <value>false</value>
+        </choice>
+      </element>
+      <oneOrMore>
+        <element name="description">
+          <optional>
+            <attribute name="lang"/>
+          </optional>
+          <text/>
+        </element>
+      </oneOrMore>
+      <optional>
+        <element name="grouplist">
+          <oneOrMore>
+            <element name="metapkg">
+              <optional>
+                <attribute name="type"/>
+              </optional>
+              <text/>
+            </element>
+          </oneOrMore>
+        </element>
+      </optional>
+      <optional>
+        <element name="packagelist">
+          <oneOrMore>
+            <element name="packagereq">
+              <optional>
+                <attribute name="type"/>
+              </optional>
+              <attribute name="epoch">
+                <data type="nonNegativeInteger"/>
+              </attribute>
+              <attribute name="ver"/>
+              <attribute name="rel"/>
+              <text/>
+            </element>
+          </oneOrMore>
+        </element>
+      </optional>
+      <empty/>
+    </element>
+  </oneOrMore>
+  <empty/>
+</element>
diff --git a/zypp/parser/yum/schema/other.rnc b/zypp/parser/yum/schema/other.rnc
new file mode 100644 (file)
index 0000000..4882e9d
--- /dev/null
@@ -0,0 +1,37 @@
+default namespace = "http://linux.duke.edu/metadata/other"
+
+element otherdata {
+  attribute packages { xsd:positiveInteger },
+  element package {
+    attribute pkgid { text },
+    attribute name { text },
+    attribute arch {
+      "noarch"
+      | "athlon"
+      | "i386"
+      | "i486"
+      | "i586"
+      | "i686"
+      | "ia64"
+      | "ppc"
+      | "ppc64"
+      | "s390"
+      | "x390x"
+      | "x86_64"
+      | "src"
+    },
+    element version {
+      attribute epoch { xsd:nonNegativeInteger },
+      attribute ver { text },
+      attribute rel { text },
+      empty
+    },
+    element changelog {
+      attribute author { text },
+      attribute date { xsd:integer },
+      text
+    }*,
+    empty
+  }+,
+  empty
+}
diff --git a/zypp/parser/yum/schema/other.rng b/zypp/parser/yum/schema/other.rng
new file mode 100644 (file)
index 0000000..13dff99
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="otherdata" ns="http://linux.duke.edu/metadata/other" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <attribute name="packages">
+    <data type="positiveInteger"/>
+  </attribute>
+  <oneOrMore>
+    <element name="package">
+      <attribute name="pkgid"/>
+      <attribute name="name"/>
+      <attribute name="arch">
+        <choice>
+          <value>noarch</value>
+          <value>athlon</value>
+          <value>i386</value>
+          <value>i486</value>
+          <value>i586</value>
+          <value>i686</value>
+          <value>ia64</value>
+          <value>ppc</value>
+          <value>ppc64</value>
+          <value>s390</value>
+          <value>x390x</value>
+          <value>x86_64</value>
+          <value>src</value>
+        </choice>
+      </attribute>
+      <element name="version">
+        <attribute name="epoch">
+          <data type="nonNegativeInteger"/>
+        </attribute>
+        <attribute name="ver"/>
+        <attribute name="rel"/>
+        <empty/>
+      </element>
+      <zeroOrMore>
+        <element name="changelog">
+          <attribute name="author"/>
+          <attribute name="date">
+            <data type="integer"/>
+          </attribute>
+          <text/>
+        </element>
+      </zeroOrMore>
+      <empty/>
+    </element>
+  </oneOrMore>
+  <empty/>
+</element>
diff --git a/zypp/parser/yum/schema/patch.rnc b/zypp/parser/yum/schema/patch.rnc
new file mode 100644 (file)
index 0000000..0ec877b
--- /dev/null
@@ -0,0 +1,108 @@
+default namespace = "http://novell.com/package/metadata/suse/patch"
+namespace ns1 = "http://novell.com/package/metadata/suse/common"
+namespace yum = "http://linux.duke.edu/metadata/common"
+
+include "suse-primary.rnc" {
+  start = element-patch
+  # patches use localized summary and description fields
+  element-summary = element summary { localized-string }+
+  element-description = element description { localized-string }+
+  # packages in patches have an additional rpmfiles element
+  element-package = element yum:package { package, element-pkgfiles }
+  # names in dependencies can include a "kind". Should not be used for packages.
+  attribute-name =
+    attribute kind { "package" | "patch" | "script" | "message" | "product" }?,
+    attribute name { text }
+}
+
+element-patch = element patch { patch }
+
+localized-string =
+  attribute lang { text },
+  text
+
+patch =
+  attribute engine { text },
+  attribute patchid { text },
+  attribute timestamp { xsd:nonNegativeInteger },
+  element-name,
+  element-summary,
+  element-description,
+  element-version,
+  dependency-block,
+  element-category,
+  element reboot_needed { empty }?,
+  element package_manager { empty }?,
+  element-update_script?,
+  element atoms { element-package | element-script | element-message }+
+
+dependency-block =
+  # shortcut since all atoms have the same dependency section
+  element-provides?,
+  element-conflicts?,
+  element-obsoletes?,
+  element-freshen?,
+  element-requires?
+
+element-category =
+  element category { "youfix" | "security" | "recommended" | "bonus" | "beta" }
+
+element-update_script = element update_script { text }
+
+element-script =
+  element script {
+    element-name,
+    element-version,    
+    element do { xsd:string },
+    element undo { xsd:string }?,
+    dependency-block
+  }
+
+element-message =
+  element message {
+    element-name,
+    element-version,    
+    attribute type { "OK" | "YesNo" },
+    element text { xsd:string },
+    dependency-block
+  }
+
+element-pkgfiles =
+  element pkgfiles {  ( element-deltarpm | element-patchrpm | element-plainrpm ) * }
+
+element-plainrpm =
+  element plainrpm {
+    shared-rpmfile-attributes
+  }
+
+element-patchrpm =
+  element patchrpm {
+    shared-rpmfile-attributes,
+    element-base_version +
+  }
+
+
+element-deltarpm =
+  element deltarpm {
+    shared-rpmfile-attributes,
+    element-delta-base_version
+  }
+
+shared-rpmfile-attributes =
+  attribute arch { arch },
+  attribute filename { text },
+  attribute downloadsize { text } ,
+  attribute md5sum { text } ?,
+  attribute buildtime { text } ?
+
+element-base_version = 
+  element base_version { version }
+
+element-delta-base_version =
+  element base_version {
+    version,
+    attribute md5sum { text },
+    attribute buildtime { text },
+    attribute sequence_info { text }
+  }
+
diff --git a/zypp/parser/yum/schema/patch.rng b/zypp/parser/yum/schema/patch.rng
new file mode 100644 (file)
index 0000000..722ab9a
--- /dev/null
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns:yum="http://linux.duke.edu/metadata/common" ns="http://novell.com/package/metadata/suse/patch" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <include href="suse-primary.rng">
+    <start>
+      <ref name="element-patch"/>
+    </start>
+    <!-- patches use localized summary and description fields -->
+    <define name="element-summary">
+      <oneOrMore>
+        <element name="summary">
+          <ref name="localized-string"/>
+        </element>
+      </oneOrMore>
+    </define>
+    <define name="element-description">
+      <oneOrMore>
+        <element name="description">
+          <ref name="localized-string"/>
+        </element>
+      </oneOrMore>
+    </define>
+    <!-- packages in patches have an additional rpmfiles element -->
+    <define name="element-package">
+      <element name="yum:package">
+        <ref name="package"/>
+        <ref name="element-pkgfiles"/>
+      </element>
+    </define>
+    <!-- names in dependencies can include a "kind". Should not be used for packages. -->
+    <define name="attribute-name">
+      <optional>
+        <attribute name="kind">
+          <choice>
+            <value>package</value>
+            <value>patch</value>
+            <value>script</value>
+            <value>message</value>
+            <value>product</value>
+          </choice>
+        </attribute>
+      </optional>
+      <attribute name="name"/>
+    </define>
+  </include>
+  <define name="element-patch">
+    <element name="patch">
+      <ref name="patch"/>
+    </element>
+  </define>
+  <define name="localized-string">
+    <attribute name="lang"/>
+    <text/>
+  </define>
+  <define name="patch">
+    <attribute name="engine"/>
+    <attribute name="patchid"/>
+    <attribute name="timestamp">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <ref name="element-name"/>
+    <ref name="element-summary"/>
+    <ref name="element-description"/>
+    <ref name="element-version"/>
+    <ref name="dependency-block"/>
+    <ref name="element-category"/>
+    <optional>
+      <element name="reboot_needed">
+        <empty/>
+      </element>
+    </optional>
+    <optional>
+      <element name="package_manager">
+        <empty/>
+      </element>
+    </optional>
+    <optional>
+      <ref name="element-update_script"/>
+    </optional>
+    <oneOrMore>
+      <element name="atoms">
+        <choice>
+          <ref name="element-package"/>
+          <ref name="element-script"/>
+          <ref name="element-message"/>
+        </choice>
+      </element>
+    </oneOrMore>
+  </define>
+  <define name="dependency-block">
+    <optional>
+      <!-- shortcut since all atoms have the same dependency section -->
+      <ref name="element-provides"/>
+    </optional>
+    <optional>
+      <ref name="element-conflicts"/>
+    </optional>
+    <optional>
+      <ref name="element-obsoletes"/>
+    </optional>
+    <optional>
+      <ref name="element-freshen"/>
+    </optional>
+    <optional>
+      <ref name="element-requires"/>
+    </optional>
+  </define>
+  <define name="element-category">
+    <element name="category">
+      <choice>
+        <value>youfix</value>
+        <value>security</value>
+        <value>recommended</value>
+        <value>bonus</value>
+        <value>beta</value>
+      </choice>
+    </element>
+  </define>
+  <define name="element-update_script">
+    <element name="update_script">
+      <text/>
+    </element>
+  </define>
+  <define name="element-script">
+    <element name="script">
+      <ref name="element-name"/>
+      <ref name="element-version"/>
+      <element name="do">
+        <data type="string"/>
+      </element>
+      <optional>
+        <element name="undo">
+          <data type="string"/>
+        </element>
+      </optional>
+      <ref name="dependency-block"/>
+    </element>
+  </define>
+  <define name="element-message">
+    <element name="message">
+      <ref name="element-name"/>
+      <ref name="element-version"/>
+      <attribute name="type">
+        <choice>
+          <value>OK</value>
+          <value>YesNo</value>
+        </choice>
+      </attribute>
+      <element name="text">
+        <data type="string"/>
+      </element>
+      <ref name="dependency-block"/>
+    </element>
+  </define>
+  <define name="element-pkgfiles">
+    <element name="pkgfiles">
+      <zeroOrMore>
+        <choice>
+          <ref name="element-deltarpm"/>
+          <ref name="element-patchrpm"/>
+          <ref name="element-plainrpm"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="element-plainrpm">
+    <element name="plainrpm">
+      <ref name="shared-rpmfile-attributes"/>
+    </element>
+  </define>
+  <define name="element-patchrpm">
+    <element name="patchrpm">
+      <ref name="shared-rpmfile-attributes"/>
+      <oneOrMore>
+        <ref name="element-base_version"/>
+      </oneOrMore>
+    </element>
+  </define>
+  <define name="element-deltarpm">
+    <element name="deltarpm">
+      <ref name="shared-rpmfile-attributes"/>
+      <ref name="element-delta-base_version"/>
+    </element>
+  </define>
+  <define name="shared-rpmfile-attributes">
+    <attribute name="arch">
+      <ref name="arch"/>
+    </attribute>
+    <attribute name="filename"/>
+    <attribute name="downloadsize"/>
+    <optional>
+      <attribute name="md5sum"/>
+    </optional>
+    <optional>
+      <attribute name="buildtime"/>
+    </optional>
+  </define>
+  <define name="element-base_version">
+    <element name="base_version">
+      <ref name="version"/>
+    </element>
+  </define>
+  <define name="element-delta-base_version">
+    <element name="base_version">
+      <ref name="version"/>
+      <attribute name="md5sum"/>
+      <attribute name="buildtime"/>
+      <attribute name="sequence_info"/>
+    </element>
+  </define>
+</grammar>
diff --git a/zypp/parser/yum/schema/primary.rnc b/zypp/parser/yum/schema/primary.rnc
new file mode 100644 (file)
index 0000000..784e81c
--- /dev/null
@@ -0,0 +1,113 @@
+default namespace = "http://linux.duke.edu/metadata/common"
+
+grammar {
+
+# defines element-format and format
+include "rpm-ns.rnc"
+
+start = element-metadata
+element-metadata = 
+  element metadata { metadata }
+
+metadata =
+  (
+    attribute packages { xsd:nonNegativeInteger }?,
+    element-package+
+  )
+
+element-package = 
+  element package { package }
+
+package = 
+    attribute type { "rpm" },
+    element-name,
+    element-arch,
+    element-version,
+    element-checksum,
+    element-summary,
+    element-description,
+    element-packager,
+    element-url,
+    element-time,
+    element-size,
+    element-location,
+    element-format
+
+element-name =
+    element name { text }
+
+element-arch =
+    element arch { arch }
+
+arch =      
+    "noarch"
+    | "athlon"
+    | "i386"
+    | "i486"
+    | "i586"
+    | "i686"
+    | "ia64"
+    | "ppc"
+    | "ppc64"
+    | "s390"
+    | "s390x"
+    | "x86_64"
+    | "src"
+
+element-version =
+    element version { version }
+
+version =
+    attribute epoch { xsd:nonNegativeInteger },
+    attribute ver { text },
+    attribute rel { text },
+    empty
+
+element-checksum =
+    element checksum { checksum }
+
+checksum =
+    attribute type { "md5" | "sha" },
+    attribute pkgid { "YES" | "NO" },
+    text
+    
+element-summary =
+    element summary { text }
+
+element-description =
+    element description { text }
+
+element-packager =
+    element packager { text }
+
+element-url =
+    element url { xsd:anyURI }
+
+element-time =
+    element time { time }
+
+time =
+    attribute file { xsd:nonNegativeInteger },
+    attribute build { xsd:nonNegativeInteger },
+    empty
+
+
+element-size =
+    element size { size }
+
+size =
+    attribute package { xsd:nonNegativeInteger },
+    attribute installed { xsd:nonNegativeInteger },
+    attribute archive { xsd:nonNegativeInteger },
+    empty
+
+element-location =
+    element location { location }
+
+location =
+    attribute xml:base { xsd:anyURI }?,
+    attribute href { xsd:anyURI },
+    empty
+
+}
+
diff --git a/zypp/parser/yum/schema/primary.rng b/zypp/parser/yum/schema/primary.rng
new file mode 100644 (file)
index 0000000..ccaf03a
--- /dev/null
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar ns="http://linux.duke.edu/metadata/common" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <!-- defines element-format and format -->
+  <include href="rpm-ns.rng"/>
+  <start>
+    <ref name="element-metadata"/>
+  </start>
+  <define name="element-metadata">
+    <element name="metadata">
+      <ref name="metadata"/>
+    </element>
+  </define>
+  <define name="metadata">
+    <optional>
+      <attribute name="packages">
+        <data type="nonNegativeInteger"/>
+      </attribute>
+    </optional>
+    <oneOrMore>
+      <ref name="element-package"/>
+    </oneOrMore>
+  </define>
+  <define name="element-package">
+    <element name="package">
+      <ref name="package"/>
+    </element>
+  </define>
+  <define name="package">
+    <attribute name="type">
+      <value>rpm</value>
+    </attribute>
+    <ref name="element-name"/>
+    <ref name="element-arch"/>
+    <ref name="element-version"/>
+    <ref name="element-checksum"/>
+    <ref name="element-summary"/>
+    <ref name="element-description"/>
+    <ref name="element-packager"/>
+    <ref name="element-url"/>
+    <ref name="element-time"/>
+    <ref name="element-size"/>
+    <ref name="element-location"/>
+    <ref name="element-format"/>
+  </define>
+  <define name="element-name">
+    <element name="name">
+      <text/>
+    </element>
+  </define>
+  <define name="element-arch">
+    <element name="arch">
+      <ref name="arch"/>
+    </element>
+  </define>
+  <define name="arch">
+    <choice>
+      <value>noarch</value>
+      <value>athlon</value>
+      <value>i386</value>
+      <value>i486</value>
+      <value>i586</value>
+      <value>i686</value>
+      <value>ia64</value>
+      <value>ppc</value>
+      <value>ppc64</value>
+      <value>s390</value>
+      <value>s390x</value>
+      <value>x86_64</value>
+      <value>src</value>
+    </choice>
+  </define>
+  <define name="element-version">
+    <element name="version">
+      <ref name="version"/>
+    </element>
+  </define>
+  <define name="version">
+    <attribute name="epoch">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="ver"/>
+    <attribute name="rel"/>
+    <empty/>
+  </define>
+  <define name="element-checksum">
+    <element name="checksum">
+      <ref name="checksum"/>
+    </element>
+  </define>
+  <define name="checksum">
+    <attribute name="type">
+      <choice>
+        <value>md5</value>
+        <value>sha</value>
+      </choice>
+    </attribute>
+    <attribute name="pkgid">
+      <choice>
+        <value>YES</value>
+        <value>NO</value>
+      </choice>
+    </attribute>
+    <text/>
+  </define>
+  <define name="element-summary">
+    <element name="summary">
+      <text/>
+    </element>
+  </define>
+  <define name="element-description">
+    <element name="description">
+      <text/>
+    </element>
+  </define>
+  <define name="element-packager">
+    <element name="packager">
+      <text/>
+    </element>
+  </define>
+  <define name="element-url">
+    <element name="url">
+      <data type="anyURI"/>
+    </element>
+  </define>
+  <define name="element-time">
+    <element name="time">
+      <ref name="time"/>
+    </element>
+  </define>
+  <define name="time">
+    <attribute name="file">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="build">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <empty/>
+  </define>
+  <define name="element-size">
+    <element name="size">
+      <ref name="size"/>
+    </element>
+  </define>
+  <define name="size">
+    <attribute name="package">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="installed">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="archive">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <empty/>
+  </define>
+  <define name="element-location">
+    <element name="location">
+      <ref name="location"/>
+    </element>
+  </define>
+  <define name="location">
+    <optional>
+      <attribute name="xml:base">
+        <data type="anyURI"/>
+      </attribute>
+    </optional>
+    <attribute name="href">
+      <data type="anyURI"/>
+    </attribute>
+    <empty/>
+  </define>
+</grammar>
diff --git a/zypp/parser/yum/schema/product.rnc b/zypp/parser/yum/schema/product.rnc
new file mode 100644 (file)
index 0000000..fb90ed9
--- /dev/null
@@ -0,0 +1,67 @@
+default namespace = "http://linux.duke.edu/metadata/rpm"
+namespace ns1 = "http://novell.com/package/metadata/suse/product"
+
+element ns1:product {
+  attribute type { text },
+  element ns1:vendor { text },
+  element ns1:name { text },
+  element ns1:version {
+    attribute epoch { xsd:nonNegativeInteger },
+    attribute ver { text },
+    attribute rel { text }
+  },
+  element ns1:displayname {
+    attribute lang { text },
+    text
+  }+,
+  element ns1:description {
+    attribute lang { text },
+    text
+  }+,
+  element ns1:version {
+    attribute epoch { xsd:nonNegativeInteger },
+    attribute ver { text },
+    attribute rel { text }
+  },
+  element provides {
+    element entry {
+      attribute name { text },
+      (attribute flags { "EQ" | "LE" | "GE" },
+       attribute epoch { xsd:nonNegativeInteger },
+       attribute ver { text },
+       attribute rel { text }?)?,
+      empty
+    }+
+  },
+  element conflicts {
+    element entry {
+      attribute name { text },
+      (attribute flags { "EQ" | "LE" | "GE" | "LT" | "GT" },
+       attribute epoch { xsd:nonNegativeInteger },
+       attribute ver { text },
+       attribute rel { text }?)?,
+      empty
+    }+
+  }?,
+  element obsoletes {
+    element entry {
+      attribute name { text },
+      (attribute flags { "EQ" | "LE" | "GE" | "LT" },
+       attribute epoch { xsd:nonNegativeInteger },
+       attribute ver { text },
+       attribute rel { text }?)?,
+      empty
+    }+
+  }?,
+  element requires {
+    element entry {
+      attribute name { text },
+      (attribute flags { "EQ" | "LE" | "GE" | "LT" | "GT" },
+       attribute epoch { xsd:nonNegativeInteger },
+       attribute ver { text },
+       attribute rel { text }?)?,
+      attribute pre { "1" | "0" }?,
+      empty
+    }*
+  }
+}
diff --git a/zypp/parser/yum/schema/product.rng b/zypp/parser/yum/schema/product.rng
new file mode 100644 (file)
index 0000000..570605a
--- /dev/null
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="ns1:product" xmlns:ns1="http://novell.com/package/metadata/suse/product" ns="http://linux.duke.edu/metadata/rpm" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <attribute name="type"/>
+  <element name="ns1:vendor">
+    <text/>
+  </element>
+  <element name="ns1:name">
+    <text/>
+  </element>
+  <element name="ns1:version">
+    <attribute name="epoch">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="ver"/>
+    <attribute name="rel"/>
+  </element>
+  <oneOrMore>
+    <element name="ns1:displayname">
+      <attribute name="lang"/>
+      <text/>
+    </element>
+  </oneOrMore>
+  <oneOrMore>
+    <element name="ns1:description">
+      <attribute name="lang"/>
+      <text/>
+    </element>
+  </oneOrMore>
+  <element name="ns1:version">
+    <attribute name="epoch">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="ver"/>
+    <attribute name="rel"/>
+  </element>
+  <element name="provides">
+    <oneOrMore>
+      <element name="entry">
+        <attribute name="name"/>
+        <optional>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+            </choice>
+          </attribute>
+          <attribute name="epoch">
+            <data type="nonNegativeInteger"/>
+          </attribute>
+          <attribute name="ver"/>
+          <optional>
+            <attribute name="rel"/>
+          </optional>
+        </optional>
+        <empty/>
+      </element>
+    </oneOrMore>
+  </element>
+  <optional>
+    <element name="conflicts">
+      <oneOrMore>
+        <element name="entry">
+          <attribute name="name"/>
+          <optional>
+            <attribute name="flags">
+              <choice>
+                <value>EQ</value>
+                <value>LE</value>
+                <value>GE</value>
+                <value>LT</value>
+                <value>GT</value>
+              </choice>
+            </attribute>
+            <attribute name="epoch">
+              <data type="nonNegativeInteger"/>
+            </attribute>
+            <attribute name="ver"/>
+            <optional>
+              <attribute name="rel"/>
+            </optional>
+          </optional>
+          <empty/>
+        </element>
+      </oneOrMore>
+    </element>
+  </optional>
+  <optional>
+    <element name="obsoletes">
+      <oneOrMore>
+        <element name="entry">
+          <attribute name="name"/>
+          <optional>
+            <attribute name="flags">
+              <choice>
+                <value>EQ</value>
+                <value>LE</value>
+                <value>GE</value>
+                <value>LT</value>
+              </choice>
+            </attribute>
+            <attribute name="epoch">
+              <data type="nonNegativeInteger"/>
+            </attribute>
+            <attribute name="ver"/>
+            <optional>
+              <attribute name="rel"/>
+            </optional>
+          </optional>
+          <empty/>
+        </element>
+      </oneOrMore>
+    </element>
+  </optional>
+  <element name="requires">
+    <zeroOrMore>
+      <element name="entry">
+        <attribute name="name"/>
+        <optional>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+              <value>LT</value>
+              <value>GT</value>
+            </choice>
+          </attribute>
+          <attribute name="epoch">
+            <data type="nonNegativeInteger"/>
+          </attribute>
+          <attribute name="ver"/>
+          <optional>
+            <attribute name="rel"/>
+          </optional>
+        </optional>
+        <optional>
+          <attribute name="pre">
+            <choice>
+              <value>1</value>
+              <value>0</value>
+            </choice>
+          </attribute>
+        </optional>
+        <empty/>
+      </element>
+    </zeroOrMore>
+  </element>
+</element>
diff --git a/zypp/parser/yum/schema/repomd.rnc b/zypp/parser/yum/schema/repomd.rnc
new file mode 100644 (file)
index 0000000..b798416
--- /dev/null
@@ -0,0 +1,22 @@
+default namespace = "http://linux.duke.edu/metadata/repo"
+
+element repomd {
+  element data {
+    attribute type { "other" | "filelists" | "primary" }&
+    element location {
+      attribute xml:base { xsd:anyURI }?,
+      attribute href { xsd:anyURI },
+      empty
+    }&
+    element checksum {
+      attribute type { "md5" | "sha" },
+      text
+    }&
+    element timestamp { xsd:integer }&
+    element open-checksum {
+      attribute type { "md5" | "sha" },
+      text
+    }?
+  }+&
+  text
+}
diff --git a/zypp/parser/yum/schema/repomd.rng b/zypp/parser/yum/schema/repomd.rng
new file mode 100644 (file)
index 0000000..0865bce
--- /dev/null
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<element name="repomd" ns="http://linux.duke.edu/metadata/repo" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <interleave>
+    <oneOrMore>
+      <element name="data">
+        <interleave>
+          <attribute name="type">
+            <choice>
+              <value>other</value>
+              <value>filelists</value>
+              <value>primary</value>
+            </choice>
+          </attribute>
+          <element name="location">
+            <optional>
+              <attribute name="xml:base">
+                <data type="anyURI"/>
+              </attribute>
+            </optional>
+            <attribute name="href">
+              <data type="anyURI"/>
+            </attribute>
+            <empty/>
+          </element>
+          <element name="checksum">
+            <attribute name="type">
+              <choice>
+                <value>md5</value>
+                <value>sha</value>
+              </choice>
+            </attribute>
+            <text/>
+          </element>
+          <element name="timestamp">
+            <data type="integer"/>
+          </element>
+          <optional>
+            <element name="open-checksum">
+              <attribute name="type">
+                <choice>
+                  <value>md5</value>
+                  <value>sha</value>
+                </choice>
+              </attribute>
+              <text/>
+            </element>
+          </optional>
+        </interleave>
+      </element>
+    </oneOrMore>
+    <text/>
+  </interleave>
+</element>
diff --git a/zypp/parser/yum/schema/rnc2rng b/zypp/parser/yum/schema/rnc2rng
new file mode 100755 (executable)
index 0000000..84897ec
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/bash
+for i in *.rnc; do trang -I rnc -O rng $i ${i%.rnc}.rng; done
diff --git a/zypp/parser/yum/schema/rpm-ns.rnc b/zypp/parser/yum/schema/rpm-ns.rnc
new file mode 100644 (file)
index 0000000..df22290
--- /dev/null
@@ -0,0 +1,112 @@
+default namespace = "http://linux.duke.edu/metadata/rpm"
+namespace ns1 = "http://linux.duke.edu/metadata/common"
+
+
+element-format = 
+    element ns1:format { format }
+
+format =
+    element-license,
+    element-vendor,
+    element-group,
+    element-buildhost,
+    element-sourcerpm,
+    element-header-range,
+    element-provides?,
+    element-conflicts?,
+    element-obsoletes?,
+    element-requires?,
+    element-file*
+
+
+element-license =
+    element license { text }
+
+element-vendor =
+    element vendor { text }
+
+element-group =
+    element group { text }
+
+element-buildhost =
+    element buildhost { text }
+
+element-sourcerpm =
+    element sourcerpm { text }
+
+element-header-range =
+    element header-range { header-range }
+
+header-range = 
+    attribute start { xsd:nonNegativeInteger },
+    attribute end { xsd:nonNegativeInteger },
+    empty
+
+element-provides =
+    element provides { provides }
+
+shared-entry-attributes =
+     attribute epoch { xsd:nonNegativeInteger },
+     attribute ver { text },
+     attribute rel { text }?
+
+attribute-name =
+     attribute name { text }
+
+provides =
+    element entry {
+      attribute-name,
+      (
+        shared-entry-attributes,
+        attribute flags { "EQ" | "LE" | "GE" }
+      )?,
+      empty
+    }+
+
+element-conflicts =
+    element conflicts { conflicts }
+
+conflicts =
+    element entry {
+      attribute-name,
+      (
+        shared-entry-attributes,
+        attribute flags { "EQ" | "LE" | "GE" | "LT" | "GT" }
+      )?,
+      empty
+    }+
+
+
+element-obsoletes =
+    element obsoletes { obsoletes }
+
+obsoletes =
+    element entry {
+      attribute-name,
+      (
+        shared-entry-attributes,
+        attribute flags { "EQ" | "LE" | "GE" | "LT" }
+      )?,
+      empty
+    }+
+
+element-requires =
+    element requires { requires }
+
+requires =
+    element entry {
+      attribute-name,
+      (
+        shared-entry-attributes,
+        attribute flags { "EQ" | "LE" | "GE" | "LT" | "GT" }
+      )?,
+      attribute pre { "1" | "0" }?,
+        empty
+      }*
+
+element-file =
+    element ns1:file { file }
+
+file =
+    attribute type { "dir" | "ghost" }?,
+    text
diff --git a/zypp/parser/yum/schema/rpm-ns.rng b/zypp/parser/yum/schema/rpm-ns.rng
new file mode 100644 (file)
index 0000000..49eaf48
--- /dev/null
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns:ns1="http://linux.duke.edu/metadata/common" ns="http://linux.duke.edu/metadata/rpm" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <define name="element-format">
+    <element name="ns1:format">
+      <ref name="format"/>
+    </element>
+  </define>
+  <define name="format">
+    <ref name="element-license"/>
+    <ref name="element-vendor"/>
+    <ref name="element-group"/>
+    <ref name="element-buildhost"/>
+    <ref name="element-sourcerpm"/>
+    <ref name="element-header-range"/>
+    <optional>
+      <ref name="element-provides"/>
+    </optional>
+    <optional>
+      <ref name="element-conflicts"/>
+    </optional>
+    <optional>
+      <ref name="element-obsoletes"/>
+    </optional>
+    <optional>
+      <ref name="element-requires"/>
+    </optional>
+    <zeroOrMore>
+      <ref name="element-file"/>
+    </zeroOrMore>
+  </define>
+  <define name="element-license">
+    <element name="license">
+      <text/>
+    </element>
+  </define>
+  <define name="element-vendor">
+    <element name="vendor">
+      <text/>
+    </element>
+  </define>
+  <define name="element-group">
+    <element name="group">
+      <text/>
+    </element>
+  </define>
+  <define name="element-buildhost">
+    <element name="buildhost">
+      <text/>
+    </element>
+  </define>
+  <define name="element-sourcerpm">
+    <element name="sourcerpm">
+      <text/>
+    </element>
+  </define>
+  <define name="element-header-range">
+    <element name="header-range">
+      <ref name="header-range"/>
+    </element>
+  </define>
+  <define name="header-range">
+    <attribute name="start">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="end">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <empty/>
+  </define>
+  <define name="element-provides">
+    <element name="provides">
+      <ref name="provides"/>
+    </element>
+  </define>
+  <define name="shared-entry-attributes">
+    <attribute name="epoch">
+      <data type="nonNegativeInteger"/>
+    </attribute>
+    <attribute name="ver"/>
+    <optional>
+      <attribute name="rel"/>
+    </optional>
+  </define>
+  <define name="attribute-name">
+    <attribute name="name"/>
+  </define>
+  <define name="provides">
+    <oneOrMore>
+      <element name="entry">
+        <ref name="attribute-name"/>
+        <optional>
+          <ref name="shared-entry-attributes"/>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+            </choice>
+          </attribute>
+        </optional>
+        <empty/>
+      </element>
+    </oneOrMore>
+  </define>
+  <define name="element-conflicts">
+    <element name="conflicts">
+      <ref name="conflicts"/>
+    </element>
+  </define>
+  <define name="conflicts">
+    <oneOrMore>
+      <element name="entry">
+        <ref name="attribute-name"/>
+        <optional>
+          <ref name="shared-entry-attributes"/>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+              <value>LT</value>
+              <value>GT</value>
+            </choice>
+          </attribute>
+        </optional>
+        <empty/>
+      </element>
+    </oneOrMore>
+  </define>
+  <define name="element-obsoletes">
+    <element name="obsoletes">
+      <ref name="obsoletes"/>
+    </element>
+  </define>
+  <define name="obsoletes">
+    <oneOrMore>
+      <element name="entry">
+        <ref name="attribute-name"/>
+        <optional>
+          <ref name="shared-entry-attributes"/>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+              <value>LT</value>
+            </choice>
+          </attribute>
+        </optional>
+        <empty/>
+      </element>
+    </oneOrMore>
+  </define>
+  <define name="element-requires">
+    <element name="requires">
+      <ref name="requires"/>
+    </element>
+  </define>
+  <define name="requires">
+    <zeroOrMore>
+      <element name="entry">
+        <ref name="attribute-name"/>
+        <optional>
+          <ref name="shared-entry-attributes"/>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+              <value>LT</value>
+              <value>GT</value>
+            </choice>
+          </attribute>
+        </optional>
+        <optional>
+          <attribute name="pre">
+            <choice>
+              <value>1</value>
+              <value>0</value>
+            </choice>
+          </attribute>
+        </optional>
+        <empty/>
+      </element>
+    </zeroOrMore>
+  </define>
+  <define name="element-file">
+    <element name="ns1:file">
+      <ref name="file"/>
+    </element>
+  </define>
+  <define name="file">
+    <optional>
+      <attribute name="type">
+        <choice>
+          <value>dir</value>
+          <value>ghost</value>
+        </choice>
+      </attribute>
+    </optional>
+    <text/>
+  </define>
+</grammar>
diff --git a/zypp/parser/yum/schema/suse-primary.rnc b/zypp/parser/yum/schema/suse-primary.rnc
new file mode 100644 (file)
index 0000000..b9c1a8f
--- /dev/null
@@ -0,0 +1,72 @@
+default namespace = "http://novell.com/package/metadata/suse/common"
+namespace ns1 = "http://linux.duke.edu/metadata/common"
+
+
+include "primary.rnc" {
+  element-format = 
+    element ns1:format { suse-format }
+}
+
+suse-format =
+    format&
+    suse-additional-format?
+
+suse-additional-format =
+    element-authors,
+    element-keywords?,
+    element-media?,
+    element-dirsizes?,
+    element-freshen?,
+    element-install_only?
+
+element-authors =
+  element authors { authors }
+
+authors =
+    element author { text }+,
+    empty
+
+element-keywords =
+    element keywords { keywords }
+
+keywords =
+    element keyword { text }+,
+    empty
+
+element-media =
+    element media { media }
+
+media =
+    attribute mediaid { text },
+    empty
+
+element-dirsizes =
+    element dirsizes { dirsizes }
+
+dirsizes =
+    element-dirsize+
+
+element-dirsize =
+    element dirsize { dirsize }
+
+dirsize =
+    attribute path { text },
+    attribute size-kbyte { text },
+    attribute filecount { text },
+    empty
+
+element-freshen =
+    element freshen { freshen }
+
+freshen =
+    element entry {
+      attribute-name,
+      (
+        shared-entry-attributes,
+        attribute flags { "EQ" | "LE" | "GE" | "LT" | "GT" }
+      )?,
+      empty
+    }+
+
+element-install_only =
+    element install_only { empty }
diff --git a/zypp/parser/yum/schema/suse-primary.rng b/zypp/parser/yum/schema/suse-primary.rng
new file mode 100644 (file)
index 0000000..ea97990
--- /dev/null
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns:ns1="http://linux.duke.edu/metadata/common" ns="http://novell.com/package/metadata/suse/common" xmlns="http://relaxng.org/ns/structure/1.0">
+  <include href="primary.rng">
+    <define name="element-format">
+      <element name="ns1:format">
+        <ref name="suse-format"/>
+      </element>
+    </define>
+  </include>
+  <define name="suse-format">
+    <interleave>
+      <ref name="format"/>
+      <optional>
+        <ref name="suse-additional-format"/>
+      </optional>
+    </interleave>
+  </define>
+  <define name="suse-additional-format">
+    <ref name="element-authors"/>
+    <optional>
+      <ref name="element-keywords"/>
+    </optional>
+    <optional>
+      <ref name="element-media"/>
+    </optional>
+    <optional>
+      <ref name="element-dirsizes"/>
+    </optional>
+    <optional>
+      <ref name="element-freshen"/>
+    </optional>
+    <optional>
+      <ref name="element-install_only"/>
+    </optional>
+  </define>
+  <define name="element-authors">
+    <element name="authors">
+      <ref name="authors"/>
+    </element>
+  </define>
+  <define name="authors">
+    <oneOrMore>
+      <element name="author">
+        <text/>
+      </element>
+    </oneOrMore>
+    <empty/>
+  </define>
+  <define name="element-keywords">
+    <element name="keywords">
+      <ref name="keywords"/>
+    </element>
+  </define>
+  <define name="keywords">
+    <oneOrMore>
+      <element name="keyword">
+        <text/>
+      </element>
+    </oneOrMore>
+    <empty/>
+  </define>
+  <define name="element-media">
+    <element name="media">
+      <ref name="media"/>
+    </element>
+  </define>
+  <define name="media">
+    <attribute name="mediaid"/>
+    <empty/>
+  </define>
+  <define name="element-dirsizes">
+    <element name="dirsizes">
+      <ref name="dirsizes"/>
+    </element>
+  </define>
+  <define name="dirsizes">
+    <oneOrMore>
+      <ref name="element-dirsize"/>
+    </oneOrMore>
+  </define>
+  <define name="element-dirsize">
+    <element name="dirsize">
+      <ref name="dirsize"/>
+    </element>
+  </define>
+  <define name="dirsize">
+    <attribute name="path"/>
+    <attribute name="size-kbyte"/>
+    <attribute name="filecount"/>
+    <empty/>
+  </define>
+  <define name="element-freshen">
+    <element name="freshen">
+      <ref name="freshen"/>
+    </element>
+  </define>
+  <define name="freshen">
+    <oneOrMore>
+      <element name="entry">
+        <ref name="attribute-name"/>
+        <optional>
+          <ref name="shared-entry-attributes"/>
+          <attribute name="flags">
+            <choice>
+              <value>EQ</value>
+              <value>LE</value>
+              <value>GE</value>
+              <value>LT</value>
+              <value>GT</value>
+            </choice>
+          </attribute>
+        </optional>
+        <empty/>
+      </element>
+    </oneOrMore>
+  </define>
+  <define name="element-install_only">
+    <element name="install_only">
+      <empty/>
+    </element>
+  </define>
+</grammar>