Енуми и граници за валидиране на формат
Компактните enum използват status:{draft|published} (и точката и запетая разделя избора). Низът се подрязва преди точната проверка за членство с отчитане на главни и малки букви. Задължителен enum отхвърля пропусната или празна стойност. Вложените обекти използват {name:Type}; те не са декларации на enum.
В total5@0.0.19 Color приема шестнадесетично #RGB, #RRGGBB и #RRGGBBAA; не приема имена на цветове в CSS. Icon валидира шаблон на име на клас, не наличието на ресурса на иконата. Base64 и Zip използват валидаторите на frameworka: приемането на формат не е проверка на съдържание. В парсера на компактна схема на тази версия JSON и IP не са разпознати подтипове и се връщат към обикновени низове. Повреден JSON и невалиден IP текст се приемат. Изричната JSON схема по-долу задава вградени стойности subtype, за да включи тези проверки; не разчита JSON низ в обект. Не използвайте SafeString вместо обвързани SQL параметри или екраниране на изхода.
var schema = NEWSCHEMA('FormatBoundaries', '*status:{draft|published},*color:Color,*blob:Base64,*zip:Zip,*icon:Icon,*document:JSON,*address:IP');
var explicit = Total.newjsonschema('ExplicitFormats', { $id: 'ExplicitFormats', type: 'object', required: ['document','address'], properties: { document: { type: 'string', subtype: 'json' }, address: { type: 'string', subtype: 'ip' } } });
exports.install = function() {
ROUTE('POST /explicit/ @json', function($) {
var result = explicit.transform($.body);
if (result.error) { $.response.status = 400; $.json({ error: 'invalid format' }); }
else $.json(result.response);
});
ROUTE('POST /formats/ @json', formats);
};
function formats($) {
var result = schema.transform($.body);
if (result.error) {
$.response.status = 400;
$.json({ error: 'invalid format' });
} else
$.json(result.response);
}