ecolabdata / ecospheres

Portail des données de la transition écologique et de la cohésion des territoires
https://ecologie.data.gouv.fr
2 stars 0 forks source link

XSLT licences/conditions d'usage #316

Open DanFluture275 opened 2 weeks ago

DanFluture275 commented 2 weeks ago

Recommandation : https://ecospheres.gitbook.io/recommandations-iso-dcat/adaptation-des-metadonnees-iso-19139-pour-faciliter-la-transformation-en-dcat/separer-la-licence-des-conditions-dacces

Notes : https://pad.numerique.gouv.fr/j19t1NoYSc-jv7aeKc-yog?view#S%C3%A9parer-licence-et-conditions-d%E2%80%99acc%C3%A8s

streino commented 4 days ago

Tentative de recensement...

Légende :

Pour une occurrence de gmd:resourceConstraints/gmd:MD_LegalConstraints donnée:

if AC & (UC | UL):
  if AC != "otherRestrictions":
    if UC != "otherRestrictions":
      if OC == 0:
        -> AC / UC + UL [1]
      elif OC == 1:
        if UL > 0:  # including empty UL
          -> AC + OC / UC + UL [2]
        else:
          -> error: ambiguous [3]
      else:
        -> error: ambiguous [4]
    elif UC == "otherRestrictions":
      if OC == 0:
        if UL > 0:
          -> AC / UC + UL [5]
        else:
          -> error: missing [6]
      else:
        -> AC / UC + OC + UL [7]
    else:  # no UC
      if UL > 0:
        -> AC / UC? + UL [8]
      #TODO: if OC > 0?
  elif AC == "otherRestrictions":
    if UC != "otherRestrictions":
      if OC == 0:
        -> error: missing [9]
      else:
        -> AC + OC / UC + UL [10]
    elif UC == "otherRestrictions":
      if OC == 0:
        -> error: missing [11]
      elif OC == 1:
        if UL == 0:
          -> error: ambiguous [12]
        elif UL == 1:  # including empty UL
          -> AC + OC / UC + UL [13]
        else:
          -> error: ambiguous [14]
    else:  # no UC
      if UL == 0:
        -> noop [15]
      else:
        if OC == 0:
          -> AC / UC? + UL [16]
        else:
          -> ?? [21]
  else:  # no AC
    if UC != "otherRestrictions":
      -> noop [17]
    elif UC == "otherRestrictions":
      -> noop / missing? [18]
    else:  # no UC
      -> ??? [19] [20]

Il me reste quelques cas à creuser, dont les cas où on a plusieurs occurrences d'AC/UC. Je mets ça là en attendant si jamais @alhyss. Contre-exemples welcome ;)

streino commented 3 days ago

Plutôt que de faire des tables en markdown, j'ai fait le recensement ici : https://grist.numerique.gouv.fr/o/ecospheres/uLHMYMJTpTGf/XSLT/p/9

streino commented 3 days ago

Quelques questions à acter :

  1. Qu'est-ce qu'on fait dans des cas clairement invalides selon la spec mais qui ne posent pas de problème pour nous ? Par exemple : a) accessConstraints @codeListValue="copyright" avec gmd:otherConstraints associé ; b) accessConstraints @codeListValue="otherRestrictions" sans gmd:otherConstraints associé ; c) gmd:otherConstraints sans accessConstraints ni useConstraints associé

    1. On laisse tel quel.
    2. On laisse tel quel, avec un warning.
    3. On part en erreur.
    4. On crée la/les balises manquantes.
  2. Est-ce qu'on essaie de convertir les useLimitation ? Si oui, dans quel cas ?

    1. Tout le temps, quitte à créer un useConstraints associé.
    2. Uniquement en présence d'un useConstraints @codeListValue=* existant.
    3. Uniquement en présence d'un useConstraints @codeListValue="otherRestrictions" existant.
    4. Uniquement en présence d'un useConstraints @codeListValue="otherRestrictions" existant lorsqu'il n'y a pas de otherConstraints associé.
  3. Que fait-on des éléments présents mais incomplets ? Par exemple (réels) : <useConstraints/> ; <gmd:useConstraints><gmd:MD_RestrictionCode codeList=... codeListValue=""/></gmd:useConstraints> (codeListValue vide) ?

    1. On copie bêtement, quitte à créer des MD_LegalConstraints inutiles.
    2. On drop lorsque ça n'a pas d'impact. Par exemple AC(OR) + UC-vide + OC => AC(OR) + OC.
    3. On drop tout le temps, quitte à ce que l'interprétation du reste du MD_LegalConstraints soit impacté. Par exemple : AC(OR) + OC-vide => AC(OR) sans OC rattaché => erreur potentielle (selon réponse à question 1).
  4. Est-ce qu'on applique la logique des questions précédentes à :

    1. Uniquement les MD_LegalConstraints qu'on modifierait de toutes façons.
    2. Tous les MD_LegalConstraints d'un record qu'on modifierait de toutes façons.
    3. Tout le temps, y compris lorsqu'on a pas besoin de modifier le record par ailleurs.