First we try, then we trust

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  183 随笔 :: 111 文章 :: 3016 评论 :: 339 引用

跟本文相关的代码可以从这里下载

昨天发了一个关于博客园电子杂志格式设想,今天把我设计的一个实施方案放上来,并说说我的思路。

我做了三个文件,一个XML Schema,用来规范期刊上文章的格式,还有一个测试用的XML文件,以及我自己设计的一个样式XSL(大家可根据自己需要自行定制格式信息,包括XSL以及CSS规范)。如果大家安装了XMLSPY 2004的化,查看起来可能更方便一些。

XML Schema的内容如下:

其中大多数内容都不用我再解释,我只解释其中一部分:

CreativeCommons

CreativeCommons为创作共用标记,由一系列标记值组成,其Schema是:

  <xs:simpleType name="CreativeCommonsType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Attribution"/>
      <xs:enumeration value="Noncommercial"/>
      <xs:enumeration value="No Derivative Works"/>
      <xs:enumeration value="Share Alike"/>
    </xs:restriction>
  </xs:simpleType>

是一个枚举类型,其值可以是"Attribution"、"Noncommercial"、"No Derivative Works"和"Share Alike"中的一个或多个。


MainContent

MainContent是文章正文部分,为了能够解析正常,不要忘了在XML文件对应的MainContent节点下应用HTML的命名空间。例如:

<MainContent>
 <DIV xmlns="
http://www.w3.org/TR/REC-html40">
 ......
 </DIV>
</MainContent>

这样DIV内部的所有元素默认命名空间都是HTML命名空间了,防止出现命名冲突。


Classification

Classification为文章分类节点。我的思路是:博客园可以定制多种分类方法,今后甚至允许个人定义自己的分类算法,某篇文章在这一系列分类中拥有自己的"坐标"和"权重(关联度)"。未来在检索时,我们可以用不同分类进行交叉检索,并依据权重排序。

例如:

我们设立如下两个分类:

按语言分(ClassifyMethodID:001)
 C#(ClassificationID:001001)
 VB.NET(ClassificationID:001002)
 VC++(ClassificationID:001002)

按技术分(ClassifyMethodID:002)
 开源技术(ClassificationID:002001)
  DNN 3.0(ClassificationID:002001001)
  NHibernate(ClassificationID:002001002)
 ASP.NET(ClassificationID:002002)
 ADO.NET(ClassificationID:002003)
 
假如有篇文章是关于ASP.NET网站开发的,用C#编写,用到了ADO.NET技术以及NHibernate技术,我们就可以在XML中如下描述其分类:

<Classification>
   <ClassifyMethod ClassifyMethodID="001">
      <Coordinate ClassificationID="001001" Weight="0.6"/>
   </ClassifyMethod>
   <ClassifyMethod ClassifyMethodID="002">
      <Coordinate ClassificationID="002001002" Weight="0.9"/>
      <Coordinate ClassificationID="002002" Weight="1"/>
      <Coordinate ClassificationID="002003" Weight="0.3"/>
   </ClassifyMethod>
</Classification>

可以从中看出,文章最贴近的技术是ASP.NET,与NHibernate也有很大关联。但ADO.NET技术应用不很多。未来想检索ASP.NET中应用NHibernate技术的文章,通过交叉定位就可以很容易找到相关内容。权重也可用来对结果排序(排序方案我还没有想好)。

分类方案一旦确定后,由博客园统一进行编码,并定期发布最新编码方案(也可以用XML格式)。这些编码一旦确立后,就不允许再进行修改。同时可以开放一个编码段,供用户自己设置编码。未来一旦期刊采用智能客户端技术,这些自己定义的分类方案可以附加在XML文章后,供自己参考(说得有些远了,而且这一点我还没有考虑好)。


XSL格式输出

XSL文件可以自己编写,我提供了一个方案,不太好看,但足以说明问题。这样文章就具有了换肤的功能。大家可以下载文件,用IE打开XML文件看看应用样式后的结果。自己也可以修改XSL文件和CSS样式表,提供新的界面效果。


其它

上篇随笔中我建议使用GUID作为图片名,后来我发现博客园每篇文章都有ID号(从地址栏中可以看出来)。如果这个ID号不重复的化,就可以作为期刊文章ID使用。另外,该文章的所有图片可以在文章ID后面添加"-1"、"-2"序号。这样可以很容易找到某文章所包含的图片。就像我在images目录下给出的两个图片的命名一样。

另外,目前我在Schema中设置的分类权重是从0.1~1。但我认为太细了。一个评阅人很难评阅出关联度到底是几。所以是否可以考虑1、0.6、0.3这三个档次,分别表示非常关联、很关联和有些关联。这样反而会提高分类准确度。因为每个评阅人的心理评价标准各不相同,如果一个人认为0.5,另外一个人可能认为0.6,这样的化还不如设置三个权重档次好。

既然是XML,那么要求所有文章的HTML必须遵循XML规范,这可以使用FrontPage 2003实现。将修正好的HTML放到MainContent节点下面(不要忘了命名空间的事)。

posted on 2004-11-27 10:59 吕震宇 阅读(2799) 评论(16)  编辑 收藏 网摘

评论

#1楼  2004-11-27 11:08 montaque      
有没有考虑全文检索?
  回复  引用  查看    

#2楼 [楼主] 2004-11-27 11:15 吕震宇      
我考虑过全文检索,但是我们目前是出CHM格式的杂志,不进行数据库存储。而且全文检索对于这种多分类,多交叉的方式似乎不太好。而且通过统计技术的分类准确性我心理也没有什么底。
  回复  引用  查看    

#3楼  2004-11-27 11:43 wayfarer      
比较全面了。不过对于Authors下面,还应该详细一点,不能只提供<Author/>,可能还需要其他属性,如<Homepage>之类的。便于通过文章连接到博客主页。

分类权重可以模糊一点,但标准应该确定一下。我不太清楚你的每个分类权重值,是以什么标准来确定的?

还有,文章是否需要加入评论。有很多评论是很有价值的。但我不知道这样实现是否有难度?例如在XSL中加入:
<Comments>
<Comment>
<Name/>
<Title/>
<PostDate/>
<Content/>
</Comment>
</Comments>

当然是否添加评论,还值得商酌。

  回复  引用  查看    

#4楼  2004-11-27 11:49 dudu      
“我发现博客园每篇文章都有ID号”, 这个ID号是唯一的, 可以作为期刊文章ID使用。
  回复  引用  查看    

#5楼  2004-11-27 13:14 leo      
可不可以加上cisco的内容呢?我在技术区里面没有找到哦!
  回复  引用  查看    

#6楼  2004-11-27 13:58 dudu      
文章的内容是不是可以考虑也放在期刊中, 这样就可以离线阅读了。
  回复  引用  查看    

#7楼 [楼主] 2004-11-27 14:26 吕震宇      
@wayfarer

可以加入评论。而且我发现我的Schema有些漏洞,其实一些节点可以将最少出现次数设置为0,这样就可有可无了,也不影响使用。我会抽时间为Sechema设置添加评论的功能。但仅仅用于显示,在杂志上是无法添加评论的。

@leo

关于cisco的问题,我想恐怕还要讨论讨论。博客园是专注于.NET技术的。

@dudu

文章的内容是放在期刊中的,可以下载文件查看一下XML中的内容,其中包括了文章正文部分。因为MainContent元素我在Schema中设置类型是any,所以可以包含任意标记。
  回复  引用  查看    

#8楼 [楼主] 2004-11-27 14:29 吕震宇      
@wayfarer

除了<Author/>,<Homepage>还需什么属性,大家可以提一提。
  回复  引用  查看    

#9楼  2004-11-27 14:37 wayfarer      
对于Authors,因为作者的信息其实是蛮多的,例如MSN,邮件等。但对于期刊来说,似乎这些没有多大必要。何况,很多作者也许是不原意公开的。

因此这些属性是否应该包括进来,可以考虑。但Homepage是很有必要的,因为是博客园的期刊,其上登载的文章必然是博客园上的,保留这个链接,便于读者直接访问博客的主页,做更好的交流,也能读到作者更多的文章。

其他的,暂时还想不到,辛苦震宇兄了。
  回复  引用  查看    

#10楼  2004-11-27 16:36 Pvistely      
我觉得评论没必要加上去,
  回复  引用  查看    

#11楼  2004-11-27 20:20 Allen Lee      
考虑到某些文章可能是翻译作品,所以,文章的类型也应该有原创(Original)和翻译(Translation)之分,我建议:

<Article kind = "Original">
...
</Article>

而Authors的类型应该体现出更多的细节,例如原作者(Original)、译者(Translator)、审校(Reviewer)等。我的提议是:

<Author kind="Original">
some author
</Author>

  回复  引用  查看    

#12楼  2004-12-02 00:19 Flier Lu      
可以考虑采用DocBook格式或者其子集,毕竟是经历了n年大型出版的考验的格式,而且有诸多的 FO 工具支持。
  回复  引用  查看    

#13楼 [楼主] 2004-12-02 08:50 吕震宇      
呵呵,我居然没有听说过DocBook。我会去查查。建议Filer Lu在论坛上公布一下自己的想法,供大家参考。
  回复  引用  查看    

#14楼  2004-12-03 17:38 mouseman [未注册用户]
不知道

abstract字段用来存放什么东西??有什么意义??MainContant用string类型就可以了,为什么要用anny??有特别含义?

  回复  引用    

#15楼  2004-12-03 17:56 mouseman [未注册用户]
<Classification>
<ClassifyMethod ClassifyMethodID="001">
<Coordinate ClassificationID="001001" Weight="0.6"/>
</ClassifyMethod>
<ClassifyMethod ClassifyMethodID="002">
<Coordinate ClassificationID="002001002" Weight="0.9"/>
<Coordinate ClassificationID="002002" Weight="1"/>
<Coordinate ClassificationID="002003" Weight="0.3"/>
</ClassifyMethod>
</Classification>

ClassifyMethod 没有必要用,难道只是为了对第一层进行单独列出?
因为 <Coordinate ClassificationID="002001002" Weight="0.9"/>明显是第三层节点。 <Coordinate ClassificationID="002002" Weight="1"/> 明显是第二层,既然第二层和第三层可以并行在一起在<ClassifyMethod >节点下,那么
我认为为什么不把第一层也放入?

其实我就是没有明白第一层 ClassifyMethodID单独列出的用意!!
指教!!

  回复  引用    

#16楼 [楼主] 2004-12-03 22:01 吕震宇      
@mouseman

1、abstract字段用来放置摘要

2、MainContant用string类型,那么文章中的HTML标记就必须用CDATA来存储,而CDATA信息在XSL转换时不会生成对应的标记,仅会生成一个字符串,这样就达不到嵌入HTML文档的用意了。用ANY就好的多,Schema在检验时不会校验HTML标记,只要复合XML规范就行了。

3、这我到没有想过,只是觉得第一层之间的差异比较大,涉及不同分类方法。而第二层、第三层之间的差异就小的多。
  回复  引用  查看    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-11-27 11:13 编辑过
Google站内搜索

相关文章:

相关链接: