SPARQL查询以获取所有同时患有哮喘和糖尿病的患者

SPARQL查询以获取所有同时患有哮喘和糖尿病的患者,sparql,Sparql,我有三门课,病人ID,哮喘和糖尿病。所以我需要获得所有同时患有哮喘和糖尿病的患者id 我试过下面提到的问题 PREFIX ioi:<http://io-informatics.com/rdf/> PREFIX ns:<http://io-informatics.com/rdf/Asthma#> PREFIX ns2:<http://io-informatics.com/rdf/Diabetes#> SELECT DISTINCT *

我有三门课,病人ID,哮喘和糖尿病。所以我需要获得所有同时患有哮喘和糖尿病的患者id

我试过下面提到的问题

 PREFIX ioi:<http://io-informatics.com/rdf/>
 PREFIX ns:<http://io-informatics.com/rdf/Asthma#>
 PREFIX ns2:<http://io-informatics.com/rdf/Diabetes#>


         SELECT DISTINCT * 
                WHERE {
                ?s a ioi:PseudoPatientID
                {   ?s ?p  ns2:DIAB   }
                  UNION
                {    ?s ?p ns:ASTHMA   }

           } 
前缀ioi:
前缀ns:
前缀ns2:
选择不同的*
在哪里{
这是一张ioi:伪病人
{?s?p ns2:DIAB}
联合
{?s?p ns:哮喘}
} 
但是这个问题给了我糖尿病患者和哮喘患者。它没有给我普通的哮喘和糖尿病患者

我有点想要布尔值和条件,在这里我可以得到那些患有糖尿病和哮喘的人


如何通过SPARQL查询获得此结果?

您应该将这两个条件都放在where子句中,如:

SELECT DISTINCT * 
    WHERE {
       ?s a ioi:PseudoPatientID.
       ?s ?p ns2:DIAB.
       ?s ?p ns:ASTHMA.
    }
假设谓词
?p
在两种情况下都是相同的。
如果谓词不相同,您可以:

  • 用其他内容替换第二个
    ?p
    ,或
  • 指定谓词

为什么
?p
在这里是一个变量?如果它是一个确定的属性(例如,
hasCondition
),它似乎更有意义。你能展示一下你的数据样本吗?我们可以尝试“修复”此查询,但如果看不到至少一个数据样本,则无法保证修复是正确的。此外,如果哮喘和糖尿病是类(而不是个体),那么患者似乎更可能与它们的实例相关,而不是与类本身相关。基本的三重模式是“和”匹配。如果你想要同时具备这两种条件的东西,你可以做一些类似于
?x:hasCondition:哮喘的事情?x:hasConditions:Diabetes.
,或者(甚至更短,但相当于)
?x:hasCondition:哮喘,:糖尿病。
但是,您说哮喘和糖尿病是类,所以患者可能实际上与这些类相关,在这些类中,您将使用
?x:hasCondition/rdf:type:哮喘,:糖尿病。
,而没有看到数据,很难知道这是否正确@sraf说“我有三门课,病人ID,哮喘和糖尿病”;如果糖尿病和哮喘是类,那么id更有可能与这些类的实例相关,或者id是这些类的实例(这似乎很奇怪,但可能是模型的建立方式)。“id似乎不太可能与哮喘类和糖尿病类直接相关。@JoshuaTaylor,虽然我明白你的观点,但这项建议似乎是OP将糖尿病或哮喘患者与原始查询合并的逻辑结果。同意;如果OP的查询返回OP想要的一些内容,那么这似乎是正确的修改。您甚至可以将其缩短一点:
?这是一个ioi:PseudoPatientID?p ns2:DIAB,ns2:ASTMHA
?s a ioi:PseudoPatientID?p1 ns2:DIAB?p2 ns2:ASTMHA
,这取决于
?p
在每种情况下是否应该相同。@JoshuaTaylor:对于您提到的查询,我没有得到任何结果。在我们拥有的示例数据中,PseudopatientID类的实例与哮喘和糖尿病类的实例相关,这些类的每个实例都是,哮喘和糖尿病。@kr1:感谢您的查询,我从您提交的查询中获得了所需的结果。