-- 作者:瑞星小子
-- 发布时间:1/4/2007 9:00:00 PM
-- 如何将XML文档转换成RDF文档?
如何将XML元素树转换成RDF三元组? 在我们将XML文档中有用的元素读出并生成了一棵XML元素树之后,参照ontology中对各元素的描述,我们可以通过以下算法将这棵XML文档树转换成RDF三元组的形式。 其具体过程如下,为了弄清楚哪些类或者是属性在描述这个文档的本体中被定义,我们在类的前面加上onto:,在性质的前面加上rdfx。算法描述如下: 将XML文档本身作为“active_resource”,也就是说,将这篇文档的URI作为转换后文档的第一个语句的主语; 以先深的顺序遍历整棵元素树,从根元素开始; 对于每个我们遍历到的元素,我们在本体中查找它辨明他在语法上是定义为类元素还是作为属性。 当我们遍历到的元素是作为属性元素时,我们作如下处理: (a)、当语句中没有“未完成语句”时,我们构造如下的“未完成语句”(“未完成语句”是指一个三元组中只填了两个元素) subject predicate object “ active_resource onto:Prop ... (b)、此外,如果碰到“未完成语句”,完成该未完成语句,并且创造一新的“未完成语句”,如下: subject predicate object ... ... anon resource 1 anon resource 1 onto:Prop ... 当遍历到的元素是作为类元素cls时,作出如下处理: (a)、当文档本身作为active_resource,我们创建如下的三元组: subject predicate object URI of document rdfx:describes anon resource 1 anon resource 1 rdf:type onto:Cls 之后,我们将anon resource 1作为新的active_resource (b)、如果存在未完成语句,填补完语句并创造如下新的三元组: subject predicate object ... ... anon resource 1 anon resource 1 rdf:type onto:Cls 之后将anon resource 1作为新的active_resource (c)、之外,如果没有为完成语句,我们定义一个谓词hasCls(这个Cls依赖于我们所碰到的类),并创建如下的新的三元组: subject predicate object active resource onto:hasCls anon resource 1 anon resource 1 rdf:type onto:Cls 之后将anon resource 1作为新的 active_resource 如果遍历到的元素标记为内容,我们作出如下处理: (a)、如果存在未完成语句,将其作为值填补上,如下: subject predicate object … … “textual content” (b)、如果不存在未完成语句,添加如下的三元组: subject predicate object active resource rdfx:value “textual content” (7) 继续遍历这棵XML元素树,当回溯时发现一个类已经匹配完毕,让之前的active resource作为新的active resource。 至此,该算法过程描述完毕,如下是一个简单的XML文档,我们以此为例来描述该算法的实现过程: < http://mybus.com/order#1233 > <IndexItem> <ItemDetail> <UnitPrice> <Money currency="USD">1000</Money> </UnitPrice> <Description xml:lang="en"> Armada M700 PIII 500 12GB </Description> <UnitOfMeasure>EA</UnitOfMeasure> <Classification domain="SPSC"> C43171801</Classification> <ManufacturerPartID> 140141-002</ManufacturerPartID> <ManufacturerName>Florsheim</ManufacturerName> <URL>http://www.compaq.com</URL> </ItemDetail> <IndexItemDetail> <LeadTime>10</LeadTime> <ExpirationDate>2000-06-01</ExpirationDate> <EffectiveDate>2000-01-01</EffectiveDate> <SearchGroupData> <Name xml:lang="en">Notebook</Name> <SearchDataElement name="Processor Speed" value="500MHZ"/> </SearchGroupData> <TerritoryAvailable>USA</TerritoryAvailable> </IndexItemDetail> </IndexItem> < /http://mybus.com/order#1233 > 首先是利用本体从该文档中提取出有用的元素或者属性,有些不必要的在本体中没有描述的元素或者属性就不需要了,列出如下: Class ItemDetail Class Money Class Classification Property unitPrice Property currency - rdfs:domain Money Property description Property domain - rdfs:domain Classification …….. ……. 进行转换时,首先遇到的是文档的UML,依照算法,我们首先选择步骤(5)中的a选项,输出如下三元组: http://mybus.com/order#1233 rdfx:describes anon resource 1 anon resource 1 rdf:type onto: ItemDetail 并将anon resource 1作为新的active resource 之后遍历到的节点是 unitPrice,我们参照步骤(4)的a选项执行,输出: anon resource 1 onto: unitPrice ... 遇到 money 节点,因为是类名,而且有未完成语句,参照步骤(5)b执行,填补上一个三元组并生成新的三元组,如下: anon resource 1 onto: unitPrice anon resource 2 anon resource 2 rdf:type onto:money 以此类推,最后我们能够得到以下全部由三元组组成的文档: subject predicate object rdfx:describes anon 1 anon 1 rdf:type onto:ItemDetail anon 1 onto:unitPrice anon 2 anon 2 rdf:type onto:Money anon 2 onto:currency “USD” anon 2 rdfx:value “1000” anon 1 onto:description “Armada M700 PIII 500 12GB” anon 1 onto:hasClasssification anon 3 anon 3 rdf:type onto:Classsification anon 3 onto:domain “SPSC” anon 3 rdfx:value “C43171801” …… …… 至此,关于三元组的转换过程已经结束了
|