超媒体技术解析:XHTML、URI模板与WADL
在当今的网络世界中,超媒体技术扮演着至关重要的角色,它能够增强资源之间的连接和交互性。接下来,我们将深入探讨四种超媒体技术:URI模板、XHTML 4、XHTML 5和WADL。
1. URI模板
URI模板是一种让简单资源表单看起来像链接的技术。例如,
https://s3.amazonaws.com/{name-of-bucket}/{name-of-object}
就是一个有效的URI模板,其中
{name-of-bucket}
和
{name-of-object}
是占位符,需要用具体的值来填充。通过这种方式,一个URI模板可以生成无限数量的有效URI,如
https://s3.amazonaws.com/bucket1/object1
等。
URI模板并非数据格式,但任何数据格式都可以通过支持它来提升超媒体能力。目前有提议在XHTML 5中支持URI模板,而WADL已经支持该技术。
2. XHTML 4
XHTML是HTML和XML的折衷标准,它使用与HTML相同的标签和属性,但具有更结构化的特点。XHTML 4具有强大的超媒体功能,下面我们分别介绍其链接和表单的相关特性。
2.1 XHTML 4链接
在XHTML 4中,有两个主要标签用于创建超文本链接:
link
和
a
。
-
link
标签通常出现在文档的头部,用于将整个文档与某个资源连接起来。例如:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<link rel="alternate" type="application/atom+xml" href="atom.xml">
<link rel="stylesheet" href="display.css">
</head>
<body>
<p>
Have you read
<a href="Great-Expectations.html"><i>Great Expectations</i></a>?
</p>
</body>
</html>
在上述示例中,
link
标签将文档与
atom.xml
和
display.css
资源关联起来。
-
a
标签出现在文档的主体部分,用于将其内容链接到另一个资源。
link
和
a
标签有三个重要属性:
href
、
rel
和
rev
。
-
href
:指定被链接资源的URI,是超链接的核心属性。
-
rel
:解释外部URI与当前文档的关系,如
alternate
表示替代表示,
stylesheet
表示样式表。
-
rev
:与
rel
相反,解释当前文档与外部URI的关系。例如:
<a rel="parent" href="/Dad">My father</a>
<a rev="child" href="/Dad">My father</a>
2.2 XHTML 4表单
XHTML 4表单是驱动人类网络的重要组成部分。表单通过
form
标签描述,具有以下重要属性:
-
method
:指定客户端提交表单时使用的HTTP方法,如
GET
或
POST
。
-
action
:指定表单访问的资源的(基础)URI。
-
enctype
:指定客户端随请求发送的表示的媒体类型。
以下是一个应用表单和资源表单的示例:
<!-- 应用表单:搜索引擎接口 -->
<form method="GET" action="http://search.example.com/search">
<input name="query" type="text" />
<input type="submit" />
</form>
<!-- 资源表单:文件上传脚本接口 -->
<form method="POST" action="http://files.example.com/dir/subdir/"
enctype="multipart/form-data">
<input type="text" name="description" />
<input type="file" name="newfile" />
</form>
然而,XHTML 4表单存在一些缺点:
1.
应用表单的URI表达受限
:只能通过在基础URI后添加键值对的方式生成URI,无法直接生成类似
http://search.example.com/search/jellyfish
的URI。
2.
资源表单方法受限
:只能使用HTTP POST,无法直接使用DELETE或PUT请求。
3.
无法描述HTTP头
:不能使用表单描述客户端应发送的HTTP头信息。
4.
表示格式受限
:只能指定简单的键值对表示,无法描述更复杂的表示格式。
5.
无法定义重复字段
:不能告诉客户端可以为某个键提交任意数量的值。
3. XHTML 5
HTML 5有望解决在可编程网络中使用HTML时出现的许多问题。虽然HTML 5的标准化时间存在不确定性,但它具有以下重要特性:
-
支持所有HTTP基本方法
:HTML 5表单支持GET、POST、PUT和DELETE四种基本的HTTP方法。
-
支持URI模板
:有提议允许表单使用URI模板,使应用表单能够生成更灵活的URI。
-
支持重复模型
:HTML 5表单支持“重复模型”,允许客户端为同一个键提交任意数量的值。
-
新的序列化方式
:定义了两种新的键值对序列化方式:纯文本和新定义的XML词汇表(
application/x-www-form+xml
)。
4. WADL
WADL(Web Application Description Language)是一种用于表达HTTP资源行为的XML词汇表。它类似于WSDL,但用于描述RESTful服务。
WADL可以提供一个文件来描述服务暴露的所有资源,也可以嵌入到特定资源的XML表示中。它具有以下优点:
-
支持URI模板和所有HTTP方法
:能够支持URI模板和所有的HTTP方法。
-
描述HTTP头
:可以告诉客户端在请求时填充特定的HTTP头。
-
描述复杂表示格式
:可以通过指向模式定义来描述XML表示的格式,并通过XPath语句指出文档的重要部分。
以下是一个使用Ruby WADL库的del.icio.us客户端示例:
#!/usr/bin/ruby
# delicious-wadl-ruby.rb
require 'wadl'
if ARGV.size != 2
puts "Usage: #{$0} [username] [password]"
exit
end
username, password = ARGV
# Load an application from the WADL file
delicious = WADL::Application.from_wadl(open("delicious.wadl"))
# Give authentication information to the application
service = delicious.v1.with_basic_auth(username, password)
begin
# Find the "recent posts" functionality
recent_posts = service.posts.recent
# For every recent post...
recent_posts.get.representation.each_by_param('post') do |post|
# Print its description and URI.
puts "#{post.attributes['description']}: #{post.attributes['href']}"
end
rescue WADL::Faults::AuthorizationRequired
puts "Invalid authentication information!"
end
下面是del.icio.us的WADL文件示例,分为资源定义、方法定义和表示定义三个部分:
4.1 资源定义
<?xml version="1.0"?>
<!-- This is a partial bootleg WADL file for the del.icio.us API. -->
<application xmlns="http://research.sun.com/wadl/2006/07">
<!-- The resource -->
<resources base="https://api.del.icio.us/">
<doc xml:lang="en" title="The del.icio.us API v1">
Post or retrieve your bookmarks from the social networking website.
Limit requests to one per second.
</doc>
<resource path="v1">
<param name="Authorization" style="header" required="true">
<doc xml:lang="en">All del.icio.us API calls must be authenticated
using Basic HTTP auth.</doc>
</param>
<resource path="posts">
<resource path="recent">
<method href="#getRecentPosts" />
</resource>
</resource>
</resource>
</resources>
4.2 方法定义
<!-- The method -->
<method id="getRecentPosts" name="GET">
<doc xml:lang="en" title="Returns a list of the most recent posts." />
<request>
<param name="tag" style="form">
<doc xml:lang="en" title="Filter by this tag." />
</param>
<param name="count" style="form" default="15">
<doc xml:lang="en" title="Number of items to retrieve.">
Maximum: 100
</doc>
</param>
</request>
<response>
<representation href="#postList" />
<fault id="AuthorizationRequired" status="401" />
</response>
</method>
4.3 表示定义
<!-- The representation -->
<representation id="postList" mediaType="text/xml" element="posts">
<param name="post" path="/posts/post" repeating="true" />
</representation>
</application>
综上所述,这些超媒体技术各有优缺点,在实际应用中需要根据具体需求进行选择。XHTML 4虽然目前广泛使用,但存在一些局限性;XHTML 5和WADL具有更多的优势,有望在未来得到更广泛的应用。
下面是一个简单的mermaid流程图,展示了使用WADL客户端访问del.icio.us资源的流程:
graph LR
A[启动客户端] --> B[加载WADL文件]
B --> C[提供认证信息]
C --> D[查找“最近帖子”功能]
D --> E[发送GET请求]
E --> F{请求成功?}
F -- 是 --> G[处理响应数据]
F -- 否 --> H[显示认证错误信息]
同时,为了更清晰地对比这些超媒体技术的特点,我们可以使用以下表格:
| 技术名称 | 支持URI模板 | 支持HTTP方法 | 描述HTTP头 | 描述复杂表示格式 |
| ---- | ---- | ---- | ---- | ---- |
| XHTML 4 | 否 | GET、POST | 否 | 否 |
| XHTML 5 | 提议支持 | GET、POST、PUT、DELETE | 否 | 有限 |
| WADL | 是 | 所有 | 是 | 部分支持(XML) |
超媒体技术解析:XHTML、URI模板与WADL
5. 技术对比与应用场景分析
为了更深入地理解这些超媒体技术,我们可以进一步分析它们在不同场景下的适用性。以下是一个详细的对比表格,展示了四种超媒体技术在多个关键特性上的表现:
| 技术名称 | 支持URI模板 | 支持HTTP方法 | 描述HTTP头 | 描述复杂表示格式 | 应用场景 |
|---|---|---|---|---|---|
| URI模板 | 是 | 无直接关联 | 无直接关联 | 无直接关联 | 用于生成大量相似结构的URI,简化URI的表达和管理,适用于资源丰富且具有规律的服务。 |
| XHTML 4 | 否 | GET、POST | 否 | 仅支持简单键值对 | 适用于传统的Web页面开发,对超媒体功能要求不高,主要用于展示信息和简单的交互。 |
| XHTML 5 | 提议支持 | GET、POST、PUT、DELETE | 否 | 有限(新序列化方式但仍有局限) | 可用于需要更丰富交互和操作的Web应用,如单页应用、动态表单等。 |
| WADL | 是 | 所有 | 是 | 部分支持(XML) | 适合用于RESTful服务的描述和客户端开发,能够帮助开发者更方便地构建和理解服务接口。 |
从表格中可以看出,不同的超媒体技术在特性上存在明显差异,这决定了它们在不同应用场景中的优势。例如,URI模板在处理大量相似URI时具有独特的优势,而WADL则在描述RESTful服务方面表现出色。
6. 实际操作步骤与示例扩展
在实际应用中,我们可以根据具体需求选择合适的超媒体技术。以下是一些具体的操作步骤和示例扩展,帮助你更好地应用这些技术。
6.1 使用XHTML 5表单支持PUT和DELETE请求
在HTML 5中,表单支持所有基本的HTTP方法,包括PUT和DELETE。以下是一个使用HTML 5表单发送PUT请求的示例:
<!DOCTYPE html>
<html>
<body>
<form method="PUT" action="http://example.com/api/resource/1">
<input type="text" name="name" value="New Name">
<input type="submit" value="Update Resource">
</form>
</body>
</html>
操作步骤:
1. 创建一个HTML文件,使用
<!DOCTYPE html>
声明为HTML 5文档。
2. 在
<form>
标签中设置
method
属性为
PUT
,并指定
action
属性为要更新的资源的URI。
3. 添加表单元素,如
<input>
标签,用于输入要更新的数据。
4. 添加
<input type="submit">
按钮,用于提交表单。
6.2 使用WADL描述复杂的RESTful服务
假设我们有一个更复杂的RESTful服务,包含多个资源和不同的操作。以下是一个扩展的WADL文件示例:
<?xml version="1.0"?>
<application xmlns="http://research.sun.com/wadl/2006/07">
<resources base="http://example.com/api">
<resource path="users">
<method id="getUsers" name="GET">
<doc xml:lang="en" title="Get all users" />
<response>
<representation href="#userList" />
</response>
</method>
<method id="createUser" name="POST">
<doc xml:lang="en" title="Create a new user" />
<request>
<representation mediaType="application/json" />
</request>
<response>
<representation href="#user" />
</response>
</method>
</resource>
<resource path="users/{id}">
<param name="id" style="template" type="xs:int" />
<method id="getUser" name="GET">
<doc xml:lang="en" title="Get a single user by ID" />
<response>
<representation href="#user" />
</response>
</method>
<method id="updateUser" name="PUT">
<doc xml:lang="en" title="Update a user by ID" />
<request>
<representation mediaType="application/json" />
</request>
<response>
<representation href="#user" />
</response>
</method>
<method id="deleteUser" name="DELETE">
<doc xml:lang="en" title="Delete a user by ID" />
<response>
<status code="204" />
</response>
</method>
</resource>
</resources>
<grammars>
<include href="schemas.xsd" />
</grammars>
<representation id="userList" mediaType="application/json" element="users" />
<representation id="user" mediaType="application/json" element="user" />
</application>
操作步骤:
1. 定义资源和操作:在
<resources>
标签中定义服务的资源路径和对应的操作方法。
2. 描述请求和响应:在每个
<method>
标签中,使用
<request>
和
<response>
标签描述请求和响应的信息,包括媒体类型和表示格式。
3. 引用模式定义:使用
<grammars>
标签引用XML模式定义文件,用于描述数据的结构。
4. 定义表示格式:使用
<representation>
标签定义不同响应的表示格式,通过
id
属性进行引用。
7. 总结与展望
通过对URI模板、XHTML 4、XHTML 5和WADL这四种超媒体技术的详细介绍和分析,我们可以看到它们各自的特点和优势。在实际开发中,我们应该根据项目的需求和目标,选择合适的超媒体技术。
随着Web技术的不断发展,超媒体技术也在不断演进。XHTML 5和WADL等技术具有更多的潜力和优势,有望在未来的Web开发中发挥更重要的作用。同时,我们也期待更多创新的超媒体技术出现,为Web应用的开发和交互带来更多的可能性。
以下是一个mermaid流程图,展示了选择合适超媒体技术的决策过程:
graph LR
A[开始] --> B{是否需要生成大量相似URI?}
B -- 是 --> C[考虑使用URI模板]
B -- 否 --> D{是否为传统Web页面开发?}
D -- 是 --> E[考虑使用XHTML 4]
D -- 否 --> F{是否需要支持所有HTTP方法?}
F -- 是 --> G{是否需要描述复杂服务接口?}
G -- 是 --> H[考虑使用WADL]
G -- 否 --> I[考虑使用XHTML 5]
F -- 否 --> I
这个流程图可以帮助开发者在面对不同的项目需求时,快速做出合适的技术选择。总之,超媒体技术是Web开发中不可或缺的一部分,合理运用这些技术可以提升Web应用的质量和用户体验。
超级会员免费看
4

被折叠的 条评论
为什么被折叠?



