我正在开发一个应用程序,它将需要存储inline,intext元数据。我的意思是这样:假设我们有一个长文本,并且我们想存储一些与特定单词或文本句子相关的元数据。
存储此信息的最佳方法是什么?
我的第一个想法是在文本中包含某种Markdown
语法,然后在检索时将对其进行解析。看起来像这样:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam __nonummy nibh__[@note this sounds really funny latin]
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
这会带来两个我想到的问题:
- 相对较小的是,如果所说的语法恰好在所说的文本上,它可能会使解析混乱。
- 最重要的是,这不会使此元数据与文本本身保持独立。
我想拥有一个离散的数据结构来保存这些数据,例如一个存储这些元数据的不同的DB表,这样我就可以以离散的方式使用它们:查询,统计信息,排序等等。
编辑:既然回答者删除了他的答案,我认为在这里添加他的建议可能是一件好事,因为这是在第一个概念上扩展的可行建议。海报建议使用类似的语法,但对元数据链接到PRIMARY KEY
该的metadata
数据库表。
看起来像这样的东西:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit,
sed diam __nonummy nibh__[15432]
euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
其中15432
将是ID
含有必要的,可查询信息的表的行的,按照下面的例子。
我的第二个想法是将这种信息存储在数据库表中,如下所示:
TABLE: metadata
ID TEXT_ID TYPE OFFSET_START OFFSET_END CONTENT
1 lipsum note 68 79 this sounds really funny latin
这样,元数据将具有唯一的ID,text_id
作为连接到存储文本的表的外键a ,并且它将使用简单的字符偏移范围将数据与文本本身连接起来。
这样做可以使数据与元数据保持分离,但是我可以立即用这种方法看到的一个问题是,文本基本上是不可编辑的。或者,如果我想要实现元数据的分配后的文字编辑,我就基本都较之前的版本来计算字符添加或去除,并检查是否每个这样的修改之前或之后添加或删除角色的每个关联的元数据。
对我来说,这听起来像是一种毫无意义的方法。
您对我如何解决此问题有任何指示或建议吗?
编辑2:一些XML问题
添加另一种情况,这对于实现数据和元数据的分离非常必要。
- 假设我想让不同的用户拥有相同文本的不同元数据集,而每个用户实际上都可能显示其他用户元数据。
此时,很难实现降价类型的任何解决方案(或HTML或XML)。在这种情况下,我想到的唯一解决方案是拥有另一个DB Table,该DB Table将包含原始文本的单个用户版本,并通过使用来连接到原始文本表FOREIGN KEY
。
不知道这是否也很优雅。
- XML具有分层数据模型:碰巧在其中的任何元素另一个元素的边界的都被视为其子元素,在我正在寻找的数据模型中,情况通常并非如此;在XML中,必须先关闭所有子元素,然后才能关闭父标记,以免元素重叠。
例:
<note content="the beginning of the famous placeholder">
Lorem ipsum dolor坐在<comment content="I like the sound of amet/elit">
椅子上</note>
, 管教成才</comment>
,<note content="adversative?">
sed diam nonummy<note content="funny latin">
</note>
NIBH euismod tincidunt UT laoreet dolore麦格纳aliquam ERAT volutpat。</note>
这里我们有两个不同的问题:
不同元素重叠:第一个注释在第一个注释内开始,但在第一个注释结束后结束,即它不是其子项。
相同元素重叠:最后一个音符和黑体音符重叠;但是,由于它们是同一类元素,因此解析器将在第一个闭包处关闭最后打开的元素,并在最后一个闭包处关闭第一个打开的元素,在这种情况下,这不是预期的。