2013-11-15 71 views
0

我是MarkLogic的新手。MarkLogic:如何生成唯一的文檔/ xml文件名

這裏是我的要求:

我有兩個實體:員工,部門。 一名員工屬於一個部門。

對於XML的模式將是:

SomeStaff.xml:

<Staff> 
    <Name>Lee</Name> 
    <Title>VP</Title> 
    <DepartmentId>someUniqueURI</DepartmentId> 
</Staff> 

部門/ someUniqueURI.xml:

<Department> 
    <Name>IT</Name> 
</Department> 

所以,這裏是我的問題:

我想要相同的XML並讓MarkLogic生成文件名,例如:我想要保存:

<Department> 
    <Name>IT</Name> 
</Department> 

和MarkLogic會爲它生成一個唯一的URI,並將uri返回給客戶端。

我該如何處理?

謝謝。

回答

0

只要寫一些代碼:

declare function add-dept ($dept as element(Department)) 
    as xs:string 
{ 
    let $uri := "/departments/" || xs:string (xdmp:random())  (: or some GUID generator :) 
    let $_ := xdmp:document-insert ($uri, $dept) 
    return $uri 
}; 

調用此函數要存儲一個新的部門文件:

... 
let $dept-id := add-dept ($new-deptartment) 
let $new-staff := create-staff ($name, $title, $dept-id) 
return add-staff ($new-staff) 

編寫創建工作人員並增加工作人員的職能是左作爲讀者的練習。這將以原子方式提交新部門和員工文檔。

+0

謝謝,Ron :)根據我已知的,xdmp:random會產生一個從0到'64位長的隨機數。所以這意味着如果我想獲得一個唯一的URI,我應該使用'GUID發生器'?有沒有內置的發電機?謝謝。 – Guoliang

+0

我不知道內置的GUID生成器(除非他們在ML 7中添加了某些內容)。關鍵是你可以使URI成爲你喜歡的任何東西,只要它在數據庫中是唯一的。如果是我,我可能只是將URI設置爲:「/ departments /」|| $ dept/Name/fn:string()|| 「.XML」。 –

3

sem:uuid-string函數可用於生成唯一的GUID。這個函數是在ML7中引入的