2011-07-22 109 views
7

這實在不是一個編程問題本身,但我想知道爲什麼XML中的結束標籤需要標籤的名稱。例如,不能關閉標籤中的XML/HTML標籤名稱是否真的有必要?

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

寫入

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

讓每個關閉標籤</>只是終止了最後打開的標籤?

所以我的問題是

  1. 將這項工作(即是有任何一個角落的情況下,我沒有想到的,其中這將是模棱兩可/失敗)?
  2. 如果能行得通,那爲什麼他們不這樣設計呢?
+2

聞起來像SGML。 SGML也允許諸如'

+0

我同意「mu太短」。爲了補充,它需要遵循XML格式「良構」的XML概念,XML 1.0建議(http://www.w3.org/TR/REC-xml/#sec-starttags)的2.1節列出了這個概念。 –

+0

除了我最後的評論之外,SGML是專門用手寫的,所以有很多快捷方式,XML是用軟件支持(XML編輯器或由軟件完全生成的)構建的,所以更簡單/更快的解析器更多比捷徑更重要。 –

回答

5

如果可行,爲什麼'他們'這樣設計呢?

其中一個原因是SGML/XML也被設計爲人類可讀的。你的/a/b的例子是可讀的,但是一個更復雜的結構可能是一個嘗試解釋的噩夢。

對於混合內容(PCDATA和元素結構混合)尤其如此。

2

它可以工作,但調試嵌套問題將會很糟糕。例如:

<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文本也屬於元素<eight>

<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> 
相關問題