Flutter医疗数据路径处理插件fhir_path的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter医疗数据路径处理插件fhir_path的使用

FHIRPath

FHIRPath 是一个用于处理FHIR(Health Level Seven Information Systems)路径表达式的库。 你可以从 HL7 获取完整的规格说明。

功能性

如何使用

要使用此库,可以调用以下两个函数之一:

List r4WalkFhirPath(
  r4.Resource? resource,
  String pathExpression, [
  Map<String, dynamic>? passed,
]) {
  return walkFhirPath(resource?.toJson(), pathExpression, passed, FhirVersion.r4);
}

/// OR

List walkFhirPath(
  Map<String, dynamic>? resource,
  String pathExpression, [
  Map<String, dynamic>? passed,
  FhirVersion version = FhirVersion.r4,
]) {
}

这允许你直接调用 walkFhirPath 函数并传递你使用的FHIR版本,或者调用特定版本的函数,并将该版本传递给它。 这样,库就可以轻松地处理所有版本的FHIR。

  • 资源:是你要操作的主要资源(如果你直接调用 walkFhirPath,必须将其作为映射传递 - 调用资源的 .toJson() 方法)。
  • 路径表达式:将被评估并应用于资源的表达式。如果需要传递环境变量,请将其作为映射传递。通过键前加上 % 来表示环境变量:
    {
      '%pi': 3.1415,
      '%birthday': '1776/07/04'
    }
    
    • 传递的资源 将会添加到这个映射中作为 '%resource',所以不需要手动添加,但要注意这个键会存在,并且如果尝试传递不同的 '%resource',它会被覆盖。

待办事项(尚未支持的功能)

  • 跟踪
  • 反射
  • 系统.something (模型 - 查看链接)
  • 确认等价性工作正常
  • 修正一些“这是类型”的问题

结构注释

  • 当执行 FHIRParser 类时,任何结果都将是一个列表。
  • 在执行过程中,这将利用 FHIR 数据类型。
  • 然而,在执行完成后(递归执行并遍历树),列表中将只有值,不再有 FHIR 解析器。

使用 PetitParser

我个人发现 PetitParser 比 ANTLR 更方便使用于此库。然而,实际解析与分词(lexing)是分开进行的,因此如果将来有人想将其替换为 ANTLR,他们只需更换解析器即可,库仍能正常工作。

官方 FHIRPath 语法

查看官方 FHIRPath 语法


示例代码

import 'package:fhir_path/fhir_path.dart';

void main() {
  // 创建一个示例资源对象
  var patient = Patient.fromJson({
    "id": "123",
    "name": {"first": "John", "last": "Doe"},
    "gender": "male",
    "birthDate": "1980-01-01",
    "maritalStatus": {"code": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-MaritalStatusCode", "code": "MARR"}, {"display": "Married"}]}},
    "address": [
      {"use": "home", "type": "postal", "line1": "123 Main St", "city": "Anytown", "state": "CA", "zip": "12345"}
    ],
    "telecom": [
      {"system": "phone", "value": "+1234566333", "type": "mobile"}
    ]
  });

  // 定义路径表达式
  String pathExpression = '$patient.name.first';

  // 调用 walkFhirPath 函数
  List<dynamic> result = walkFhirPath(patient, pathExpression);

  // 输出结果
  print(result); // 输出: ['John']
}

更多关于Flutter医疗数据路径处理插件fhir_path的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter医疗数据路径处理插件fhir_path的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用fhir_path插件来处理医疗数据路径的示例代码。fhir_path是一个用于解析和评估FHIR(Fast Healthcare Interoperability Resources)路径表达式的库,常用于处理医疗数据。

首先,你需要在你的pubspec.yaml文件中添加fhir_path依赖:

dependencies:
  flutter:
    sdk: flutter
  fhir_path: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来是一个简单的示例,展示如何使用fhir_path来评估一个FHIR路径表达式:

import 'package:flutter/material.dart';
import 'package:fhir_path/fhir_path.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('FHIR Path Example'),
        ),
        body: Center(
          child: FhirPathExample(),
        ),
      ),
    );
  }
}

class FhirPathExample extends StatefulWidget {
  @override
  _FhirPathExampleState createState() => _FhirPathExampleState();
}

class _FhirPathExampleState extends State<FhirPathExample> {
  String resultText = '';

  void evaluateFhirPath() {
    // 示例JSON数据,代表一个FHIR资源(这里使用Patient资源作为示例)
    String jsonData = '''
    {
      "resourceType": "Patient",
      "id": "123",
      "name": [
        {
          "family": "Doe",
          "given": ["John"]
        }
      ],
      "gender": "male",
      "birthDate": "1980-01-01"
    }
    ''';

    // 解析JSON数据为Dart对象
    final jsonMap = jsonDecode(jsonData) as Map<String, dynamic>;

    // 创建一个FhirPathEvaluator
    final evaluator = FhirPathEvaluator();

    // 评估FHIR路径表达式
    final result = evaluator.evaluate(
      r'$.name[0].given[0]',  // 获取name[0].given[0]的值,即"John"
      jsonMap,
    );

    // 将结果设置为文本
    setState(() {
      resultText = result.toString();  // 应该输出"John"
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: evaluateFhirPath,
          child: Text('Evaluate FHIR Path'),
        ),
        Text(
          'Result: $resultText',
          style: TextStyle(fontSize: 20),
        ),
      ],
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了fhir_path依赖。
  2. 创建了一个简单的Flutter应用,包含一个按钮和一个文本显示区域。
  3. 在按钮点击事件中,解析了一个JSON格式的FHIR资源(这里是一个Patient资源)。
  4. 使用FhirPathEvaluator来评估一个FHIR路径表达式$.name[0].given[0],该表达式用于获取患者的名字(即"John")。
  5. 将评估结果设置为文本显示区域的内容。

请注意,这个示例中使用的JSON数据和FHIR路径表达式是硬编码的,实际应用中你可能会从服务器或其他数据源获取这些数据,并动态生成路径表达式。

希望这个示例能够帮助你理解如何在Flutter中使用fhir_path插件来处理医疗数据路径。

回到顶部