概述
LEADTOOLS存储服务管理器DICOM侦听服务通过一个或多个C-FIND Reponses来响应收到的C-FIND请求。 C-FIND Reponses包含请求中指定的DICOM属性。
要使用自定义数据库模式,必须定义配置文件,以便DICOM侦听服务使用适当的属性填充C-FIND Reponses,并使用数据库中的相应数据设置属性值。
LEAD Storage Server Manager附带的默认配置文件名为QueryIOD.xml。 默认配置定义为返回数据库的属性和属性序列。 对于教程数据库,我们不返回项目序列。
QueryIOD.xml的结构如下。 它由<patientLevel>,<studyLevel>,<seriesLevel>和<imageLevel>元素组成,每个元素都包含一个或多个<element>元素。
<query>
<patientLevel>
<element>...</element>
<element>...</element>
...
</patientLevel>
<studyLevel>
<element>...</element>
<element>...</element>
...
</ studyLevel >
< seriesLevel >
<element>...</element>
<element>...</element>
...
</ seriesLevel >
<imageLevel>
<element>...</element>
<element>...</element>
...
</ imageLevel >
</query>
每个<element>元素对应于C-FIND请求中的属性,并提供数据库中相应值的映射。
以下是教程数据库的示例<element>。 它将DICOM元素PatientID(0010,0010)映射到相应的表名(MyPatientTable)和列(PatientName)。
<element tag="(0010,0010)"
tagName="PatientName"
vr="PN"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="WildCard"
tableName="MyPatientTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer"
columnsName="PatientName" />
MyQueryIOD.xml的全部内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<query>
<patientLevel>
<element tag="(0010,0010)"
tagName="PatientName"
vr="PN"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="WildCard"
tableName="MyPatientTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer"
columnsName="PatientName" />
<element tag="(0010,0020)"
tagName="PatientID"
vr="LO"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Unique"
matchingType="SingleValue"
tableName="MyPatientTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer"
columnsName="PatientIdentification" />
<element tag="(0010,0030)"
tagName="PatientBirthDate"
vr="DA"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="Range"
tableName="MyPatientTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer"
columnsName="PatientBirthday" />
<element tag="(0010,0040)"
tagName="PatientSex"
vr="CS"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="SingleValue"
tableName="MyPatientTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer"
columnsName="PatientSex" />
<element tag="(0010,4000)"
tagName="PatientComments"
vr="LT"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="NotApplicable"
tableName="MyPatientTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyPatient,My.Medical.Storage.DataAccessLayer"
columnsName="PatientComments" />
</patientLevel>
<studyLevel>
<element tag="(0008,0020)"
tagName="StudyDate"
vr="DA"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="Range"
tableName="MyStudyTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer"
columnsName="StudyStudyDate" />
<element tag="(0008,0050)"
tagName="AccessionNumber"
vr="SH"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="SingleValue"
tableName="MyStudyTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer"
columnsName="StudyAccessionNumber" />
<element tag="(0008,0061)"
tagName="ModalitiesInStudy"
vr="CS"
minVM="1"
maxVM="-1"
vmDivider="1"
vmDistinct="true"
keyType="Optional"
matchingType="SingleValue"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesModality" />
<element tag="(0008,0062)"
tagName="SOPClassesInStudy"
vr="UI"
minVM="1"
maxVM="-1"
vmDivider="1"
vmDistinct="true"
keyType="Optional"
matchingType="ListOfUID"
tableName="MyInstanceTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.Image,My.Medical.Storage.DataAccessLayer"
columnsName="ImageUniqueSOPClassUID" />
<element tag="(0008,0090)"
tagName="ReferringPhysiciansName"
vr="PN"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="SingleValue"
tableName="MyStudyTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer"
columnsName="StudyReferringPhysiciansName" />
<element tag="(0008,1030)"
tagName="StudyDescription"
vr="LO"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="NotApplicable"
tableName="MyStudyTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer"
columnsName="StudyStudyDescription" />
<element tag="(0020,0010)"
tagName="StudyID"
vr="SH"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="SingleValue"
tableName="MyStudyTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer"
columnsName="StudyStudyId" />
<element tag="(0020,000D)"
tagName="StudyInstanceUID"
vr="UI"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Unique"
matchingType="ListOfUID"
tableName="MyStudyTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyStudy,My.Medical.Storage.DataAccessLayer"
columnsName="StudyStudyInstanceUID" />
</studyLevel>
<seriesLevel>
<element tag="(0008,0060)"
tagName="Modality"
vr="CS"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="SingleValue"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesModality" />
<element tag="(0008,103E)"
tagName="SeriesDescription"
vr="LO"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="SingleValue"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesSeriesDescription" />
<element tag="(0008,0021)"
tagName="SeriesDate"
vr="DA"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="Range"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesSeriesDate" />
<element tag="(0018,0015)"
tagName="BodyPartExamined"
vr="CS"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="Range"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesBodyPartExamined" />
<element tag="(0020,0011)"
tagName="SeriesNumber"
vr="IS"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="SingleValue"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesSeriesNumber" />
<element tag="(0020,000E)"
tagName="SeriesInstanceUID"
vr="UI"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="ListOfUID"
tableName="MySeriesTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MySeries,My.Medical.Storage.DataAccessLayer"
columnsName="SeriesSeriesInstanceUID" />
</seriesLevel>
<imageLevel>
<element tag="(0020,0013)"
tagName="InstanceNumber"
vr="IS"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="SingleValue"
tableName="MyInstanceTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyInstance,My.Medical.Storage.DataAccessLayer"
columnsName="ImageImageNumber" />
<element tag="(0008,0016)"
tagName="SOPClassUID"
vr="UI"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="ListOfUID"
tableName="MyInstanceTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyInstance,My.Medical.Storage.DataAccessLayer"
columnsName="ImageUniqueSOPClassUID" />
<element tag="(0008,0018)"
tagName="SOPInstanceUID"
vr="UI"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Required"
matchingType="ListOfUID"
tableName="MyInstanceTable"
matchingEntity="My.Medical.Storage.DataAccessLayer.Entities.MyInstance,My.Medical.Storage.DataAccessLayer"
columnsName="SOPInstanceUID" />
<element tag="(0028,0010)"
tagName="Rows"
vr="US"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="NotApplicable"
tableName="ImageInstance"
matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.ImageInstance,My.Medical.Storage.DataAccessLayer"
columnsName="ImageRows" />
<element tag="(0028,0011)"
tagName="Columns"
vr="US"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="NotApplicable"
tableName="ImageInstance"
matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.ImageInstance,My.Medical.Storage.DataAccessLayer"
columnsName="ImageColumns" />
<element tag="(0028,0100)"
tagName="BitsAllocated"
vr="US"
minVM="1"
maxVM="1"
vmDivider="1"
keyType="Optional"
matchingType="NotApplicable"
tableName="ImageInstance"
matchingEntity="My.Medical.Storage.DataAccessLayer.MatchingParameters.ImageInstance,My.Medical.Storage.DataAccessLayer"
columnsName="ImageBitsAllocated" />
</imageLevel>
</query>
了解更多
这是本系列的第九篇文章,本文介绍了LEAD医学存储服务器数据库如何指定C FIND Rsp DICOM元素,我们将在《LEAD医疗存储服务器自定义数据库系列教程 – DICOM侦听服务》系列的第十篇文章中,着重介绍LEAD医用存储服务器数据库如何创建DICOM侦听服务。