跳轉至內容

OpenClinica 使用者手冊/匯入資料

來自華夏公益教科書

匯入資料

[編輯 | 編輯原始碼]

有時將資料匯入 OpenClinica 很有用。資料可以被修正,新增差異說明,並在匯入時被檢查,並且可以使用規則進行引用。

你不應該這麼做的原因(主要是便利性)

[編輯 | 編輯原始碼]
  1. 有時,將非 OpenClinica 資料視為單獨的資料流,在研究結束時與 OpenClinica 的資料合併(尤其是當它不需要在 OpenClinica 介面中修改時)會更省事。
  2. 有時手動輸入資料比匯入資料更快
  3. 根據你的監管制度,你可能需要在匯入資料之前驗證對資料的任何操作
  4. 根據匯入方法的不同,資料會以“已完成”狀態進入系統,但資料管理員使用者仍然可以將相同的資料上傳到現有資料的頂部。將記錄更改為“鎖定”並不能阻止資料被覆蓋。可能需要複雜的邏輯來避免覆蓋

使用標準匯入的困難

[編輯 | 編輯原始碼]
  1. 匯入要求你在匯入檔案之前設定好受試者和預定訪問
  2. 匯入使用 CDISC ODM XML 檔案,這些檔案可能難以從 Excel、CSV 或你擁有的任何來源建立
  3. 建立 CDISC ODM XML 時需要獲取事件和 CRF 的 OID
  4. 匯入依賴於受試者的 SubjectKey(StudySubjectOID),它與他們的標準研究受試者 ID 不同,但以一致的方式變化。但是,如果他們的研究受試者 ID 發生了變化,那麼 SubjectKey 將依賴於他們最初不正確的研究受試者 ID。因此,你可能需要為 ID 輸入錯誤的受試者進行一些對映

如何操作

[編輯 | 編輯原始碼]

OpenClinica.com 有關於如何匯入 CDISC ODM 格式 XML 檔案的文件

OpenClinica 維基 包含多個可用於匯入資料的匯入工具

使用 XSLT 將 CSV 轉換為 CDISC ODM XML

[編輯 | 編輯原始碼]

從 CSV 檔案(Microsoft Excel 可以儲存為這種格式)生成 CDISC ODM XML 的一種方法是使用 XSLT 解析器,例如 Kernow,使用定製的 XSLT 轉換來解析 CSV。

一個示例 CSV 檔案(帶有 SubjectKeys: SS_S001 和 SS_S002,ITEM_NAMES: I_APFIN_LBISOPROSTANES 和 I_APFIN_LBOXLDL)

,I_APFIN_LBISOPROSTANES,I_APFIN_LBOXLDL
SS_S001,10,20
SS_S002,30,40

用於匯入的 XSLT 轉換

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:fn="fn"
	exclude-result-prefixes="xs fn">

  <xsl:output indent="yes" encoding="UTF-8"/>
  <!-- update this with the path to your csv file -->
  <xsl:param name="pathToCSV" select="'file:///C:/Test/FinalBlood.csv'"/>

  <xsl:function name="fn:getTokens" as="xs:string+">
    <xsl:param name="str" as="xs:string"/>
    <xsl:analyze-string select="concat($str, ',')" regex='(("[^"]*")+|[^,]*),'>
      <xsl:matching-substring>
        <xsl:sequence select='replace(regex-group(1), "^""|""$|("")""", "$1")'/>
      </xsl:matching-substring>
    </xsl:analyze-string>
  </xsl:function>

  <xsl:template match="/" name="main">
    <xsl:choose>
      <xsl:when test="unparsed-text-available($pathToCSV)">
        <xsl:variable name="csv" select="unparsed-text($pathToCSV)"/>
        <!--UNIX line endings are &#xa; Windows are &#xd;&#xa;-->
        <xsl:variable name="lines" select="tokenize($csv, '&#xd;&#xa;')" as="xs:string+"/>
        <xsl:variable name="elemNames" select="fn:getTokens($lines[1])" as="xs:string+"/>
        <ODM xmlns="http://www.cdisc.org/ns/odm/v1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.cdisc.org/ns/odm/v1.3 ODM1-3.xsd" ODMVersion="1.3" FileOID="1D20080412202420" FileType="Snapshot" Description="First dataset for testing of ODM" CreationDateTime="2008-04-12T20:24:20" >
          <!-- update this with your StudyOID -->
          <ClinicalData StudyOID="S_2009CV16" MetaDataVersionOID="v1.0.0">
            <xsl:for-each select="$lines[position() > 1]">
              <xsl:variable name="lineItems" select="fn:getTokens(.)" as="xs:string+"/>
              <xsl:if test="$lineItems[1] != string()">
              <SubjectData><xsl:attribute name="SubjectKey"><xsl:value-of select="$lineItems[1]"/></xsl:attribute>
                <!-- update these OIDs with your StudyEventOID, FormOID (a specific version) and ItemGroupOID-->
                <StudyEventData StudyEventOID="SE_APFINALBLOODS" >
                  <FormData FormOID="F_APFINALBLOOD_V01">
                    <ItemGroupData ItemGroupOID="IG_APFIN_UNGROUPED" TransactionType="Insert" >
                      <xsl:for-each select="$elemNames[position() > 1]">
                        <xsl:variable name="pos" select="position()"/>
                        <ItemData><xsl:attribute name="ItemOID"><xsl:value-of select="$elemNames[$pos+1]"/></xsl:attribute><xsl:attribute name="Value"><xsl:value-of select="$lineItems[$pos+1]"/></xsl:attribute></ItemData>
                      </xsl:for-each>
                    </ItemGroupData>
                  </FormData>
                </StudyEventData>
              </SubjectData>
                </xsl:if>
            </xsl:for-each>
          </ClinicalData>
        </ODM>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>Cannot locate : </xsl:text>
        <xsl:value-of select="$pathToCSV"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>

這將建立以下 CDISC ODM XML 檔案

<?xml version="1.0" encoding="UTF-8"?>
<ODM xmlns="http://www.cdisc.org/ns/odm/v1.3"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.cdisc.org/ns/odm/v1.3 ODM1-3.xsd"
     ODMVersion="1.3"
     FileOID="1D20080412202420"
     FileType="Snapshot"
     Description="First dataset for testing of ODM"
     CreationDateTime="2008-04-12T20:24:20">
   <ClinicalData StudyOID="S_2009CV16" MetaDataVersionOID="v1.0.0">
      <SubjectData SubjectKey="SS_S001">
         <StudyEventData StudyEventOID="SE_APFINALBLOODS">
            <FormData FormOID="F_APFINALBLOOD_V01">
               <ItemGroupData ItemGroupOID="IG_APFIN_UNGROUPED" TransactionType="Insert">
                  <ItemData ItemOID="I_APFIN_LBISOPROSTANES" Value="40"/>
                  <ItemData ItemOID="I_APFIN_LBOXLDL" Value="30"/>
               </ItemGroupData>
            </FormData>
         </StudyEventData>
      </SubjectData>
      <SubjectData SubjectKey="SS_S002">
         <StudyEventData StudyEventOID="SE_APFINALBLOODS">
            <FormData FormOID="F_APFINALBLOOD_V01">
               <ItemGroupData ItemGroupOID="IG_APFIN_UNGROUPED" TransactionType="Insert">
                  <ItemData ItemOID="I_APFIN_LBISOPROSTANES" Value="20"/>
                  <ItemData ItemOID="I_APFIN_LBOXLDL" Value="10"/>
               </ItemGroupData>
            </FormData>
         </StudyEventData>
      </SubjectData>
   </ClinicalData>
</ODM>

然後根據 OpenClinica 的匯入資料文件匯入檔案。

此方法的侷限性

[編輯 | 編輯原始碼]
  • 轉換到 XML 的步驟僅在資料中沒有換行符(因此沒有多行文字欄位)時才能正常工作。
  • 輸入中的 XML 字元(如 < 和 >)會導致問題。
  • 更改模板或使用不同的轉換工具(例如 http://servingxml.sourceforge.net/)可能可以避免這些問題。
  • 如果所有資料都屬於同一 CRF 中的同一事件,則 XML 最容易構建
  • 需要重新組織資料,以使列標題具有正確的欄位名稱,並且每行中的第一項具有受試者名稱
華夏公益教科書