Fixes according to real-life repos.
authorMartin Vidner <mvidner@suse.cz>
Tue, 19 Jun 2007 16:23:11 +0000 (16:23 +0000)
committerMartin Vidner <mvidner@suse.cz>
Tue, 19 Jun 2007 16:23:11 +0000 (16:23 +0000)
(To be continued)

zypp/parser/yum/schema/patch.rnc
zypp/parser/yum/schema/patch.rng
zypp/parser/yum/schema/primary.rnc
zypp/parser/yum/schema/primary.rng
zypp/parser/yum/schema/rpm-ns.rnc
zypp/parser/yum/schema/rpm-ns.rng
zypp/parser/yum/schema/suse-primary.rnc
zypp/parser/yum/schema/suse-primary.rng

index 7e5c6bd..8657971 100644 (file)
@@ -11,25 +11,47 @@ include "suse-primary.rnc" {
   element-license-to-confirm = element license-to-confirm { localized-string }  
 # packages in patches have an additional rpmfiles element
   element-package = element yum:package { package & element-pkgfiles & (element license-to-confirm { localized-string }?) }
+
+# first part made optional
+  format =
+    ( element-license & element-vendor & element-group & element-buildhost & element-sourcerpm & element-header-range )?,
+    ( element-provides | element-conflicts | element-obsoletes | element-requires | element-recommends | element-enhances | element-supplements | element-suggests )*,
+    element-file*
+
+# wrong namespace again, grr
+  element-time =
+    element yum:time {time} |
+    element time {time}
+  element-size =
+    element yum:size {size} |
+    # and wrong content too...
+    element size {
+      attribute package { xsd:nonNegativeInteger },
+      attribute installed { xsd:nonNegativeInteger }?,
+      attribute archive { xsd:nonNegativeInteger },
+      empty
+    }
+
 }
 
 
 element-patch = element patch { patch }
 
+# &, fetchmsttfonts mixes up the order
 patch =
-  attribute patchid { text },
-  attribute timestamp { xsd:nonNegativeInteger },
-  attribute engine { text },
-  element-name,
-  element-summary,
-  element-description,
-  element-license-to-confirm*,
-  element-version,
-  ( element-provides | element-conflicts | element-obsoletes | element-requires | element-freshens | element-recommends | element-suggests | element-supplements | element-enhances )*,
-  element-category,
-  element reboot-needed { empty }?,
-  element package-manager { empty }?,
-  element-update-script?,
+  attribute patchid { text }&
+  attribute timestamp { xsd:nonNegativeInteger }&
+  attribute engine { text }&
+  element-name&
+  element-summary&
+  element-description&
+  element-license-to-confirm*&
+  element-version&
+  ( element-provides | element-conflicts | element-obsoletes | element-requires | element-freshens | element-recommends | element-suggests | element-supplements | element-enhances )*&
+  element-category&
+  element reboot-needed { empty }?&
+  element package-manager { empty }?&
+  element-update-script?&
   element atoms { (element-package | element-script | element-message)+ }+
 
 # shortcut since all atoms have the same dependency section
@@ -37,7 +59,8 @@ dependency-block =
   ( element-provides | element-conflicts | element-obsoletes | element-requires | element-freshens | element-recommends | element-suggests | element-supplements | element-enhances )*
 
 element-category =
-  element category { "youfix" | "security" | "recommended" | "bonus" | "beta" }
+#  element category { "youfix" | "security" | "recommended" | "bonus" | "beta" }
+  element category { "optional" | "recommended" | "security" }
 
 element-update-script = element update-script { text }
 
@@ -119,10 +142,11 @@ element-deltarpm =
     element-delta-base-version
   }
 
+# none used in fact...
 shared-rpmfile-attributes =
-  attribute arch { arch },
-  attribute filename { text },
-  attribute downloadsize { text } ,
+  attribute arch { arch } ?,
+  attribute filename { text } ?,
+  attribute downloadsize { text } ,
   attribute md5sum { text } ?,
   attribute buildtime { text } ?
 
index 27c895f..fd32f03 100644 (file)
@@ -1,5 +1,5 @@
 <?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">
+<grammar ns="http://novell.com/package/metadata/suse/patch" xmlns:yum="http://linux.duke.edu/metadata/common" 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"/>
         </interleave>
       </element>
     </define>
+    <!-- first part made optional -->
+    <define name="format">
+      <optional>
+        <interleave>
+          <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"/>
+        </interleave>
+      </optional>
+      <zeroOrMore>
+        <choice>
+          <ref name="element-provides"/>
+          <ref name="element-conflicts"/>
+          <ref name="element-obsoletes"/>
+          <ref name="element-requires"/>
+          <ref name="element-recommends"/>
+          <ref name="element-enhances"/>
+          <ref name="element-supplements"/>
+          <ref name="element-suggests"/>
+        </choice>
+      </zeroOrMore>
+      <zeroOrMore>
+        <ref name="element-file"/>
+      </zeroOrMore>
+    </define>
+    <!-- wrong namespace again, grr -->
+    <define name="element-time">
+      <choice>
+        <element name="yum:time">
+          <ref name="time"/>
+        </element>
+        <element name="time">
+          <ref name="time"/>
+        </element>
+      </choice>
+    </define>
+    <define name="element-size">
+      <choice>
+        <element name="yum:size">
+          <ref name="size"/>
+        </element>
+        <!-- and wrong content too... -->
+        <element name="size">
+          <attribute name="package">
+            <data type="nonNegativeInteger"/>
+          </attribute>
+          <optional>
+            <attribute name="installed">
+              <data type="nonNegativeInteger"/>
+            </attribute>
+          </optional>
+          <attribute name="archive">
+            <data type="nonNegativeInteger"/>
+          </attribute>
+          <empty/>
+        </element>
+      </choice>
+    </define>
   </include>
   <define name="element-patch">
     <element name="patch">
       <ref name="patch"/>
     </element>
   </define>
+  <!-- &, fetchmsttfonts mixes up the order -->
   <define name="patch">
-    <attribute name="patchid"/>
-    <attribute name="timestamp">
-      <data type="nonNegativeInteger"/>
-    </attribute>
-    <attribute name="engine"/>
-    <ref name="element-name"/>
-    <ref name="element-summary"/>
-    <ref name="element-description"/>
-    <zeroOrMore>
-      <ref name="element-license-to-confirm"/>
-    </zeroOrMore>
-    <ref name="element-version"/>
-    <zeroOrMore>
-      <choice>
-        <ref name="element-provides"/>
-        <ref name="element-conflicts"/>
-        <ref name="element-obsoletes"/>
-        <ref name="element-requires"/>
-        <ref name="element-freshens"/>
-        <ref name="element-recommends"/>
-        <ref name="element-suggests"/>
-        <ref name="element-supplements"/>
-        <ref name="element-enhances"/>
-      </choice>
-    </zeroOrMore>
-    <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">
-        <oneOrMore>
-          <choice>
-            <ref name="element-package"/>
-            <ref name="element-script"/>
-            <ref name="element-message"/>
-          </choice>
-        </oneOrMore>
-      </element>
-    </oneOrMore>
+    <interleave>
+      <attribute name="patchid"/>
+      <attribute name="timestamp">
+        <data type="nonNegativeInteger"/>
+      </attribute>
+      <attribute name="engine"/>
+      <ref name="element-name"/>
+      <ref name="element-summary"/>
+      <ref name="element-description"/>
+      <zeroOrMore>
+        <ref name="element-license-to-confirm"/>
+      </zeroOrMore>
+      <ref name="element-version"/>
+      <zeroOrMore>
+        <choice>
+          <ref name="element-provides"/>
+          <ref name="element-conflicts"/>
+          <ref name="element-obsoletes"/>
+          <ref name="element-requires"/>
+          <ref name="element-freshens"/>
+          <ref name="element-recommends"/>
+          <ref name="element-suggests"/>
+          <ref name="element-supplements"/>
+          <ref name="element-enhances"/>
+        </choice>
+      </zeroOrMore>
+      <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">
+          <oneOrMore>
+            <choice>
+              <ref name="element-package"/>
+              <ref name="element-script"/>
+              <ref name="element-message"/>
+            </choice>
+          </oneOrMore>
+        </element>
+      </oneOrMore>
+    </interleave>
   </define>
   <!-- shortcut since all atoms have the same dependency section -->
   <define name="dependency-block">
     </zeroOrMore>
   </define>
   <define name="element-category">
+    <!--  element category { "youfix" | "security" | "recommended" | "bonus" | "beta" } -->
     <element name="category">
       <choice>
-        <value>youfix</value>
-        <value>security</value>
+        <value>optional</value>
         <value>recommended</value>
-        <value>bonus</value>
-        <value>beta</value>
+        <value>security</value>
       </choice>
     </element>
   </define>
       <ref name="element-delta-base-version"/>
     </element>
   </define>
+  <!-- none used in fact... -->
   <define name="shared-rpmfile-attributes">
-    <attribute name="arch">
-      <ref name="arch"/>
-    </attribute>
-    <attribute name="filename"/>
-    <attribute name="downloadsize"/>
+    <optional>
+      <attribute name="arch">
+        <ref name="arch"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="filename"/>
+    </optional>
+    <optional>
+      <attribute name="downloadsize"/>
+    </optional>
     <optional>
       <attribute name="md5sum"/>
     </optional>
index db67b33..d198430 100644 (file)
@@ -1,4 +1,5 @@
 default namespace = "http://linux.duke.edu/metadata/common"
+namespace suse = "http://novell.com/package/metadata/suse/common"
 
 grammar {
 
@@ -18,20 +19,22 @@ metadata =
 element-package = 
   element package { package }
 
+# ?: for package in atoms (suse-broken)
 package = 
     attribute type { "rpm" } &
     element-name &
     element-arch &
     element-version &
     element-checksum &
-    (element-summary*) &
-    (element-description*) &
-    element-packager &
-    element-url &
+    element-summary* &
+    element-description* &
+    element-packager? &
+    element-url? &
     element-time &
     element-size &
     element-location &
-    element-format
+    element-format &
+    element suse:license-to-confirm {text}?
 
 element-name =
     element name { text }
index 69d0a3c..d38f13b 100644 (file)
@@ -1,5 +1,5 @@
 <?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">
+<grammar ns="http://linux.duke.edu/metadata/common" xmlns:suse="http://novell.com/package/metadata/suse/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>
@@ -25,6 +25,7 @@
       <ref name="package"/>
     </element>
   </define>
+  <!-- ?: for package in atoms (suse-broken) -->
   <define name="package">
     <interleave>
       <attribute name="type">
       <zeroOrMore>
         <ref name="element-description"/>
       </zeroOrMore>
-      <ref name="element-packager"/>
-      <ref name="element-url"/>
+      <optional>
+        <ref name="element-packager"/>
+      </optional>
+      <optional>
+        <ref name="element-url"/>
+      </optional>
       <ref name="element-time"/>
       <ref name="element-size"/>
       <ref name="element-location"/>
       <ref name="element-format"/>
+      <optional>
+        <element name="suse:license-to-confirm">
+          <text/>
+        </element>
+      </optional>
     </interleave>
   </define>
   <define name="element-name">
index 0b6d2fe..a3c9732 100644 (file)
@@ -39,10 +39,10 @@ header-range =
 attribute-kind = 
   attribute kind { "package" | "patch" | "script" | "message" | "product" | "atom" }
 
-attribute-flags-provides =
-  attribute flags { "EQ" | "LE" | "GE" }
-attribute-flags-obsoletes =
-  attribute flags { "EQ" | "LE" | "GE" | "LT" }
+#attribute-flags-provides =
+#  attribute flags { "EQ" | "LE" | "GE" }
+#attribute-flags-obsoletes =
+#  attribute flags { "EQ" | "LE" | "GE" | "LT" }
 attribute-flags =
   attribute flags { "EQ" | "LE" | "GE" | "LT" | "GT" }
 
@@ -58,21 +58,21 @@ usual-entry-content =
     , empty
 )
   
-element-obsoletes-entry = 
-(
-  element entry {
-    (shared-entry-attributes & attribute-flags-obsoletes?)
-    , empty
-  }
-)  
-  
-element-provides-entry = 
-(
-  element entry {
-    (shared-entry-attributes & attribute-flags-provides?)
-    , empty
-}
-)  
+#element-obsoletes-entry = 
+#(
+#  element entry {
+#    (shared-entry-attributes & attribute-flags-obsoletes?)
+#    , empty
+#  }
+#)  
+#  
+#element-provides-entry = 
+#(
+#  element entry {
+#    (shared-entry-attributes & attribute-flags-provides?)
+#    , empty
+#}
+#)  
   
 element-requires-entry = 
 (
@@ -91,7 +91,7 @@ element-provides =
     element provides { provides }
     
 provides =
-    element-provides-entry*
+    element-entry*
 
 element-conflicts =
     element conflicts { conflicts }
@@ -104,7 +104,7 @@ element-obsoletes =
     element obsoletes { obsoletes }
 
 obsoletes =
-    element-obsoletes-entry*
+    element-entry*
 
 element-requires =
     element requires { requires }
@@ -153,4 +153,4 @@ dependencies =
 #    element-suggests?,
 #    element-enhances?,
 #    element-supplements?,
-#    element-recommends?
\ No newline at end of file
+#    element-recommends?
index a516259..09b488f 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<grammar xmlns:ns1="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" ns="http://linux.duke.edu/metadata/rpm" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+<grammar ns="http://linux.duke.edu/metadata/rpm" xmlns:ns1="http://linux.duke.edu/metadata/common" xmlns:rpm="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"/>
       </choice>
     </attribute>
   </define>
-  <define name="attribute-flags-provides">
-    <attribute name="flags">
-      <choice>
-        <value>EQ</value>
-        <value>LE</value>
-        <value>GE</value>
-      </choice>
-    </attribute>
-  </define>
-  <define name="attribute-flags-obsoletes">
-    <attribute name="flags">
-      <choice>
-        <value>EQ</value>
-        <value>LE</value>
-        <value>GE</value>
-        <value>LT</value>
-      </choice>
-    </attribute>
-  </define>
+  <!--
+    attribute-flags-provides =
+     attribute flags { "EQ" | "LE" | "GE" }
+    attribute-flags-obsoletes =
+     attribute flags { "EQ" | "LE" | "GE" | "LT" }
+  -->
   <define name="attribute-flags">
     <attribute name="flags">
       <choice>
     </interleave>
     <empty/>
   </define>
-  <define name="element-obsoletes-entry">
-    <element name="entry">
-      <interleave>
-        <ref name="shared-entry-attributes"/>
-        <optional>
-          <ref name="attribute-flags-obsoletes"/>
-        </optional>
-      </interleave>
-      <empty/>
-    </element>
-  </define>
-  <define name="element-provides-entry">
-    <element name="entry">
-      <interleave>
-        <ref name="shared-entry-attributes"/>
-        <optional>
-          <ref name="attribute-flags-provides"/>
-        </optional>
-      </interleave>
-      <empty/>
-    </element>
-  </define>
+  <!--
+    element-obsoletes-entry = 
+    (
+     element entry {
+       (shared-entry-attributes & attribute-flags-obsoletes?)
+       , empty
+     }
+    )  
+     
+    element-provides-entry = 
+    (
+     element entry {
+       (shared-entry-attributes & attribute-flags-provides?)
+       , empty
+    }
+    )  
+  -->
   <define name="element-requires-entry">
     <element name="entry">
       <interleave>
   </define>
   <define name="provides">
     <zeroOrMore>
-      <ref name="element-provides-entry"/>
+      <ref name="element-entry"/>
     </zeroOrMore>
   </define>
   <define name="element-conflicts">
   </define>
   <define name="obsoletes">
     <zeroOrMore>
-      <ref name="element-obsoletes-entry"/>
+      <ref name="element-entry"/>
     </zeroOrMore>
   </define>
   <define name="element-requires">
index 189e852..a95956a 100644 (file)
@@ -14,12 +14,12 @@ suse-format =
     suse-additional-format?
 
 suse-additional-format =
-    element-authors,
+    element-authors?,
     element-keywords?,
     element-dirsizes?,
     element-freshens?,
     element-install-only?,
-    element license-to-confirm { localized-string }*
+    element suse:license-to-confirm { localized-string }*
 
 element-authors =
   element authors { authors }
@@ -53,8 +53,12 @@ dirsize =
 element-freshens =
     element freshens { freshens }
 
+# suse-entry looks like an unwanted oversight
 freshens =
-    element-entry*
+    (element-entry | element-suse-entry) *
+
+element-suse-entry =
+    element suse:entry { usual-entry-content }
 
 element-install-only =
     element install-only { empty }
index 411a2c4..aa69bbc 100644 (file)
@@ -1,5 +1,5 @@
 <?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">
+<grammar ns="http://novell.com/package/metadata/suse/common" xmlns:ns1="http://linux.duke.edu/metadata/common" xmlns:suse="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">
@@ -16,7 +16,9 @@
     </interleave>
   </define>
   <define name="suse-additional-format">
-    <ref name="element-authors"/>
+    <optional>
+      <ref name="element-authors"/>
+    </optional>
     <optional>
       <ref name="element-keywords"/>
     </optional>
@@ -30,7 +32,7 @@
       <ref name="element-install-only"/>
     </optional>
     <zeroOrMore>
-      <element name="license-to-confirm">
+      <element name="suse:license-to-confirm">
         <ref name="localized-string"/>
       </element>
     </zeroOrMore>
       <ref name="freshens"/>
     </element>
   </define>
+  <!-- suse-entry looks like an unwanted oversight -->
   <define name="freshens">
     <zeroOrMore>
-      <ref name="element-entry"/>
+      <choice>
+        <ref name="element-entry"/>
+        <ref name="element-suse-entry"/>
+      </choice>
     </zeroOrMore>
   </define>
+  <define name="element-suse-entry">
+    <element name="suse:entry">
+      <ref name="usual-entry-content"/>
+    </element>
+  </define>
   <define name="element-install-only">
     <element name="install-only">
       <empty/>