关闭标记中的XML/HTML标记名真的有必要吗?

关闭标记中的XML/HTML标记名真的有必要吗?,xml,tags,language-design,Xml,Tags,Language Design,这本身并不是一个编程问题,但我想知道为什么XML中的结束标记中需要标记的名称。比如说,我不能 <a> <b>stuff</b> </a> 东西 写 <a> <b>stuff</> </> 东西 所以每个结束标记仅仅终止了最后一个打开的标记 所以我的问题是 这是否有效(即,是否存在我没有想到的任何角落案例,在这些案例中,这将是含糊不清的/失败的) 如果它能工作,为什么“他们”

这本身并不是一个编程问题,但我想知道为什么XML中的结束标记中需要标记的名称。比如说,我不能

<a>
    <b>stuff</b>
</a>

东西

<a>
    <b>stuff</>
</>

东西
所以每个结束标记
仅仅终止了最后一个打开的标记

所以我的问题是

  • 这是否有效(即,是否存在我没有想到的任何角落案例,在这些案例中,这将是含糊不清的/失败的)
  • 如果它能工作,为什么“他们”不这样设计呢
  • 如果它能工作,为什么“他们”不这样设计呢

    一个原因是,SGML/XML也被设计为人类可读的。您的
    /a/b
    示例是可读的,但要解释一个复杂得多的结构将是一场噩梦


    对于混合内容(PCDATA和元素结构混合)尤其如此。

    这可以工作,但调试嵌套问题会很糟糕。例如:

    <one><two><nine></><ten></><eight><three></><four>
    <five></><six></></>
    <seven></>To what element does this text belong?</></></>
    
    
    这个文本属于什么元素?
    
    如果您确保XML具有适当的缩进,那么嵌套问题就不是问题(以下是正确缩进的相同代码。但是,由于缩进无关紧要,我们需要另一种机制来保持XML的可读性。在本例中,可读性意味着人们可以很容易地看到哪些内容属于哪个元素。解决方案是命名每个结束标记引用的元素

    <one>
    <two>
        <nine>
        </nine>
        <ten>
        </ten>
        <eight>
            <three>
            </>
            <four>
                <five>
                </>
                <six>
                </>
            </>
            <seven>
            </>
            To what element does this text belong?
        </>
    </>
    </>
    
    
    这个文本属于什么元素?
    
    当我们给结束标记命名时,即使在缩进不正确的XML中也可以清楚地看到文本属于元素

    
    这个文本属于什么元素?
    
    闻起来像SGML。SGML还允许类似于
    的东西,我同意“mu太短了”。要补充,它需要遵循XML 1.0建议第2.1节中“格式良好”的XML概念()除了我的最后一条评论,SGML本来是手工编写的,所以有很多快捷方式,XML是通过软件支持(XML编辑器或完全由软件生成)构建的因此,更简单/更快的解析器比快捷方式更重要。使用
    而不是实际的结束标记有什么好处?我不同意投票结束。这既是一个建设性的问题,也是一个真正的问题,也是一个很好的问题。
    <one><two><nine></nine><ten></ten><eight><three></three><four>
    <five></five><six></six></four><seven>
    </seven>To what element does this text belong?</eight></two></one>