00001 /* 00002 * 00003 * Copyright (C) 2000-2005, OFFIS 00004 * 00005 * This software and supporting documentation were developed by 00006 * 00007 * Kuratorium OFFIS e.V. 00008 * Healthcare Information and Communication Systems 00009 * Escherweg 2 00010 * D-26121 Oldenburg, Germany 00011 * 00012 * THIS SOFTWARE IS MADE AVAILABLE, AS IS, AND OFFIS MAKES NO WARRANTY 00013 * REGARDING THE SOFTWARE, ITS PERFORMANCE, ITS MERCHANTABILITY OR 00014 * FITNESS FOR ANY PARTICULAR USE, FREEDOM FROM ANY COMPUTER DISEASES OR 00015 * ITS CONFORMITY TO ANY SPECIFICATION. THE ENTIRE RISK AS TO QUALITY AND 00016 * PERFORMANCE OF THE SOFTWARE IS WITH THE USER. 00017 * 00018 * Module: dcmsr 00019 * 00020 * Author: Joerg Riesmeier 00021 * 00022 * Purpose: 00023 * classes: DSRTypes 00024 * 00025 * Last Update: $Author: meichel $ 00026 * Update Date: $Date: 2005/12/08 16:05:30 $ 00027 * CVS/RCS Revision: $Revision: 1.46 $ 00028 * Status: $State: Exp $ 00029 * 00030 * CVS/RCS Log at end of file 00031 * 00032 */ 00033 00034 00035 #ifndef DSRTYPES_H 00036 #define DSRTYPES_H 00037 00038 #include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */ 00039 00040 #include "dcmtk/dcmdata/dctk.h" 00041 00042 #include "dcmtk/ofstd/ofstream.h" 00043 #include "dcmtk/ofstd/oftypes.h" 00044 #include "dcmtk/ofstd/ofcond.h" 00045 00046 00047 /*---------------------* 00048 * macro definitions * 00049 *---------------------*/ 00050 00051 // private coding scheme designator used for internal codes 00052 #define OFFIS_CODING_SCHEME_DESIGNATOR "99_OFFIS_DCMTK" 00053 // name of the private coding scheme 00054 #define OFFIS_CODING_SCHEME_NAME "OFFIS DCMTK Coding Scheme" 00055 // organization responsible for the private coding scheme 00056 #define OFFIS_RESPONSIBLE_ORGANIZATION "Kuratorium OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany" 00057 00058 // protocol, hostname and CGI script name used for HTML hyperlinks to composite objects 00059 #define HTML_HYPERLINK_PREFIX_FOR_CGI "http://localhost/dicom.cgi" 00060 // URL of the DICOM toolkit DCMTK 00061 #define DCMTK_INTERNET_URL "http://dicom.offis.de/dcmtk" 00062 00063 // XML namespace URI for dcmsr module 00064 #define DCMSR_XML_NAMESPACE_URI "http://dicom.offis.de/dcmsr" 00065 // XML Schema file for dcmsr module 00066 #define DCMSR_XML_XSD_FILE "dsr2xml.xsd" 00067 // XML Schema Instance URI 00068 #define XML_SCHEMA_INSTANCE_URI "http://www.w3.org/2001/XMLSchema-instance" 00069 00070 00071 /*------------------------* 00072 * forward declarations * 00073 *------------------------*/ 00074 00075 class DSRXMLCursor; 00076 class DSRXMLDocument; 00077 class DSRDocumentTreeNode; 00078 class DSRIODConstraintChecker; 00079 00080 00081 /*-----------------------* 00082 * contant definitions * 00083 *-----------------------*/ 00084 00090 00092 extern const OFCondition SR_EC_UnknownDocumentType; 00093 00095 extern const OFCondition SR_EC_InvalidDocument; 00096 00098 extern const OFCondition SR_EC_InvalidDocumentTree; 00099 00101 extern const OFCondition SR_EC_MandatoryAttributeMissing; 00102 00104 extern const OFCondition SR_EC_InvalidValue; 00105 00107 extern const OFCondition SR_EC_UnsupportedValue; 00108 00110 extern const OFCondition SR_EC_UnknownValueType; 00111 00113 extern const OFCondition SR_EC_UnknownRelationshipType; 00114 00116 extern const OFCondition SR_EC_InvalidByValueRelationship; 00117 00119 extern const OFCondition SR_EC_InvalidByReferenceRelationship; 00120 00122 extern const OFCondition SR_EC_SOPInstanceNotFound; 00123 00125 extern const OFCondition SR_EC_DifferentSOPClassesForAnInstance; 00126 00128 extern const OFCondition SR_EC_CodingSchemeNotFound; 00129 00131 extern const OFCondition SR_EC_CorruptedXMLStructure; 00133 00134 00135 /*---------------------* 00136 * class declaration * 00137 *---------------------*/ 00138 00144 class DSRTypes 00145 { 00146 00147 public: 00148 00149 // --- constant declarations --- 00150 00156 00158 static const size_t RF_readDigitalSignatures; 00159 00161 static const size_t RF_ignoreRelationshipConstraints; 00162 00164 static const size_t RF_ignoreContentItemErrors; 00165 00167 static const size_t RF_skipInvalidContentItems; 00168 00170 static const size_t RF_verboseDebugMode; 00171 00173 static const size_t RF_showCurrentlyProcessedItem; 00175 00176 00183 00185 static const size_t HF_neverExpandChildrenInline; 00186 00188 static const size_t HF_renderInlineCodes; 00189 00191 static const size_t HF_renderConceptNameCodes; 00192 00194 static const size_t HF_renderNumericUnitCodes; 00195 00197 static const size_t HF_useCodeMeaningAsUnit; 00198 00200 static const size_t HF_renderPatientTitle; 00201 00203 static const size_t HF_renderNoDocumentHeader; 00204 00206 static const size_t HF_renderDcmtkFootnote; 00207 00209 static const size_t HF_renderFullData; 00210 00212 static const size_t HF_copyStyleSheetContent; 00213 00215 static const size_t HF_version32Compatibility; 00216 00218 static const size_t HF_addDocumentTypeReference; 00219 00221 static const size_t HF_renderItemsSeparately; 00222 00224 static const size_t HF_renderItemInline; 00225 00227 static const size_t HF_currentlyInsideAnnex; 00228 00230 static const size_t HF_createFootnoteReferences; 00231 00233 static const size_t HF_convertNonASCIICharacters; 00234 00236 static const size_t HF_renderAllCodes; 00237 00239 static const size_t HF_internalUseOnly; 00241 00242 00248 00250 static const size_t XF_writeEmptyTags; 00251 00253 static const size_t XF_writeTemplateIdentification; 00254 00256 static const size_t XF_alwaysWriteItemIdentifier; 00257 00259 static const size_t XF_codeComponentsAsAttribute; 00260 00262 static const size_t XF_relationshipTypeAsAttribute; 00263 00265 static const size_t XF_valueTypeAsAttribute; 00266 00268 static const size_t XF_templateIdentifierAsAttribute; 00269 00271 static const size_t XF_useDcmsrNamespace; 00272 00274 static const size_t XF_addSchemaReference; 00275 00277 static const size_t XF_validateSchema; 00278 00280 static const size_t XF_enableLibxmlErrorOutput; 00281 00283 static const size_t XF_templateElementEnclosesItems; 00284 00286 static const size_t XF_encodeEverythingAsAttribute; 00288 00289 00295 00297 static const size_t PF_printItemPosition; 00298 00300 static const size_t PF_shortenLongItemValues; 00301 00303 static const size_t PF_printSOPInstanceUID; 00304 00306 static const size_t PF_printConceptNameCodes; 00307 00309 static const size_t PF_printNoDocumentHeader; 00310 00312 static const size_t PF_printTemplateIdentification; 00313 00315 static const size_t PF_printAllCodes; 00317 00318 00319 // --- type definitions --- 00320 00323 enum E_DocumentType 00324 { 00326 DT_invalid, 00328 DT_unknown = DT_invalid, 00330 DT_BasicTextSR, 00332 DT_EnhancedSR, 00334 DT_ComprehensiveSR, 00336 DT_KeyObjectDoc, 00338 DT_MammographyCadSR, 00340 DT_ChestCadSR, 00342 DT_ProcedureLog, 00344 DT_XRayRadiationDoseSR, 00346 DT_last = DT_XRayRadiationDoseSR 00347 }; 00348 00351 enum E_RelationshipType 00352 { 00354 RT_invalid, 00356 RT_unknown = RT_invalid, 00358 RT_isRoot, 00360 RT_contains, 00362 RT_hasObsContext, 00364 RT_hasAcqContext, 00366 RT_hasConceptMod, 00368 RT_hasProperties, 00370 RT_inferredFrom, 00372 RT_selectedFrom, 00374 RT_last = RT_selectedFrom 00375 }; 00376 00379 enum E_ValueType 00380 { 00382 VT_invalid, 00384 VT_unknown = VT_invalid, 00386 VT_Text, 00388 VT_Code, 00390 VT_Num, 00392 VT_DateTime, 00394 VT_Date, 00396 VT_Time, 00398 VT_UIDRef, 00400 VT_PName, 00402 VT_SCoord, 00404 VT_TCoord, 00406 VT_Composite, 00408 VT_Image, 00410 VT_Waveform, 00412 VT_Container, 00414 VT_byReference, 00416 VT_last = VT_byReference 00417 }; 00418 00421 enum E_GraphicType 00422 { 00424 GT_invalid, 00426 GT_unknown = GT_invalid, 00428 GT_Point, 00430 GT_Multipoint, 00432 GT_Polyline, 00434 GT_Circle, 00436 GT_Ellipse, 00438 GT_last = GT_Ellipse 00439 }; 00440 00443 enum E_TemporalRangeType 00444 { 00446 TRT_invalid, 00448 TRT_unknown = TRT_invalid, 00450 TRT_Point, 00452 TRT_Multipoint, 00454 TRT_Segment, 00456 TRT_Multisegment, 00458 TRT_Begin, 00460 TRT_End, 00462 TRT_last = TRT_End 00463 }; 00464 00467 enum E_ContinuityOfContent 00468 { 00470 COC_invalid, 00472 COC_Separate, 00474 COC_Continuous, 00476 COC_last = COC_Continuous 00477 }; 00478 00481 enum E_CompletionFlag 00482 { 00484 CF_invalid, 00486 CF_Partial, 00488 CF_Complete, 00490 CF_last = CF_Complete 00491 }; 00492 00495 enum E_VerificationFlag 00496 { 00498 VF_invalid, 00500 VF_Unverified, 00502 VF_Verified, 00504 VF_last = VF_Verified 00505 }; 00506 00509 enum E_CharacterSet 00510 { 00512 CS_invalid, 00514 CS_unknown = CS_invalid, 00516 CS_ASCII, 00518 CS_Latin1, 00520 CS_Latin2, 00522 CS_Latin3, 00524 CS_Latin4, 00526 CS_Cyrillic, 00528 CS_Arabic, 00530 CS_Greek, 00532 CS_Hebrew, 00534 CS_Latin5, 00536 CS_Japanese, 00538 CS_Thai, 00539 // UTF-8: Unicode in UTF-8 00540 CS_UTF8, 00542 CS_last = CS_UTF8 00543 }; 00544 00547 enum E_AddMode 00548 { 00550 AM_afterCurrent, 00552 AM_beforeCurrent, 00554 AM_belowCurrent 00555 }; 00556 00557 00558 // --- conversion functions --- 00559 00564 static const char *documentTypeToSOPClassUID(const E_DocumentType documentType); 00565 00570 static const char *documentTypeToModality(const E_DocumentType documentType); 00571 00577 static const char *documentTypeToReadableName(const E_DocumentType documentType); 00578 00585 static const char *documentTypeToDocumentTitle(const E_DocumentType documentType, 00586 OFString &documentTitle); 00587 00592 static const char *relationshipTypeToDefinedTerm(const E_RelationshipType relationshipType); 00593 00599 static const char *relationshipTypeToReadableName(const E_RelationshipType relationshipType); 00600 00605 static const char *valueTypeToDefinedTerm(const E_ValueType valueType); 00606 00611 static const char *valueTypeToXMLTagName(const E_ValueType valueType); 00612 00618 static const char *valueTypeToReadableName(const E_ValueType valueType); 00619 00624 static const char *graphicTypeToEnumeratedValue(const E_GraphicType graphicType); 00625 00631 static const char *graphicTypeToReadableName(const E_GraphicType graphicType); 00632 00637 static const char *temporalRangeTypeToEnumeratedValue(const E_TemporalRangeType temporalRangeType); 00638 00644 static const char *temporalRangeTypeToReadableName(const E_TemporalRangeType temporalRangeType); 00645 00650 static const char *continuityOfContentToEnumeratedValue(const E_ContinuityOfContent continuityOfContent); 00651 00656 static const char *completionFlagToEnumeratedValue(const E_CompletionFlag completionFlag); 00657 00662 static const char *verificationFlagToEnumeratedValue(const E_VerificationFlag verificationFlag); 00663 00668 static const char *characterSetToDefinedTerm(const E_CharacterSet characterSet); 00669 00675 static const char *characterSetToHTMLName(const E_CharacterSet characterSet); 00676 00682 static const char *characterSetToXMLName(const E_CharacterSet characterSet); 00683 00688 static E_DocumentType sopClassUIDToDocumentType(const OFString &sopClassUID); 00689 00694 static E_RelationshipType definedTermToRelationshipType(const OFString &definedTerm); 00695 00700 static E_ValueType definedTermToValueType(const OFString &definedTerm); 00701 00706 static E_ValueType xmlTagNameToValueType(const OFString &xmlTagName); 00707 00712 static E_GraphicType enumeratedValueToGraphicType(const OFString &enumeratedValue); 00713 00718 static E_TemporalRangeType enumeratedValueToTemporalRangeType(const OFString &enumeratedValue); 00719 00724 static E_ContinuityOfContent enumeratedValueToContinuityOfContent(const OFString &enumeratedValue); 00725 00730 static E_CompletionFlag enumeratedValueToCompletionFlag(const OFString &enumeratedValue); 00731 00736 static E_VerificationFlag enumeratedValueToVerificationFlag(const OFString &enumeratedValue); 00737 00742 static E_CharacterSet definedTermToCharacterSet(const OFString &definedTerm); 00743 00744 00745 // --- misc helper functions --- 00746 00753 static OFBool isDocumentTypeSupported(const E_DocumentType documentType); 00754 00760 static const OFString ¤tDate(OFString &dateString); 00761 00768 static const OFString ¤tTime(OFString &timeString); 00769 00778 static const OFString ¤tDateTime(OFString &dateTimeString); 00779 00786 static const OFString &dicomToReadableDate(const OFString &dicomDate, 00787 OFString &readableDate); 00788 00796 static const OFString &dicomToReadableTime(const OFString &dicomTime, 00797 OFString &readableTime); 00798 00806 static const OFString &dicomToReadableDateTime(const OFString &dicomDateTime, 00807 OFString &readableDateTime); 00808 00818 static const OFString &dicomToReadablePersonName(const OFString &dicomPersonName, 00819 OFString &readablePersonName); 00820 00832 static const OFString &dicomToXMLPersonName(const OFString &dicomPersonName, 00833 OFString &xmlPersonName, 00834 const OFBool writeEmptyValue = OFFalse); 00835 00841 static const char *numberToString(const size_t number, 00842 char *stringValue); 00843 00848 static size_t stringToNumber(const char *stringValue); 00849 00857 static const OFString &convertToPrintString(const OFString &sourceString, 00858 OFString &printString); 00859 00877 static const OFString &convertToMarkupString(const OFString &sourceString, 00878 OFString &markupString, 00879 const OFBool convertNonASCII = OFFalse, 00880 const OFBool newlineAllowed = OFFalse, 00881 const OFBool xmlMode = OFFalse); 00882 00891 static OFBool checkForValidUIDFormat(const OFString &stringValue); 00892 00898 static DSRIODConstraintChecker *createIODConstraintChecker(const E_DocumentType documentType); 00899 00907 static DSRDocumentTreeNode *createDocumentTreeNode(const E_RelationshipType relationshipType, 00908 const E_ValueType valueType); 00909 00910 00914 static OFBool elementContainsExtendedCharacters(DcmElement &elem); 00915 00919 static OFBool stringContainsExtendedCharacters(const OFString &s); 00920 00921 // --- DICOM data structure access functions --- 00922 00930 static OFCondition addElementToDataset(OFCondition &result, 00931 DcmItem &dataset, 00932 DcmElement *delem); 00933 00939 static void removeAttributeFromSequence(DcmSequenceOfItems &sequence, 00940 const DcmTagKey &tagKey); 00941 00949 static OFCondition getElementFromDataset(DcmItem &dataset, 00950 DcmElement &delem); 00951 00961 static OFCondition getSequenceFromDataset(DcmItem &dataset, 00962 DcmSequenceOfItems &dseq); 00963 00968 static const char *getStringValueFromElement(const DcmElement &delem); 00969 00975 static const OFString &getStringValueFromElement(const DcmElement &delem, 00976 OFString &stringValue); 00977 00983 static const OFString &getPrintStringFromElement(const DcmElement &delem, 00984 OFString &stringValue); 00985 00992 static const OFString &getMarkupStringFromElement(const DcmElement &delem, 00993 OFString &stringValue, 00994 const OFBool convertNonASCII = OFFalse); 00995 01004 static OFCondition getStringValueFromDataset(DcmItem &dataset, 01005 const DcmTagKey &tagKey, 01006 OFString &stringValue); 01007 01016 static OFCondition putStringValueToDataset(DcmItem &dataset, 01017 const DcmTag &tag, 01018 const OFString &stringValue, 01019 const OFBool allowEmpty = OFTrue); 01020 01033 static OFBool checkElementValue(DcmElement &delem, 01034 const OFString &vm, 01035 const OFString &type, 01036 OFConsole *stream = NULL, 01037 const OFCondition &searchCond = EC_Normal, 01038 const char *moduleName = NULL); 01039 01053 static OFCondition getAndCheckElementFromDataset(DcmItem &dataset, 01054 DcmElement &delem, 01055 const OFString &vm, 01056 const OFString &type, 01057 OFConsole *stream = NULL, 01058 const char *moduleName = NULL); 01059 01075 static OFCondition getAndCheckStringValueFromDataset(DcmItem &dataset, 01076 const DcmTagKey &tagKey, 01077 OFString &stringValue, 01078 const OFString &vm, 01079 const OFString &type, 01080 OFConsole *stream = NULL, 01081 const char *moduleName = NULL); 01082 01083 // --- output functions --- 01084 01089 static void printMessage(OFConsole *stream, 01090 const char *message); 01091 01097 static void printWarningMessage(OFConsole *stream, 01098 const char *message); 01099 01105 static void printErrorMessage(OFConsole *stream, 01106 const char *message); 01107 01115 static void printInvalidContentItemMessage(OFConsole *stream, 01116 const char *action, 01117 const DSRDocumentTreeNode *node, 01118 const char *location = NULL); 01119 01128 static void printContentItemErrorMessage(OFConsole *stream, 01129 const char *action, 01130 const OFCondition &result, 01131 const DSRDocumentTreeNode *node, 01132 const char *location = NULL); 01133 01140 static void printUnknownValueWarningMessage(OFConsole *stream, 01141 const char *valueName, 01142 const char *readValue = NULL, 01143 const char *action = "Reading"); 01144 01153 static OFBool writeStringValueToXML(ostream &stream, 01154 const OFString &stringValue, 01155 const OFString &tagName, 01156 const OFBool writeEmptyValue = OFFalse); 01157 01167 static OFBool writeStringFromElementToXML(ostream &stream, 01168 DcmElement &delem, 01169 const OFString &tagName, 01170 const OFBool writeEmptyValue = OFFalse); 01171 01182 static size_t createHTMLAnnexEntry(ostream &docStream, 01183 ostream &annexStream, 01184 const OFString &referenceText, 01185 size_t &annexNumber); 01186 01196 static size_t createHTMLFootnote(ostream &docStream, 01197 ostream &footnoteStream, 01198 size_t &footnoteNumber, 01199 const size_t nodeID); 01200 01208 static OFCondition appendStream(ostream &mainStream, 01209 OFOStringStream &tempStream, 01210 const char *heading = NULL); 01211 }; 01212 01213 01214 #endif 01215 01216 01217 /* 01218 * CVS/RCS Log: 01219 * $Log: dsrtypes.h,v $ 01220 * Revision 1.46 2005/12/08 16:05:30 meichel 01221 * Changed include path schema for all DCMTK header files 01222 * 01223 * Revision 1.45 2005/11/30 12:00:24 joergr 01224 * Added support for X-Ray Radiation Dose SR documents. 01225 * 01226 * Revision 1.44 2004/11/29 17:11:01 joergr 01227 * Added warning message when character set is unknown, unsupported or cannot 01228 * be mapped to the output format. Fixed minor formatting issues. 01229 * 01230 * Revision 1.43 2004/11/22 16:35:38 meichel 01231 * Added helper methods to check strings and DICOM elements for presence of 01232 * extended (non-ASCII) characters 01233 * 01234 * Revision 1.42 2004/09/09 14:01:30 joergr 01235 * Added flags to control the way the template identification is encoded in 01236 * writeXML() and expected in readXML(). 01237 * 01238 * Revision 1.41 2004/01/20 15:35:54 joergr 01239 * Added new command line option which allows to write the item identifier "id" 01240 * (XML attribute) even if it is not required (because the item is not referenced 01241 * by any other item). Useful for debugging purposes. 01242 * 01243 * Revision 1.40 2004/01/05 14:36:02 joergr 01244 * Removed acknowledgements with e-mail addresses from CVS log. 01245 * 01246 * Revision 1.39 2003/12/01 15:46:18 joergr 01247 * Changed XML encoding of by-reference relationships if flag 01248 * XF_valueTypeAsAttribute is set. 01249 * 01250 * Revision 1.38 2003/10/30 17:51:00 joergr 01251 * Added new command line options which allow to print/write the template 01252 * identification of a content item. 01253 * 01254 * Revision 1.37 2003/10/09 12:53:12 joergr 01255 * Added support for Procedure Log. 01256 * 01257 * Revision 1.36 2003/10/06 09:52:58 joergr 01258 * Added new flag which allows to ignore content item errors when reading an SR 01259 * document (e.g. missing value type specific attributes). 01260 * 01261 * Revision 1.35 2003/09/15 14:18:54 joergr 01262 * Introduced new class to facilitate checking of SR IOD relationship content 01263 * constraints. Replaced old implementation distributed over numerous classes. 01264 * 01265 * Revision 1.34 2003/09/10 13:16:13 joergr 01266 * Replaced PrivateCodingSchemeUID by new CodingSchemeIdenticationSequence as 01267 * required by CP 324. 01268 * 01269 * Revision 1.33 2003/08/07 17:31:00 joergr 01270 * Removed libxml dependency from header files. Simplifies linking (MSVC). 01271 * 01272 * Revision 1.32 2003/08/07 13:05:26 joergr 01273 * Added readXML functionality. Added support for Chest CAD SR. 01274 * Added new option --add-schema-reference to command line tool dsr2xml. 01275 * Renamed parameters/variables "string" to avoid name clash with STL class. 01276 * 01277 * Revision 1.31 2003/04/17 18:57:38 joergr 01278 * Replace LF and CR by and in XML mode instead of ¶ (para). 01279 * 01280 * Revision 1.30 2003/04/01 14:59:13 joergr 01281 * Added support for XML namespaces. 01282 * 01283 * Revision 1.29 2002/08/02 12:38:32 joergr 01284 * Enhanced debug output of dcmsr::read() routines (e.g. add position string 01285 * of invalid content items to error messages). 01286 * 01287 * Revision 1.28 2002/07/22 14:21:20 joergr 01288 * Added new print flag to suppress the output of general document information. 01289 * 01290 * Revision 1.27 2002/05/14 08:14:51 joergr 01291 * Updated comments. 01292 * 01293 * Revision 1.26 2002/05/07 12:49:32 joergr 01294 * Added support for the Current Requested Procedure Evidence Sequence and the 01295 * Pertinent Other Evidence Sequence to the dcmsr module. 01296 * 01297 * Revision 1.25 2002/05/02 14:08:23 joergr 01298 * Added support for standard and non-standard string streams (which one is 01299 * supported is detected automatically via the configure mechanism). 01300 * 01301 * Revision 1.24 2002/04/16 13:50:52 joergr 01302 * Added configurable support for C++ ANSI standard includes (e.g. streams). 01303 * 01304 * Revision 1.23 2002/04/11 13:02:35 joergr 01305 * Corrected typo and/or enhanced documentation. 01306 * 01307 * Revision 1.22 2001/11/09 16:10:54 joergr 01308 * Added preliminary support for Mammography CAD SR. 01309 * 01310 * Revision 1.21 2001/10/10 15:28:04 joergr 01311 * Changed parameter DcmTagKey to DcmTag in DcmItem::putAndInsert... methods 01312 * to support elements which are not in the data dictionary (e.g. private 01313 * extensions). 01314 * 01315 * Revision 1.20 2001/10/02 12:05:46 joergr 01316 * Adapted module "dcmsr" to the new class OFCondition. Introduced module 01317 * specific error codes. 01318 * 01319 * Revision 1.19 2001/10/01 15:06:54 joergr 01320 * Introduced new general purpose functions to get/set person names, date, time 01321 * and date/time. 01322 * 01323 * Revision 1.18 2001/09/26 13:04:14 meichel 01324 * Adapted dcmsr to class OFCondition 01325 * 01326 * Revision 1.17 2001/06/20 15:03:00 joergr 01327 * Added minimal support for new SOP class Key Object Selection Document 01328 * (suppl. 59). 01329 * Added new debugging features (additional flags) to examine "corrupted" SR 01330 * documents. 01331 * 01332 * Revision 1.16 2001/04/03 08:24:00 joergr 01333 * Added new command line option: ignore relationship content constraints 01334 * specified for each SR document class. 01335 * 01336 * Revision 1.15 2001/02/13 16:36:05 joergr 01337 * Allow newline characters (encoded as ¶) in XML documents. 01338 * 01339 * Revision 1.14 2001/02/02 14:37:33 joergr 01340 * Added new option to dsr2xml allowing to specify whether value and/or 01341 * relationship type are to be encoded as XML attributes or elements. 01342 * 01343 * Revision 1.13 2001/01/25 11:47:43 joergr 01344 * Always remove signature sequences from certain dataset sequences (e.g. 01345 * VerifyingObserver or PredecessorDocuments). 01346 * 01347 * Revision 1.12 2001/01/18 15:52:11 joergr 01348 * Encode PN components in separate XML tags. 01349 * 01350 * Revision 1.11 2000/12/08 13:45:17 joergr 01351 * Removed optional fractional second part from time value. 01352 * 01353 * Revision 1.10 2000/11/09 20:32:08 joergr 01354 * Added support for non-ASCII characters in HTML 3.2 (use numeric value). 01355 * 01356 * Revision 1.9 2000/11/09 11:31:46 joergr 01357 * Reordered renderHTML flags (internal flags to the end). 01358 * 01359 * Revision 1.8 2000/11/07 18:14:05 joergr 01360 * Added new command line option allowing to choose code value or meaning to be 01361 * rendered as the numeric measurement unit. 01362 * Enhanced rendered HTML output of date, time, datetime and pname. 01363 * 01364 * Revision 1.7 2000/11/06 11:21:04 joergr 01365 * Changes structure of HTML hyperlinks to composite objects (now using pseudo 01366 * CGI script). 01367 * 01368 * Revision 1.6 2000/11/01 16:18:34 joergr 01369 * Added support for conversion to XML. 01370 * Added support for Cascading Style Sheet (CSS) used optionally for HTML 01371 * rendering. 01372 * Enhanced support for specific character sets. 01373 * 01374 * Revision 1.5 2000/10/26 14:22:09 joergr 01375 * Added support for "Comprehensive SR". 01376 * Added support for TCOORD content item. 01377 * Added new flag specifying whether to add a "dcmtk" footnote to the rendered 01378 * HTML document or not. 01379 * Added check routine for valid UID strings. 01380 * 01381 * Revision 1.4 2000/10/18 17:10:25 joergr 01382 * Added new method allowing to get and check string values from dataset. 01383 * 01384 * Revision 1.3 2000/10/16 16:31:09 joergr 01385 * Updated comments. 01386 * 01387 * Revision 1.2 2000/10/16 11:52:58 joergr 01388 * Added new options: number nested items instead of indenting them, print SOP 01389 * instance UID of referenced composite objects. 01390 * 01391 * Revision 1.1 2000/10/13 07:49:35 joergr 01392 * Added new module 'dcmsr' providing access to DICOM structured reporting 01393 * documents (supplement 23). Doc++ documentation not yet completed. 01394 * 01395 * 01396 */