12

システム構成にテキストの protobuf ファイルを使用しています。
これに関する 1 つの問題は、シリアル化された protobuf 形式がコメントをサポートしていないことです。
これを回避する方法はありますか?
スキーム定義ではなく、テキストのシリアル化されたデータ形式について話しています。
この問題は誰かによってどこかで解決されましたか?

4

2 に答える 2

13

テキスト Protobuf 形式 (テキスト形式のシリアル化された protobuf メッセージ) は、#構文を使用したコメントをサポートします。オンライン ドキュメントで同じリファレンスを見つけることができませんでしたが、過去にプロジェクトで同じものを使用したことがあるので、テストできる小さな例をまとめました。

サンプルメッセージの説明- [SampleProtoSchema.proto]

message SampleProtoSchema {
  optional int32 first_val = 1; // Note: This supports C/C++ style comments
  optional int32 second_val = 2;
}

サンプル テキスト メッセージ - [SampleTextualProto.prototxt]

# This is how textual protobuf format supports comments
first_val: 12 # can also be inline comments
# This is another comment
second_val: 23

ただし、これらのコメントはシリアル化時に自動的に生成できないことに注意してください。後で手動でのみ追加できます。
コンパイルしてテストします。

> protoc --python_out=. SampleProtoSchema.proto
>
> ipython
[1]: import SampleProtoSchema_pb2
[2]: sps = SampleProtoSchema_pb2.SampleProtoSchema()
[3]: from google.protobuf import text_format
[4]: with open('SampleTextualProto.prototxt', 'r') as f:
         text_format.Merge(f.read(), sps)
[5]: sps.first_val
[5]> 12
[6]: sps.second_val
[6]> 23
于 2015-01-20T20:39:46.963 に答える
0

Piqi プロジェクトを参照してください。人間が読める新しい「Piq」データ形式と、Protobuf、Piq、JSON、および XML 形式の間でデータを変換するためのコマンドライン ツールを導入することで、この問題に対処します。

Piq データ形式は、人間との対話用に特別に設計されました。コメント、バイナリ リテラル、逐語テキスト リテラルがサポートされています。

于 2011-09-06T15:50:26.653 に答える