Edited at

(現在改訂中)設定ファイルの設計 (格助詞「で」を参考)  その1 設計思想


汎用的な設定ファイルの設計


目的

カスタム設定、カスタムコードをなるべく減らすための設定ファイルの設計。

具体的には、

プログラムの実行のときに、意味的に「藤沢図書館で、借りている本と予約本を」とパラメータを書くだけで、必要な情報がとってこれるようにする。この藤沢図書館の部分を、神奈川県立図書館に変更するだけで、プログラムが同じ動きをしてくれるようにする。図書館のよる違いはできるだけ設定情報で吸収して、プログラム部分は簡単にするのが目標。実行環境は、jupyter です。


実装のコンセプト 


  • プログラム

    XXX(名詞(noun)) で、YYY(動詞(verb))する。


  • 設定ファイルの最初の階層

    名詞(noun)、動詞(verb)、共通(common) 全体(global)

    (例)鎌倉図書館で、借りた本を調べる。

    ds.do("鎌倉図書館","借りた本")



設定ファイルの構造(json から Yamlにしました。)


トップレベル

{"nouns":{},"verbs":{},"commons":{},"global":{}}


nouns 以下 名詞 ( noun )

"nouns": {"鎌倉図書館":{項目(items)},

"藤沢図書館":{項目(items)}


  • "鎌倉図書館" が名詞(noun) で、{}には、項目(items)が設定されています。


実際の例

        "鎌倉図書館": {

"auth": {
"form": {
"name": "usercheck"
},
"id": {
"name": "usercardno"
},
"logout": {
"js": "OPWUSERLOGOUT(1)"
},
"password": {
"name": "userpasswd"
},
"submit": {
"name": "Login"
},
"url": "https://lib.city.kamakura.kanagawa.jp/opw/OPW/OPWUSERCONF.CSP"
},
"id": "idxxx",
"lend": {
"url": "https://lib.city.kamakura.kanagawa.jp/opw/OPW/OPWUSERINFO.CSP#ContentLend"
},
"password": "passxxx",
"reserve": {
"url": "https://lib.city.kamakura.kanagawa.jp/opw/OPW/OPWUSERINFO.CSP#ContentRsv"
}
}


verbs 以下 動詞 ( verb )


  • 実行するプログラム(関数)の順番と、項目を記述します。

  • 名詞( noun ) にない項目があると補完します。

    "verbs": {

"test": {"common":"test"},
"借りた本": {
"do": [
"login",
"get_url,lend,url",
"sleep,5",
"get_url,reserve,url",
"sleep,5",
"logout"
]
}
}


do の構造


  • do は、リストで、実行する関数名を指定する。

  • 関数は、リストの順番に実行される

  • do の要素は、カンマ区切りの文字列で、関数名,引数,...の構造になっている。

  • (例) 関数 get_url の引数として、[lend,url]が渡される。

  • sleep,5 も同様に、5 が渡され、5秒間、実行が停止される。

  • do は、名詞(noun) に記述することもできる。そのときは、名詞(noun)にかかれた do が優先する


common の適用


  • 項目(items)の中に、common があったら適用する。上記の事例では、動詞(verb) test にある。 "common":"test"

  • 名詞(noun),動詞(verb)のあとで、適用される。


global の適用


  • 何も設定しなくて良いです。

  • 名詞(noun),動詞(verb),commons の後で適用。


設定ファイルの設計 (格助詞「で」を参考) プログラム編に続く