using ODMXMLTools;
path = joinpath(dirname(pathof(ODMXMLTools)), "..", "test")
Load ODM-XML
ODMXMLTools.jl doesn't check correctness of *.xml file.
using ODMXMLTools;
# Load XML file
odm = ODMXMLTools.importxml(joinpath(path, "test.xml"))
ODM root node
Then you can get MetaDataVersion list, Study list, ClinicalData list and other.
# Get metadata list
ODMXMLTools.metadatalist(odm)
4×3 DataFrame
Row | StudyOID | OID | Name |
---|---|---|---|
String | String | String | |
1 | TEMPLATE_ST_01 | mvd_tpl_1 | Tpl_Version_v1 |
2 | ST_1_1 | mdv_1 | Version_v1 |
3 | ST_2_1 | mdv_1 | Version_v1 |
4 | ST_2_1 | mdv_2 | Version_v2 |
# Get study list
ODMXMLTools.studylist(odm)
3×1 DataFrame
Row | StudyOID |
---|---|
String | |
1 | TEMPLATE_ST_01 |
2 | ST_1_1 |
3 | ST_2_1 |
# Get clinical data list
ODMXMLTools.clinicaldatalist(odm)
3×2 DataFrame
Row | StudyOID | MetaDataVersionOID |
---|---|---|
String | String | |
1 | ST_1_1 | mdv_1 |
2 | ST_2_1 | mdv_1 |
3 | ST_2_1 | mdv_2 |
Build metadata
# Build metadata
mdb = ODMXMLTools.buildmetadata(odm, "ST_2_1", "mdv_2")
Completed Study MetaData (18 elements), OID: mdv_2, Name: Version_v2
Find clinical data and get observation data
# Find clinical data
cdat = ODMXMLTools.findclinicaldata(odm, "ST_2_1", "mdv_2")
ClinicalData ( StudyOID:ST_2_1))
# Get clinical data
ODMXMLTools.clinicaldatatable(cdat)
14×7 DataFrame
Row | SubjectKey | StudyEventOID | FormOID | ItemGroupOID | ItemGroupRepeatKey | ItemOID | Value |
---|---|---|---|---|---|---|---|
String | String | String | String | String? | String | String | |
1 | 003 | SE_VIZIT1 | FORM_DEAN_1 | DE_IG_1 | missing | DE_1 | 1 |
2 | 003 | SE_VIZIT1 | FORM_DEAN_1 | DE_IG_1 | missing | DE_2 | 49 |
3 | 003 | SE_VIZIT1 | FORM_DEAN_1 | DE_IG_1 | missing | DE_3 | 2 |
4 | 003 | SE_VIZIT1 | FORM_DEAN_1 | AN_IG_2 | missing | AN_1 | 170 |
5 | 003 | SE_VIZIT1 | FORM_VD_1 | VIT_IG_1 | missing | I_1 | 119 |
6 | 003 | SE_VIZIT1 | FORM_VD_1 | VIT_IG_1 | missing | I_2 | 85 |
7 | 003 | SE_VIZIT1 | FORM_VD_1 | VIT_IG_1 | missing | I_3 | 63 |
8 | 004 | SE_VIZIT1 | FORM_DEAN_1 | DE_IG_1 | missing | DE_1 | 2 |
9 | 004 | SE_VIZIT1 | FORM_DEAN_1 | DE_IG_1 | missing | DE_2 | 52 |
10 | 004 | SE_VIZIT1 | FORM_DEAN_1 | DE_IG_1 | missing | DE_3 | 1 |
11 | 004 | SE_VIZIT1 | FORM_DEAN_1 | AN_IG_2 | missing | AN_1 | 170 |
12 | 004 | SE_VIZIT1 | FORM_VD_1 | VIT_IG_1 | missing | I_1 | 120 |
13 | 004 | SE_VIZIT1 | FORM_VD_1 | VIT_IG_1 | missing | I_2 | 85 |
14 | 004 | SE_VIZIT1 | FORM_VD_1 | VIT_IG_1 | missing | I_3 | 60 |
Get tables
# Find study
st1 = ODMXMLTools.findstudy(odm, "ST_2_1")
Study (OID:ST_2_1))
# Find element
ODMXMLTools.findelement(st1, :MetaDataVersion, "mdv_2")
MetaDataVersion (OID:mdv_2))
# Event list
ODMXMLTools.eventlist(mdb)
1×4 DataFrame
Row | OID | Name | Repeating | Type |
---|---|---|---|---|
String? | String? | String? | String? | |
1 | SE_VIZIT1 | Vizit 1 | No | Scheduled |
# Form list
ODMXMLTools.formlist(mdb)
2×3 DataFrame
Row | OID | Name | Repeating |
---|---|---|---|
String? | String? | String? | |
1 | FORM_DEAN_1 | Demographic and antropometric | No |
2 | FORM_VD_1 | Vital data | No |
# ItemGroup list
ODMXMLTools.itemgrouplist(mdb)
3×3 DataFrame
Row | OID | Name | Repeating |
---|---|---|---|
String? | String? | String? | |
1 | DE_IG_1 | Demographic | No |
2 | AN_IG_2 | Antropometric | No |
3 | VIT_IG_1 | Vital data | No |
# Item list
ODMXMLTools.itemlist(mdb)
7×3 DataFrame
Row | OID | Name | DataType |
---|---|---|---|
String? | String? | String? | |
1 | DE_1 | Sex | integer |
2 | I_3 | HR | integer |
3 | DE_2 | Age | integer |
4 | DE_3 | Race | integer |
5 | AN_1 | Height | integer |
6 | I_1 | SAD | integer |
7 | I_2 | DAD | integer |
Also
# Subject data
ODMXMLTools.subjectdatatable(odm; attrs = [:SubjectKey, :StudySubjectID])
6×2 DataFrame
Row | SubjectKey | StudySubjectID |
---|---|---|
String? | String? | |
1 | 001 | missing |
2 | 002 | missing |
3 | 001 | missing |
4 | 002 | missing |
5 | 003 | missing |
6 | 004 | missing |
# Study information
ODMXMLTools.studyinfo(odm)
--------------------------------------
Study OID: TEMPLATE_ST_01
StudyName: Template 1
StudyDescription: This is basic form template
ProtocolName: Template
MetaDataVersion:
OID: mvd_tpl_1; Name: Tpl_Version_v1
--------------------------------------
Study OID: ST_1_1
StudyName: Study 1
StudyDescription: Study 1 Description
ProtocolName: Protocol Number
MetaDataVersion:
OID: mdv_1; Name: Version_v1
--------------------------------------
Study OID: ST_2_1
StudyName: Study 2
StudyDescription: Study 2 Description
ProtocolName: Protocol Number Study 2
MetaDataVersion:
OID: mdv_1; Name: Version_v1
OID: mdv_2; Name: Version_v2
--------------------------------------
Validation
# Basic validation
ODMXMLTools.validateodm(odm)
ODMXML log: 0 item(s). Info = 0, Warnings = 0, Errors = 0, skipped 0 node(s).
# Data validation
ODMXMLTools.checkdatavalues(odm)
Any[]
SPSS features
# Value labesl
ODMXMLTools.spss_form_value_labels(mdb, "FORM_DEAN_1"; variable = :OID)
VALUE LABELS
DE_1
1 'Male'
2 'Female'/
DE_3
1 'Asian'
2 'Caucasian'.
# Variable labels
ODMXMLTools.spss_form_variable_labels(mdb, "FORM_DEAN_1"; variable = :SASFieldName)
VARIABLE LABELS
DE_1 'Sex'
DE_2 'Age'
DE_3 'Race'
AN_1 'Height'.
# Event value labels
ODMXMLTools.spss_events_value_labels(mdb; variable = "StudyEventOID", value = :OID, label = :Name)
VALUE LABELS
StudyEventOID
'SE_VIZIT1' 'Vizit 1'.