Skip to contents

Reads a Define-XML 2.0/2.1 file and extracts dataset, variable, and derivation completeness checks into the standard evidence table format. Three indicators are evaluated for each asset:

Q-DEFINE-001

Dataset is present and has a non-empty label.

Q-DEFINE-002

Variable is documented (has label and dataType).

Q-DEFINE-003

Derivation text is present for derived variables.

Usage

define_xml_to_evidence(file, ctx, source_version = "2.1")

Arguments

file

Character. Path to a Define-XML file (.xml).

ctx

An r4sub_run_context providing run and study metadata.

source_version

Character. Version label for the Define-XML standard. Default: "2.1".

Value

A data.frame conforming to the evidence schema, one row per dataset-level check (Q-DEFINE-001), per variable check (Q-DEFINE-002), and per derivation check (Q-DEFINE-003).

Examples

# \donttest{
# Build a minimal Define-XML 2.1 document
xml_txt <- '<?xml version="1.0" encoding="UTF-8"?>
<ODM xmlns="http://www.cdisc.org/ns/odm/v1.3"
     xmlns:def="http://www.cdisc.org/ns/def/v2.1">
  <Study OID="STUDY001">
    <MetaDataVersion OID="MDV.001" Name="Define-XML 2.1">
      <def:ItemGroupDef OID="IG.ADSL" Name="ADSL" SASDatasetName="ADSL"
                        Repeating="No" Purpose="Analysis"
                        def:Label="Subject-Level Analysis Dataset">
        <ItemRef ItemOID="IT.ADSL.USUBJID" Mandatory="Yes"/>
        <ItemRef ItemOID="IT.ADSL.AGE" Mandatory="Yes"/>
      </def:ItemGroupDef>
      <ItemDef OID="IT.ADSL.USUBJID" Name="USUBJID"
               DataType="text" Length="20"
               SASFieldName="USUBJID">
        <Description><TranslatedText>Unique Subject Identifier</TranslatedText></Description>
      </ItemDef>
      <ItemDef OID="IT.ADSL.AGE" Name="AGE"
               DataType="integer" Length="8"
               SASFieldName="AGE">
        <Description><TranslatedText>Age</TranslatedText></Description>
        <def:Origin Type="Derived">
          <def:Description><TranslatedText>Derived from RFSTDTC</TranslatedText></def:Description>
        </def:Origin>
      </ItemDef>
    </MetaDataVersion>
  </Study>
</ODM>'
tmp <- tempfile(fileext = ".xml")
writeLines(xml_txt, tmp)
ctx <- r4sub_run_context("STUDY001", "DEV")
#>  Run context created: "R4S-20260316112306-vj57qv4a"
ev <- define_xml_to_evidence(tmp, ctx)
#>  Define-XML: found 0 dataset(s) (ItemGroupDef)
#>  Define-XML: found 2 variable definition(s) (ItemDef)
#> ! No ItemGroupDef elements found in Define-XML
#>  define_xml_to_evidence: 3 rows generated
#>  Evidence table created: 3 rows
nrow(ev)
#> [1] 3
# }