2009-12-31 95 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