编辑我改写了我的问题,以便在与Tony谈话之后让它更容易理解(谢谢!).
目标在同一图表中渲染多个折线图(假设为2).图表具有不同的x/y值对.对于一个x值,我不知道两个y值.
我正在使用Silverlight.可用的课程是SerialChart和LineGraph.两个图的数据源相同,并在该SerialChart级别设置.两个graph(CategoryValueMemberPath)也定义了x轴的属性名称.
正如amCharts文档所建议的那样,我们需要创建具有类别轴(x轴)属性的对象,然后每个图形创建一个属性.我们称它们为"Graph1"和"Graph2".所以数据源看起来像这样:
List<MyClass> data = new List<MyClass>()
{
new MyClass() { Category = 0.1, Graph1 = 0.14, Graph2 = ??? }
,new MyClass() { Category = 0.15, Graph1 = ???, Graph2 = 0.05 }
,new MyClass() { Category = 0.2, Graph1 = 0.35, Graph2 = ??? }
,new MyClass() { Category = 0.18, Graph1 = ???, Graph2 = 0.12 }
... and so on ...
}
Run Code Online (Sandbox Code Playgroud)
问题关于"???"我该怎么办?值?我没有该类别值的该图表的实际值. …
我们想模拟"某些东西不在那里",而不是缺少信息,例如"患者未接受化疗"或"患者没有呼吸困难"的明确陈述与缺少患者是否有患者的信息不同呼吸困难.
我们考虑了几种方法,例如
使用空白节点描述个人属于没有呼吸困难的事物组.例如:
dat:PatientW2 a [ rdf:type owl:Class;
owl:complementOf [
rdf:type owl:Restriction ;
owl:onProperty roo:has_finding;
owl:someValuesFrom nci:Dyspnea;
]
] .
Run Code Online (Sandbox Code Playgroud)我们觉得第三种选择是表达这一点的最"本体论正确"的方式.但是,在使用它时,我们在简单的场景中遇到了严重的性能问题.
我们将Sesame与OWLIM-Lite商店一起使用,并将NCI词库(280MB,大约80,000个概念)和另一个非常小的本体导入商店,并添加了两个人,一个具有该补充/限制类.
以下查询永远执行,我在15分钟后终止它:
select *
where {
?s a [ rdf:type owl:Class;
owl:complementOf [
rdf:type owl:Restriction ;
owl:onProperty roo:has_finding;
owl:someValuesFrom nci:Dyspnea;
]
] .
} Limit 100
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?我会假设这种方法会创建大量空白节点,并且查询引擎必须通过整个NCI词库并将所有空白节点与此进行比较?
如果我将此三元组放在单独的图形中并且仅查询该图形,则查询会立即返回结果.
总结一下.这两个基本问题是:
编辑1
我们讨论了提议的选项.它实际上帮助我们澄清了我们真正想要实现的目标:
我们希望能够在特定时间点陈述"患者有呼吸困难"或"患者没有呼吸困难".
在将来,可能/将会有关于该患者的更多信息,例如他/她现在患有呼吸困难.
我们希望能够编写Sparql查询,询问"所有患有呼吸困难的患者"和"所有没有呼吸困难的患者".
我们希望尽可能简单直观地保持Sparql.例如,只使用一个属性"has_finding",而不是必须知道两个属性(一个用于"has_exclusion").或者必须知道一些复杂的空白节点构造.
我们玩弄了各种选择:
owl:targetIndividual.而且我们找不到一种方法来轻易地查询负面断言,然后通过整个链owl:sourceIndividual和owl:targetIndividual链.这使得Sparql非常冗长,并且给编写查询的人带来了负担.补空的空白节点:我们会说这个我们不想陈述的东西.这将说明"患者1永远不会发现呼吸困难".虽然我们想说"患者1现在没有发现呼吸困难(或在第X天)".所以我们不应该使用这种方法.
使用排除/包含类型(选项1和2):仔细观察Jeen的建议后,我们认为使用一般:Exclusion和:Inclusion类以及仅一个属性has_finding并给予呼吸困难个体包含/排除类型是最容易理解,查询和提供足够的推理能力.例: …
在针对Sesame内存存储的Sparql查询中,我想将查询条件分开,例如"Patient is male"与我生成查询结果的查询的其余部分.
让我们考虑一下这个简单的查询:
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX nci:<http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#>
PREFIX roo: <http://www.cancerdata.org/roo/>
SELECT DISTINCT *
WHERE {
?Patient a nci:C16960 .
?Patient roo:100018 ?gender .
?gender a nci:C20197 .
BIND(bound(?Patient) as ?bound0) .
{
BIND(bound(?Patient) as ?bound1) .
}
UNION {
?Patient a nci:C16960 .
BIND(bound(?Patient) as ?bound2) .
}
}
Run Code Online (Sandbox Code Playgroud)
Bound0始终为true(如预期的那样).Bound1始终为false,并且Bound2在结果集中根本没有值(有和没有额外的?Patient triple).
这是否意味着?Patient变量在第一个块中是已知的,但没有绑定,并且它在第二个块中根本不存在(即使我再次声明它)?为什么会有区别?
我的目标是首先定义复杂的查询条件,并将结果集减少到只匹配所有条件的患者.然后使用已经减少的?患者来收集输出中请求的所有数据.
在此先感谢您的帮助!
编辑
为了进一步说明我的意图,这是一个更复杂的查询.我可以用OPTIONAL而不是UNION编写相同的查询.但是当我使用OPTIONAL时,结果集中的行数会保持快速增长,每个OPTIONAL块返回的命中次数也会增加.如果两个块都返回多个匹配,则结果包含hits1*hits2记录.我认为我可以通过在高级别使用UNION使其更可预测并将其保持在hits1 + hits2中.是否有显着的性能差异?
SELECT DISTINCT ?Patient ?Gender ?Neoplastic_Process ?MStage ?TStage
WHERE {
?Patient a nci:C16960 .
{
?Patient roo:100018 ?Gender …Run Code Online (Sandbox Code Playgroud) sparql ×2
amcharts ×1
linegraph ×1
modeling ×1
ontology ×1
performance ×1
sesame ×1
silverlight ×1
union ×1
variables ×1