Catyã®ã¹ãã¼ãè¨è¿°è¨èªã¯ãJSONã¹ãã¼ãä»æ§ï¼http://tools.ietf.org/html/draft-zyp-json-schema-01ï¼ã«åºã¥ãã¦ãã¾ããæ§æã¯éãã¾ãããã§ããéãæ¬å®¶JSONã¹ãã¼ãã®ã»ãã³ãã£ã¯ã¹ãä¿åããããã«åªãã¦ãã¾ããã§ããããJSONã¹ãã¼ãã®æ¸ãæ¹ããªãã¨ãªãã§ãç解ã§ãã人ãªããCatyã¹ãã¼ããæ¸ãã¾ããããã¦ãCatyã¹ãã¼ãã®ã»ããã¯ããã«ç°¡æ½ã«è¨è¿°ã§ãã¾ãã
以ä¸ã§ã¯ããæè¿ã®JSONã¹ãã¼ãã解説ãã¾ããã¨åãæ§æã§ãCatyã¹ãã¼ãã®è¨è¿°ãã¿ã¼ã³ã説æãã¾ããCatyã¹ãã¼ããããã«åç´æå¿«ããåããã¨æãã¾ã*1ã
å 容ï¼
äºä¾
ããããããªãã®ã§ããã¤ã¯ããã©ã¼ãããã®ãã¼ã¿ã¢ãã«ãåãèãããã§ä¾é¡ã¨ããããã¤ã¯ããã©ã¼ãããã®hCardã«é©åããç°¡åãªäººç©æ å ±ã®ä¾ãæãã¾ããããã¤ã³ã¹ã¿ã³ã¹ã¯æ¬¡ã®ãããªãã®ã§ãã
{ "vcard" : { "fn" : "æªå±± æ£å¹¸", "email" : ["hiyama{AT}chimaira{DOT}org"], "url" : ["http://www.chimaira.org/", "http://d.hatena.ne.jp/m-hiyama/"] } }
次ã®ç´æããã¾ãã
- fnããããã£ã¯å¿ é
- emailããããã£ã¯æä½1ã¤ã®é ç®ãæã¤é å
- urlããããã£ã¯ä»»æåæ°ã®é ç®ãæã¤é åã空ã§ããã
ã¡ã¼ã«ã¢ãã¬ã¹ã¨URLã¯ãæ¬æ¥ãªãå°ç¨ã®ãã¼ã¿åãå®ç¾©ãã¹ãã§ãããããæååã§æ¸ã¾ãã¾ãã
Catyã¹ãã¼ãã®å表ç¾ã¯ãã¤ã³ã¹ã¿ã³ã¹ã¨ã»ã¨ãã©åãå½¢ã«ãªãã¾ãã次ã®ã¨ããã§ãã
{ "vcard" : { "fn" : string, "email" : [string, string*], "url" : [string*] } }
JSONã¹ãã¼ããªã以ä¸ã®ããã«ãªãã¾ãã
{ "type" : "object", "properties" : { "vcard" : { "type" : "object" "properties" : { "fn" : {"type", "strning"}, "email" : { "type" : "array", "items" : [ {"type": "string"} ], "additionalProperties" : {"type": "string"} }, "url" : { "type" : "array", "items" : {"type": "string"} } } } } }
æ¬å®¶JSONã¹ãã¼ãã«ä¸å ¬å¹³ã«ãªããªãããã«ãJSONã¹ãã¼ãã®ã¡ãªãããè¨ã£ã¦ããã¾ããï¼ãæè¿ã®JSONã¹ãã¼ãã解説ãã¾ããããå¼ç¨ï¼ï¼
JSONã¹ãã¼ãã®ç¹å¾´ã¯ãå表ç¾ãã¾ãJSONãã¼ã¿ã§ãããã¨ã§ããããã¯ã¡ã¿ãã¼ã¿ããã¼ã¿ã¨ãã¦æ±ããã¨ãã大ããªå©ç¹ãããã¾ãã
Catyã¹ãã¼ãã®å表ç¾èªä½ã¯JSONãã¼ã¿ã§ã¯ããã¾ãããJSONãã¼ã¿ã¨ãããä¼¼ã¦ã¾ãããå®ã¯éãã¾ãããã£ã¦ãJSONãã¼ã¿ãæ±ããã¼ã«ã§Catyã¹ãã¼ããæ±ããã¨ã¯ã§ãã¾ãããä¾ãã°ãJSONãã¼ã¿ãã³ã³ããã¹ãã¨ãããã³ãã¬ã¼ãã¨ã³ã¸ã³ã¸ã®å ¥åã¨ãã¦Catyã¹ãã¼ãã¯ä½¿ãã¾ãããJSONã¹ãã¼ããªããããã§ãã¾ãã
åã®åé¡
ãæè¿ã®JSONã¹ãã¼ãã解説ãã¾ããã«ããåé¡ã¨ã¾ã£ããåãå 容ã§ããåæ²ãã¾ãã
- åºæ¬ã¹ã«ã©ã¼åï¼ integer, number, string, boolean, null
- ãªã¹ãåï¼ é ç®ããã¹ã¦åãåã§ããé ååãé ç®ã®åæ°ã¯ä»»æ
- ã¿ãã«åï¼ æ±ºã¾ã£ãåæ°ã®é ç®ãæã¤é åå
- ã¿ãã«ï¼ãªã¹ãåï¼ æ±ºã¾ã£ãåæ°ã®é ç®ã¨ãããã«ç¶ãåãåã®ä»»æåã®é ç®ãæã¤é åå
- éãããªãã¸ã§ã¯ãåï¼ æ±ºã¾ã£ãåæ°ã®ããããã£ãæã¤ãªãã¸ã§ã¯ãå
- éãããªãã¸ã§ã¯ãåï¼ æ±ºã¾ã£ãåæ°ã®ããããã£ã¨ãåãåã®ä»»æåã®ããããã£ãæã¤ãªãã¸ã§ã¯ãå
- ã¦ããªã³åï¼ è¤æ°ã®åã®ã©ãããæå³ããå
- åæåï¼ æéåã®å®æ°ãªãã©ã«ã®ã©ãããæå³ããå
- å ¨ç§°åï¼ any
Catyã¹ãã¼ãã®è¨è¿°ãã¿ã¼ã³
åã®åé¡ãã¨ã«ãã©ã®ããã«ã¹ãã¼ããæ¸ããã説æãã¾ãã
åºæ¬ã¹ã«ã©ã¼å
åã®ååãã®ãã®ãæ¸ãã¾ãã
ï¼åã®ååï¼
ä¾ãã°ãinteger ã¨ãã
åºæ¬ã¹ã«ã©ã¼åã®ååã¯æ¬¡ã®5ã¤ã§å ¨é¨ã§ããnullã¯ã¹ã«ã©ã¼ã¨ã¯å¥ãªãç¹æ®ãªåãã¨ãã¦æ±ããã¨ãããã¾ã*2ã
- integer
- number
- string
- boolean
- null
ãªã¹ãå
ãªã¹ãã®é ç®ã®å表ç¾ããï¼é ç®ã®å表ç¾ï¼ã¨æ¸ãã¨ãã¾ãããªã¹ãåã¯æ¬¡ã®ã¨ããã§ãã
[ï¼é ç®ã®å表ç¾ï¼*]
æå°ã¯æ£è¦è¡¨ç¾ã®ãä»»æåã®ç¹°ãè¿ããã®è¨å·ã§ããä¾ãã°æ´æ°å¤ã®ãªã¹ã㯠[integer*] ã§ãã空ãªã¹ããå«ã¾ãã¾ãã
ã¿ãã«å
ã¿ãã«ã®é ç®ãã¨ã®åã表ç¾ããå表ç¾ããï¼é ç®ã®å表ç¾1ï¼ãï¼é ç®ã®å表ç¾2ï¼ãªã©ã¨æ¸ãã¨ãã¾ããã¿ãã«åã¯æ¬¡ã®ã¨ããã§ãã
[ï¼é ç®ã®å表ç¾1ï¼, ï¼é ç®ã®å表ç¾2ï¼, ..., ï¼é ç®ã®å表ç¾nï¼]
ä¾ãã°ã[string, string, integer] ã¨ãã
ã¿ãã«ï¼ãªã¹ãå
ã¿ãã«ã®é ç®ã®åã表ç¾ããå表ç¾ããï¼é ç®ã®å表ç¾1ï¼ãï¼é ç®ã®å表ç¾2ï¼ãªã©ãæ®ãã®é ç®ã®åã¯ï¼æ®ä½é ç®ã®å表ç¾ï¼ã¨æ¸ãã¨ãã¾ããã¿ãã«ï¼ãªã¹ãåã¯æ¬¡ã®ã¨ããã§ãã
[ï¼é ç®ã®å表ç¾1ï¼, ï¼é ç®ã®å表ç¾2ï¼, ..., ï¼é ç®ã®å表ç¾nï¼, ï¼æ®ä½é ç®ã®å表ç¾ï¼*]
ä¾ãã°ãæåãçå½å¤ã§ãå¾ã¯æååã並ã¶ãããªé åãªãã[boolean, string*] ã§ãã
éãããªãã¸ã§ã¯ãå
ãªãã¸ã§ã¯ãã®ããããã£åãï¼ããããã£å1ï¼ãï¼ããããã£å2ï¼ãªã©ãããããã£å¤ã®åã表ç¾ããå表ç¾ããï¼ããããã£ã®å表ç¾1ï¼ãï¼ããããã£ã®å表ç¾2ï¼ãªã©ã¨æ¸ãã¨ãã¾ããéãããªãã¸ã§ã¯ãåã¯æ¬¡ã®ã¨ããã§ãã
{ "ããããã£å1" : ï¼ããããã£ã®å表ç¾1ï¼, "ããããã£å2" : ï¼ããããã£ã®å表ç¾2ï¼, ... "ããããã£ån" : ï¼ããããã£ã®å表ç¾nï¼ }
éãããªãã¸ã§ã¯ãå
ãªãã¸ã§ã¯ãã®ããããã£åãï¼ããããã£å1ï¼ãï¼ããããã£å2ï¼ãªã©ãããããã£å¤ã®åã表ç¾ããå表ç¾ããï¼ããããã£ã®å表ç¾1ï¼ãï¼ããããã£ã®å表ç¾2ï¼ãªã©ãæ®ãã®ããããã£ã®åã¯ï¼æ®ä½ããããã£ã®å表ç¾ï¼ã¨æ¸ãã¨ãã¾ããéãããªãã¸ã§ã¯ãåã¯æ¬¡ã®ã¨ããã§ãã
{ "ããããã£å1" : ï¼ããããã£ã®å表ç¾1ï¼, "ããããã£å2" : ï¼ããããã£ã®å表ç¾2ï¼, ... "ããããã£ån" : ï¼ããããã£ã®å表ç¾nï¼, * : ï¼æ®ä½ããããã£ã®å表ç¾ï¼? }
æå¾ã®ï¼æ®ä½ããããã£ã®å表ç¾ï¼ã«ã¯çå符ãä»ããã®ãæ£çµ±çè¨æ³ã§ãããããã°ãã°å¿ãããã¨ãã人éçãªçç±ã§çå符ã®çç¥ã許ãã¾ãã
ã¦ããªã³å
ã¦ããªã³åãæ§æããåã®è¡¨ç¾ã ï¼å表ç¾1ï¼ãï¼å表ç¾2ï¼ãªã©ã¨ãã¾ããã¦ããªã³åã¯æ¬¡ã®ã¨ããã§ãã
(ï¼å表ç¾1ï¼ | ï¼å表ç¾2ï¼ | ... | ï¼å表ç¾nï¼)
縦æ£ã§åºåã£ã¦å表ç¾ã並ã¹ã¾ããå¤å´ãå²ãã§ãã丸æ¬å¼§ã¯çç¥ãããã¨ãããã¾ããCatyã§ã¯ãæåã¨ãªãååï¼alternativesï¼ãæä»çã§ãããã¨ãè¦æ±ãã¾ãã
åæå
åæåã¯æ¬¡ã®ã¨ããã§ãã
(ï¼ãªãã©ã«1ï¼ | ï¼ãªãã©ã«2ï¼ | ... |ï¼ãªãã©ã«nï¼)
縦æ£ã§åºåã£ã¦å®æ°ãªãã©ã«ã並ã¹ã¾ããå¤å´ãå²ãã§ãã丸æ¬å¼§ã¯çç¥ãããã¨ãããã¾ããä¸çªçã表ç¾ã«ãªãããã«ãåãªãã©ã«ã¯éãå¤ã«ãªãããã«æ¸ãå¿ è¦ãããã¾ãã
å ¨ç§°å
any ã§ãã
ãªãã·ã§ãã«æå®
ããããã£ãé ç®ããªãã·ã§ãã«ã§ãããã¨ã表ãã«ã¯ã次ã®ããã«æ¸ãã¾ãã
ï¼å表ç¾ï¼?
ãå°»ã«çå符ãä»ãã¾ããæ£è¦è¡¨ç¾ã¨åãã§ãã
ãªãã©ã«ã¨ã·ã³ã°ã«ãã³å
ãã¹ã¦ã®JSONãªãã©ã«ã¯ããã®å¤ã ããæã¤ã·ã³ã°ã«ãã³ã»ããã§ããåã表ãã¾ããå表ç¾ã¨ãªãã©ã«ãèªç±ã«æ··ãããã¨ãã§ãã¾ããä¾ãã°ã{"family-name" : "æªå±±", "given-name" : string(minLength=1)} ã¨ãã(integer | "infinity" | null) ã¨ãã
ã¹ãã¼ãå±æ§
åãã¨ã«æå¹ãªã¹ãã¼ãå±æ§ã¯ãå表ç¾ã«ç¶ã㦠(ï¼å±æ§å1ï¼=ï¼å±æ§å¤1ï¼, ï¼å±æ§å2ï¼=ï¼å±æ§å¤2ï¼, ...) ã®å½¢ã§æ¸ãã¾ããinteger(minimum=0, maximum=5)ã[string*](maxItems=10) ã¨ããå±æ§ã®ååã¨å¤ã¯ãæ¬å®¶JSONã¹ãã¼ãã«å¾ãã¾ãããä¸é¨ã®å±æ§ï¼requires, default, readonlyãªã©ï¼ã¯ãµãã¼ããã¾ãã -- åã·ã¹ãã ã®æ´åæ§ãå£ãã¦ãã¾ãå¯è½æ§ãããããã§ããåã·ã¹ãã ã¨ç¸æ§ãæªãã¹ãã¼ãå±æ§ã¯ã¢ããã¼ã·ã§ã³ã¨ãã¦è¨è¿°ããããããã¾ããã
*1:諸è¬ã®é½åã«ãããCatyã®å ¬éãªãªã¼ã¹ãæ»ã£ã¦ãã¾ããæ°ã¹ãã¼ãæ§æã解éã§ãã次æãã¼ã¸ã§ã³ã¾ã§ããããã°ãããå¾ ã¡ãã ããã
*2:JSONã®nullã¯å®ä½çãªå¤ã§ãéåå¨ã¨ããã«ãã¤ã³ã¿ã¼ã§ã¯ãªããã¨ã«ã¯æ³¨æãã¦ãã ãããã¤ãã¥ã¼ã¿ãã«ãªã·ã³ã°ã«ãã³ãªãã¸ã§ã¯ãã¨èããã®ãé©åã§ãã