OpenClinica 用户手册/使用 Excel 写规则
如果您要编写多个规则,并且不想设置规则设计器应用程序,则可以使用 Excel 2010 中提供的 xml 工具来简化操作。这种方法利用了 OpenClinica 的 xsd 模式来验证规则 xml 文件,从而指导 Excel 提供一个用于处理规则 xml 数据的界面。
这种方法最适合 DiscrepancyNote 或 EmailAction 规则操作类型,因为它们没有可重复的子节点。但是,这两种操作类型是最常见的,处理大量规则是使用这种方法的主要原因。它还限于每个目标一个规则操作,因为 OpenClinica 规则验证器要求具有相同目标的 RuleRefs 必须分组在同一个 RuleAssignment 节点中。一个用于在 Excel 所需格式(没有分组)和 OpenClinica 所需格式(分组)之间转换的 xsl 变换 可以在此处找到。
对于其他操作类型,每个子节点(通常是一组 DestinationProperty 节点)都需要写为单独的规则分配,因为 Target 和 RuleRef OID 需要与规则操作节点位于同一表中。这是否会对 OpenClinica 行为产生任何负面影响尚未经过测试,主要是因为为每种操作类型创建单独的规则定义更容易维护,即使这意味着偶尔会有一些重复的规则定义。
- 复制 tomcat/openclinica.data/rules/rules.xsd 文件(或者从 源文件 中获取)。
- 将 RuleRef 元素和所有 RuleRefType 元素的 'maxOccurs="unbounded"' 更改为 'maxOccurs="1"'(下面显示相关代码片段)。这使 Excel 能够以正确格式导出数据。否则,Excel 将拒绝导出并抱怨数据是“列表的列表”。
<xs:element name="RuleAssignment" type="RuleAssignmentType"/>
<xs:complexType name="RuleAssignmentType"><xs:sequence>
<xs:element ref="Target"/>
<xs:element ref="RuleRef" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="RuleRef" type="RuleRefType"/>
<xs:complexType name="RuleRefType">
<xs:sequence>
<xs:element ref="DiscrepancyNoteAction" minOccurs="0" maxOccurs="1"/>
<xs:element ref="EmailAction" minOccurs="0" maxOccurs="1"/>
<xs:element ref="ShowAction" minOccurs="0" maxOccurs="1"/>
<xs:element ref="HideAction" minOccurs="0" maxOccurs="1"/>
<xs:element ref="InsertAction" minOccurs="0" maxOccurs="1"/>
<xs:element ref="EventAction" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attributeGroup ref="RuleRefAttributeType"/>
</xs:complexType>
- 创建一个新的空白 Excel 电子表格
- 转到“开发工具”选项卡并找到“XML”组(如果选项卡不存在,请转到“文件”->“选项”->“自定义功能区”并勾选“开发工具”)。
- 点击“源”。
- 在“XML 源”窗口中,点击“XML 映射”。
- 点击“添加”。
- 从之前的步骤中选择已编辑的 rules.xsd 文件。
- 在“多个根”窗口中,选择 RuleImport 作为根节点。
- 点击“确定”。
- 现在应该在“XML 源”窗口中显示一个 RuleImport_Map 树。
- Ctrl+点击选择 Target-value、RuleRef-OID 和所需的 Action 节点。
- 将所选内容拖放到电子表格上,这将创建一个表。
- 选择 RuleDef 节点。
- 将其拖放到电子表格上,至少留出一个列空间。这将创建第二个表。
现在电子表格上应该有两个表,一个用于 RuleAssignment 详细信息,一个用于 RuleDef 详细信息。这些表可以独立排序/过滤,并且行数可以不同。最重要的是,为了使 OpenClinica 的规则有效,每个 RuleAssignment 都需要引用一个 RuleDef。
根据需要在两个表中输入规则详细信息(请参阅此维基教科书中的其他文章以获取相关提示)。准备好上传到 OpenClinica 时,在“开发工具”选项卡中的“XML”组中,点击“导出”并为 xml 文件选择一个文件名。如果映射正确完成,导出的 xml 文件将以正确的格式进行上传。
如果需要,Excel 可以在导出步骤中根据 xsd 模式验证规则数据。在“开发工具”选项卡中的“XML”组中,点击“映射属性”,然后在导出之前勾选“验证导入和导出时的数据是否符合模式”。验证步骤将发现结构性问题,例如数据类型错误(布尔字段必须为小写 'true' 或 'false' 等)或缺少必填字段。验证步骤不会检查内容,例如规则表达式、规则目标等,因为从 xsd 的角度来看,它们可以是任何字符串(但这会在上传到 OpenClinica 时进行检查)。
可以将从 OpenClinica 下载的现有规则 xml 文件导入到按上述方式设置的电子表格中。在“开发工具”选项卡中的“XML”组中,点击“导入”,然后选择要处理的规则 xml 文件。规则详细信息将填充映射的表。
如果导入的规则文件中包含未映射到电子表格的操作类型,则规则定义节点将显示,但这些未映射类型的规则操作节点将不会显示,因为没有为它们创建列。但是,可以按照上述方式进行映射。