2014-07-15 27 views
16

mümkün "ad" özelliği "unsurlar" dizisindeki (yani aynı "name" ile iki öğe vardır olmamalı eşsiz olacağı göstermektir.JSON şemasında nasıl tanımlanır (mümkünse) dizi öğelerinden biri özelliği benzersizdir? Aşağıdaki JSON şema Verilen

{ 
    "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" 
         } 
        } 
       } 
      } 
     } 
    } 
} 

ben uniqueItems anahtar sözcüğünü kullanmayı denedi, ancak değerlerin basit listeleri için tasarlandığı anlaşılıyor.

+0

"Eşsiz ems ": true". Http://json-schema.org/example1.html EDIT: ietf tanımından önce hiç kullanılmadı: http://tools.ietf.org/html/draft-fge-json-schema-validation-00#section-5.3. 4 – luchosrock

+0

Problem 5.3.4.2'dir. Başarılı doğrulama koşulları şöyle diyor: "Örnek, tüm öğeleri benzersiz olduğunda başarıyla onaylar." Ama elementlerin eşsiz olup olmadığını nasıl tanımlarsınız? – begie

cevap

17

Hayır, bu mümkün değil. Docs, json-schema: ... JSON yapısını tanımlamak için JSON tabanlı bir biçim veri değerleri doğrulaması yapmak için oldukça sınırlıdır, çünkü amaç bu değildir. standardın Birçok kişi bunu daha önce sormuştu çünkü bir tür "benzersiz Kimlik" özelliği talep etmek yaygındır. Maalesef buna ihtiyacı olanlar için, json-schema size bunu sağlamaz.

Eğer benzersizliği sağlamak istiyorsanız, tek seçeneğiniz özellik değerleri yerine "anahtar" olarak "isim" olmalıdır. veri yapısını üstlenmeden bir seçenek ise

+2

Teşekkürler. Aslında mevcut JSON Şema standardı ile bu mümkün değildir. Bu özelliğin, standardın gelecekteki sürümlerinden birine dahil edilip edilmeyeceği konusunda bir tartışma var: https://groups.google.com/forum/?hl=tr#!topic/json-schema/CYd8xk1Czyg – begie

+0

Bu mümkün görünüyor şimdi, dokümanlar atıfta: https://spacetelescope.github.io/understanding-json-schema/reference/array.html#uniqueness – dude

+0

@dude, hala mümkün değil. Soru, mülkiyet değerlerinde tekliği zorunlu kılmak istemekti. Bağladığınız dizilerdeki teklik, standardın önceki sürümlerinde mevcuttu. – jruizaranguren

4

aşağıdaki yaklaşım faydalı olabilir:

  • bir harita ile dizi değiştirin. Bu, patternProperties ile bir nesne kullanılarak kolayca yapılabilir. Desen normal bir ifadedir. Modelle eşleşen herhangi bir nesne, model özelliğinin şemasına göre doğrulanır. Herhangi bir dize ile eşleşen bir desen> = 3 karakter şöyle görünür: "....*", ancak ".*" izinin her zaman ima edildiği görülüyor, dolayısıyla "..." da çalışıyor.
  • EkProperties Ekleme: false, kısıtlamanızı zorlamak için ek bir adımdır (minLength:3).
  • Haritanızdaki en az bir elemanı zorlamak için (diziniz için minItems:1 kullanıyordunuz), minItems yerine minProperties yazın. Aşağıdaki şemada sonuçlanan

...:

"root": { 
    "type": "object", 
    "properties": { 
    "elements": { 
     "type": "object", 
     "patternProperties": { 
     "...": { 
      "type": "object", 
      "properties": { 
      "url": { 
       "type": "string" 
      } 
      } 
     } 
     }, 
     "additionalProperties": false, 
     "minProperties": 1 
    } 
    } 
} 

aşağıdaki (alıntı) gibi bir belge eski şemayı uyan ise,

"elements": [ 
    { 
    "name": "abc", 
    "url": "http://myurl1" 
    }, 
    { 
    "name": "def", 
    "url": "http://myurl2" 
    }, 
    { 
    "name": "ghij", 
    "url": "http://myurlx" 
    } 
] 

... Bir belge gibi Bu (alıntı), yeni şema ile eşleşecektir:

"elements": { 
    "abc": { 
    "url": "http://myurl1" 
    }, 
    "def": { 
    "url": "http://myurl2" 
    }, 
    "ghij": { 
    "url": "http://myurlx" 
    } 
} 
+0

Ancak bu, bir nesnenin içindeki bir öğenin gerçekten benzersiz olup olmadığını kontrol etmiyor – dude

+0

Maalesef, JSON belirtiminde anahtarlar için benzersiz bir özellik değil (https://tools.ietf.org/html/rfc7159#section-4)). Yine de bazı ayrıştırıcılar benzersizliği zorlar. – yaccob

İlgili konular