Turn content's type information from string to concept
authorSylvain Thénault <sylvain.thenault@logilab.fr>
Tue, 11 Oct 2016 16:09:10 +0200
changeset 1621 b9560f846e58
parent 1609 8a899bb52c8b
child 1622 eeb9a2a9b20c
Turn content's type information from string to concept using SEDA 1 document type. Related to #15524427
dataimport.py
entities/generated.py
i18n/en.po
i18n/fr.po
migration/data/document_type_code.csv
schema/seda2.py
test/test_dataimport.py
views/content.py
views/uicfg.py
xsd.py
xsd2yams.py
--- a/dataimport.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/dataimport.py	Tue Oct 11 16:09:10 2016 +0200
@@ -58,6 +58,9 @@
     (u"SEDA : Codes de restriction d'accès",
      'seda_rule', 'SEDASeqAccessRuleRule',
      'access_control.csv'),
+    (u"SEDA : Types d'objets-données",
+     'seda_type_to', (),
+     'document_type_code.csv'),
     # other schemes
     (u'Types MIME',
      'seda_mime_type_to', (),
--- a/entities/generated.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/entities/generated.py	Tue Oct 11 16:09:10 2016 +0200
@@ -280,8 +280,8 @@
 
 class SEDAType(SEDAAnyEntity):
     __regid__ = 'SEDAType'
-    fetch_attrs, cw_fetch_order = fetch_config(['user_cardinality', 'type', 'user_annotation'])
-    value_attr = 'type'
+    fetch_attrs, cw_fetch_order = fetch_config(['user_cardinality'])
+    value_attr = None
 
 class SEDADocumentType(SEDAAnyEntity):
     __regid__ = 'SEDADocumentType'
--- a/i18n/en.po	Thu Sep 29 18:54:30 2016 +0200
+++ b/i18n/en.po	Tue Oct 11 16:09:10 2016 +0200
@@ -1729,7 +1729,7 @@
 msgid "SEDAType"
 msgstr ""
 
-msgctxt "inlined:SEDAContent.seda_type.object"
+msgctxt "inlined:SEDAContent.seda_type_from.object"
 msgid "SEDAType"
 msgstr ""
 
@@ -3473,7 +3473,7 @@
 msgid "add a SEDAType"
 msgstr ""
 
-msgctxt "inlined:SEDAContent.seda_type.object"
+msgctxt "inlined:SEDAContent.seda_type_from.object"
 msgid "add a SEDAType"
 msgstr ""
 
@@ -7208,18 +7208,18 @@
 msgid "seda_transferring_agency_object"
 msgstr ""
 
-msgid "seda_type"
+msgid "seda_type_from"
 msgstr ""
 
 msgctxt "SEDAType"
-msgid "seda_type"
-msgstr ""
-
-msgid "seda_type_object"
+msgid "seda_type_from"
+msgstr ""
+
+msgid "seda_type_from_object"
 msgstr ""
 
 msgctxt "SEDAContent"
-msgid "seda_type_object"
+msgid "seda_type_from_object"
 msgstr ""
 
 msgid "seda_type_relationship"
@@ -7236,6 +7236,20 @@
 msgid "seda_type_relationship_object"
 msgstr ""
 
+msgid "seda_type_to"
+msgstr ""
+
+msgctxt "SEDAType"
+msgid "seda_type_to"
+msgstr ""
+
+msgid "seda_type_to_object"
+msgstr ""
+
+msgctxt "Concept"
+msgid "seda_type_to_object"
+msgstr ""
+
 msgid "seda_unit"
 msgstr ""
 
@@ -7447,10 +7461,6 @@
 msgid "transferring_agency_archive_unit_identifier"
 msgstr ""
 
-msgctxt "SEDAType"
-msgid "type"
-msgstr ""
-
 #, python-brace-format
 msgid "unit: {0}"
 msgstr ""
--- a/i18n/fr.po	Thu Sep 29 18:54:30 2016 +0200
+++ b/i18n/fr.po	Tue Oct 11 16:09:10 2016 +0200
@@ -1732,7 +1732,7 @@
 msgid "SEDAType"
 msgstr "type d'information"
 
-msgctxt "inlined:SEDAContent.seda_type.object"
+msgctxt "inlined:SEDAContent.seda_type_from.object"
 msgid "SEDAType"
 msgstr ""
 
@@ -3476,7 +3476,7 @@
 msgid "add a SEDAType"
 msgstr "type d'information"
 
-msgctxt "inlined:SEDAContent.seda_type.object"
+msgctxt "inlined:SEDAContent.seda_type_from.object"
 msgid "add a SEDAType"
 msgstr ""
 
@@ -7216,18 +7216,18 @@
 msgid "seda_transferring_agency_object"
 msgstr ""
 
-msgid "seda_type"
+msgid "seda_type_from"
 msgstr ""
 
 msgctxt "SEDAType"
-msgid "seda_type"
-msgstr ""
-
-msgid "seda_type_object"
-msgstr "type d'information"
+msgid "seda_type_from"
+msgstr ""
+
+msgid "seda_type_from_object"
+msgstr "type OAIS"
 
 msgctxt "SEDAContent"
-msgid "seda_type_object"
+msgid "seda_type_from_object"
 msgstr ""
 
 msgid "seda_type_relationship"
@@ -7244,6 +7244,20 @@
 msgid "seda_type_relationship_object"
 msgstr ""
 
+msgid "seda_type_to"
+msgstr ""
+
+msgctxt "SEDAType"
+msgid "seda_type_to"
+msgstr "valeur"
+
+msgid "seda_type_to_object"
+msgstr ""
+
+msgctxt "Concept"
+msgid "seda_type_to_object"
+msgstr ""
+
 msgid "seda_unit"
 msgstr "unité"
 
@@ -7457,10 +7471,6 @@
 msgid "transferring_agency_archive_unit_identifier"
 msgstr ""
 
-msgctxt "SEDAType"
-msgid "type"
-msgstr "valeur"
-
 #, python-brace-format
 msgid "unit: {0}"
 msgstr "unité : {0}"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/migration/data/document_type_code.csv	Tue Oct 11 16:09:10 2016 +0200
@@ -0,0 +1,13 @@
+#;$id;Valeur;label;définition
+type;url;string;string;string
+lang;;seda;fr;fr
+url;skos:Concept;skos:prefLabel;skos:prefLabel;skos:definition
+;;CDO;Contenu de données;Objet numérique ou physique qui est l'objet principal de la pérennisation. ISO 14721:2003(Space data and information transfer systems -- Open archival information system --Reference model)
+;;RI;Information de représentation;Information qui traduit un contenu de données en des concepts plus explicites. Par exemple, la définition du code ASCII décrit comment une séquence de bits (un contenu de données) est convertie en caractères. L'information de représentation peut être de structure ou sémantique. ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model
+;;RISTR;Information de structure;Information de représentation qui explique la façon dont d'autres informations sont organisées. Elle établit par exemple une correspondance entre les trains de bits et les types de données courants sur ordinateurs (tels que caractères, nombres, pixels ou agrégats de ces types tels que chaînes de caractères et tableaux). ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model)
+;;RISEM;Information sémantique;Information de représentation qui complète l'information de structure pour donner par exemple la signification particulière associée à chacun des éléments de la structure, les opérations réalisables sur chaque type de données, leurs corrélations... ISO 14721:2003 (Space data and information systemstransfe -- Open archival information system -- Reference model)
+;;PDI;Information de pérennisation;Information nécessaire à une bonne conservation du contenu d'information, et qui peut être décomposée en informations de provenance, d'identification, d'intégrité et de contexte. ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model)
+;;PDIPRO;Information de provenance;Information de pérennisation qui documente l'historique du contenu d'information. Cette information renseigne sur l'origine ou la source du contenu d'information, sur toute modification intervenue depuis sa création et sur ceux qui en ont eu la responsabilité. Exemple : nom du principal responsable de l'enregistrement des données, informations relatives au stockage, à la manipulation et à la migration des données. ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model)
+;;PDIREF;Information d'identification;Information de pérennisation qui identifie, et si nécessaire décrit, le ou les mécanismes d'attribution des identificateurs au contenu d'information. Elle inclut aussi les identificateurs qui permettent à un système externe de se référer sans équivoque à un contenu d'information particulier. ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model)
+;;PDIFIX;Information d'intégrité;Information de pérennisation qui décrit les mécanismes et des clés d'authentification garantissant que le contenu d'information n'a pas subi de modification sans que celle-ci ait été tracée. Par exemple, le code CRC (contrôl de redondance cyclique) pour un fichier. ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model)
+;;PDICTX;Information de contexte;Information de pérennisation qui décrit les liens entre un contenu d'information et son environnement. Elle inclut entre autres les raisons de la création de ce contenu d'information et son rapport avec d'autres Objets-contenu d'information. ISO 14721:2003 (Space data and information transfer systems -- Open archival information system -- Reference model)
--- a/schema/seda2.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/schema/seda2.py	Tue Oct 11 16:09:10 2016 +0200
@@ -935,11 +935,10 @@
                       annotable=True)
 class SEDAType(EntityType):
     u""""""
-    type = String()
-
-
-class content_type(RelationDefinition):
-    name = 'seda_type'
+
+
+class content_type_from(RelationDefinition):
+    name = 'seda_type_from'
     subject = 'SEDAType'
     object = 'SEDAContent'
     cardinality = '1?'
@@ -947,6 +946,15 @@
     inlined = True
     constraints = []
 
+class type_type_to(RelationDefinition):
+    name = 'seda_type_to'
+    subject = 'SEDAType'
+    object = 'Concept'
+    cardinality = '?*'
+    composite = fulltext_container = None
+    inlined = True
+    constraints = [RQLConstraint('O in_scheme CS, CS scheme_relation_type CR, CR name "seda_type_to"')]
+
 @seda_profile_element(cardinalities=['0..1', '1'], default_cardinality='0..1',
                       annotable=True)
 class SEDADocumentType(EntityType):
--- a/test/test_dataimport.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/test/test_dataimport.py	Tue Oct 11 16:09:10 2016 +0200
@@ -25,7 +25,7 @@
     def test_import_seda_schemes(self):
         with self.admin_access.client_cnx() as cnx:
             dataimport.import_seda_schemes(cnx, lcsv_import=dataimport.lcsv_check)
-            self.assertEqual(len(cnx.find('ConceptScheme')), 14)
+            self.assertEqual(len(cnx.find('ConceptScheme')), 15)
 
 
 if __name__ == '__main__':
--- a/views/content.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/views/content.py	Tue Oct 11 16:09:10 2016 +0200
@@ -62,7 +62,7 @@
     ('seda_title', 'object'),
     ('seda_description', 'object'),
     ('seda_version', 'object'),
-    ('seda_type', 'object'),
+    ('seda_type_from', 'object'),
     ('seda_document_type', 'object'),
     ('seda_status', 'object'),
     ('seda_language_from', 'object'),
--- a/views/uicfg.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/views/uicfg.py	Tue Oct 11 16:09:10 2016 +0200
@@ -279,8 +279,10 @@
 abaa.tag_object_of(('*', 'seda_transferring_agency_archive_unit_identifier', '*'), False)
 abaa.tag_subject_of(('*', 'seda_description', '*'), False)
 abaa.tag_object_of(('*', 'seda_description', '*'), False)
-abaa.tag_subject_of(('*', 'seda_type', '*'), False)
-abaa.tag_object_of(('*', 'seda_type', '*'), False)
+abaa.tag_subject_of(('*', 'seda_type_from', '*'), False)
+abaa.tag_object_of(('*', 'seda_type_from', '*'), False)
+abaa.tag_object_of(('*', 'seda_type_to', '*'), False)
+abaa.tag_subject_of(('*', 'seda_type_to', '*'), False)
 abaa.tag_subject_of(('*', 'seda_document_type', '*'), False)
 abaa.tag_object_of(('*', 'seda_document_type', '*'), False)
 abaa.tag_subject_of(('*', 'seda_language_from', '*'), False)
@@ -547,7 +549,6 @@
 affk.tag_subject_of(('*', 'originating_agency_archive_unit_identifier', '*'), {'widget': fw.TextInput({'size': 80})})
 affk.tag_subject_of(('*', 'transferring_agency_archive_unit_identifier', '*'), {'widget': fw.TextInput({'size': 80})})
 affk.tag_subject_of(('*', 'description', '*'), {'widget': fw.TextInput({'size': 80})})
-affk.tag_subject_of(('*', 'type', '*'), {'widget': fw.TextInput({'size': 80})})
 affk.tag_subject_of(('*', 'document_type', '*'), {'widget': fw.TextInput({'size': 80})})
 affk.tag_subject_of(('*', 'status', '*'), {'widget': fw.TextInput({'size': 80})})
 affk.tag_subject_of(('*', 'version', '*'), {'widget': fw.TextInput({'size': 80})})
@@ -694,8 +695,10 @@
 afs.tag_object_of(('*', 'seda_transferring_agency_archive_unit_identifier', '*'), 'main', 'inlined')
 afs.tag_subject_of(('*', 'seda_description', '*'), 'main', 'hidden')
 afs.tag_object_of(('*', 'seda_description', '*'), 'main', 'inlined')
-afs.tag_subject_of(('*', 'seda_type', '*'), 'main', 'hidden')
-afs.tag_object_of(('*', 'seda_type', '*'), 'main', 'inlined')
+afs.tag_subject_of(('*', 'seda_type_from', '*'), 'main', 'hidden')
+afs.tag_object_of(('*', 'seda_type_from', '*'), 'main', 'inlined')
+afs.tag_object_of(('*', 'seda_type_to', '*'), 'main', 'hidden')
+afs.tag_subject_of(('*', 'seda_type_to', '*'), 'main', 'attributes')
 afs.tag_subject_of(('*', 'seda_document_type', '*'), 'main', 'hidden')
 afs.tag_object_of(('*', 'seda_document_type', '*'), 'main', 'inlined')
 afs.tag_subject_of(('*', 'seda_language_from', '*'), 'main', 'hidden')
@@ -980,6 +983,7 @@
 pvs.tag_subject_of(('*', 'seda_restriction_end_date', '*'), 'hidden')
 pvs.tag_object_of(('*', 'seda_restriction_end_date', '*'), 'hidden')
 pvs.tag_object_of(('*', 'seda_description_level', '*'), 'hidden')
+pvs.tag_object_of(('*', 'seda_type_to', '*'), 'hidden')
 pvs.tag_object_of(('*', 'seda_language_to', '*'), 'hidden')
 pvs.tag_object_of(('*', 'seda_description_language_to', '*'), 'hidden')
 pvs.tag_subject_of(('*', 'seda_gps_version_id', '*'), 'hidden')
@@ -1172,8 +1176,8 @@
 rec.tag_object_of(('*', 'seda_transferring_agency_archive_unit_identifier', '*'), {'novalue_label': _('<unauthorized>')})
 rec.tag_subject_of(('*', 'description', '*'), {'novalue_label': _('<no value specified>')})
 rec.tag_object_of(('*', 'seda_description', '*'), {'novalue_label': _('<unauthorized>')})
-rec.tag_subject_of(('*', 'type', '*'), {'novalue_label': _('<no value specified>')})
-rec.tag_object_of(('*', 'seda_type', '*'), {'novalue_label': _('<unauthorized>')})
+rec.tag_object_of(('*', 'seda_type_from', '*'), {'novalue_label': _('<unauthorized>')})
+rec.tag_subject_of(('*', 'seda_type_to', '*'), {'novalue_label': _('<no value specified>')})
 rec.tag_subject_of(('*', 'document_type', '*'), {'novalue_label': _('<no value specified>')})
 rec.tag_object_of(('*', 'seda_document_type', '*'), {'novalue_label': _('<unauthorized>')})
 rec.tag_object_of(('*', 'seda_language_from', '*'), {'novalue_label': _('<unauthorized>')})
@@ -1334,8 +1338,6 @@
 pvds.set_fields_order('SEDATransferringAgencyArchiveUnitIdentifier', ['user_cardinality', 'transferring_agency_archive_unit_identifier', 'user_annotation'])
 affk.set_fields_order('SEDADescription', ['user_cardinality', 'description', 'user_annotation'])
 pvds.set_fields_order('SEDADescription', ['user_cardinality', 'description', 'user_annotation'])
-affk.set_fields_order('SEDAType', ['user_cardinality', 'type', 'user_annotation'])
-pvds.set_fields_order('SEDAType', ['user_cardinality', 'type', 'user_annotation'])
 affk.set_fields_order('SEDADocumentType', ['user_cardinality', 'document_type', 'user_annotation'])
 pvds.set_fields_order('SEDADocumentType', ['user_cardinality', 'document_type', 'user_annotation'])
 affk.set_fields_order('SEDAStatus', ['user_cardinality', 'status', 'user_annotation'])
--- a/xsd.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/xsd.py	Tue Oct 11 16:09:10 2016 +0200
@@ -146,6 +146,7 @@
     'FormatId': 'Concept',
     'Rule': 'Concept',
     'RefNonRuleId': 'Concept',
+    'Type': 'Concept',
 
     'RelationshipCodeListVersion': 'ConceptScheme',
     'AuthorizationReasonCodeListVersion': 'ConceptScheme',
--- a/xsd2yams.py	Thu Sep 29 18:54:30 2016 +0200
+++ b/xsd2yams.py	Tue Oct 11 16:09:10 2016 +0200
@@ -99,6 +99,8 @@
         'O in_scheme CS, CS scheme_relation_type CR, CR name "seda_event_type_to"'),
     'seda_keyword_type_to': (
         'O in_scheme CS, CS scheme_relation_type CR, CR name "seda_keyword_type_to"'),
+    'seda_type_to': (
+        'O in_scheme CS, CS scheme_relation_type CR, CR name "seda_type_to"'),
     # - scheme defined according to the relation type and the subject type
     'seda_algorithm': (  # XXX still there because of signature
         'O in_scheme CS, CS scheme_relation_type CR, CR name "seda_algorithm", '