xsl NativeDicomModel Тег имени пациента Ведение каретки dcm4che - PullRequest
0 голосов
/ 13 декабря 2018

Добрый вечер!

Я написал xsl для получения атрибутов Dicom из файла DCM и смог правильно сопоставить все, кроме имени пациента.Ценность приходит, но карет там нет;это объединяет LastName и FirstName.Я хотел, чтобы каретки отделяли суффикс ^ Фамилия ^ Фамилия ^ СреднийИнициальный ^.Я не могу за всю жизнь иметь возможность правильно кодировать это значение.

Ниже мой код ....

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/">
        <xsl:apply-templates select="NativeDicomModel"/>
    </xsl:template>
    <xsl:template match="NativeDicomModel|Item">
        <xsl:param name="level"></xsl:param>
        <xsl:value-of select="$level"/>

        <NativeDicomModel xml:space="preserve">
        <DicomAttribute keyword="PatientID" tag="00100020" vr="LO"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00100020']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="PatientName" tag="00100010" vr="PN"><PersonName number="1"><Alphabetic><xsl:value-of select="DicomAttribute[@tag='00100010']"/></Alphabetic></PersonName></DicomAttribute>
        <DicomAttribute keyword="PatientBirthDate" tag="00100030" vr="DA"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00100030']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="PatientSex" tag="00100040" vr="CS"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00100040']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="StudyDate" tag="00080020" vr="DA"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080020']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="StudyTime" tag="00080030" vr="TM"><Value number="1">0000.000</Value></DicomAttribute>
        <DicomAttribute keyword="SeriesDate" tag="00080021" vr="DA"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080020']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="SeriesTime" tag="00080031" vr="TM"><Value number="1">0000.000</Value></DicomAttribute>
        <DicomAttribute keyword="ReferringPhysicianName" tag="00080090" vr="PN"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080090']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="StudyID" tag="00200010" vr="SH"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00200010']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="AccessionNumber" tag="00080050" vr="SH"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080050']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="Modality" tag="00080060" vr="CS"><Value number="1">NM</Value></DicomAttribute>
        <DicomAttribute keyword="StudyDescription" tag="00081030" vr="LO"><Value number="1">DOCUMENTS</Value></DicomAttribute>
        <DicomAttribute keyword="SeriesDescription" tag="0008103E" vr="LO"><Value number="1">DOCUMENTS</Value></DicomAttribute>
        <DicomAttribute keyword="SeriesNumber" tag="00200011" vr="IS"><Value number="1">1</Value></DicomAttribute>
        <DicomAttribute keyword="Manufacturer" tag="00080070" vr="LO"><Value number="1"></Value></DicomAttribute>
        <DicomAttribute keyword="ConversionType" tag="00080064" vr="CS"><Value number="1">SD</Value></DicomAttribute>
        <DicomAttribute keyword="InstanceNumber" tag="00200013" vr="IS"><Value number="1">1</Value></DicomAttribute>
        <DicomAttribute keyword="BurnedInAnnotation" tag="00280301" vr="CS"><Value number="1">YES</Value></DicomAttribute>
        </NativeDicomModel>
    </xsl:template>
</xsl:stylesheet>

Это строка вопроса:

<DicomAttribute keyword="PatientName" tag="00100010" vr="PN"><PersonName number="1"><Alphabetic><xsl:value-of select="DicomAttribute[@tag='00100010']"/></Alphabetic></PersonName></DicomAttribute>

Имя пациента в DCM форматируется как Фамилия ^ Фамилия ^ MiddleInitial ^ Суффикс.Когда я запускаю таблицу стилей, она объединяет эти значения в одно имя: LastNameFirstNameMiddleInitialSuffix

Этот код взят из набора инструментов dcm4che версии 5, и я использую команду dcm2xml для преобразования файла DCM в XML, чтобы я мог затемдалее разбираем значения.

1 Ответ

0 голосов
/ 14 декабря 2018

Полагаю, мне нужно было выспаться .. Я смог это выяснить.

Для DicomAttribute [@ tag = '00100010'] есть четыре части: Имя, СреднийИмя, Фамилия и Суффикс.Если вы просто указываете тег, он объединяет все четыре значения.если вы выделите это следующим образом:

"DicomAttribute[@tag='00100010']/PersonName/Alphabetic/FamilyName"
"DicomAttribute[@tag='00100010']/PersonName/Alphabetic/GivenName"
"DicomAttribute[@tag='00100010']/PersonName/Alphabetic/MiddleName"
"DicomAttribute[@tag='00100010']/PersonName/Alphabetic/NamePrefix"

Вместо того, чтобы просто сказать

"DicomAttribute[@tag='00100010']/PersonName"

-или-

"DicomAttribute[@tag='00100010']"

-или-

"DicomAttribute[@tag='00100010']/Value"

Он правильно проанализирует его в XML.

Я нашел свой ответ, посмотрев на строку 25 на:

https://github.com/dcm4che/dcm4chee-arc-light/blob/master/dcm4chee-arc-conf-data/src/main/resources/dsr2text.xsl

Однажды увидев этолинии, тогда имело смысл создавать дополнительные строки, используя соглашение Dicom, когда речь идет о буквенном имени.

Я хотел предоставить свои исследования и решения для других, чтобы им не пришлось переживать время, котороеЯ сделал!

  • Стив:)

        <NativeDicomModel xml:space="preserve">
    
        <DicomAttribute keyword="PatientID" tag="00100020" vr="LO"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00100020']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="PatientName" tag="00100010" vr="PN"><PersonName number="1"><Alphabetic>
        <FamilyName><xsl:value-of select="DicomAttribute[@tag='00100010']/PersonName/Alphabetic/FamilyName"/></FamilyName>
        <GivenName><xsl:value-of select="DicomAttribute[@tag='00100010']/PersonName/Alphabetic/GivenName"/></GivenName>
        <MiddleName><xsl:value-of select="DicomAttribute[@tag='00100010']/PersonName/Alphabetic/MiddleName"/></MiddleName>
        <NamePrefix><xsl:value-of select="DicomAttribute[@tag='00100010']/PersonName/Alphabetic/NamePrefix"/></NamePrefix>
        </Alphabetic>
        </PersonName>
        </DicomAttribute>
        <DicomAttribute keyword="PatientBirthDate" tag="00100030" vr="DA"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00100030']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="PatientSex" tag="00100040" vr="CS"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00100040']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="StudyDate" tag="00080020" vr="DA"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080020']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="StudyTime" tag="00080030" vr="TM"><Value number="1">0000.000</Value></DicomAttribute>
        <DicomAttribute keyword="SeriesDate" tag="00080021" vr="DA"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080020']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="SeriesTime" tag="00080031" vr="TM"><Value number="1">0000.000</Value></DicomAttribute>
        <DicomAttribute keyword="ReferringPhysicianName" tag="00080090" vr="PN"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080090']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="StudyID" tag="00200010" vr="SH"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00200010']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="AccessionNumber" tag="00080050" vr="SH"><Value number="1"><xsl:value-of select="DicomAttribute[@tag='00080050']/Value"/></Value></DicomAttribute>
        <DicomAttribute keyword="Modality" tag="00080060" vr="CS"><Value number="1">NM</Value></DicomAttribute>
        <DicomAttribute keyword="StudyDescription" tag="00081030" vr="LO"><Value number="1">DOCUMENTS</Value></DicomAttribute>
        <DicomAttribute keyword="SeriesDescription" tag="0008103E" vr="LO"><Value number="1">DOCUMENTS</Value></DicomAttribute>
        <DicomAttribute keyword="SeriesNumber" tag="00200011" vr="IS"><Value number="1">1</Value></DicomAttribute>
        <DicomAttribute keyword="Manufacturer" tag="00080070" vr="LO"><Value number="1"></Value></DicomAttribute>
        <DicomAttribute keyword="ConversionType" tag="00080064" vr="CS"><Value number="1">SD</Value></DicomAttribute>
        <DicomAttribute keyword="InstanceNumber" tag="00200013" vr="IS"><Value number="1">1</Value></DicomAttribute>
        <DicomAttribute keyword="BurnedInAnnotation" tag="00280301" vr="CS"><Value number="1">YES</Value></DicomAttribute>
        </NativeDicomModel>
    </xsl:template>
    

...