??xml version="1.0" encoding="utf-8" standalone="yes"?> FOAF-a-matic 是一個簡單的 Javascript 應用E式。它讓你能夠建立關於你自q FOAFQ?Friend-of-A-Friend"Q檔案。你可以參?Edd Dumbill 的文章:(x)?a >XML 观察Q?XML ?RDF 扑ֈ朋友」,拜訪RDFWeb ?FOAF 首頁Q以?a >FOAF 的詞彙描qͼF(tun)OAF vocabulary descriptionQ?/font>? 單地說QFOAF 是一E用 XML ?RDF 描述你自q方式Q你的名字、電子郵件信,以及(qing)你的朋友們?這種方式使其可以被軟體處理,舉例來說可為搜尋引擎所利用Q自動化地發珄與你的資訊?FOAF h帶動R上Ca多有趣發展的潛(jng)力。Ben Hammersely 的英國衛報文?"Click to the Clique" 提供 關於這些x的更進一步探a? FOAF-a-Matic 被用來提供一個簡單、快速的方式Q產生你自己?FOAF 檔案。最基本你至需要提供你?名字?email 地址Q並且你可以增加M你想加入的朋友。把朋友加入 FOAF 檔案中是很重要的Q當然想 寫下多少朋友看你高興啦)(j)Q因為當 FOAF 彙整器烦(ch)引你?FOAF 描述時,他們將會自動把你們一L(fng)?一個體之間的網i關係? 備註Q在本頁你所輸入的所有資a,都不會被存下來或被用。全部的處理過程全部都是在客戶端進行Q?以確保你的隱U權? 如果你對這個應用有M的意見,或者關?FOAF 的進一步問,Zg參加RDFWeb-dev 的通訊論壇Q? 最新消?/strong>Q我目前正在撰寫一套徏立與理個h FOAF 資料的桌面應用程式,FOAF-a-Matic Mark 2 a 告訴 FOAF-a-matic 你所認識的朋友。按下「加入更多朋友」,可以增加I白Ƅ位Q入更多你所認識朋友的資a?如果你的朋友已經有了(jin) FOAF 檔案Q請把該檔案連結的資a(URLQ入在「SeeAlso」的Ƅ位中? 珑֜你已E入了(jin)這些資料。你已經可以轉成 FOAF 檔案?jin)? 這個部分最單。只要將產生Z?FOAF 檔案從剛剛的文字區複製Q貼C個檔案裡。將這個檔案擺在你的網站中Q?可以讓所有的人公開下?j);檔案名E取名為 foaf.rdfQ然?google 的搜機器h會自動取用它,並且還會 用它自動發現E\上其他的 FOAF 檔案? 你的 FOAF 檔案珑֜已經好了(jin)。現在只需要其他h來拜a並且開始閱讀?.. FOAF 的「查詢」問(舉例來說QFOAF 盔R的應用程式如何發現你?FOAF 檔案Q目前仍然尚待討論。如果你有Q?的徏譎ͼ請送到 RDFWeb-dev 通訊論壇。然而有三種?能的Ҏ(gu)加入CQ你可以自己試試看:(x) Aaron Swartz 曄使用 HTML ?link 標籤來指?FOAF 檔案Q這種做法和一般部落格的作者們指向他們的 RSS 檔案的方式是相同的。寫法應該像 是下面的樣子Q? 另外一E推薦的方式Q是請別人(也就是你的朋友)(j)在他們的 FOAF 檔案中標a你?FOAF 檔案。一?FOAF 的蜘 蛛(搜尋代理E式Q可以梭巡所有互相標a關聯的 FOAF 檔案。你可以依照下列做法修改 FOAF 檔案Q? 最新消?/em>Q如果你的朋友們已E有?jin)一?FOAF 檔案Q那D把它加在上面表單 seeAlso 的欄位中。你也可?a >推薦朋友 來?FOAF-a-matic 一個查?FOAF 檔案最直接的方式,是有一個所有h的註冊中?j)。我用一個簡單的方式來進行Q?叫做 FOAF 公佈Ƅ(FOAF Bulletin BoardQ。你只需要??FOAFWikiQ並且編?FOAFBulletinBoard 的網頁,把你的名字與連到你的 FOAF 檔案的連結加入到網頁中。你可以 使用我已E加入的資料做為例Q在公佈Ƅ頁面中加入你的資料? 使用 HTML Tidy ?XSLT 的魔法,意味著例?Edd Dumbill ?FOAFbot 這樣的應用程式可以處理這個烦(ch)引檔案。請瀏覽 FOAFBot 的首頁關於如何看它發揮作用?/p>
你所認識的朋?/h2>
產生i果
接下來呢Q?/h2>
讓別人知道你?FOAF 檔案
加入 FOAF 的社?/h3>
使用 link 這個標c?/h4>
<link rel="meta" type="application/rdf+xml" title="FOAF" href="foaf.rdf" />
從朋友的 FOAF 檔案指過?/h4>
rdf:RDF
元素Q如下增?RDF Schema namespaceQ?<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
rdfs:seeAslo
的敘qͼ增加指向其他?FOAF 檔案的鏈i:(x) <rdfs:seeAlso rdf:resource="http://www.example.com/friends.xrdf"/> <rdfs:seeAlso rdf:resource="http://www.ldodds.com/webwho.xrdf"/>
使用 FOAF 告示?/h4>
<!--[if !supportLists]-->a) <!--[endif]-->l承关系与实例关p?/span>
rdfs:subClassOf用于表示l承关系。三元组A rdfs:subClassOf B表示A?span>B的子c,q与Java当中?span>class A extends B{h(hun)?/span>
rdfs:type用于表示实例关系。三元组A rdfs:type B表示A?span>B的一个实例,q与Java当中?span>A = new B(){h(hun)?/span>
<!--[if !supportLists]-->b) <!--[endif]-->cL讎ͼ(x)
标记 |
说明 |
l承关系Q?span>rdfs:subClassOfQ?/span> |
实例关系Q?span>rdfs:typeQ?/span> |
rdfs:Resource |
所有出现在RDF图中的对象都属于资源 |
|
rdfs:Class |
rdfs:Class |
主语和宾语。用于指明主语或宾语所属的cd |
rdfs:Resource |
rdfs:Class |
rdfs:Literal |
文本 |
rdfs:Resource |
rdfs:Class |
rdfs:Datatype |
用于有类型文本,指定数据cd |
rdfs:Class |
rdfs:Class |
rdf:XMLLiteral |
XML文本 |
rdfs:Literal |
rdfs:Datatype |
rdf:Property |
谓语 |
rdfs:Resource |
rdfs:Class |
rdfs:Container |
容器的基c?/span> |
rdfs: Resource |
rdfs:Class |
rdf:Bag |
|
rdfs:Container |
rdfs:Class |
rdf:Seq |
|
rdfs:Container |
rdfs:Class |
rdf:Alt |
|
rdfs:Container |
rdfs:Class |
rdf:List |
集合 |
rdfs: Resource |
rdfs:Class |
rdf:nil |
I列?/span> |
|
rdf:List |
<!--[if !supportLists]-->c) <!--[endif]-->cd义:(x)
<rdf:Description rdf:about="A">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class">
<rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
</rdf:Description>
{h(hun)?/span>
<rdfs:Class rdf:about="A">
<rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
</rdfs:Class>
<!--[if !supportLists]-->d) <!--[endif]-->范围与域Q?/span>
rdfs:range用于指定宾语的范围。三元组P rdfs:range QQ?span>A P BQ在W一个三元组当中Q我们规定了(jin)如果一个三元组使用?jin)属?span>PQ那么三元组当中的宾语必LQ的实例。第二个三元l单中,׃使用?span>PQ所以可以得?span>B必定?span>Q的实例?/span>
rdfs:domain用于指定主语的范围。三元组P rdfs:range QQ?span>A P BQ在W一个三元组当中Q我们规定了(jin)如果一个三元组使用?jin)属?span>PQ那么三元组当中的主语必LQ的实例。第二个三元l单中,׃使用?span>PQ所以可以得?span>A必定?span>Q的实例?/span>
<!--[if !supportLists]-->e) <!--[endif]-->属性标讎ͼ所有的标记都是rdfs:Proerpty的实?/span>
标记 |
说明 |
域,主语Q?span>rdfs:domainQ?/span> |
范围Q宾语(rdfs:rangeQ?/span> |
rdfs:range |
对宾语进行约?/span> |
rdfs:Class |
rdfs:Property |
rdfs:domain |
对主语进行约?/span> |
rdfs:Class |
rdfs:Property |
rdf:type |
用于定义实例关系 |
rdfs:Resource |
rdfs:Class |
rdfs:subClassOf |
用于定义l承关系 |
rdfs:Class |
rdfs:Class |
rdfs:subPropertyOf |
用于定义属性之间的l承关系。子属性的含义是指如果A?span>B的子属性,那么如果主语和宾语符?span>A关系Q那么他们也W合B关系?/span> |
rdfs:Property |
rdfs:Property |
rdfs:label |
提供用户友好的标{?/span> |
rdfs:Resource |
rdfs:Literal |
rdfs:comment |
对资源进行描q?/span> |
rdfs:Resource |
rdfs:Literal |
rdfs:member |
用于表示集合与元素之间的关系 |
rdfs:Resource |
rdfs:Resource |
rdf:first |
用于指明某个资源是某个集合的首元?/span> |
rdf:List |
rdfs:Resource |
rdf:rest |
|
rdf:List |
rdf:List |
<!--[if !supportLists]-->f) <!--[endif]-->属性定?/span>
<rdf:Property rdf:about="B">
<rdfs:domain rdf:resource="http://www.w3.org/
<rdfs:range rdf:resource="http://www.w3.org/
</rdf:Property>
那么Q怎么在我们自q|站上创?nbsp;RSS feed 呢?下面我以 Asp+Access Z介绍一下?/p>
既然 RSS 是一U?nbsp;XML 格式的文,那么我们应当可以对后台数据库中的数据按照条件进行筛选、组l,然后通过 ASP 生成 XML 格式的数据流Q最后发送到客户端进行浏览?/p>
数据的选取、汇集是 Asp 的拿手好戏,关键在于怎么生成 XML 格式的数据流。其?nbsp;Asp 也已l有自己的解军_法,是在写数据前对 response 对象?nbsp;ContentType 属性进行定义。如?nbsp;response.ContentType 的取gؓ(f) "text/xml"Q就?x)向览者发?nbsp;XML 格式的数据流?/p>
?nbsp;IE 览器中调用 RSS 源的Ҏ(gu)和普通的链接没有什么区别,格式是:(x)
<a type="application/rss+xml" href="RssFeed.asp">RSS说明</a>
其中 type="application/rss+xml" 加不加好象没有什么区别?/p>
以下E序D|创徏我的|站(goaler.xicp.net)上的“某个栏目”栏目?nbsp;RSS feed 的源代码Q文件名?nbsp;RssFeed_news.asp?br> 其中Q变?nbsp;sXmlClear 用于声明产生的文是一D?nbsp;XML 格式的文,该声明是可选的Q以保持与旧版本 XML 的向后兼Ҏ(gu)?br> sRssHead 定义 Rss 的基本元素。RSS feed 通常?nbsp;4 个主要元素构成:(x)<channel>Q?lt;image>Q?lt;item> ?nbsp;<textinput>。其中,<channel> 元素是必需的,<item> 元素臛_要出Cơ?lt;textinput> ?nbsp;<image> 元素是可选的Q是否用要视具体情况而定?br> <channel> 元素包含 Channel(RSS feed 的来?的一个简单描q?lt;title> 是频道的名称/标题Q?lt;link> 是与频道内容对应的包含了(jin)完整内容的那个网늚 URLQ?lt;description> 是与 <channel> 的内Ҏ(gu)关的单描qͼ<language> 代表语言。还有一些别的属性,不是太常用?br> <item> 元素用于Ҏ(gu)据库中的记录q行描述?lt;item> 一般有若干,对应?jin)一?nbsp;Rss feed 的数据集合?/p>
<!-FilenameQRssFeed_news.asp:-->
<% Option explicit %>
<!-- #include file="conn.asp" -->
<%
Dim sSQL, rs, sCrLf, sXmlClear, sRssHead, sRssEnd
sCrLf = chr(13) & chr(10) '回R+换行
sXmlClear = "<?xml version='1.0' encoding='gb2312'?>" & sCrLf
sRssHead = "<rss version='2.0'>" & sCrLf
sRssHead = sRssHead & "<channel>" & sCrLf
sRssHead = sRssHead & "<title>Goaler's Blog </title>" & sCrLf
sRssHead = sRssHead & "<description> Goaler's Blog </description>" & sCrLf
sRssHead = sRssHead & "<link></link>" & sCrLf
sRssHead = sRssHead & "<language>zh-cn</language>" & sCrLf
sRssHead = sRssHead & "<docs>Goaler's Blog </docs>" & sCrLf
sRssHead = sRssHead & "<generator>Rss Generator By goaler.xicp.net</generator>" & sCrLf
sRssEnd = "</channel></rss>"
Response.CharSet="gb2312" '数据?br> Response.ContentType="text/xml" '数据格式定?/p>
'输出Q?br> Response.write sXmlClear
Response.write sRssHead
sSQL="select top 15 * from news order by sortid desc"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sSQL, s_Conn, 1, 1
if not (rs.eof and rs.bof) then
do while not rs.eof
response.write "<item>" & sCrLf
response.write "<title> " & rs("f_topic") & " </title>" & sCrLf
response.write "<link> " & "/show_new.asp?autoid=" & rs("f_i_autoid") & " </link>" & sCrLf
response.write "<author> " & rs("f_author") & " </author>" & sCrLf
response.write "<pubDate> " & rs("f_datetime") & " </pubDate>" & sCrLf
response.write "</item>" & sCrLf & sCrLf
rs.movenext
loop
end if
rs.close
set rs=nothing
Response.write sRssEnd
%>
IE 中的调用格式是:(x)<a href="/RssFeed_news.asp">技术新闻RSS</a>。如果用一些客L(fng)软g订阅?nbsp;RSSQ订阅的 Url 是/RssFeed_news.asp?/p>