XML:跨越其他元素的里程碑或元素

时间:2009-11-17 22:08:41

标签: xml xsd markup

我正在使用OSIS(开放圣经信息标准),这是一种用于描述经文和相关文本的XML模式。当我第一次看到XML的一个示例时,我注意到了之前我在XML中没有看到的一些奇怪之处。主要是标签被关闭,然后是逻辑上属于封闭标签的内容。在查看documentation之后,我发现他们称这种标记为“里程碑”。

在这种情况下,它被使用是因为引用可以在一节中开始并且在关闭之前跨越几节经文。这似乎是一个黑客,我将不得不做一些编码来解析和搜索,并显示网络的XML部分。虽然我理解这是技术上有效的XML,但它无法[轻松]验证模式的正确性和标准XML解析API将无法在里程碑之间获取元素。我相信有更好的方法可以形成这种“标准”。您对此类标记有何看法?我还没有真正找到任何其他参考这种做法,其他地方使用它。它有效吗?

来自文档......

  

在XML中,元素的正常形式   是开始标记和结束标记:   < Q> ...< / Q取代。用于处理标记   然而,跨越边界是一个特殊的   必须使用表格。它由两部分组成   完全空的实例   元素类型:一个标记起始   点,一个标记结尾   点。两个空元素识别   自己哪个是开始   哪个是结束,并且共识   它们本身是一个 sID 属性   (传统元素的开头)   和 eID 属性(结尾)   传统元素),价值观   其中必须匹配。

     

空元素用XML表示   在决赛前加上“/”的标签   “>”:因此< q />而不是< q>要么   < / Q取代。以这种方式使用的元素是   俗称'里程碑,'和   OSIS中的那些特定元素   允许这种替代编码   因此被称为“里程碑式的。”

这是一个简短的例子......

<verse osisID="Acts.7.2" sID="a72"/>To this he replied:
<speech who=”Stephan”>Brothers and fathers, listen to me! The God of glory appeared
to our father Abraham while he was still in Mesopotamia, before he lived in Haran
<verse eID=”a72”/>

...

<verse osisID="Acts.7.6" sID="a76"/>God spoke to him in this way: <q
type=”embedded” marker=”'”>Your descendants will be strangers in a country not
their own, and they will be enslaved and mistreated four hundred years. <verse
eID="a76"/>
<verse osisID="Acts.7.7" sID="a77"/>But I will punish the nation they serve as
slaves,</q> God said, <q type=”embedded” marker=”'”>and afterward they will come out
of that country and worship me in this place.</q><verse eID="a77"/>

...

<verse osisID="Acts.7.53" sID="a79"/>you who have received the law that was put
into effect through angels but have not obeyed it.
<verse eID="a79"/>
</speech>

1 个答案:

答案 0 :(得分:2)

这个标记没有任何违法行为,至少就XML语法而言。

这是一个聪明的解决方案,解决了一系列文本必须在两个重叠方案中分解成段的问题。你省略了封闭的标签,所以不可能直观的层次结构,但我会假设它在那里,并尝试以逻辑方式组织事物作为叙述。然后需要指出诗节中断的位置,并且通常它们可以完全是任意的。它们实际上是流程中的点事件(它们的术语:里程碑)。

我唯一不同意的是对于经文有'开始'和'结束'标记。这引入了错误的可能性,因为无法在XML本身内验证开始和结束的包围。我只使用了'开始'标记。当然,这假设每节经文的结尾对应于另一节经文的开头或等级结尾部分。即不可能在两节经文之间加上一些东西。