XML模式的数据不包含在标签中 - ?

时间:2012-11-30 15:19:09

标签: xml xml-parsing

我想解析一个不寻常的XML结构,如下所示。两个自动关闭标签用于标记文本的开头和结尾。因此,文本不在标记分区内。

<article>
  <sec>
    <clause id="31"/>This says thirty-one <clause_end/>
    <clause id="32"/>This says thirty-two <clause_end/>
  </sec>
</article>

遗留文档不太适合XML的离散层次化要求,并且此模式尝试解决这些问题。

  • 是否与XML的任何声音实现一致?
  • 您对如何应用XML解析器有什么建议吗?

保持原始结构是可取的,但如果答案为否,那么我将不得不:

  1. 制作一个标记文字的替代架构:<clause id="32"> text </clause>
  2. 通过剥离干扰<clause>的其他标记,使文档格式正确。我很确定没有什么我会错过的。
  3. 顺便说一下,我很乐意链接到实时文件,除了我宁愿不让开发人员难堪,假设这个模式和我想象的一样偏离。 ; - )

    基于9月9日的答案......

    • 是否与XML的任何声音实现一致?
    • 。 。 。的可能
    • 您对如何应用XML解析器有什么建议吗?
    • 。 。 。 尽可能地解析,但在架构中的这个级别,您必须使用字符串。

    我可能会保留现有的结构,但会引入一个小的增强功能:

    <article>
      <sec>
        <clause id="31"/>This says thirty-one <clause_end id="31"/>
        <clause id="32"/>This says thirty-two <clause_end id="32"/>
      </sec>
    </article>
    

1 个答案:

答案 0 :(得分:1)

在其他模式中,这种结构肯定有先例,例如milestone-start中的milestone-endNational Library of Medicine Tag Set(虽然我从未在超过一百万份文档中看到过它们) 。请注意,它们在IDREF上包含milestone-end属性,可将其与milestone-start/@id配对。在解析时,这肯定有助于处理这些元素。

扩展OSIS评论,因为我发现这个特别有趣和优雅(或者至少是一个可以解决这个混乱问题的优雅解决方案),来自this article

  

OSIS中使用的解决方案是:既不使用通用里程碑标记也不使用特定的额外标记,而是使用与里程碑和非里程碑元素完全相同的标记:在空格式和非空格式中。通过小组的sighran。简而言之,

     
      
  • 尽可能使用<q who='paris'>...</q>,否则
  •   
  • 使用<q who='paris' sID='foo'/>...<q eID='foo'/>
  •   
     

这种方法在特洛伊被称为“特洛伊木马里程碑”之后,几乎可以免费使用典型的模式语言。不需要额外的元素。只需添加sID和eID属性,并确保允许空内容。因此,任何元素都不会随意或需要时具有里程碑意义。正确的属性会自动生成,因为相同的声明生效。