SR Value Type 'PNAME' can't add child node

All other questions regarding DCMTK

Moderator: Moderator Team

Post Reply
Message
Author
kamil
Posts: 63
Joined: Fri, 2009-04-17, 09:18

SR Value Type 'PNAME' can't add child node

#1 Post by kamil »

According to A.35.8.3.1.3 PS 3.3 Relationship Constraints, the Source Value Type "PNAME" should own "HAS PROPERTIES" Relationship with Target Value Type "TEXT, CODE, DATETIME, DATE,TIME, UIDREF, PNAME".

But when I try my code:

Code: Select all

res = doc->getTree().addContentItem(DSRTypes::RT_contains, DSRTypes::VT_PName, DSRTypes::AM_afterCurrent); 
		cond = doc->getTree().getCurrentContentItem().setConceptName(DSRCodedEntryValue("113870", "DCM", "Person Name"));
		cond = doc->getTree().getCurrentContentItem().setStringValue(OFString("Person^Name"));

		res = doc->getTree().addContentItem(DSRTypes::RT_hasProperties, DSRTypes::VT_Code, DSRTypes::AM_belowCurrent); //return false
		cond = doc->getTree().getCurrentContentItem().setConceptName(DSRCodedEntryValue("113875", "DCM", "Person Role in Procedure"));
		cond = doc->getTree().getCurrentContentItem().setCodeValue(DSRCodedEntryValue("113851", "DCM", "Irradiation Administering")); 

		res = doc->getTree().addContentItem(DSRTypes::RT_hasProperties, DSRTypes::VT_Text, DSRTypes::AM_afterCurrent); 
		cond = doc->getTree().getCurrentContentItem().setConceptName(DSRCodedEntryValue("113873", "DCM", "Organization Name"));
		cond = doc->getTree().getCurrentContentItem().setStringValue(OFString("Tongren"));

		res = doc->getTree().addContentItem(DSRTypes::RT_hasProperties, DSRTypes::VT_Code, DSRTypes::AM_afterCurrent); 
		cond = doc->getTree().getCurrentContentItem().setConceptName(DSRCodedEntryValue("113874", "DCM", "Person Role in Organization"));
		cond = doc->getTree().getCurrentContentItem().setCodeValue(DSRCodedEntryValue("121083", "DCM", "Technologist"));
Faild at added node to PNAME Source Item.

And I find in "dcmsr\libsrc\dsrxrdcc.cc":

Code: Select all

OFBool DSRXRayRadiationDoseSRConstraintChecker::checkContentRelationship(const E_ValueType sourceValueType,
                                                                         const E_RelationshipType relationshipType,
                                                                         const E_ValueType targetValueType,
                                                                         const OFBool byReference) const
{
    /* the following code implements the constraints of table A.35.8-2 in DICOM PS3.3 */
    OFBool result = OFFalse;
    /* by-reference relationships not allowed at all */
    if (!byReference)
    {
        /* row 1 of the table */
        if ((relationshipType == RT_contains) && (sourceValueType == VT_Container))
        {
            result = (targetValueType == VT_Text)     || (targetValueType == VT_Code)      || (targetValueType == VT_Num)   ||
                     (targetValueType == VT_DateTime) || (targetValueType == VT_UIDRef)    || (targetValueType == VT_PName) ||
                     (targetValueType == VT_Image)    || (targetValueType == VT_Composite) || (targetValueType == VT_Container);
        }
        /* row 2 of the table */
        else if ((relationshipType == RT_hasObsContext) && (sourceValueType == VT_Container))
        {
            result = (targetValueType == VT_Text)   || (targetValueType == VT_Code)      || (targetValueType == VT_DateTime) ||
                     (targetValueType == VT_UIDRef) || (targetValueType == VT_PName);
        }
        /* row 3 of the table */
        else if ((relationshipType == RT_hasObsContext) && ((sourceValueType == VT_Text) || (sourceValueType == VT_Code) ||
            (sourceValueType == VT_Num)))
        {
            result = (targetValueType == VT_Text)     || (targetValueType == VT_Code)   || (targetValueType == VT_Num)   ||
                     (targetValueType == VT_DateTime) || (targetValueType == VT_UIDRef) || (targetValueType == VT_PName) ||
                     (targetValueType == VT_Composite);
        }
        /* row 4 of the table */
        else if ((relationshipType == RT_hasAcqContext) && ((sourceValueType == VT_Container) || (sourceValueType == VT_Image) ||
            (sourceValueType == VT_Composite)))
        {
            result = (targetValueType == VT_Text)     || (targetValueType == VT_Code)   || (targetValueType == VT_Num)   ||
                     (targetValueType == VT_DateTime) || (targetValueType == VT_UIDRef) || (targetValueType == VT_PName) ||
                     (targetValueType == VT_Container);
        }
        /* row 5 of the table */
        else if (relationshipType == RT_hasConceptMod)
        {
            result = (targetValueType == VT_Text) || (targetValueType == VT_Code);
        }
        /* row 6 of the table */
        else if ((relationshipType == RT_hasProperties) && ((sourceValueType == VT_Text) || (sourceValueType == VT_Code) ||
            (sourceValueType == VT_Num)))
        {
            result = (targetValueType == VT_Text)     || (targetValueType == VT_Code)      || (targetValueType == VT_Num)   ||
                     (targetValueType == VT_DateTime) || (targetValueType == VT_UIDRef)    || (targetValueType == VT_PName) ||
                     (targetValueType == VT_Image)    || (targetValueType == VT_Composite) || (targetValueType == VT_Container);
        }
        /* row 7 of the table */
        else if ((relationshipType == RT_inferredFrom) && ((sourceValueType == VT_Text) || (sourceValueType == VT_Code) ||
            (sourceValueType == VT_Num)))
        {
            result = (targetValueType == VT_Text)      || (targetValueType == VT_Code)   || (targetValueType == VT_Num)   ||
                     (targetValueType == VT_DateTime)  || (targetValueType == VT_UIDRef) || (targetValueType == VT_Image) ||
                     (targetValueType == VT_Composite) || (targetValueType == VT_Container);
        }
    }
    return result;
}
Don't contain this relationship, any suggestion? Thanks!
PS: I am using dcmtk 3.6.0.

kamil
Posts: 63
Joined: Fri, 2009-04-17, 09:18

Re: SR Value Type 'PNAME' can't add child node

#2 Post by kamil »

Hi, I have found this relationship has been added in dcmtk 3.6.1.

J. Riesmeier
DCMTK Developer
Posts: 2509
Joined: Tue, 2011-05-03, 14:38
Location: Oldenburg, Germany
Contact:

Re: SR Value Type 'PNAME' can't add child node

#3 Post by J. Riesmeier »

Right :) Here's the commit message:

Code: Select all

**** Changes from 2011.04.06 (riesmeier)

- Added support for CP 1076, which adds a new "PNAME has properties" row to the
  relationship content constraints table.
So, the reason was an inconsistency in the DICOM standard, which was fixed with CP-1076 (i.e. after DCMTK 3.6.0 has been released).

Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot], Bing [Bot], Google [Bot] and 1 guest