لماذا أليس هذا مخطط صالحة لآر إكس؟
سؤال
وأنا باستخدام YAML كتنسيق ملف التكوين لمشروع بيثون.
أن يكون مدقق مخطط الوحيدة المتاحة لبيثون وYAMLومؤخرا وجدت آر إكس . : - / Kwalify يعمل مع YAML، ولكن هذا فقط لروبي وجافا. : (
ولقد تم قراءة الوثائق تفتقر لها كل يوم، وفقط لا يمكن أن يبدو لكتابة مخطط صالح لتمثيل بنية الملف الخاص بي. مساعدة؟
ولدي ملف YAML التكوين التالية:
cmd:
exec: mycmd
aliases: [my, cmd]
filter:
sms: 'regex .*'
load:
exec: load
filter:
sms: 'load: .*$'
echo:
exec: echo %
وأنا فشله في تمثل بنية متداخلة. ما أريده هو العنصر الخارجي الأكثر (كمد، تحميل وصدى، في هذه الحالة) لتكون سلسلة التعسفية وهذا بدوره يحتوي على عناصر أخرى. 'التنفيذي' هو سلسلة الثابتة واللازمة البند؛ أيضا تم إصلاحها "أسماء مستعارة" و "فلتر"، ولكن ينبغي أن يكون اختياريا. مرشح بدوره لديه مجموعة أخرى من العناصر المطلوبة والاختيارية. كيف ينبغي أن يمثل هذا مع آر إكس؟
وحتى الآن لدي المخطط التالي (في YAML)، الذي فشل آر إكس لتجميع:
type: //rec
required:
type: //rec
required:
exec: //str
optional:
aliases:
type: //arr
contents: //str
length: {min: 1, max: 10}
filter:
type: //rec
optional:
sms: //str
email: //str
all: //str
واختبار هذا في IPython يعطيني هذا:
/Rx.py in make_schema(self, schema)
68 raise Error('invalid schema argument to make_schema')
69
---> 70 uri = self.expand_uri(schema["type"])
71
72 if not self.type_registry.get(uri): raise "unknown type %s" % uri
KeyError: 'type'
والذي يقودني إلى الاعتقاد أنا لا تحديد "نوع" في مكان ما. : -S
وأي أفكار؟
وأنا متعب جدا القتال مع هذا الشيء ... هل هناك طريقة أخرى أستطيع أن أكتب مخطط واستخدامه للتحقق من صحة ملفات التكوين الخاصة بي؟
ويرجع الفضل في ذلك مسبقا،
وايفان
المحلول
وجرب هذا:
type: //map
values:
type: //rec
required:
exec: //str
optional:
aliases:
type: //arr
contents: //str
length: {min: 1, max: 10}
filter:
type: //rec
optional:
sms: //str
email: //str
all: //str
وخريطة يمكن أن تحتوي على أي سلسلة كمفتاح، في حين أن تفصيل يمكن أن تحتوي فقط على المفاتيح المحددة في "مطلوب" و "اختياري".