65.9K
CodeProject 正在变化。 阅读更多。
Home

理解 GRML

starIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

1.00/5 (19投票s)

2003 年 6 月 18 日

8分钟阅读

viewsIcon

62791

标记语言的开发。

引言

HTML 是网络上使用的主要标记语言。在首次发布后,它缺少许多如今在网络上司空见惯的功能。HTML 花费了许多年才演变成现在的样子。事实上,从第一次尝试创建标记语言到 HTML 2.0,几乎过去了四年。自 1995 年以来,HTML 一直在不断变化。这表明了开发标记语言所必需的投入。

在 HTML 开发开始之前,需要软件来测试其功能。开发的软件是第一个 HTML 网页浏览器的前身。没有软件,就无法测试标记语言。这表明了开发标记语言的要求。软件驱动着它的发展。

本文的目的是展示通用重用标记语言(General Reuse Markup Language,简称 GRML)是如何发展成其当前格式的。通过示例展示 GRML v1.0 和 GRML v2.0 格式之间的差异。将描述每种标记语言的属性以及它们如何在网络上使用。

背景

这是关于 GRML 系列文章中的一篇。在继续阅读之前,请阅读文章《介绍 GRML》。它概述了现有的文件格式和标记语言,并解释了 GRML 的创建原因。

如果您对标记语言、潜在的替代方法或网页浏览器技术不感兴趣,那么本文不适合您。对于认为 HTML 是浏览网页唯一方式的任何人来说,本讨论都不合适。

开始

创建 GRML 的过程是间接的。它源于创建前端以从网页中提取内容的愿望。想法是提交一个网页请求,并以多种应用程序可用的格式检索内容。HTML 以一种方式显示内容,因此不能被多种应用程序使用。由于目标网页使用 HTML,因此检索到的内容需要以另一种格式提供。

从 HTML 网页中提取内容的唯一解决方案是使用适配器。适配器读取一种格式的数据并将其写入另一种格式。这是一个完美的解决方案,但有一个问题。每次请求网页时,HTML 网页的描述方式都不同。如果没有为每个网页创建适配器,就无法提取作者信息、文章文本或产品描述。必须有更好的方法。

构建网页前端

在尝试寻找一种实用的方法来从网页中提取内容时,正在开发一个用于显示内容的前端。开发了一个单一的适配器,用于将单个网页的 HTML 转换为前端使用的非正式格式。这种非正式格式是创建标记语言的初步步骤。

从 2002 年 6 月到 2002 年 8 月,前端使用网站适配器将 HTML 网页转换为文本进行显示。除了从适配器读取单行文本外,没有其他格式。随着开发的继续,添加了更多适配器,直到有 6 个可用。前端发送的网页请求必须使用这 6 个适配器之一。没有功能让用户输入自己的网页请求。

第一次尝试

在构建网页前端时,需要一个用于使用输入控件发送请求的表单。这需要一种正式的方法来处理与网页的请求和响应。使用任意行文本效率低下。这是个人标记语言(Personal Markup Language)的开始。

新的标记语言具有*表单*支持,并为格式化网页内容提供了结构。但是,*表单*是有限的。起初,前端从第一个网页请求创建了一个*表单*。无法显示另一个*表单*。为了让标记语言为每个网页请求创建*表单*,对前端进行了更新。

升级格式

有了*表单*支持后,前端现在从输入控件发送网页请求,并在必要时从网页响应创建*表单*。唯一缺失的功能是能够将网页内容组织成组,并在前端单独显示每个内容组。这需要一种新的标记语言。这是简单标记语言(Simple Markup Language,SML)的开始。

当前端显示网页内容时,称为一个维度。将内容分成不同的组会为每个组创建一个维度。前端需要显示用于预测、物流和数据分析的不同维度内容。一旦添加了此支持,前端就显示了多维*视图*。

在标记语言开发过程中,有一点是恒定的。前端不允许用户直接输入网页请求。用户必须从前端使用的 6 个网页请求中进行选择。或者,使用*表单*提交请求。一旦移除了这个限制,就必须完全重新设计标记语言。这种新的标记语言是 GRML 的第一个版本。

GRML 版本 1.0

GRML 于 2003 年 1 月完成,支持*表单*输入控件、列和结果。它具有多维支持,并使用了“Web 应用程序”的概念。每个“Web 应用程序”代表用户在网上执行的一项活动。第一个 GRML 网页浏览器具有用于使用搜索引擎、获取新闻头条、查看拍卖列表和查找工作的“Web 应用程序”。

“Web 应用程序”是网页前端时代的遗留物,当时不支持提交网页请求或打开文件。虽然网页浏览器允许网页请求,但如果网页要显示,这些请求必须是“Web 应用程序”之一。

“Web 应用程序”的目的是在 GRML 网页浏览器中使用来自 HTML 网页的内容。由于 HTML 网页非常多,而 GRML 较新,因此能够将 HTML 适应 GRML 是有利的。“Web 应用程序”就是这样做的。

GRML 中“Web 应用程序”的示例。

<GRML> 
<a class=navi_13 name=AUCT type=title>Auctions</> 
<a class=navi_13 name=JOBS type=title>Job Search</> 
<a class=navi_13 name=SRCH type=title>Search Engine</> 

<a class=navi_13 name=AUCT type=location>127.0.0.1/auc.asp?search2=</> 
<a class=navi_13 name=JOBS type=location>127.0.0.1/jobs.asp?search2=</> 
<a class=navi_13 name=SRCH type=location>127.0.0.1/parse.asp?search2=</> 

<a class=hist_13 type=item>127.0.0.1/startup.asp</> 
<a class=hist_13 type=item>127.0.0.1/over.asp</> 
</GRML> 

GRML 的设计目的是供许多不同的浏览器使用。由于只有一个 GRML 网页浏览器,因此无法测试此功能。随着其他浏览器的创建和标记语言的发展,GRML 在 2003 年的前四个月升级到了 1.1 版本。

GRML 的下一个主要升级发生在解决“Web 应用程序”问题时。

GRML 版本 1.2

“Web 应用程序”方法的一个限制是每个“Web 应用程序”和使用的每个网站都需要一个单独的网页。由于有数百万个网站,因此为每个网站创建“Web 应用程序”是不切实际的。另一个问题是,如果网站发生变化,则需要更新“Web 应用程序”。如果支持数百万个网站已经很困难,那么保持更新几乎是不可能的。GRML 需要进行更改。

在 2004 年 3 月,与“Web 应用程序”相关的所有内容都从 GRML 中移除。这使得标记语言能够专注于*表单*输入控件、列和结果。随着“Web 应用程序”的移除,现在可以使用更通用、更一致的 Web 适配器读取任何网页。

GRML 版本 1.2 的示例如下

<a class=edit_13 name=url1 type=title>Enter URL:</> 
<a class=edit_13 name=url1 type=location>http://127.0.0.1/links.asp</> 

<a class=column_13 type=item>Title</> 
<a class=column_13 type=item>Result</> 

<a control=result_13 type=item>RIAA, MPAA Ask High Court To Review</> 
<a control=result_13 type=item>It's official: Hollywood studios and record 
  companies on Friday asked the United States Supreme Court to overturn a  
  controversial series of recent court decisions that have kept file-swapping  
  software legal." (Previous /. coverage here.)</> 
<a control=result_13 type=link>http://slashdot.org/article.pl?sid=04/10/11/1846208</>

GRML 版本 1.2 是 GRML 1.x 系列的最后一个版本。在接下来的六个月使用中,它为标记语言语法的一次新变化奠定了基础。

GRML 版本 2.0

GRML 的早期版本在 Web 和本地文件系统上运行良好。它允许开发使用其*表单*和列/结果方法的各种网页浏览器。除了移除“Web 应用程序”之外,GRML 的语法从 1.0 到 1.2 版本变化不大。速度、控制和可靠性问题未被考虑。然而,GRML 版本 2.0 改变了这一点。

GRML 的此版本旨在创建小文件大小,使用更少的浏览器资源处理文件和网页内容,并提供更多安排文件和网页内容的方式。旧语法被完全抛弃,取而代之的是更小的标签和更具体的标签关键字。1.2 版本中的 GRML 样本在 2.0 版本中如下所示。

<edit url1> 
<location>Enter URL: 
<title>http://127.0.0.1/links.asp 
</edit> 

<column> 
<Title> 
<Description> 
<Link> 
</column> 

<result> 
<Title>RIAA, MPAA Ask High Court To Review 
<Descriptiong>The Hobo writes "It's official: Hollywood studios and record 
   companies on Friday asked the United States Supreme Court to overturn a 
   controversial series of recent court decisions that have kept 
   file-swapping software legal." (Previous /. coverage here.) 
<link>http://slashdot.org/article.pl?sid=04/10/11/1846208 
</result>

使用 GRML 2.0 语法,标签大小比 1.2 版本减少了三分之一。此外,当网页的行非常长时,不会出现内容被截断的问题。在 1.2 版本中,内容将不会被读取,因为结束标签*必须*与开始标签在同一行。对于非常长的内容,结束标签将出现在下一行,并带有剩余的内容。2.0 版本解决了这个问题,因为它不使用结束标签。

使用 2.0 版本可以组织列和结果,而 1.2 版本无法做到。使用上述 GRML 中的column标签,列显示顺序由将顶部的列列为第一,底部的列列为最后来设置。结果的顺序无关紧要。如果有五个列项目,并且第三个应该首先显示,则将其放在column标签项的顶部。

当结果项在其标签中指定了列时,只有当该列出现在<column> ... </column>标签之间时,才会显示。如果只需要显示一列结果,则只指定该列。或者,指定任意数量的列,并仅显示结果中的那些。这在之前的 GRML 版本中是不可能的。

结论

GRML 自 2003 年 1 月首次发布以来,已经经历了多个版本。它已从“Web 应用程序”标记语言发展成为网页标记语言。随着 2.0 版本的推出,它拥有了迄今为止所有版本中最小、最快、最灵活的语法。

通过支持*表单*输入控件、列和结果,GRML 能够支持许多网页浏览器,并提供与其内容相适应的视图,无论使用何种浏览器。

© . All rights reserved.