(文档)包条目是否总是必须被引用或引用?
Do (document) bundle entries always have to be referenced or referencing?
FHIR 文档的规范似乎要求文档资源中的所有包条目都是以组合条目为根的参考图的一部分。也就是说,它们应该是一直追溯到根条目的引用关系的源或目标。
遗憾的是,我未能在 FHIR 规范中找到所有相关段落;在 3.3.1 Document Content 中有一个地方详细说明了这一点,但并不清楚这是否适用于 所有 类型 'document' 的捆绑包(即,即使是那些发生的与类型代码 'document' 捆绑在一起,但仅仅是机器可处理数据的集合,没有任何代表 FHIRy 文档的愿望。
引用要求的问题在于 HAPI 验证器使用线性搜索来检查引用。因此,如果我们必须将 N 个充满数据的捆绑条目发送给付款人,我们必须包含一个包含 N 个引用的列表(每个包含数据的捆绑条目一个)。这导致在验证期间以 O(N) 的努力进行 N 次参考搜索,这使得参考检查的复杂性实际上是条目数量的二次方。
即使是最强大的计算机也很容易崩溃。当前的大小限制有效地将每个文件的条目数限制在大约 25000,并且 HAPI 验证器需要 几个小时 来消化它,即使在当前可用的最强大的 CPU 上也是如此。如果没有引用,同一文件的验证时间不到一分钟。
在我们的用例中,数据承载条目在包含包文件之外没有标识。实际上,他们既不需要 entry.fullUrl
也不需要 entry.resource.id
,因为他们的业务标识符包含在包含的 base64 blob 中。然而,这些标识符的存在与否对验证所需的时间没有实际影响(即使是 1 GB 的文件也只有几分之一秒),所以谁在乎呢。这是杀死 HAPI 验证器的引用列表。
也许可以通过使所有条目都包含对作品的引用来满足引用要求的字母。 HAPI 验证器不关心任何一种方式,所以我不知道这是否有效。但即使它在 FHIR 上有效,它也将是一个极其愚蠢的解决方法。
有没有办法放弃引用要求?也许通过将包类型更改为 'collection' 之类的东西,或者通过使用 contained
资源?
P.S.: 目前我们正在使用一种解决方法,将验证时间从几小时缩短到不到一分钟,但这是一种 hack,我们目前没有资源来修复HAPI 验证器。我最关心的是需要如何更改规范(配置文件)以避免我描述的问题。
(i.e. even those that happen to be bundles with type code 'document' but are merely collections of machine-processable data without any aspirations to represent a FHIRy document)
如果它不是文档,也无意成为文档,请不要使用 'document' 捆绑包类型。如果这样做,您会误报 FHIR 试图避免的数据。
好像是想发一个没有必然联系的资源集合,所以
Is there a way to ditch the referencedness requirement? Perhaps by changing the bundle type to something like 'collection'
是的,我会使用 'collection',或者 'batch/transaction',具体取决于我要告诉接收方如何处理数据。
文档页面说:
The document bundle SHALL include only:
- The Composition resource, and any resources directly or indirectly (e.g. recursively) referenced from it
- A Binary resource containing a stylesheet (as described below)
- Provenance Resources that have a target of Composition or another resource included in the document
文档是一组冻结的内容,旨在作为经过验证的 human-readable 冻结的内容集。如果这不是您需要的,请使用不同的 Bundle 类型。但是,如果您 需要 'document' 类型,这并不意味着系统必须在运行时验证所有需求
FHIR 文档的规范似乎要求文档资源中的所有包条目都是以组合条目为根的参考图的一部分。也就是说,它们应该是一直追溯到根条目的引用关系的源或目标。
遗憾的是,我未能在 FHIR 规范中找到所有相关段落;在 3.3.1 Document Content 中有一个地方详细说明了这一点,但并不清楚这是否适用于 所有 类型 'document' 的捆绑包(即,即使是那些发生的与类型代码 'document' 捆绑在一起,但仅仅是机器可处理数据的集合,没有任何代表 FHIRy 文档的愿望。
引用要求的问题在于 HAPI 验证器使用线性搜索来检查引用。因此,如果我们必须将 N 个充满数据的捆绑条目发送给付款人,我们必须包含一个包含 N 个引用的列表(每个包含数据的捆绑条目一个)。这导致在验证期间以 O(N) 的努力进行 N 次参考搜索,这使得参考检查的复杂性实际上是条目数量的二次方。
即使是最强大的计算机也很容易崩溃。当前的大小限制有效地将每个文件的条目数限制在大约 25000,并且 HAPI 验证器需要 几个小时 来消化它,即使在当前可用的最强大的 CPU 上也是如此。如果没有引用,同一文件的验证时间不到一分钟。
在我们的用例中,数据承载条目在包含包文件之外没有标识。实际上,他们既不需要 entry.fullUrl
也不需要 entry.resource.id
,因为他们的业务标识符包含在包含的 base64 blob 中。然而,这些标识符的存在与否对验证所需的时间没有实际影响(即使是 1 GB 的文件也只有几分之一秒),所以谁在乎呢。这是杀死 HAPI 验证器的引用列表。
也许可以通过使所有条目都包含对作品的引用来满足引用要求的字母。 HAPI 验证器不关心任何一种方式,所以我不知道这是否有效。但即使它在 FHIR 上有效,它也将是一个极其愚蠢的解决方法。
有没有办法放弃引用要求?也许通过将包类型更改为 'collection' 之类的东西,或者通过使用 contained
资源?
P.S.: 目前我们正在使用一种解决方法,将验证时间从几小时缩短到不到一分钟,但这是一种 hack,我们目前没有资源来修复HAPI 验证器。我最关心的是需要如何更改规范(配置文件)以避免我描述的问题。
(i.e. even those that happen to be bundles with type code 'document' but are merely collections of machine-processable data without any aspirations to represent a FHIRy document)
如果它不是文档,也无意成为文档,请不要使用 'document' 捆绑包类型。如果这样做,您会误报 FHIR 试图避免的数据。 好像是想发一个没有必然联系的资源集合,所以
Is there a way to ditch the referencedness requirement? Perhaps by changing the bundle type to something like 'collection'
是的,我会使用 'collection',或者 'batch/transaction',具体取决于我要告诉接收方如何处理数据。
文档页面说:
The document bundle SHALL include only:
- The Composition resource, and any resources directly or indirectly (e.g. recursively) referenced from it
- A Binary resource containing a stylesheet (as described below)
- Provenance Resources that have a target of Composition or another resource included in the document
文档是一组冻结的内容,旨在作为经过验证的 human-readable 冻结的内容集。如果这不是您需要的,请使用不同的 Bundle 类型。但是,如果您 需要 'document' 类型,这并不意味着系统必须在运行时验证所有需求