Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Corriger le problème des contrôles #38

Open
emchateau opened this issue May 16, 2019 · 2 comments
Open

Corriger le problème des contrôles #38

emchateau opened this issue May 16, 2019 · 2 comments
Assignees
Labels
bug Something isn't working

Comments

@emchateau
Copy link
Contributor

Comme je le craignais, il y a bien un problème avec les contrôles.

  • numéro de la voie
  • Date dans Intervention d’une institution
  • Coût expertise (livres, deniers, et sol)
    doivent être renseigner pour enregistrer le formulaire.

Il faudrait en attendant de régler le problème, désactiver les contrôles.

@emchateau emchateau added the bug Something isn't working label May 16, 2019
@sardinecan
Copy link
Contributor

OK je viens de les désactiver, le formulaire s'enregistre correctement.

@sardinecan
Copy link
Contributor

sardinecan commented May 31, 2019

Le problème venait d'une mauvaise compréhension des méthodes de validation d'Xforms de ma part.

La norme précise que :

An instance node is valid if and only if the following conditions hold:

  • the constraint model item property is true
  • the value is non-empty if the required model item property is true
  • the node satisfies all applicable XML schema definitions (including those associated by the type model item property, by an external or an inline schema, or by xsi:type)

@constraint et @required sont en fait indépendants l'un de l'autre, et il ne suffit donc pas de préciser @required='false()' pour zapper la contrainte et autoriser une valeur vide, ce n'est pas l'approche retenue par Xforms.

D'autre part, les datatypes ne prennent pas en compte les valeurs nulles. Dès lors que nous définissons, par exemple, @type='xs:date' pour un champ date, alors le champ doit être renseigné et ne peut être laissé vide pour être valide.
Pour pallier à ce problème, Xforms propose des datatypes additionnels sous son espace de nom qui le permettent.

Ainsi, pour les cas simples (avec un datatype, mais non requis et sans contrainte) il suffit d'utiliser un datatype Xforms.

Pour les cas plus complexes (avec un datatype + contrainte), il faut en plus préciser que la valeur peut être nulle dans la contrainte, même si l'on utilise un datatype Xforms.
Pour les dates par exemple, il ne fallait pas écrire :
<xf:bind id="sessionsWhen" nodeset="xpr:description/xpr:sessions/xpr:date/@when" type="xs:date" constraint="(. &gt;= '1690-01-01') and (. &lt;= '1791-01-01')"/>
mais :
<xf:bind id="sessionsWhen" nodeset="xpr:description/xpr:sessions/xpr:date/@when" type="xf:date" constraint="(.='') or ((. &gt;= '1690-01-01') and (. &lt;= '1791-01-01'))"/>

Les cas requis ne posent vraisemblablement pas de problème.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants