次のJSONスキーマの場合、「name」プロパティが一意であることを示すことは可能です(つまり、「elements」配列に同じ「name」を持つ2つのアイテムがあってはなりません。
{
"root": {
"type": "object",
"properties": {
"elements": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"title": "Element Name",
"minLength": 3,
},
"url": {
"type": "string",
"title": "Some URL"
}
}
}
}
}
}
}
niqueItems キーワードを使用しようとしましたが、単純な値のリスト用に設計されているようです。
いいえ、できません。ドキュメントから、json-schema:... JSONデータの構造を定義するためのJSONベースのフォーマット。
これは規格の目的ではないため、データ値の検証を行うにはかなり制限されています。ある種の「一意のID」機能を要求するのが一般的であるため、以前に多くの人がこれを要求しました。残念ながら、それを必要とする人にとって、json-schemaはそれを提供しません。
したがって、一意性を確保したい場合、唯一のオプションは、プロパティ値ではなく「名前」をプロパティキーとして持つことです。
データ構造のリファクタリングがオプションである場合、次のアプローチが役立つ場合があります。
patternProperties
を含むオブジェクトを使用することで簡単に実現できます。パターンは正規表現です。パターンに一致するすべてのオブジェクトは、パターンプロパティのスキーマに対して検証されます。 3文字以上の文字列に一致するパターンは、次のようになります:"....*"
、しかし末尾のようです".*"
は常に暗示されるため、"..."
も機能します。minLength:3
)。minItems:1
for your array)、minItems
をminProperties
に置き換えます。...以下のスキーマになります:
"root": {
"type": "object",
"properties": {
"elements": {
"type": "object",
"patternProperties": {
"...": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
}
},
"additionalProperties": false,
"minProperties": 1
}
}
}
次のようなドキュメント(抜粋)が古いスキーマと一致していた場合、
"elements": [
{
"name": "abc",
"url": "http://myurl1"
},
{
"name": "def",
"url": "http://myurl2"
},
{
"name": "ghij",
"url": "http://myurlx"
}
]
...そのようなドキュメント(抜粋)は新しいスキーマに一致します。
"elements": {
"abc": {
"url": "http://myurl1"
},
"def": {
"url": "http://myurl2"
},
"ghij": {
"url": "http://myurlx"
}
}
ユースケースが追加されたオーバーヘッドを処理できる場合は、ドキュメントに変換を適用して縮小されたドキュメントを生成し、縮小されたドキュメントに別のミニスキーマを使用して検証を再度適用できます。
以下は、Json変換ツールに関する情報とのリンクです。
JSONataでは、サンプルケースの処理は非常に簡単です。