[PATCH seda] [profile gen] Account for data object's user cardinality in "Integrity" element

Denis Laxalde denis.laxalde at logilab.fr
Tue Apr 9 16:03:58 CEST 2019


# HG changeset patch
# User Denis Laxalde <denis.laxalde at logilab.fr>
# Date 1554818614 -7200
#      Tue Apr 09 16:03:34 2019 +0200
# Node ID f9d5b157e647788d5f48a37b8ffe04795bb3a126
# Parent  9289472772178d5937145153f54527c9caa81a5d
# Available At http://hg.logilab.org/review/cubes/seda
#              hg pull http://hg.logilab.org/review/cubes/seda -r f9d5b157e647
[profile gen] Account for data object's user cardinality in "Integrity" element

I have no idea what I'm doing, so just quoting verbatim the customer
request for future reference:

| Sur les documents multi occurrences (0-n ou 1-n) ou même si l’archive
| est multi occurrence (0-n ou 1-n), il y a une balise integrity qui est
| liée au document dans le bordereau de versement que l’on génère.
| Or, dans le XSD du profil, la balise integrity du document ne possède
| pas l'attribut : maxOccurs="unbounded"
| Donc lors de l'envoi à Asalae du versement, Asalae fait une vérification
| par rapport au profil et affiche une erreur a cause de la balise
| integrity qui est présente plusieurs fois.
|
| Pour moi le correctif à faire doit porter sur le XSD et le RNG sur la
| balise integrity pour qu'elle soit multi-occurrence possible dans les cas
| suivants :
|
|   *   Si le document (Document) est en multi occurrence (0-n ou 1-n)
|       donc avec un attribut maxOccurs="unbounded"
|   *   Si une UA (Contains) supérieure au document est en multi
|       occurrence (0-n ou 1-n) donc avec un attribut
|       maxOccurs="unbounded"

diff --git a/cubicweb_seda/entities/profile_generation.py b/cubicweb_seda/entities/profile_generation.py
--- a/cubicweb_seda/entities/profile_generation.py
+++ b/cubicweb_seda/entities/profile_generation.py
@@ -1098,7 +1098,7 @@ class SEDA1XSDExport(SEDA2ExportAdapter)
     def xsd_integrity(self, parent, data_object):
         algorithm = data_object.seda_algorithm[0] if data_object.seda_algorithm else None
         self.element_schema(parent, 'Integrity', 'qdt:ArchivesHashcodeBinaryObjectType',
-                            cardinality='0..1',
+                            cardinality=data_object.user_cardinality,
                             xsd_attributes=[XAttr('algorithme', 'xsd:string',
                                                   cardinality='1',
                                                   fixed_value=_concept_value(
diff --git a/test/data/seda_1_export.rng b/test/data/seda_1_export.rng
--- a/test/data/seda_1_export.rng
+++ b/test/data/seda_1_export.rng
@@ -563,14 +563,14 @@
                 </rng:attribute>
                 <rng:data type="string"/>
               </rng:element>
-              <rng:optional>
+              <rng:zeroOrMore>
                 <rng:element name="Integrity">
                   <rng:attribute name="algorithme">
                     <rng:value type="string">md5</rng:value>
                   </rng:attribute>
                   <rng:data type="string"/>
                 </rng:element>
-              </rng:optional>
+              </rng:zeroOrMore>
               <rng:element name="Type">
                 <rng:attribute name="listVersionID">
                   <rng:value type="token">edition 2009</rng:value>
diff --git a/test/data/seda_1_export.xsd b/test/data/seda_1_export.xsd
--- a/test/data/seda_1_export.xsd
+++ b/test/data/seda_1_export.xsd
@@ -460,7 +460,7 @@
                         </xsd:simpleContent>
                       </xsd:complexType>
                     </xsd:element>
-                    <xsd:element minOccurs="0" name="Integrity">
+                    <xsd:element minOccurs="0" maxOccurs="unbounded" name="Integrity">
                       <xsd:complexType>
                         <xsd:simpleContent>
                           <xsd:extension base="qdt:ArchivesHashcodeBinaryObjectType">


More information about the saem-devel mailing list