这是一个非常容易被忽略的技巧,现在我要在这里强调它。
要使用这个技巧,我们必须了解xsl:message元素,它的定义为:
<!-- Category: instruction --> <xsl:message terminate = "yes" | "no"> <!-- Content: template --> </xsl:message>
这个元素和print语句的作用有些相似,看到这里您应该明白我要做什么了吧?对,就是使用xsl:message元素打印一些消息。不过该元素输出消息的方式依赖于XSLT处理器,一般的情况是将消息输出到控制台,不过也可能弹出一个警告窗口或输出到日志文件中。
抛开今天的主题--调试,我想我们可以走的更远!
我们应该能够开发一个XSLT的日志记录模板库(Template Library)专门用来做日志记录。可以按照下面的方向努力:
这个模板库不应该使用任何形式的扩展而应该尽量发挥XSLT的核心能力。
这个模板库的使用方式要简单,具体的方式可以考虑使用xsl:import和xsl:include。
如果有朋友对这个话题感兴趣,可以和我联系,我们一起讨论。如果有足够的支持我可以将它作为一个开源的项目大家一起开发。
这是一个非常有趣的Java库,因此决定翻译一下,原文可以查阅Jakarta Commons Net。
Jakarta Commons Net 实现了许多基础 Internet 协议的客户端部分。该组件的目标是提供基本的协议访问能力,而不是协议的高层抽象,因此,有一些设计违反了面向对象的设计原则。我们的哲学是要使协议的全部功能可以被访问,而且可以通过程序的方式访问,这样开发人员就可以构造他们自己的定制实现。
特性
支持的协议:
背景
Jakarta Commons Net 开始于 NetComponents 这个商业的 Java 库。在 Java 出现的早期,NetComponents 是由 ORO 开发的。在1998年 NetComponents 发布了1.3.8版本之后,它的源代码被捐赠给了Apache软件基金会,采用Apache License分发。从那时起,许多开发人员对Jakarta Commons Net的继续发展做出了贡献。当前的版本号模式已经和以前的没有关系了。换句话说就是 Jakarta Commons Net 1.0 是成功的并且替代了NetComponents 1.3.8。
2006年6月30日,eclipse 3.2 正式发布了。
时间过得可真快!回想我刚刚开始使用eclipse哪会,大概是2003年初吧,当时eclipse还没有这么大的影响力。
3.2和以前发行的版本一样都有一个长长的新特性的列表,详细的内容可以查阅New and Noteworthy。
而让我欣喜的是3.2大大增强了对重构的支持,如下:
今天要结束这个主题了。让我们来从头回顾一下:
这个主题只是非常浅显的介绍了Atom的一些方面,目的只是想让大家对Atom有一个整体的认识。下面列出的内容可能更加实用:
Atom的主要应用场景:
Atom的主要扩展:
随着Atom社区的发展,Atom的应用场景会不断的增加,扩展也会不断的涌现。
在上一篇中我们讨论了如何将自己的内容以Atom格式发布,现在来讨论一下如何处理其他人以Atom格式发布的内容。这同样也是一个见仁见智的问题。
您现在看到的页面就是从这个Atom Feed文档转换而来的,转换是通过xslt来完成的。
在做这个xslt的时候一定要充分的考虑Atom Syndication Format规范,下面看看我是怎么处理atomAuthor的:
<xsl:template match = "a:author" mode="authors">
<div class="blogs-author">
<xsl:if test="position() = 1">
<xsl:text>发布者:</xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test = "a:uri">
<a href="{a:uri}" title="{a:uri}">
<xsl:value-of select="a:name"/>
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="a:name"/>
</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
<xsl:if test="a:email">
<a href="mailto:{a:email}" title="给 {a:name} 发邮件">
<img src="/images/email.gif" alt="给 {a:name} 发邮件"/>
</a>
</xsl:if>
<xsl:if test="position() != last()">
<xsl:text> | </xsl:text>
</xsl:if>
</div>
</xsl:template>
如果您作为内容提供者会怎样发布自己的内容呢?要是我的话,我会遵循下面的过程:
数据源可以是各种各样的,比如可以是文件,可以是数据库,也可以来源于网络,等等。我们的目标是将来自于这些数据源的数据联合到一起并以Atom格式发布。至于如何联合是要在橙色的框内解决的问题,这也是一个见仁见智的问题,关乎设计的好坏。
记得以前听到过一句话:要对接口进行编程。我想在这里应该好好的实践一下这句话,会有很大的收获。首先,要为Atom模型定义一组接口,这应该比较容易,因为只要遵循Atom规范就可以了。之后,再将从数据源抽取数据并填充Atom模型的过程抽象成一个接口A,作为Atom模型和数据源的一个桥梁。最后,要为每个数据源定制一个A接口的实现。
还有其它的一些方法,如可以将数据源中的数据提取成一种基于XML的中间格式,在用XSLT转换成ATOM格式或其它的格式(RSS或OPML等)。
方法还有很多,不过要选择适合自己场景的。
见过上面的logo吗?这就是Google的在线阅读器,一款非常不错的软件。
单击上面的logo可以到达Google Reader的首页,在那里可以看到它的三个主要用途:
要使用Google Reader你必须有一个Google Account。在首次登陆时会是下面的样子:
这时就需要告诉Google Reader我们想要订阅什么内容了,比如要订阅Solo L的博客网志就需要像下面那样输入内容的地址然后单击确定。
订阅好了之后马上就可以阅读了。
重复上面的过程就可以将大量的内容联合到一起。例如,要关注大量的新闻,而这些新闻来源于不同的站点,以前需要一个站点一个站点的浏览。现在好了,只要该站点支持联合就可以加入像Google Reader这样的阅读器,这样就可以集中阅读了。如果阅读器还提供一些附加的功能(如将阅读的和没有阅读的内容区分开等)那就可以获得更好的阅读体验了。
今天我们简单的接触了一下Google Reader,还有很多类似的软件。透过这类软件也展示了Atom格式的主要使用场景,即内容发布者提供符合Atom格式的XML文件然后由内容消费者使用联合软件(如Google Reader)来订阅。
今天我特意做了一张大图作为开始,就是想让大家对Atom的元素有一个整体的印象。其中的*表示出现0次或多次,?表示出现0次或1次,没有任何标记的表示必须出现1次而且只能出现1次。
从图中不难看出Atom的元素(除了atomContent之外)都是用来包含元数据(meta data)的。元数据就是用来描述数据的数据,在Atom中就是指用来描述Feed或Entry的数据。例如,atomAuthor就是用来描述Feed或Entry的作者的,而作者对于Feed或Entry来说就是元数据。只有atomContent用来包含数据本身。
到了现在Atom模型已经清晰的呈现在我们的面前了,也该是看一看真正的atom文档的时候了。单击这里,看到了吧,实际上Atom文档就是一个格式良好的XML文档,仔细的感受吧。
在下一篇中我将介绍Google Reader,看看它是怎么处理Atom文档的。
我要保持沉没了,多从自身找找原因,思考一下为什么会成这个样子。好了让糟糕的心情见鬼去吧!我们继续昨天的话题,讨论一下ATOM是如何定义单信息和联合信息的。
Atom Syndication Format描述了两种类型的Atom文档,即Feed文档和Entry文档,分别对应着联合信息和单信息。Entry文档可以单独使用,也可以联合起来形成Feed文档。
下面的图描述了这种关系:
咳,最近比较忙,火气也比较大,搞的团队的气氛也比较紧张。不过今天我的博客还是发布了,这到底是一件让人高兴的事情。
我发布这个博客网志的初衷就是想和朋友们分享彼此的快乐,分享彼此的悲伤,使我们的理想不在凄美,生活不在惨淡。
那到底采用什么样的格式来发布自己的博客呢?考虑来考虑去,最后决定使用ATOM了。这是比较新的一种联合格式,正式的规范(Atom Syndication Format)在2005年7月15日才刚刚面世。
如果您也对这种联合格式感兴趣,可以查阅RFC4287。
我对准确的模型非常在意,因此,在今后的几天之中将会讨论一下ATOM的模型,一起来看看它是怎么来联合内容的。
我们来看看RFC4287中对ATOM的描述:
Atom is an XML-based document format that describes lists of related information known as "feeds". Feeds are composed of a number of items, known as "entries", each with an extensible set of attached metadata.
从上面的描述中可以看出ATOM提供了一个模型,这个模型可以描述单信息和联合信息。
不妨假设Ii为单信息。这样就可以将n个单信息I1, ... ,Ii, ... ,In联合到一起,形成一个联合信息。
下一次我将讨论ATOM是如何定义单信息和联合信息的。
在今天结束之前,让我们来为这个ATOM系列确定一个好听点的名字,恩...,叫什么好呢?就叫 ATOM联合技术的新宠 吧!