Vous vous demandez si cela est possible avec le schéma de schéma 03. J'ai des dépendances qui fonctionnent ailleurs, je pense qu'il est peut-être juste nécessaire de les utiliser de manière créative afin de les utiliser pour spécifier la propriété required
d'un champ.
Ma meilleure tentative actuelle (qui ne fonctionne pas) devrait vous donner une idée de ce que je recherche. Je veux une valeur requise par défaut et facultative lorsqu'un autre champ a une valeur particulière.
{
"description" : "An address...",
"type" : "object",
"properties" : {
"postcode": {
"type" : "string",
// postcode should be required by default
"required" : true,
// postcode shouldn't be required if the country is new zealand
"dependencies" : {
"country" : {
"enum" : ["NZ", "NZL", "NEW ZEALAND"]
},
"postcode" : {
"required" : false
}
}
},
"country": {
"type" : "string",
"enum" : [
// various country codes and names...
],
"default" : "AUS"
}
}
}
C'est certainement possible avec la version 3 du projet. Puisque vous avez une liste complète des pays autorisés, vous pouvez faire quelque chose comme ceci:
{
"type": [
{
"title": "New Zealand (no postcode)",
"type": "object",
"properties": {
"country": {"enum": ["NZ", "NZL", "NEW ZEALAND"]}
}
},
{
"title": "Other countries (require postcode)",
"type": "object",
"properties": {
"country": {"enum": [<all the other countries>]},
"postcode": {"required": true}
}
}
],
"properties": {
"country": {
"type" : "string",
"default" : "AUS"
},
"postcode": {
"type" : "string"
}
}
}
Vous définissez donc deux sous-types pour votre schéma, un pour les pays qui nécessitent un code postal et un pour les pays qui n'en ont pas besoin.
EDIT - l'équivalent v4 est extrêmement similaire. Renommez simplement le niveau supérieur "type"
tableau à "oneOf"
.
Si quelqu'un cherche une solution pour le brouillon 4, vous pouvez utiliser le mot clé dependencies
avec un mot clé enum
:
{
"type": "object",
"properties": {
"play": {
"type": "boolean"
},
"play-options": {
"type": "string"
}
},
"dependencies": {
"play-options": {
"properties": {
"play": {
"enum": [true]
}
}
}
}
}
De cette façonplay-options
nécessitera toujours que la valeur de play
soit true
.
Je viens de regarder la version 03 de la spécification et je ne pense pas que ce que vous décrivez soit possible. Ce n'est certainement pas "Simple Dependency" et la description de "Schema Dependency" ne mentionne aucun moyen de considérer la valeur de la propriété.
Il semble que ce dont vous avez besoin soit "Dépendance de schéma conditionnelle".
Il y a une discussion sur ce qui est possible avec les dépendances Simple et Schéma ici: http://groups.google.com/group/json-schema/msg/8145690ebb93963b
Vous pouvez demander à ce groupe s'il existe des plans pour prendre en charge les dépendances conditionnelles.