json-schema-org/json-schema-spec

✨ Proposal: uniqueItems based several properties or subschema

Opened this issue · 7 comments

LasneF commented

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

This is very similar to my uniqueKeys keyword.

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

LasneF commented

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 .

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.

LasneF commented

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

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.

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

JaneX8 commented

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