2015-04-23 64 views
1

我正在處理xmp數據與python-xmp-toolkit,這是一個python包裝的範例庫。當libxmp不會採用建議的前綴時,可以強制libxmp註冊一個名稱空間前綴?

我們有一個內部命名空間uri,我們在此數據中使用的數據以「ns:oursite.com」開頭,而不是「http:oursite.com」或其他類似的名稱。當我嘗試使用register_namespace method在我們的命名空間,堵塞這樣的:

new_xmp.register_namespace( 「NS:oursite.com/stuff」, 「富」)

它吐出回默認「ns2:」前綴表示它拒絕註冊我建議的前綴。

我想它正在對uri名稱進行某種驗證。有什麼辦法可以強制這個嗎?我很難推斷出在這段代碼中該做什麼,因爲它是C的包裝。

+0

剛剛得到了同樣的問題。顯然,Exempi使用的C++ Adob​​e SDK中有一個'DeleteNamespace()'方法,它本身被python-xmp-toolkit使用。但它不會暴露在Exempi C接口中。 –

回答

0

可能有另一個名稱空間在相同的前綴下注冊,但具有不同的URI。不幸的是,Exempi既不允許重複的名稱空間,也不允許重複的前綴,這是底層Adobe XMP SDK的限制。

我發現了一個解決方法,您可以嘗試確認它。 Exempi庫可以通過Python綁定重新加載,但是隻有很少的時間(對我來說大約需要100μs),在這期間另一個線程訪問Exempi 會使崩潰。剛剛運行:

from libxmp import exempi 

# Register a test namespace 
exempi.register_namespace("http://test.com/test", "test") 

# Release Exempi. Any XMP object initialized *before* this will be 
# invalid and will segfault the interpreter... 
exempi.terminate() 

# Exempi is not initialized there, the Python interpreter will segfault 
# if it is used. We have to call init() before being able to use it again. 
exempi.init() 

# Now you can register another URI with the same prefix 
exempi.register_namespace("http://test.com/test/add", "test")