2009-12-31 38 views
0

Greetings,如何在我自己的API中實現Dicom屬性字典

我正在嘗試學習一些Java編程。要做到這一點,我試圖做一些實際有用的東西。因爲我正在學習醫學影像學,所以我會用Java編寫我自己的Dicom Api。

Dicom標準的一部分是包含在Dicom文件中使用的屬性的數據字典。這些屬性必須遵循以下屬性。

說明

例如:
(0x0002,0x0000)長度
(0x0002,0x0002)MediaStoredSOPClassUID
(0x0002,0x0010)TransferSyntaxUID
( 0x0003,0x0003)長度

我想知道我應該如何把這些放在我的API中。我想到的選項是:

  • 枚舉,問題是獨特的屬性可以有相同的描述。

enum Attributes{ Length(0x0002,0x0000), Length(0x0003,0x0000, }

  • 只包含的屬性的一些常量靜態類。還有名字的問題。
  • 包含此數據的xml文件。

我真的想用這個XML,因爲數據的表格性和易於訪問。但有沒有什麼辦法可以將它包含在我的Api中。

〜蒂莫Willemsen

回答

1

地圖將工作最適合你,定義一個類,將舉行一個DICOM條目:

public class DicomEntry 
{ 
private: 
    private string group; 
    private string element; 
    private string vr; 
    private string name; 

    public string key() { return String.format("(%s,%s)",group,element); } 
} 

還創建地圖,將持有的所有條目

Map<string,DicomEntry> mp=new HashMap<string, DicomEntry>(); 

將您的字典文件中的每行讀入輸入類對象後de將其添加到地圖

mp.put(de.key(), de) 

自組和元素的組合是唯一的,你傷口有任何衝突

+0

好。首先抱歉。我認爲我的初步問題有點含糊,所以我編輯了它。對不起,混淆了。這也是我想到的。 只有讓我困擾的事情是你的答案的這一部分「從字典文件中讀入每一行到一個入門級對象」 我知道如何做文件io。但爲了設計這個,我仍然需要在我的API中包含一個靜態(xml,csv,txt)文件。 – 2009-12-31 14:01:15

+0

我沒有看到解決它的方法,將字典硬編碼到java源文件中是不好的形式,並且如果屬性被添加或從集合中抽象出來,將迫使您重新編譯。包含這樣的文件有什麼不好?順便說一句 - 我更喜歡使用CSV文件,因爲它更容易讀取 – Alon 2009-12-31 14:06:21

+0

我真的沒有很好的理由,因爲它不是一個好主意。謝謝,我會盡力解決。 – 2009-12-31 14:09:44

2

爲了方便訪問,XML文件應該被放置在類路徑中,這樣就可以通過ClassLoader#getResource()得到它的位置,或者它的內容通過ClassLoader#getResourceAsStream()

要使用標準API讀取/評估/寫入XML文件,我可以推薦StAX。如果XML文件比較大(超過幾十兆字節),那麼我可以推薦VTD-XML以上。

或者,如果文件不是那麼大,它是純粹的鍵值對,那麼你也可以考慮properties files,您可以輕鬆地與java.util.Properties API基本上延伸Map管理。

+0

非常感謝!我沒有意識到屬性文件的缺點。結合阿隆的答案,我認爲我可以正確解決這個問題。 – 2009-12-31 14:10:38

0

您可能還想研究其他DICOM來源。 PixelMed特別包含一個基於XML和XSLT的驗證器。若干DICOM plugins可用於ImageJ

+0

感謝您的信息。 Pixelmed是我的例子之一^^。我不知道ImageJ插件。 – 2009-12-31 15:40:54

相關問題