【发布时间】:2022-02-10 17:12:50
【问题描述】:
这是我第一次涉足 XML。我正在尝试理解基于Java的XML管道处理结构,但是我对XPath的使用有点困惑。基本的缩写结构如下。特别是,我正试图围绕 XNAT 数据库的pipeline schema。
<Pipeline>
<documentation>
<author>
</author>
<input-parameters>
<parameter>
<name>example_parameter</name>
<values><schemalink>xnat:imageSessionData/ID</schemalink></values>
</parameter>
</input-parameters>
</documentation>
<outputFileNamePrefix>^concat(/Pipeline/parameters/parameter[name='workdir']/values/unique/text(),'/DicomToNifti')^</outputFileNamePrefix>
<loop id="series" xpath="^/Pipeline/parameters/parameter[name='scanids']/values/list^"/>
<parameters>
<parameter>
<name>workdir</name>
<values>
<unique>^concat(/Pipeline/parameters/parameter[name='builddir']/values/unique/text(),'/',/Pipeline/parameters/parameter[name='sessionId']/values/unique/text())^</unique>
</values>
</parameter>
</parameters>
</Pipeline>
如果我理解正确,<outputFileNamePrefix> 元素正在使用 XPath 来选择 workdir 参数的值...它本身似乎是与名称为 builddir 的类似参数略有不同的 XPath 表达式,但该参数似乎不存在于管道架构中的任何地方......整个项目可能有点过于复杂,无法包含在堆栈交换问题中,但也许有人可以指出我正确的方向......
同样,上面的代码已被缩写。完整的.xml 可以在here找到。
【问题讨论】:
-
我不知道 XNAT 是什么,它的网站也没有试图对还不知道它是什么的人有用。 (我从 SO 标签扩展中获得的信息比其他任何东西都多)。关键是要理解这个 XML 或任何 XML,您需要结合直觉和文档。是的,这个 XML 看起来很像使用 XPath 表达式以某种方式从文档的一部分链接到另一部分。除此之外,你的猜测和我的一样好。你的问题到底是什么?
-
XNAT 是一个使用 postgres 组织和存储图像的 webapp 数据库。它还有一个基于 java 的引擎来执行这些管道(上传图像时自动执行的操作),在这种情况下,这里的目标是从一种图像格式转换为另一种图像格式。管道引擎以某种方式使用 XML 来构建字符串,与您在命令行中键入以手动进行转换的内容相同......我想明确的问题是:我应该在哪里寻找
builddir? -
也许更好的问题是“这个 XPath 表达式解析到什么?”
^concat(/Pipeline/parameters/parameter[name='builddir']/values/unique/text(),'/',/Pipeline/parameters/parameter[name='sessionId']/values/unique/text())^ -
好吧,如果根据本文档进行评估,那么它会评估为字符串“/”,这可能是也可能不是预期的,但它的含义是任何人的猜测。 (但您说您对文档进行了缩写,所以您可能遗漏了重要的内容。)
-
我链接了完整的文档。但即便如此,我在完整的 Pipeline XML 中也没有看到任何
为 builddir或sessionId的,所以我倾向于同意它应该解析为“/”......是,这个管道实际上是在工作实现中,这就是为什么我很困惑......是否可以针对不同的文档评估该表达式?