XML是否与类/ ID更具语义性?

时间:2016-01-22 03:34:21

标签: html xml

我来自HTML / JavaScript / PHP背景,最近开始学习XML

我正在阅读"使用PHP" 进行无意义的XML Web开发this excerpt,其中包括此比较:

<div>
  <div>
    <h2>Product One</h2>
    <p>Product One is an exciting new widget that will simplify your life.</p>
    <p><b>Cost: $19.95</b></p>
    <p><b>Shipping: $2.95</b></p>
  </div>
</div>
  

从计算机的角度来看一下这个 - 无可否认的简单 - 代码示例。人类当然可以阅读这个文档并进行必要的语义跳跃来理解它,但计算机却无法理解。 ....

     

试图破译这个文档的计算机程序(甚至一些人)将无法进行理解它所需的语义跳跃。计算机只能将文档呈现给具有与每个标记关联的样式的浏览器。 HTML主要是一组用于在Web浏览器中呈现文档的指令;它不是一种结构化文件的方法来表达它们的含义。

然后,作者将此与XML进行比较:

  

如果上述文档是用XML创建的,它可能看起来像这样:

<productListing title="ABC Products">
  <product>
    <name>Product One</name>
    <description>Product One is an exciting new widget that will simplify your life.</description>
    <cost>$19.95</cost>
    <shipping>$2.95</shipping>
  </product>
</productListing>
  

理论上,我们应该能够查看任何XML文档,并立即了解正在发生的事情。在上面的示例中,我们知道产品列表包含产品,并且每个产品都有名称,描述,价格和运费。你可以肯定地说,每个XML文档都是自我描述的,人类和软件都可以读取。

我得到了作者的学位。当然,计算机无法从HTML中辨别出含义,没有上下文。

然而,我绝不会指望HTML以这种方式编写。相反,我希望HTML使用classes和/或ids 提供必要的上下文更像:

<div class="productListing">
  <div class="product">
    <h2 class="name">Product One</h2>
    <p class="description">Product One is an exciting new widget that will simplify your life.</p>
    <p class="cost"><b>Cost: $19.95</b></p>
    <p class="shipping"><b>Shipping: $2.95</b></p>
  </div>
</div>

鉴于这个例子,我的问题是:

XML是否比使用HTML为其包含的数据提供上下文的classes/ids更具语义性?

注意我简化了代码示例以避免TL; DR)

2 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。我会给你两分钱。

几年前,当我不得不构建一个动态网站而我的客户端无法访问数据库(只是FTP访问)时,我跳到了XML上。我本质上编写的是一个XML后端和PHP,它通过以下方式获取SimpleXML解析。

回想起来,我认为XML在语义上比HTML更丰富。正如上面提到的评论,html类是一个样式构造。我不记得亲自使用/听到任何人使用类或ID用于基于CSS / JS的样式或动画以外的目的。

使用XML而不是HTML与类的关键是可以灵活地使用它。对于另一个项目,从一个系统更新XML元素的值,然后让它们由另一个系统读取和显示,使得很多东西更顺畅。另外,XML解析库允许通过节点解析许多函数。

另外值得注意的是,XML允许您定义属性。这可以被视为类似于HTML的类和ID。

另外,我们不要忘记RSS源本质上是XML,而不是带有更多标签的HTML。

因此,特别针对语义回答您的问题,我绝对认为XML在那里具有优势。

TLDR :根据我的说法,XML更加语义

答案 1 :(得分:1)

你是正确的,就仅仅看标记而言,XML&#34;有意义的&#34;之间没有什么区别。元素名称和HTML类/ id。但是,请记住,对于XML,有一组技术和工具可以让您轻松使用元素名称。您可以编写模式并对其进行验证。您可以使用命名空间来编写模式。您可以使用简单的XPath表达式提取结构。使用HTML方法所有这一切都要困难得多。

因此,如果您有要求捕获和处理&#34;有意义的&#34;结构,然后XML是你的朋友。如果你想要的只是快照一些你可以说的东西&#34;这是一个产品&#34;,那么也许真的可能没有那么大的差异。

我的建议是:如果使用多个发布管道存储和处理数据,XML很可能是一个更好的起点。如果您想要的只是捕获将传递给基于HTML的消费者的快照,那么&#34;语义丰富&#34; HTML可能是更容易的方法。