2015-01-16 60 views
1

我在使用XSLT方面很新穎。將XML文件轉換爲空白節點的RDF

我正在編寫從XML(元數據)文檔到XML/RDF的XSL轉換,並且我還在改進原始文檔的基礎模型。具體而言,原來的文件描述了一個人,在某些時候它列出了所有的人的名字:

<?xml version="1.0" encoding="UTF-8"?> 
<Person RecordID="abcd"> 
    <PersonNames> 
     <PersonName> 
      <Surname>Doe</Surname> 
      <FirstName>John</FirstName> 
     </PersonName> 
     <PersonName> 
      <Surname>Doe</Surname> 
      <FirstName>Janine</FirstName> 
     </PersonName> 
     <PersonName> 
      <Surname>Smith</Surname> 
      <FirstName>Janine</FirstName> 
     </PersonName> 
    </PersonNames> 
</Person> 

我不想這個人的URI這樣做單獨連接到每一個項目,作爲目前還不清楚'喬史密斯'從來不是這個人的名字。我寧願爲每個名稱使用一個空白節點,然後將FirstName和Surname鏈接到相應的空白節點;然而,我找不到一個解決方案來生成一個空白節點的ID(我會在xsl:for-each循環中遍歷所有人的名字),然後我可以在循環外調用並引用。

直觀上,我會爲這些元素中的每一個創建一個id personNameID,然後,在循環外(以及子樹外),我將添加相應的三元組。結果會是這樣的:

<rdf:RDF 'namespaces'> 
    <localontology:Person> 
    ... person's metadata ... 
    <foaf:name rdf:nodeID="name1"> 
    <foaf:name rdf:nodeID="name2"> 
    .... 
</localontology:Person> 
<rdf:Description rdf:nodeID="name1"> 
    <localontology:firstName 'FirstName in name1'> 
    <localontology:surname 'Surname in name1'> 
</rdf:Description> 
<rdf:Description rdf:nodeID="name1"> 
    <localontology:firstName 'FirstName in name2'> 
    <localontology:surname 'Surname in name2'> 
</rdf:Description> 

我真的不知道我可以使用哪些函數/構造...有人可以幫助嗎?

+0

你的問題不清楚:你的例子要求的輸出是什麼(假設你發佈的是輸入)? –

+0

對不起,在完成編輯之前,我按下了「發佈」按鈕!這種方式足夠清楚嗎? – klaraspina

+0

對不起,沒有。我不知道「三元組」或「空白節點」是什麼意思。 –

回答

0

我不會在這裏使用空白節點。空白節點可以有一個uri,比如localontology:JohnDoe,然後它有一個firstName和surname作爲屬性。這樣的URI是有意義的,當人們分享一個名字時,你可以重用相同的實例。如果你需要幫助產生這樣的uri發表評論。

如果您堅持使用空白節點,您可以使用number()和/或position()來獲取當前節點並使用它來生成一個uri。 http://www.w3schools.com/xsl/el_number.asp