2017-04-06 36 views
0

我有两个SPARQL查询,一个提取缺陷总数,第二个提取总数no。的测试用例。我想将一个计数结果除以另一个计数,即(缺陷总数/测试用例的总数)。 如何使用除法运算符分割两个查询结果。SPARQL从两个查询中划分两个值

任何人都可以建议我一样吗?

PREFIX process: <http://jazz.net/ns/process#> 
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    PREFIX merge: <http://jazz.net/ns/lqe/merge/> 
    PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
    PREFIX owl: <http://www.w3.org/2002/07/owl#> 
    PREFIX oslc: <http://open-services.net/ns/core#> 
    PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
    PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
    PREFIX rtc_merged: <http://jazz.net/ns/lqe/merge/gensym/cm/> 
    PREFIX oslc_config: <http://open-services.net/ns/config#> 
    PREFIX dcterms: <http://purl.org/dc/terms/> 


    SELECT DISTINCT 
     ?rtc_merged_Defect1_projectArea 
     ?rtc_merged_Defect1_shortId_COUNT 
    WHERE{ 
     { 
     SELECT DISTINCT 
      ?rtc_merged_Defect1_projectArea 
      (COUNT(DISTINCT ?rtc_merged_Defect1_shortId) AS ?rtc_merged_Defect1_shortId_COUNT) 
     WHERE{ 
      VALUES(?rtc_merged_Defect1_paUri) 
      { 
      (<https://localhost:9443/ccm/process/project-areas/__ANzQBasEeegkPxZTDywOA>) 
      } 
      ?rtc_merged_Defect1_uri process:projectArea ?rtc_merged_Defect1_paUri. 
      ?rtc_merged_Defect1_uri oslc:instanceShape ?rtc_merged_Defect1_uri_instanceShape. 
      ?rtc_merged_Defect1_uri_instanceShape merge:mergeShape rtc_merged:Defect. 
      OPTIONAL { 
      ?rtc_merged_Defect1_uri process:projectArea ?rtc_merged_Defect1_projectArea_enumValue. 
      OPTIONAL {?rtc_merged_Defect1_projectArea_enumValue rdfs:label|dcterms:title ?rtc_merged_Defect1_projectArea_enumName.} 
      } 
      OPTIONAL {?rtc_merged_Defect1_ver dcterms:isVersionOf ?rtc_merged_Defect1_uri; rdf:type oslc_config:VersionResource.} 
      ?rtc_merged_Defect1_uri oslc:shortId ?rtc_merged_Defect1_shortId. 
      BIND(IF (bound(?rtc_merged_Defect1_ver), concat(str(?rtc_merged_Defect1_uri), "?oslc_config.context="), ?rtc_merged_Defect1_uri) as ?rtc_merged_Defect1) 
      BIND(IF(bound(?rtc_merged_Defect1_projectArea_enumName), ?rtc_merged_Defect1_projectArea_enumName, IF(bound(?rtc_merged_Defect1_projectArea_enumValue), ?rtc_merged_Defect1_projectArea_enumValue, "")) as ?rtc_merged_Defect1_projectArea) 
     } 
     GROUP BY ?rtc_merged_Defect1_projectArea 
     } 
    } //This is my first query. 
=============================================================== 


    PREFIX process: <http://jazz.net/ns/process#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX merge: <http://jazz.net/ns/lqe/merge/> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX oslc: <http://open-services.net/ns/core#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rqm_merged: <http://jazz.net/ns/lqe/merge/gensym/qm/> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 
PREFIX oslc_config: <http://open-services.net/ns/config#> 
PREFIX dcterms: <http://purl.org/dc/terms/> 


SELECT DISTINCT 
    ?rqm_merged_QMTestCase1_projectArea 
    ?rqm_merged_QMTestCase1_shortId_COUNT 
WHERE{ 
    { 
    SELECT DISTINCT 
     ?rqm_merged_QMTestCase1_projectArea 
     (COUNT(DISTINCT ?rqm_merged_QMTestCase1_shortId) AS ?rqm_merged_QMTestCase1_shortId_COUNT) 
    WHERE{ 
     VALUES(?rqm_merged_QMTestCase1_paUri) 
     { 
     (<https://localhost:9443/qm/process/project-areas/_EazMoBatEeeR-7d5-ZtSzw>) 
     } 
     ?rqm_merged_QMTestCase1_uri process:projectArea ?rqm_merged_QMTestCase1_paUri. 
     ?rqm_merged_QMTestCase1_uri oslc:instanceShape ?rqm_merged_QMTestCase1_uri_instanceShape. 
     ?rqm_merged_QMTestCase1_uri_instanceShape merge:mergeShape rqm_merged:QM%20Test%20Case. 
     OPTIONAL { 
     ?rqm_merged_QMTestCase1_uri process:projectArea ?rqm_merged_QMTestCase1_projectArea_enumValue. 
     OPTIONAL {?rqm_merged_QMTestCase1_projectArea_enumValue rdfs:label|dcterms:title ?rqm_merged_QMTestCase1_projectArea_enumName.} 
     } 
     OPTIONAL {?rqm_merged_QMTestCase1_ver dcterms:isVersionOf ?rqm_merged_QMTestCase1_uri; rdf:type oslc_config:VersionResource.} 
     ?rqm_merged_QMTestCase1_uri oslc:shortId ?rqm_merged_QMTestCase1_shortId. 
     BIND(IF (bound(?rqm_merged_QMTestCase1_ver), concat(str(?rqm_merged_QMTestCase1_uri), "?oslc_config.context="), ?rqm_merged_QMTestCase1_uri) as ?rqm_merged_QMTestCase1) 
     BIND(IF(bound(?rqm_merged_QMTestCase1_projectArea_enumName), ?rqm_merged_QMTestCase1_projectArea_enumName, IF(bound(?rqm_merged_QMTestCase1_projectArea_enumValue), ?rqm_merged_QMTestCase1_projectArea_enumValue, "")) as ?rqm_merged_QMTestCase1_projectArea) 
    } 
    GROUP BY ?rqm_merged_QMTestCase1_projectArea 
    } 
} 
+0

您的第一个和第二个查询完全相同。 – AKSW

+0

我不明白你为什么在查询中有一个子SELECT。 – AKSW

回答

0

该解决方案是使用使用两个子SELECT查询(我在这里使用的存根,因为当前的SPARQL查询迷惑(复制并使用不必要的子SELECT)):

SELECT (?cnt1/?cnt2 AS ?result) WHERE { 

// first query 
{ 
    SELECT (COUNT(?s) AS ?cnt1) WHERE { 
    ... 
    } 
} 

// second query 
{ 
    SELECT (COUNT(?s) AS ?cnt2) WHERE { 
    ... 
    } 
} 

} 
+0

是的,对不起,我的错误。现在只编辑我的第二个查询。首先找到总数。的缺陷和第二个查询找到总数没有。的测试用例。我想缺陷密度=总缺陷/总测试用例 –

+0

好吧,但为什么你有一个嵌套的SELECT?我不明白为什么这是必要的 – AKSW

+0

谢谢你的快速响应,我用你的给定方法bt我在第1行发生错误(CRRGW5605E验证输入时发生了com.hp.hpl.jena.query.QueryParseException错误SPARQL字符串,由遇到的“”)“”)“”在第1行第20列引起。期待“...”中的一个:“...” ......“......”=“...”!=“...”>“...”<“...”<=" ... "> =“...”||“ ...“&&”...“+”...“ - ”...“*”...“/”...。) –