34 #include "dcmtk/config/osconfig.h"
36 #include "dcmtk/dcmdata/dctk.h"
38 #include "dcmtk/ofstd/ofstream.h"
39 #include "dcmtk/ofstd/oftypes.h"
40 #include "dcmtk/ofstd/ofcond.h"
41 #include "dcmtk/oflog/oflog.h"
45 #define DCMSR_TRACE(msg) OFLOG_TRACE(DCM_dcmsrGetLogger(), msg)
46 #define DCMSR_DEBUG(msg) OFLOG_DEBUG(DCM_dcmsrGetLogger(), msg)
47 #define DCMSR_INFO(msg) OFLOG_INFO(DCM_dcmsrGetLogger(), msg)
48 #define DCMSR_WARN(msg) OFLOG_WARN(DCM_dcmsrGetLogger(), msg)
49 #define DCMSR_ERROR(msg) OFLOG_ERROR(DCM_dcmsrGetLogger(), msg)
50 #define DCMSR_FATAL(msg) OFLOG_FATAL(DCM_dcmsrGetLogger(), msg)
58 #define OFFIS_CODING_SCHEME_DESIGNATOR "99_OFFIS_DCMTK"
60 #define OFFIS_CODING_SCHEME_NAME "OFFIS DCMTK Coding Scheme"
62 #define OFFIS_RESPONSIBLE_ORGANIZATION "OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany"
65 #define HTML_HYPERLINK_PREFIX_FOR_CGI "http://localhost/dicom.cgi"
67 #define DCMTK_INTERNET_URL "http://dicom.offis.de/dcmtk"
70 #define DCMSR_XML_NAMESPACE_URI "http://dicom.offis.de/dcmsr"
72 #define DCMSR_XML_XSD_FILE "dsr2xml.xsd"
74 #define XML_SCHEMA_INSTANCE_URI "http://www.w3.org/2001/XMLSchema-instance"
104 extern const OFCondition SR_EC_InvalidDocumentTree;
107 extern const OFCondition SR_EC_MandatoryAttributeMissing;
119 extern const OFCondition SR_EC_UnknownRelationshipType;
122 extern const OFCondition SR_EC_InvalidByValueRelationship;
125 extern const OFCondition SR_EC_InvalidByReferenceRelationship;
128 extern const OFCondition SR_EC_SOPInstanceNotFound;
131 extern const OFCondition SR_EC_DifferentSOPClassesForAnInstance;
134 extern const OFCondition SR_EC_CodingSchemeNotFound;
137 extern const OFCondition SR_EC_CorruptedXMLStructure;
958 const OFBool writeEmptyValue = OFFalse);
1000 const size_t flags = 0,
1001 const OFBool newlineAllowed = OFFalse);
1061 const char *moduleName = NULL);
1111 const OFBool convertNonASCII = OFFalse);
1136 const OFBool allowEmpty = OFTrue);
1153 const char *moduleName = NULL);
1171 const char *moduleName = NULL);
1192 const char *moduleName = NULL);
1204 const char *location = NULL);
1216 const char *location = NULL);
1224 const char *readValue = NULL,
1225 const char *action =
"Reading");
1238 const OFBool writeEmptyValue = OFFalse);
1252 const OFBool writeEmptyValue = OFFalse);
1266 STD_NAMESPACE ostream &annexStream,
1268 size_t &annexNumber,
1269 const size_t flags = 0);
1282 STD_NAMESPACE ostream &footnoteStream,
1283 size_t &footnoteNumber,
1284 const size_t nodeID,
1285 const size_t flags = 0);
1295 OFOStringStream &tempStream,
1296 const char *heading = NULL);
static const size_t PF_shortenLongItemValues
shorten long item value (e.g. long texts)
static OFCondition getElementFromDataset(DcmItem &dataset, DcmElement &delem)
get element from dataset
static OFCondition addElementToDataset(OFCondition &result, DcmItem &dataset, DcmElement *delem, const OFString &vm, const OFString &type, const char *moduleName=NULL)
add given element to the dataset.
static OFCondition getAndCheckStringValueFromDataset(DcmItem &dataset, const DcmTagKey &tagKey, OFString &stringValue, const OFString &vm, const OFString &type, const char *moduleName=NULL)
get string value from dataset and check it for correct value multipicity and type.
DICOM Graphic Type: MULTIPOINT.
DICOM Relationship Type: INFERRED FROM.
static const size_t HF_useCodeMeaningAsUnit
external: use code meaning for the numeric measurement unit (default: code value) ...
static const char * documentTypeToDocumentTitle(const E_DocumentType documentType, OFString &documentTitle)
convert SR document type to document title.
a class representing a list of DICOM elements in which each element has a different tag and elements ...
static const OFString & dicomToReadablePersonName(const OFString &dicomPersonName, OFString &readablePersonName)
convert DICOM person name to readable format.
static const char * characterSetToHTMLName(const E_CharacterSet characterSet)
convert character set to HTML name.
DICOM Graphic Type: POLYGON.
static const char * valueTypeToReadableName(const E_ValueType valueType)
convert value type to readable name.
class maintaining a attribute tag (group and element number)
static const char * completionFlagToEnumeratedValue(const E_CompletionFlag completionFlag)
convert completion flag to DICOM enumerated value
static const size_t RF_readDigitalSignatures
read digital signatures from dataset
Class for checking the content relationship constraints of an SR IOD (abstract)
static OFBool checkElementValue(DcmElement &delem, const OFString &vm, const OFString &type, const OFCondition &searchCond=EC_Normal, const char *moduleName=NULL)
check element value for correct value multipicity and type.
internal type used to mark the last entry
static const OFString & convertToHTMLString(const OFString &sourceString, OFString &markupString, const size_t flags=0, const OFBool newlineAllowed=OFFalse)
convert character string to HTML mnenonic string.
static const size_t RF_ignoreRelationshipConstraints
ignore relationship constraints for this document class
static const size_t HF_renderPatientTitle
external: use patient information as document title (default: document type)
internal type used to indicate an error
ISO-IR 101: Latin alphabet No. 2.
static const size_t HF_copyStyleSheetContent
external: copy Cascading Style Sheet (CSS) content to HTML file
static const size_t HF_alwaysExpandChildrenInline
external: always expand child nodes inline
abstract base class for all DICOM elements
static const char * temporalRangeTypeToEnumeratedValue(const E_TemporalRangeType temporalRangeType)
convert temporal range type to DICOM enumerated value
DICOM enumerated value: PARTIAL.
class representing a DICOM Sequence of Items (SQ).
static const size_t XF_valueTypeAsAttribute
write: encode value type as attribute instead of element text
static const size_t XF_useDcmsrNamespace
write: add DCMSR namespace declaration to the XML output
DICOM IOD: Implantation Plan SR Document.
static const size_t PF_printAllCodes
shortcut: print all codes
static const char * valueTypeToDefinedTerm(const E_ValueType valueType)
convert value type to DICOM defined term
static void printInvalidContentItemMessage(const char *action, const DSRDocumentTreeNode *node, const char *location=NULL)
print the warning message that the current content item is invalid/incomplete.
static const size_t PF_printItemPosition
print item position ("1.2.3") instead of line indentation
DICOM Graphic Type: CIRCLE.
DICOM Graphic Type: POINT.
DICOM Graphic Type: ELLIPSE.
static OFBool checkForValidUIDFormat(const OFString &stringValue)
check string for valid UID format.
DICOM Relationship Type: SELECTED FROM.
static E_CompletionFlag enumeratedValueToCompletionFlag(const OFString &enumeratedValue)
convert DICOM enumerated value to completion flag
static const char * documentTypeToModality(const E_DocumentType documentType)
convert SR document type to modality
static const OFString & getPrintStringFromElement(const DcmElement &delem, OFString &stringValue)
get string value from element and convert to "print" format
static const size_t XF_relationshipTypeAsAttribute
write: encode relationship type as attribute instead of element text
static const size_t XF_writeTemplateIdentification
write: write template identification information (TID and mapping resource)
static const size_t XF_codeComponentsAsAttribute
write: encode code value, coding scheme designator and coding scheme version as attribute instead of ...
static const size_t HF_renderAllCodes
shortcut: render all codes
internal type used to indicate an unknown/unsupported character set
static void removeAttributeFromSequence(DcmSequenceOfItems &sequence, const DcmTagKey &tagKey)
remove given attribute from the sequence.
static const size_t HF_renderNumericUnitCodes
external: render the code of the numeric measurement unit
internal type used to mark the last entry
internal type used to indicate an unknown graphic type (defined term)
static E_VerificationFlag enumeratedValueToVerificationFlag(const OFString &enumeratedValue)
convert DICOM enumerated value to verification flag
DICOM IOD: Comprehensive SR.
DICOM enumerated value: PRELIMINARY.
static const size_t CM_resetReferenceTargetFlag
reset the reference target flag for all nodes
internal type used to mark the last entry
static const size_t HF_omitGeneratorMetaElement
external: omit generator meta element referring to the DCMTK
static E_GraphicType3D enumeratedValueToGraphicType3D(const OFString &enumeratedValue)
convert DICOM enumerated value to graphic type (3D)
static OFCondition getAndCheckElementFromDataset(DcmItem &dataset, DcmElement &delem, const OFString &vm, const OFString &type, const char *moduleName=NULL)
get element from dataset and check it for correct value multipicity and type.
static const char * graphicType3DToEnumeratedValue(const E_GraphicType3D graphicType)
convert graphic type (3D) to DICOM enumerated value
E_CompletionFlag
SR document completion flag.
static OFCondition putStringValueToDataset(DcmItem &dataset, const DcmTag &tag, const OFString &stringValue, const OFBool allowEmpty=OFTrue)
put string value to dataset
DICOM Temporal Range Type: END.
static const size_t HF_addDocumentTypeReference
external: add explicit reference to HTML document type (DTD)
DICOM IOD: Basic Text SR.
static size_t createHTMLAnnexEntry(STD_NAMESPACE ostream &docStream, STD_NAMESPACE ostream &annexStream, const OFString &referenceText, size_t &annexNumber, const size_t flags=0)
create an HTML annex entry with hyperlinks.
ISO-IR 100: Latin alphabet No. 1.
E_ContinuityOfContent
SR continuity of content flag.
DICOM IOD: X-Ray Radiation Dose SR.
static const char * graphicTypeToReadableName(const E_GraphicType graphicType)
convert graphic type to readable name.
add new node before current one (sibling)
static const size_t PF_printNoDocumentHeader
print no general document information (header)
static E_ValueType xmlTagNameToValueType(const OFString &xmlTagName)
convert XML tag name to value type
static E_GraphicType enumeratedValueToGraphicType(const OFString &enumeratedValue)
convert DICOM enumerated value to graphic type
this class encapsulates an attribute tag (group, element) and a VR.
internal type used to mark the last entry
E_CharacterSet
Specific character set.
internal type used to indicate an error
DICOM IOD: Mammography CAD SR.
static E_DocumentType sopClassUIDToDocumentType(const OFString &sopClassUID)
convert SOP class UID to SR document type
E_RelationshipType
SR relationship types.
internal type used to indicate an unknown relationship type (defined term)
static const char * valueTypeToXMLTagName(const E_ValueType valueType)
convert value type to XML tag name
static const char * graphicTypeToEnumeratedValue(const E_GraphicType graphicType)
convert graphic type to DICOM enumerated value
static const size_t HF_renderItemInline
internal: expand items inline when they are short and have no child nodes
static size_t createHTMLFootnote(STD_NAMESPACE ostream &docStream, STD_NAMESPACE ostream &footnoteStream, size_t &footnoteNumber, const size_t nodeID, const size_t flags=0)
create an HTML footnote with hyperlinks
internal type used to mark the last entry
static const size_t HF_renderItemsSeparately
internal: render items separately (for container with SEPARATE flag)
add new node below current one (after last child)
static E_PreliminaryFlag enumeratedValueToPreliminaryFlag(const OFString &enumeratedValue)
convert DICOM enumerated value to preliminary flag
DICOM Temporal Range Type: SEGMENT.
static const size_t RF_acceptUnknownRelationshipType
accept unknown/missing relationship type
DICOM Value Type: COMPOSITE.
static OFCondition getStringValueFromDataset(DcmItem &dataset, const DcmTagKey &tagKey, OFString &stringValue)
get string value from dataset
static const OFString & currentDateTime(OFString &dateTimeString)
get current date and time in DICOM 'DT' format.
static const size_t HF_internalUseOnly
shortcut: filter all flags that are only used internally
static const size_t HF_renderNoDocumentHeader
external: render no general document information (header)
DICOM IOD: Key Object Selection Document.
static const size_t RF_showCurrentlyProcessedItem
show the currently processed content item (e.g. "1.2.3")
static const OFString & convertToXMLString(const OFString &sourceString, OFString &markupString)
convert character string to XML mnenonic string.
DICOM enumerated value: CONTINUOUS.
static const OFString & dicomToReadableTime(const OFString &dicomTime, OFString &readableTime)
convert DICOM time string to readable format.
internal type used for the document root
internal type used to mark the last entry
static const size_t HF_renderSectionTitlesInline
external: render section titles inline (default: separate paragraph)
static const size_t XF_validateSchema
read: validate content of XML document against Schema
static OFBool isDocumentTypeSupported(const E_DocumentType documentType)
check whether specified SR document type is supported by this library.
DICOM Graphic Type: ELLIPSOID.
static const OFString & getMarkupStringFromElement(const DcmElement &delem, OFString &stringValue, const OFBool convertNonASCII=OFFalse)
get string value from element and convert to HTML/XML
static E_ContinuityOfContent enumeratedValueToContinuityOfContent(const OFString &enumeratedValue)
convert DICOM enumerated value to continuity of content flag
DICOM Temporal Range Type: POINT.
DICOM Value Type: CONTAINER.
static const OFString & currentTime(OFString &timeString)
get current time in DICOM 'TM' format.
internal type used to indicate an unknown range type (defined term)
static const char * temporalRangeTypeToReadableName(const E_TemporalRangeType temporalRangeType)
convert temporal range type to readable name.
static const char * getStringValueFromElement(const DcmElement &delem)
get string value from element
DICOM Relationship Type: HAS PROPERTIES.
static const size_t XF_templateElementEnclosesItems
read/write: template identification element encloses content items
static const size_t HF_HTML32Compatibility
external: output compatible to HTML version 3.2 (default: 4.01)
virtual ~DSRTypes()
destructor.
static const char * documentTypeToSOPClassUID(const E_DocumentType documentType)
convert SR document type to SOP class UID
static const char * characterSetToDefinedTerm(const E_CharacterSet characterSet)
convert character set to DICOM defined term
static const size_t XF_alwaysWriteItemIdentifier
write: always write item identifier "id", not only when item is referenced
static const OFString & dicomToReadableDate(const OFString &dicomDate, OFString &readableDate)
convert DICOM date string to readable format.
DICOM enumerated value: VERIFIED.
ISO 646 (ISO-IR 6): ASCII.
internal type used to indicate an error
internal type used to indicate an unknown/unsupported document type
DICOM Graphic Type: MULTIPOINT.
static const char * verificationFlagToEnumeratedValue(const E_VerificationFlag verificationFlag)
convert verification flag to DICOM enumerated value
DICOM Relationship Type: HAS OBS CONTEXT.
static OFBool requiresEnhancedEquipmentModule(const E_DocumentType documentType)
check whether SR document type requires Enhanced General Equipment Module
static const size_t RF_ignoreContentItemErrors
do not abort on content item errors (e.g. missing value type specific attributes) ...
E_VerificationFlag
SR document verification flag.
internal type used to indicate an error
internal type used to mark the last entry
internal type used to indicate by-reference relationships
static const char * graphicType3DToReadableName(const E_GraphicType3D graphicType)
convert graphic type (3D) to readable name.
internal type used to mark the last entry
static const size_t RF_skipInvalidContentItems
do not abort when detecting an invalid content item, skip invalid sub-tree instead ...
static const size_t CM_updatePositionString
update the position string using the node ID
internal type used to indicate an unknown graphic type (defined term)
DICOM Value Type: SCOORD.
DICOM Relationship Type: HAS ACQ CONTEXT.
static const OFString & dicomToReadableDateTime(const OFString &dicomDateTime, OFString &readableDateTime)
convert DICOM date time string to readable format.
internal type used to indicate an error
internal type used to mark the last entry
internal type used to mark the last entry
static const char * preliminaryFlagToEnumeratedValue(const E_PreliminaryFlag preliminaryFlag)
convert preliminary flag to DICOM enumerated value
E_TemporalRangeType
SR temporal range types.
static const size_t CM_updateNodeID
update the node ID using the position string
DICOM Temporal Range Type: MULTISEGMENT.
static const size_t PF_printTemplateIdentification
print template identification (TID and mapping resource)
DICOM Value Type: WAVEFORM.
DICOM Graphic Type: POINT.
static const OFString & convertToPrintString(const OFString &sourceString, OFString &printString)
convert character string to print string.
internal type used to indicate an error
ISO-IR 13: Japanese (Katakana/Romaji)
static E_ValueType definedTermToValueType(const OFString &definedTerm)
convert DICOM defined term to value type
DICOM enumerated value: UNVERIFIED.
DICOM Graphic Type: ELLIPSE.
add new node after current one (sibling)
DICOM enumerated value: FINAL.
static const char * relationshipTypeToDefinedTerm(const E_RelationshipType relationshipType)
convert relationship type to DICOM defined term
E_ValueType
SR value types.
DICOM Graphic Type: POLYLINE.
DICOM Relationship Type: HAS CONCEPT MOD.
static const size_t XF_addSchemaReference
write: add Schema reference to XML document
static const OFString & currentDate(OFString &dateString)
get current date in DICOM 'DA' format.
DICOM Graphic Type: POLYLINE.
DICOM IOD: Procedure Log.
static E_CharacterSet definedTermToCharacterSet(const OFString &definedTerm)
convert DICOM defined term to character set
static const char * characterSetToXMLName(const E_CharacterSet characterSet)
convert character set to XML name.
DICOM Value Type: UIDREF.
static const size_t XF_templateIdentifierAsAttribute
write: encode template identifier as attribute instead of element text
DICOM IOD: Spectacle Prescription Report.
internal type used to mark the last entry
static void printUnknownValueWarningMessage(const char *valueName, const char *readValue=NULL, const char *action="Reading")
print a warning message that an unknown/unsupported value has been determined
DICOM enumerated value: SEPARATE.
static const size_t HF_currentlyInsideAnnex
internal: content item is rendered fully inside the annex
static const char * documentTypeToReadableName(const E_DocumentType documentType)
convert SR document type to readable name.
Base class for content items.
E_GraphicType
SR graphic types.
internal type used to indicate an error
static const char * continuityOfContentToEnumeratedValue(const E_ContinuityOfContent continuityOfContent)
convert continuity of content flag to DICOM enumerated value
E_DocumentType
SR document types.
internal type used to indicate an error
static const char * numberToString(const size_t number, char *stringValue)
convert unsigned integer number to character string
static const size_t PF_printSOPInstanceUID
print SOP instance UID of referenced objects
static OFBool writeStringValueToXML(STD_NAMESPACE ostream &stream, const OFString &stringValue, const OFString &tagName, const OFBool writeEmptyValue=OFFalse)
write string value to XML output stream.
General purpose class hiding global functions, constants and types from the global namespace...
simple wrapper around the "low-level" Logger object to make it easier to switch to a different system...
static DSRIODConstraintChecker * createIODConstraintChecker(const E_DocumentType documentType)
create specified SR IOD content relationship contraint checker object.
E_GraphicType3D
SR graphic types (3D).
a simple string class that implements a subset of std::string.
static void printContentItemErrorMessage(const char *action, const OFCondition &result, const DSRDocumentTreeNode *node, const char *location=NULL)
print an error message for the current content item.
static const size_t HF_renderConceptNameCodes
external: render concept name codes (default: code meaning only)
static const size_t PF_printConceptNameCodes
print coding scheme designator/version and code value of concept names
DICOM Temporal Range Type: BEGIN.
static const size_t HF_useCodeDetailsTooltip
external: render code details as a tooltip (not with HTML 3.2)
static DSRDocumentTreeNode * createDocumentTreeNode(const E_RelationshipType relationshipType, const E_ValueType valueType)
create specified document tree node.
internal type used to indicate an error or the absence of this flag
static size_t stringToNumber(const char *stringValue)
convert string to unsigned integer number
ISO-IR 109: Latin alphabet No. 3.
DICOM Value Type: SCOORD3D.
DICOM Relationship Type: CONTAINS.
DICOM IOD: Macular Grid Thickness and Volume Report.
static const size_t HF_XHTML11Compatibility
external: output compatible to XHTML version 1.1 (default: HTML 4.01)
Class for XML document cursors.
ISO-IR 148: Latin alphabet No. 5.
internal type used to indicate an error
E_PreliminaryFlag
SR document preliminary flag.
static const size_t HF_createFootnoteReferences
internal: create footnote references
static const size_t HF_renderFullData
external: render the full data of all content items
DICOM enumerated value: COMPLETE.
static const size_t XF_writeEmptyTags
write: write all tags even if their value is empty
static E_RelationshipType definedTermToRelationshipType(const OFString &definedTerm)
convert DICOM defined term to relationship type
static const OFString & dicomToXMLPersonName(const OFString &dicomPersonName, OFString &xmlPersonName, const OFBool writeEmptyValue=OFFalse)
convert DICOM person name to XML format.
static const char * relationshipTypeToReadableName(const E_RelationshipType relationshipType)
convert relationship type to readable name.
static OFCondition appendStream(STD_NAMESPACE ostream &mainStream, OFOStringStream &tempStream, const char *heading=NULL)
append one output stream to another.
static E_TemporalRangeType enumeratedValueToTemporalRangeType(const OFString &enumeratedValue)
convert DICOM enumerated value to temporal range type
static const size_t HF_renderInlineCodes
external: render codes even if they appear inline
static const size_t HF_neverExpandChildrenInline
external: never expand child nodes inline
static OFBool writeStringFromElementToXML(STD_NAMESPACE ostream &stream, DcmElement &delem, const OFString &tagName, const OFBool writeEmptyValue=OFFalse)
write string value from DICOM element to XML output stream.
DICOM Temporal Range Type: MULTIPOINT.
static const size_t XF_encodeEverythingAsAttribute
shortcut: combines all XF_xxxAsAttribute write flags (see above)
ISO-IR 110: Latin alphabet No. 4.
static const size_t HF_convertNonASCIICharacters
internal: convert non-ASCII characters (> #127) to nnn;
internal type used to indicate an error
DICOM Value Type: TCOORD.
General purpose class for condition codes.
static const size_t HF_renderDcmtkFootnote
external: render dcmtk/dcmsr comment at the end of the document
DICOM Value Type: DATETIME.