메뉴 건너뛰기

Cloudera, BigData, Semantic IoT, Hadoop, NoSQL

Cloudera CDH/CDP 및 Hadoop EcoSystem, Semantic IoT등의 개발/운영 기술을 정리합니다. gooper@gooper.com로 문의 주세요.


PREFIX ref: <http://purl.org/vocab/relationship/>
PREFIX ic: <http://imi.ipa.go.jp/ns/core/210#>
prefix swrlb: <http://www.w3.org/2003/11/swrlb#>
prefix protege: <http://protege.stanford.edu/plugins/owl/protege#>
prefix ssn: <http://purl.oclc.org/NET/ssnx/ssn#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dct: <http://purl.org/dc/terms/>
prefix icbms: <http://www.gooper.com/campus/>
prefix dc: <http://purl.org/dc/elements/1.1/>
prefix j.0: <http://data.qudt.org/qudt/owl/1.0.0/text/>
prefix owl: <http://www.w3.org/2002/07/owl#>
prefix xsp: <http://www.owl-ontologies.com/2005/08/07/xsp.owl#>
prefix swrl: <http://www.w3.org/2003/11/swrl#>
prefix skos: <http://www.w3.org/2004/02/skos/core#>
prefix DUL: <http://www.loa-cnr.it/ontologies/DUL.owl#>
prefix m2m: <http://www.gooper.com/m2m/>
prefix cc: <http://creativecommons.org/ns#>
prefix p1: <http://purl.org/dc/elements/1.1/#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix xsd: <http://www.w3.org/2001/XMLSchema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix qudt: <http://data.nasa.gov/qudt/owl/qudt#>
prefix skos: <http://www.w3.org/2004/02/skos/core#>
prefix xsp: <http://www.owl-ontologies.com/2005/08/07/xsp.owl#>
prefix quantity: <http://data.nasa.gov/qudt/owl/quantity#>
prefix dct: <http://purl.org/dc/terms/>
prefix unit: <http://data.nasa.gov/qudt/owl/unit#>
prefix dim: <http://data.nasa.gov/qudt/owl/dimension#>
prefix oecc: <http://www.oegov.org/models/common/cc#>
#select ?person_loc ?observ_val ?avg_prefer_val ((?observ_val- ?avg_prefer_val) as ?dd) 
#(if(?observ_val = ?avg_prefer_val, "equal", if(?observ_val > ?avg_prefer_val, "big", "small")) as ?rtn2)
select *
where 
{
#    ?person_loc rdf:type DUL:PhysicalPlace;
    icbms:DT0001 rdf:type DUL:PhysicalPlace;
       rdf:type icbms:Domitory ;
       ssn:hasValue ?observ .
  ?observ rdf:type ssn:ObservationValue ;
    rdf:type icbms:TemperatureObservationValue ;
     qudt:hasNumericValue ?observ_val .
  bind(   (if(xsd:double(?observ_val) = xsd:double(?avg_prefer_val), "equal"^^xsd:string, "small"^^xsd:string)) as ?rtn)
  bind(if(?observ_val < 0,"a","b") as ?test1)
  bind(xsd:double(?observ_val) as ?test2)
  bind(xsd:double(?avg_prefer_val) as ?test3)
  BIND(?person_loc as ?test4) .
  {
   select ?person_loc (avg(?prefer_val) as ?avg_prefer_val) {
   ?person_id rdf:type foaf:Person ;
      rdf:type icbms:Student ;
      DUL:hasLocation ?person_loc ;
      icbms:hasPreference ?pre .
    ?pre rdf:type icbms:Preference ;
      icbms:hasPreferenceKind icbms:TemperaturePreference ;
      DUL:hasDataValue ?prefer_val .
    } group by (?person_loc)
  }
}
  
  
  
===================결과값================================
sparql_result_20160121_102703.png


rtn, test3, test4의 값이 null로 표시된다.

rtn을 구하기 위한 ?observ_val와 ?avg_prefer_val값이 있는데도 불구하고 말이다.

그러나 bind를 쓰지않고 select 절에 if문을 사용하면 정상적으로 처리된다.
(select에서는 bind를 구문을 사용하지 못하지만 (if(조건식,true일경우,false일경우) as ?rtn) 형태로 표현가능하다.)

  
위로