6

Pythonプロジェクトの構成ファイル形式としてYAMLを使用しています。

最近、 RxがPythonとYAMLで利用できる唯一のスキーマバリデーターであることがわかりました。:-/ KwalifyはYAMLで動作しますが、RubyとJava専用です。:(

私は彼らの不足しているドキュメントを一日中読んでいて、私のファイル構造を表すための有効なスキーマを書くことができないようです。ヘルプ?

次のYAML構成ファイルがあります。

cmd:
  exec: mycmd
  aliases: [my, cmd]
  filter:
    sms: 'regex .*'

load:
  exec: load
  filter:
    sms: 'load: .*$'

echo:
  exec: echo %

ネストされた構造を表現できません。私が欲しいのは、最も外側のアイテム(この場合はcmd、load、echo)を任意の文字列にして、他のアイテムを含めることです。'exec'は固定文字列であり、必須項目です。'aliases'と'filter'も修正されていますが、オプションである必要があります。フィルタには、必須アイテムとオプションアイテムの別のセットがあります。これをRxでどのように表現する必要がありますか?

これまでのところ、Rxがコンパイルに失敗する次のスキーマ(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

何か案は?

私はこのことと戦うのにかなり疲れています...スキーマを記述し、それを使用して構成ファイルを検証する他の方法はありますか?

前もって感謝します、

イワン

4

1 に答える 1

4

これを試して:

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

マップにはキーとして任意の文字列を含めることができますが、recには「必須」および「オプション」で指定されたキーのみを含めることができます。

于 2009-06-30T14:06:17.030 に答える