Documents
- Minsu Jang, “Getting Started with Bossam”
- Minsu Jang, “Buchingae: The Rule Language for Bossam”
- Minsu Jang, “Bossam Shell User’s Manual”
- Minsu Jang, “Bossam FAQ”
- Minsu Jang, Joo-chan Sohn, Bossam: an extended rule engine for OWL Inferencing, Proceedings of RuleML 2004 (LNCS Vol. 3323), Nov. 8, 2004. (pdf)
Features
- Querying RDF/OWL using Bossam
- Representing and Processing Time and Dates
- Calling Java Methods from SWRL rules
- Explanations in Bossam
- Using OwlDlTrHReasoner
Performance
- LUBM(0,1) Benchmark Results for 50,000 & 100,000 Triples (read)
December 7, 2007 at 11:04 pm
안녕하세요 ^^
저는 Semantic Web에 관하여 공부하고 있는
고려대학교 경영대학 MIS전공 박사과정 유동희 입니다.
다름이 아니라 Bossam의 SWRL Built in에 관해서 질문이 있어서 이렇게 메일을 드립니다.
Bosam API를 이용해서 SWRL과 SWRL Built in을 실험해 보았습니다.
그런데, 아래와 같이 SWRL에 Built in (add 2번, divide, greaterThanOrEqual) 을 여러개 사용해 보니깐 에러가 발생했습니다.
Game(?a) ∧
hasScoreA(?a, ?b) ∧
hasScoreB(?a, ?c) ∧
hasScoreC(?a, ?d) ∧
swrlb:add(?temp, ?b, ?c) ∧
swrlb:add(?sum, ?temp, ?d) ∧
swrlb:divide(?average, ?sum, 3) ∧
swrlb:greaterThanOrEqual(?average,
→ BestGame(?a)
이클립스에서 위의 swrl이 있는 test.swrl을 실행 후 ————–
IReasonerFactory reasonerFactory = ReasonerFactory.getInstance();
IReasoner r = reasonerFactory.createSwrlReasoner();
r.setSerializationMode(IReasoner.RDFXML);
r.load(IReasoner.SWRLRDF, “file:/C:/somewhere/test.swrl”);
String result = r.run();
다음과 같은 에러화면이 나왔습니다—————-
Cannot obtain the value for a variable term ?
http://somewhere/test.swrl#average in java://bossam.app.s/BuiltIn#greaterthanorequal(?_swrlb_,?http://somewhere/test.swrl#average,8,true)
java.lang.NoSuchMethodException: bossam.app.s.BuiltIn.greaterthanorequal()
at java.lang.Class.getMethod(Unknown Source)
at a.a.b.b.a(Unknown Source)
at a.a.a.m.a(Unknown Source)
at a.a.a.m.a(Unknown Source)
at a.a.a.m.a(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.r.a(Unknown Source)
at a.a.a.t.a(Unknown Source)
at a.a.a.t.a(Unknown Source)
at a.a.a.t.s(Unknown Source)
at a.a.a.t.b(Unknown Source)
at bossam.app.a.run(Unknown Source)
at jena_bossam.HEGReasoner.goHEGReasoner(HEGReasoner.java:50)
at jena_bossam.ExecutionHEGReasoner.main(ExecutionHEGReasoner.java:15)
java.lang.NullPointerException
at a.a.a.m.a(Unknown Source)
at a.a.a.m.a(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.q.e(Unknown Source)
at a.a.a.r.a(Unknown Source)
at a.a.a.t.a(Unknown Source)
at a.a.a.t.a(Unknown Source)
at a.a.a.t.s(Unknown Source)
at a.a.a.t.b(Unknown Source)
at bossam.app.a.run(Unknown Source)
at jena_bossam.HEGReasoner.goHEGReasoner(HEGReasoner.java:50)
at jena_bossam.ExecutionHEGReasoner.main(ExecutionHEGReasoner.java:15)
질문1)
위의 에러를 삺펴보니깐,
변수 ?average에 대한 값을 얻을 수 없어서 그런것 같은데,
여러개의 built in (위의경우:add 2번, divide, greaterThanOrEqual)을 사용하면 bossam에서는 추론이 지원되지 않나요?
아님 다은 이유가 있는지 알려주세요
질문2)
데이터형과 관련해서 생기는 오류라면…
위의 원인을 찾기 위해 여러가지 try를 해 보았습니다.
built in의 divide의 경우
integer를 integer로 divide 할 경우 decimal 로 반환한다고 정의 되어 있는데,
(참고 http://www.w3.org/TR/xpath-functions/#func-numeric-divide)
그럴경우 반환되는 값(예, ?average)이 decimal이기 때문에 8을 decimal type으로 정의 해야 하나요?
swrlb:greaterThanOrEqual(?average,
두서없이 많은 질문을 했네요,
이것저것 많이 시도해 보다가, 해결책을 얻고자 이렇게 메일을 보냅니다.
도와주세요~