OpenClinica 使用者手冊/匯入資料
外觀
有時將資料匯入 OpenClinica 很有用。資料可以被修正,新增差異說明,並在匯入時被檢查,並且可以使用規則進行引用。
- 有時,將非 OpenClinica 資料視為單獨的資料流,在研究結束時與 OpenClinica 的資料合併(尤其是當它不需要在 OpenClinica 介面中修改時)會更省事。
- 有時手動輸入資料比匯入資料更快
- 根據你的監管制度,你可能需要在匯入資料之前驗證對資料的任何操作
- 根據匯入方法的不同,資料會以“已完成”狀態進入系統,但資料管理員使用者仍然可以將相同的資料上傳到現有資料的頂部。將記錄更改為“鎖定”並不能阻止資料被覆蓋。可能需要複雜的邏輯來避免覆蓋
- 匯入要求你在匯入檔案之前設定好受試者和預定訪問
- 匯入使用 CDISC ODM XML 檔案,這些檔案可能難以從 Excel、CSV 或你擁有的任何來源建立
- 建立 CDISC ODM XML 時需要獲取事件和 CRF 的 OID
- 匯入依賴於受試者的 SubjectKey(StudySubjectOID),它與他們的標準研究受試者 ID 不同,但以一致的方式變化。但是,如果他們的研究受試者 ID 發生了變化,那麼 SubjectKey 將依賴於他們最初不正確的研究受試者 ID。因此,你可能需要為 ID 輸入錯誤的受試者進行一些對映
OpenClinica.com 有關於如何匯入 CDISC ODM 格式 XML 檔案的文件。
該OpenClinica 維基 包含多個可用於匯入資料的匯入工具
從 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 
 Windows are 
-->
<xsl:variable name="lines" select="tokenize($csv, '
')" 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 最容易構建
- 需要重新組織資料,以使列標題具有正確的欄位名稱,並且每行中的第一項具有受試者名稱