- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 sql 和基于实体值属性的数据库设计实现了树结构查询机制。我想通过基于 XQuery 的方法查看相同功能的性能,假设可以使用 XQuery 完成任务。我的树(XLM文档)的简化形式如下:
有不同类型的节点,但我在查询中使用的唯一属性是节点的 archetype_node_id 属性。我尝试编写的测试查询旨在选择具有 2 个元素节点的评估节点(在右侧)。查询实现需要所用语言的两个关键功能:支持结构定义的能力(使用 bool 运算符),以及为节点属性(在本例中为 xml 属性)定义约束的能力。
使用 XQuery,我有两个问题1)我似乎无法设法声明对所有感兴趣节点的引用,即我在图中感兴趣的任何节点2) 我无法弄清楚如何返回匹配项,因为这棵树右侧的匹配项将具有一个具有评估的组合,而该组合又具有两个元素。
这是我第一次尝试使用 FLWR:
for $composition in doc("composition-visit.xml")//element()
let $evaluation := (
for $evalsneeded in $composition//element()
let $elementat02 :=
(for $el02 in $evalsneeded//element()
where $el02/@archetype_node_id = 'at0002'
and exists($evalsneeded//$el02)
return $el02
),
$elementat03 :=
(for $el03 in $evalsneeded//element()
where $el03/@archetype_node_id = 'at0003'
and exists($evalsneeded//$el03)
return $el03
)
where $evalsneeded/@archetype_node_id = 'openEHR-EHR-EVALUATION.goal.v1'
and
exists ($evalsneeded//$elementat02)
and
exists ($evalsneeded//$elementat03)
return $evalsneeded)
where $composition/@archetype_node_id = 'openEHR-EHR-COMPOSITION.encounter.v1'
and exists($composition//$evaluation)
return $evaluation/@archetype_node_id/string(.)
我的问题是我最终将评估和元素节点推送到子查询,因为如果我将它们作为全局变量引入到主 FLOWR 主体中,基于它们的属性值和位置的过滤将不起作用。
在返回结果时我更加无能为力,但我不想为此单独提出问题。
理想情况下,当我对具有 at0002 和 at0003 代码的元素的评估执行 AND 约束时,我应该得到树的右侧,如果我对相同的元素使用 OR 约束,我应该得到整棵树。
这对 XQuery 可行吗?它用于测试我在树中寻找的结构是否存在,但我也想访问单个节点。
更新:这是我的第二次尝试。这实际上打开了我一直试图做的事情的大门,但我不确定这是否是在 XQuery 中执行此操作的正确方法。我应该问另一个问题来改进这种方法吗? :
<result>
{
for $composition in doc("composition-visit.xml")//element()
where $composition/@archetype_node_id = 'openEHR-EHR-COMPOSITION.encounter.v1'
return <composition>
<name>{$composition/name/value/string(.)}</name>
<evaluation>{for $eval in $composition//element()
let $el1 := (for $el1_in_eval in $eval//element()
where $el1_in_eval/@archetype_node_id = 'at0002'
return $el1_in_eval ),
$el2 := (for $el2_in_eval in $eval//element()
where $el2_in_eval/@archetype_node_id = 'at0003'
return $el2_in_eval )
where $eval/@archetype_node_id = 'openEHR-EHR-EVALUATION.goal.v1'
and
(exists($el1)
and
exists($el2)
)
return <eval>
<name>{$eval/name/value/string(.)}</name>
<element1>{for $element1 in $eval//element()
where $element1/@archetype_node_id = 'at0002'
return $element1}</element1>
<element2>{for $element2 in $eval//element()
where $element2/@archetype_node_id = 'at0003'
return $element2}</element2>
</eval>
}</evaluation>
</composition>
}
</result>
基本上,我用 let 语句强制执行父/子关系,并使用 return 获取 let 的相应匹配项的值,这反过来可能会在树下执行相同的操作。
最佳答案
看起来您的用例正在查询“原型(prototype)”openEHR 数据。
欢迎查看开源 https://github.com/LiU-IMT/EEE将 xQuery 用于类似于您的用例的请求,但数据建模有点不同。
它用于例如在论文中http://www.ep.liu.se/ecp/070/009/ecp1270009.pdf您可以在其中找到一个查询示例,该示例返回在 2006 年 1 月 1 日至 2006 年 5 月 1 日期间具有指示肿瘤病变的组织学检查结果的所有记录 ID。
在AQL(Archetype Query Language)中表示为...
SELECT e/ehr_id/value as ehr_id
FROM Ehr e
CONTAINS VERSION v
CONTAINS COMPOSITION c [openEHR-EHR-COMPOSITION.histologic_exam.v1]
CONTAINS OBSERVATION obs [openEHR-EHR- OBSERVATION.histological_exam_result.v1]
WHERE (EXISTS obs/data[at0001]/events[at0002]/data[at0003]/items[at0085]/items[at0033]/items[at0034]
OR
EXISTS obs/data[at0001]/events[at0002]/data[at0003]/items[at0085]/items[at0033]/items[at0035])
AND c/context/start_time/value >= '2006-01-01T00:00:00,000+01:00'
AND c/context/start_time/value < '2006-05-01T00:00:00,000+01:00'`
...当自动解析并转换为 XQuery 时,它看起来像这样:
declare namespace v1 = "http://schemas.openehr.org/v1";
declare default element namespace "http://schemas.openehr.org/v1";
declare namespace xsi = "http://www.w3.org/2001/XMLSchema-instance";
declare namespace eee = "http://www.imt.liu.se/mi/ehr/2010/EEE-v1.xsd";
declare namespace res = "http://www.imt.liu.se/mi/ehr/2010/xml-result-v1#";
<res:xml-results>
<res:head><res:variable name="ehr_id"/></res:head>
<res:results>
{let $ehrRoot := //eee:EHR
for $e in $ehrRoot
for $v in $e/eee:versioned_objects/eee:versions
for $c in $v//*[@xsi:type='v1:COMPOSITION' and @archetype_node_id="openEHR-EHR-COMPOSITION.histologic_exam.v1"]
for $obs in $c//*[@xsi:type='v1:OBSERVATION' and @archetype_node_id= "openEHR-EHR-OBSERVATION.histological_exam_result.v1"]
where
(
exists($obs/data[@archetype_node_id = 'at0001']/events[@archetype_node_id = 'at0002']/data[@archetype_node_id='at0003']/items[@archetype_node_id = 'at0085']/items[@archetype_node_id = 'at0033']/items[@archetype_node_id = 'at0034'])
or
exists($obs/data[@archetype_node_id = 'at0001']/events[@archetype_node_ id = 'at0002']/data[@archetype_node_id = 'at0003']/items[@archetype_node_id = 'at0085']/items[@archetype_node_id = 'at0033']/items[@archetype_node_id = 'at0035'])
)
and
$c/context/start_time/value >= '2006-01-01T00:00:00,000+01:00'
and
$c/context/start_time/value < '2006-05-01T00:00:00,000+01:00'
return
<res:result><res:binding name="ehr_id">{$e/eee:ehr_id/value}</res:binding></res:result>}
</res:results>
</res:xml-results>
此模式也值得在您的用例中尝试。有关解决方案和上下文的更多详细信息,请参阅论文 http://www.biomedcentral.com/1472-6947/13/57
关于tree - XQuery可以支持树结构查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016143/
我正在扩展 baseClass 监听器并尝试读取一些值,但是顺序中似乎没有任何层次结构。 我的语法的精简版如下: start: config_options+ config_options: (KEY
XML文档是一种树形结构,它从 根部 开始,然后扩展到 枝叶 一个 XML 文档范例 XML文档使用的是简单的具有自我描述性的语法 我们拿之间的小红写给小明的情书作为范例 <?xml v
要了解我想做什么,这里有一个简单的解释:我想创建模板。 一个"template"有一个“面板”这个“面板”有一些“项目”和另一个“面板”我们必须一步一步地做,直到最后一个“Item” 我想要这样的东西
我的数据结构如下。 A A1 A2 B B1 C C1 C2 C3 这些信息转移到两个名为group1和group2的表中。 group1有第一层数据和中间层数据。 gro
所以我有一个如下所示的树结构,其中我在叶节点中有一个计数属性。我想总结计数并将计数总和与其父项进行比较。比 parent1 和 parent2 有他们的 child 的总和。然后从那里继续,所以 gr
我有以下 json : var jsonObj = [ { "parentIndex": '0' ,
我正在尝试创建一个包含任意数量子类别的类别列表,其中子类别也可以有自己的子类别。 我从 Mysql 数据库中选择了所有类别,猫在标准关联数组列表中,每个类别都有一个 id、名称、parentid,如果
我想动态构建层次结构,每个节点创建为层次结构中的一个层/级别,具有自己的节点数组。这应该形成一个树结构。应该有一个根节点,以及未定义数量的节点和级别来构成层次结构大小。除了根节点之外,什么都不应该被修
我正在浏览 Wikitravel API,我注意到他们提供的 XML 文件只是将所有信息集中在一个大 blob 中。示例:http://wikitravel.org/en/Special:Export
我正在尝试设置一个UITableView来显示嵌套的线程项目。我正在使用 Core Data 和 NSFetchedResultsController,但不确定我的方法应该是什么。我想显示这样的信息:
我有一个这样的表数据库: tree{id,name,parent}content{id,content,parent}tree 表包含一个树状结构,如果 parent 是 0,它是顶级元素,如果不同,
我有一个像这样的 json 对象数组: [{ "vehicleid": 3, "name": "Teste2VDD", "brand": "Scania", "mode
我有一个 json 树结构,通过按此 fiddle 上的调用来附加该结构:http://jsfiddle.net/adrianjsfiddlenetuser/C6Ssa/4/ 按 fiddle 上的调
我需要使用 prefuse 可视化一个 xml 文件,但由于其大小,我必须一次仅加载文件的一部分,并将它们表示为 prefuse 中的树结构。我设法加载并可视化第一棵树,其中包含所有 xml 元素的深
我有一个包含如下数据的文件: ID attribute 1 'text' 101 'text' 1011 'text' 10111 'text' 1011101 'text' 1011102 'tex
这是我的数据结构: { projects: [ { revisions: [ { files: [] }, ], } ], us
我有一个列表需要转换成json格式。 这个.. var sourceList = [ { title: "item-1", indent: "0" }, { title: "item-
我希望我的内容有一个树/文件夹结构,但希望所有页面都作为一个平面 URL。例如 位于/cat1/subcat2/tulips.html 的页面将在以下位置提供: http://example.com/
简单来说 我有一个由对象组成的树结构。 是否可以构建该树并向每个对象添加对其父对象的引用? 我知道引用适用于对象,但我不确定在这种情况下是否有效? 我希望能够写出这样的东西 currentLevel
我创建了一个涉及学校学生的项目。当我开始构建这个项目时,我遇到了三个主要问题: 1)推荐或更好的 JSON 树结构? schools grades users(uids) in
我是一名优秀的程序员,十分优秀!