json-schema-spec icon indicating copy to clipboard operation
json-schema-spec copied to clipboard

✨ Proposal: uniqueItems based several properties or subschema

Open LasneF opened this issue 1 year ago • 7 comments

Describe the inspiration for your proposal

very often data are inserted in a db with constrains like a unique key key can be one properties or a set of properties

it occurs that we may insert , update or manipulate data in bulk , and that as a pre requisite we have not unicity of the entire object but unicity on the subset of an object

for instance

{
   "type" : "array",
   "uniqueItems" : true, 
   "items": {
     "type" : "object",
     "required" : ["id", "dummy"] 
     "properties" : {
          "id" : { "type" :  "integer" },
          "dummy" : { "type" :  "integer" }
    }
   }
} 

For instance making this failing base on the subschema : "key" [ { "id" : 1 , "dummy" : 12 } , {"id" : 1 , "dummy" : 13 }]

Describe the proposal

allows uniqueItems to be either a boolean either a schema like

{
   "type" : "array",
   "uniqueItems" : { "type" : "object" , "properties" : {"id" : { "type" :  "integer" } } 
   "items": {
     "type" : "object",
     "required" : ["id", "dummy"] 
     "properties" : {
          "id" : { "type" :  "integer" },
          "dummy" : { "type" :  "integer" }
    }
   }
} 

Describe alternatives you've considered

an alternative would be a meta data on top of the array to indicate "uniqueKey" as a complement of uniqueItems 👎

like

{
   "type" : "array",
   "uniqueItems" : true,
  "uniqueKey" :  ["id"]  
  "items": {
     "type" : "object",
     "required" : ["id", "dummy"] 
     
     "properties" : {
          "id" : { "type" :  "integer" },
          "dummy" : { "type" :  "integer" }
    }
   }
} 

another alternative would be to leverage a meta data on top of the properties (may be better )

{
   "type" : "array",
   "uniqueItems" : true,
  "items": {
     "type" : "object",
     "required" : ["id", "dummy"] 
     
     "properties" : {
          "id" : { "type" :  "integer" , "key": true },
          "dummy" : { "type" :  "integer" }
    }
   }
} 

Additional context

my context is unicity toward not a single properties like id , but 'kind of' composite key , spread on several properties

LasneF avatar Oct 18 '24 10:10 LasneF

This is very similar to my uniqueKeys keyword.

https://docs.json-everything.net/schema/vocabs/array-ext/#uniquekeys

gregsdennis avatar Oct 18 '24 17:10 gregsdennis

yes exactly , it would be great to have it integrated as "core Json schema" in an evolution of JsonSchema 2025 version for instant ce, so that it got more widely adopted by schema validator .

LasneF avatar Oct 21 '24 08:10 LasneF

We have introduced a process for new features going forward. Please have a look at that to set expectations.

Also, know that we're just looking to publish existing features (in a stable spec) with this next release. No new features for now. In fact some are being removed because they're not fully baked.

gregsdennis avatar Oct 21 '24 11:10 gregsdennis

i cannot find the process description 😥, neither the feature roadmap could you give me a pointer , so that i can contribute support , upvote some intiatives

LasneF avatar Oct 21 '24 15:10 LasneF

The process is defined in the PROCESS.md file in the root of this repository.

@benjagm can you provide a link to the roadmap in its current form, please? (We also have some work being done to publish it on the site.) The majority of my work, and as related to this repository, can be found on this project board.

gregsdennis avatar Oct 21 '24 19:10 gregsdennis

can you provide a link to the roadmap in its current form, please?

Hi Greg and Francois. Please, find here the current roadmap for the whole JSON Schema Initiative:

https://github.com/orgs/json-schema-org/discussions/427

benjagm avatar Oct 21 '24 20:10 benjagm

This is exactly what I'm looking for. I really miss a feature to define that a value in an itemlist should be unique.

JaneX8 avatar Oct 31 '24 12:10 JaneX8