我们收到大量数据作为平面文件:分隔或只是固定长度的记录。有时很难找出文件实际包含的内容。
是否有任何完善的实践将文件架构嵌入到文件的开头或结尾以使文件不言自明?
只是为了得到一个想法,想象一下这样的事情:
<data name=test records=2 type=fixed>
<field name=foo start=0 length=2 type=numeric>
<field name=bar start=2 length=4 type=text>
</data>
11test
12ing
我们会在开头解析xml并用它来读取记录。
答案 0 :(得分:1)
你看过Protocol Buffers的灵感了吗?
答案 1 :(得分:1)
到目前为止我没有 - 或者至少没有意识到这一点。
我唯一知道的(就广泛接受的标准而言)是数据文件的第一行是列名 - 至少对于分隔的记录,对于固定长度,它更难,特别是如果你的数据可以包含多种记录类型(我发现固定长度的可能性远远大于分隔的记录类型。)
我从哪里开始建议您不能将定义嵌入到文件中我假设您从外部来源获取数据,因此您不太可能从他们那里获得帮助,即使您这样做您可以立即创建挑战(例如)在必要时使用Excel轻松打开文件。
有点横向思考 - 如果使用XML - 可能会将文件嵌入到定义(CDATA的大块)中。这是一个稍微更实用的解决方案,因为它为您的外部数据提供了一个包装器,而不是要求修改数据本身。不确定这是多么实用 - 但对我来说比其他方式感觉更好。
答案 2 :(得分:0)
我不知道任何已建立的做法,但您只想将架构添加到数据中的想法似乎很好。 Apache Avro是一种类似于Protocol Buffers和Thrift的数据序列化工具。我认为典型的Avro使用涉及将模式与数据一起存储(通过将其预先添加到流中,我猜)。
我还想提到PADS project。它们具有模式语言,旨在让您描述“ad-hoc”数据格式。目前我相信他们只有C和ML实现,这可能是一个问题。另一方面,他们的模式语言旨在处理各种各样的格式,因此它仍然可能值得在您自己的基于XML的事物上使用它。