SKOS의 Integrity Constraints에 적용해 본 OWL2와 SPIN의 비교

SKOS의 Integrity Constraints를 OWL2와 SPIN으로 구현해 봄으로써 장단점을 비교한 Paul Herman의 블로그 포스트를 관련 블로그들과 함께 정리한 것입니다. (여러 포스트들을 하나로 정리하다 보니 좀 길어졌네요.^^;;;)

SKOS(Simple Knowledge Organization System)

SKOS는 시소러스(Thesaurus), 통제 어휘(Controlled Vocabulary), 택소노미(Taxonomy), 분류 체계(Classification Scheme)과 같은 지식어휘체계를 시맨틱 웹을 통해 공유하고 서로 연결하는 공동 데이터 모델입니다. SKOS가 RDF(Resource Description Framework)에 기반하고 있기 때문에 SKOS로 표현된 지식어휘체계는 기계가 이해 가능하고(machine-readable), 소프트웨어 어플리케이션 간에 상호호환이 가능(interoperable)하며 웹으로 발행(publishing)이 가능합니다. 2005년 W3C Draft로 제정되었고, 2009년 8월 W3C Recommandation이 되었습니다.

SKOS는 URI를 사용해서 개념(concepts)들을 정의하고 label에 관한 property를 통해 표제어를 기술하며, 다양한 note를 기록하고 개념들 간의 시맨틱 관계를 기술(description)할 뿐만 아니라 concept scheme를 기술함으로써 여러 지식어휘체계를 통합할 수 있는 기능을 제공합니다.
(더 자세한 내용은 W3C의 SKOS 홈페이지(http://www.w3.org/2004/02/skos/)를 참고하세요)

SKOS의 Integrity Constraints

SKOS 스펙에는 S1부터 S62까지의 클래스, 프로퍼티 정의 및 무결성 제약 조건(Integrity Constraints) 목록이 있고, 이 중 대부분은 SKOS OWL1(OWL Full 버전이나 OWL DL 버전으로 기술이 가능합니다. 그러나 이중 몇 가지는 OWL 1으로 표현이 어려운데, 다음과 같은 것들입니다.

  • S13: skos:prefLabel, skos:altLabel and skos:hiddenLabel are pairwise disjoint properties .
  • S14: A resource has no more than one value of skos:prefLabel per language tag .
  • S27: skos:related is disjoint with the property skos:broaderTransitive.
  • S46 : skos:exactMatch is disjoint with each of the properties skos:broadMatch and
    skos:relatedMatch .
  • S55: The property chain (skosxl:prefLabel, skosxl:literalForm) is a sub-property of
    skos:prefLabel.
  • S56: The property chain (skosxl:altLabel, skosxl:literalForm) is a sub-property of
    skos:altLabel.
  • S57: The property chain (skosxl:hiddenLabel, skosxl:literalForm) is a sub-property of
    skos:hiddenLabel.
  • S58: skosxl:prefLabel, skosxl:altLabel and skosxl:hiddenLabel are pairwise disjoint
    properties .

그렇다면 이것들이 최근(2009년) W3C의 제안 권고안이 된 OWL2로는 표현이 가능한가 하는 것이 문제의식의 시작입니다.

Paul은 다음 4가지 경우에 대해 OWL2와 SPIN을 적용, 비교했습니다.

1) S14

S14: A resource has no more than one value of skos:prefLabel per language tag.
“리소스는 skos:prefLabel에는 각 언어 태그 당 하나의 값만을 가져야 한다”는 제약조건 입니다.

예를 들어,

:Concept1 skos:prefLabel "love"@en ;
         skos:prefLabel "adoration"@en .

는 유효하지 않습니다(not valid).

이 제약조건의 유효성을 검사하기 위해 OWL1이나 OWL2를 사용하는 것은 적절하지 않습니다. 왜냐 하면, 이 모델링 언어는 유효성검사(validation)보다는 추론에 초점을 맞추고 있기 때문입니다.
(note: 특히, OWA(Open World Assumption)을 전제로 한 OWL 모델링에서는 어떤 명시(assertion)가 논리적으로 올바르지 않다고 해도 단지 더 이상의 추론을 만들지 않을 뿐, 특별히 에러를 발생시키지는 않습니다.)

그러면 SPIN을 여기에 적용해 볼까요? SPIN은 TopQuadrant의 Holger Knoblouch가 만든 것으로, SPARQL을 이용해서 시맨틱웹 데이터에 대한 제약조건과 추론 규칙을 정의하는 RDF Vocabularies입니다.
(note: SPIN은 TopBraid Composer에서 사용가능하고, SPIN API오픈 소스 Java API로도 사용가능합니다.)

SPIN에서 Boolean 값을 리턴하는 SPARQL ASK 쿼리를 이용하여 false이면 제약조건이 유효(no validation)하고, true이면 제약조건에 위배됨을 검사할 수 있습니다.
이러한 제약조건은 class에 대해 spin:constraint 프로퍼티에 대한 값으로 기술됩니다.

위의 S14 제약조건은 다음과 같은 SPARQL 쿼리로 만들 수 있습니다 :

ASK
{
   {SELECT ?lang (count(?lang) as ?nr )
   WHERE
      {?subject skos:prefLabel ?label .
       LET (?lang := lang(?label))}
    GROUP BY ?lang}
    FILTER (?nr > 1)
}

이 쿼리에서 사실 “count” 기능은 SPARQL 1.0에서는 제공되지 않고 SPARQL 1.1에 포함될 것으로 예상되고 있습니다.(다행히 Jena의 ARQ에서 이미 구현되어 있습니다.)

이 쿼리에 따라서 같은 언어태그를 가진 prefLabel을 하나 이상 입력하면 에러를 발생합니다.(TopBraid Composer에서의 테스트 결과는 Paul의 관련 포스트에서 확인하세요.)

C&P(Clark & Parsia)의 접근방법

Pellet ICV0.4는 Pellet Integrity Constraint Validator로 CWA(closed world assumption)을 이용, RDF 인스턴스 데이터에 대한 유효성 검사를 하는 툴입니다. Pellet ICV에서 제약 조건은 OWL 악시옴으로 표현되고 유효성 검사기는 이것들을 이해해서 SPARQL 쿼리로 생성해낸다고 합니다.
(따라서 OWL을 링크드 데이터를 위한 유효성 검사 언어로 사용가능하다고 합니다 블로그 포스트에 따르면 Pellet ICV를 SKOS 데이터의 유효성 검사에 이용할 수 있고, 이후 ICV 엔진은 PelletDb로 릴리즈된다고 합니다. )

C&P의 블로그 포스트에 따르면 S14는 OWL IC(integrity contstraint)로 표현이 불가능하다고 합니다. 대신 Pellet ICV는 제약 조건들을 SWRL로 핸들링 할수 있고 built-in function으로 확장, 사용이 가능하다는 대안을 제시하고 있습니다.

2) S13

S13:skos:prefLabel, skos:altLabel and skos:hiddenLabel are pairwise disjoint properties.
skos:prefLabel, skos:altLabel 와 skos:hiddenLabel은 각 쌍이 서로 소(disjoint)이어야 한다는 제약조건입니다.

즉,

<skos:Concept rdf:ID="Concept_1">
   <skos:altLabel xml:lang="en">test</skos:altLabel>
   <skos:prefLabel xml:lang="en">test</skos:prefLabel>
   <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"<
>Concept_1</rdfs:label></skos:Concept>

이러한 예는 허용되지 않는다는 규약입니다.

Paul은 이 제약조건에 대해 OWL1, SPIN, OWL2 DL, Pellet ICV로 각각 테스트했습니다.

OWL1

OWL1은 서로소인 프로퍼티가 동시에 같은 개체(individual, 또는 인스턴스)에 연결되면 무결성이 위배된다는 것을 명시하기 위한 도구를 제공하지 않습니다.

SPIN

위의 제약 조건을 ASK 쿼리를 이용하여 표현해 보면 다음과 같습니다.

ASK
WHERE {
   OPTIONAL {?subject skos:prefLabel ?pref.}
   OPTIONAL {?subject skos:altLabel ?alt.}
   OPTIONAL {?subject skos:hiddenLabel ?hidden.}
FILTER (?pref = ?alt || ?alt = ?hidden || ?pref = ?hidden)
}

그리고 skos:Concept 클래스에 spin:constraint로 바꾸어 보면

ASK 
WHERE {
   OPTIONAL {
      ?this skos:prefLabel ?pref .
   } .
   OPTIONAL {
      ?this skos:altLabel ?alt .
   } .
   OPTIONAL {
      ?this skos:hiddenLabel ?hidden .
   } .
FILTER (((?pref = ?alt) || (?alt = ?hidden)) || (?pref = ?hidden)) .
}

이렇게 되고, TopBraid Composer에서 SPIN 제약 조건에 따라 에러를 발생시킵니다.
.(TopBraid Composer에서의 테스트 결과는 Paul의 관련 포스트에서 확인하세요.)

OWL2

OWL2에서는 프로퍼티간에 상호 배타적임을 기술하는 DisjointPRoperties라는 새로운 구성자(construct)를 제공합니다. 이 서로소 프로퍼티 악시옴은 ObjectProperties나 DataProperties에 대해서는 쌍으로 서로소임을 기술할 수 있지만 annotation properties에 대해서는 제공되지 않습니다. :prefLabel, skos:altLabel and skos:hiddenLabel는 annotation properties이므로 OWL2로는 제약조건을 만들 수가 없는 거죠.

어쨌든 (위의 문제를 무시하고) 다음과 같은 악시옴을 사용한다면,

<owl:AnnotationProperty rdf:about="http://www.w3.org/2004/02/skos/core#altLabel">
    <owl:propertyDisjointWith rdf:resource="http://www.w3.org/2004/02/skos/core#prefLabel"/>
    <rdfs:comment xml:lang="en">skos:prefLabel, skos:altLabel and
 skos:hiddenLabel are pairwise disjoint properties.</rdfs:comment>
    <rdfs:label xml:lang="en">alternative label</rdfs:label>
    <skos:definition xml:lang="en">An alternative lexical label for a resource.</skos:definition>
    <rdfs:isDefinedBy rdf:resource="http://www.w3.org/2004/02/skos/core"/>
    <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
    <skos:example xml:lang="en">Acronyms, abbreviations, spelling variants, and irregular plural/singular forms may be included among the alternative labels for a concept. Mis-spelled terms are normally included as hidden labels (see skos:hiddenLabel).</skos:example>
</owl:AnnotationProperty>

아래의 데이터에 대해,

<skos:Concept rdf:about="http://ec.europa.eu/esco/S13#Concept_1">
    <skos:prefLabel xml:lang="en">aaa</skos:prefLabel>
    <skos:altLabel xml:lang="en">aaa</skos:altLabel>
    <skos:hiddenLabel xml:lang="en">aaaaa</skos:hiddenLabel>
     <rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
    >Concept_1</rdfs:label>
</skos:Concept>

OWL2 DL 추론기에서 어떤 결과가 나오는지 보도록 하겠습니다.

Pellet 2(pellet2.1.0)

Consistent: No
Reason: null

라는 결과를 얻게 되고, skos:altlabel을 ‘aaaa’로 바꾸게 되면

Consistent: Yes

라는 결과가 나옵니다.

어쨌든 결론은 OWL2 DL 추론기라면 Annotation properties에 대해 DisjointProperty 악시옴을 쓸 수 없다는 warnining이 나와야 하는데 추론기가 그것을 걸러주지 못하는 문제가 있습니다.

Pellet ICV

다음과 같은 제약조건 파일을 만들어서 실험해보았습니다.

skos:altLabel a owl:AnnotationProperty .
skos:hiddenLabel a owl:AnnotationProperty .
skos:prefLabel a owl:AnnotationProperty .

[ ] a owl:AllDisjointProperties ;
    owl:members (skos:prefLabel skos:altLabel skos:hiddenLabel) .

pellet icv 0.4로 다음의 데이터를 테스트 했습니다.

[] a owl:Ontology ;
           owl:imports <http://www.w3.org/TR/skos-reference/skos.rdf/>.
      <Test_1> a test:Thing.
      <Test_1> skos:prefLabel "test"@en; 
                           skos:altLabel "test"@en; 
                           skos:hiddenLabel "test"@en.

그러면 다음과 같은 제약 조건 위배라는 결과를 얻을 수 있습니다.

Validating 3 integrity constraints
Will stop after 1 constraint violation(s) are found
Validating constraint: disjointProperties prefLabel altLabel hiddenLabel
Constraint violated : Yes
Violating individuals (1): Test_1,
Number of constraint(s) violated: 1

하지만 저자의 말로는 작은 이런저런의 버그로 인해 약간의 매끄럽지 않은 부분이 있다고 합니다.

3) S27

S27: skos:related is disjoint with the property skos:broaderTransitive.
skos:related는 skosboraderTransitive와 서로소(disjoint)이여야 한다는 제약조건입니다.

OWL2

OWL1 은 클래스의 disjointness를 기술할 수 있는 수단을 제공하지 않습니다. 그러나 OWL2는 object properties 및 data properties 간의 서로소를 기술할 수 있도록 합니다.

제약 조건 S27는 다음과 같이 기술이 가능합니다.

<rdf:Property rdf:about="http://www.w3.org/2004/02/skos/core#related">
    <rdfs:comment xml:lang="en">skos:related is disjoint with skos:broaderTransitive</rdfs:comment>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#SymmetricProperty"/>
    <rdfs:subPropertyOf rdf:resource="http://www.w3.org/2004/02/skos/core#semanticRelation"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
    <skos:definition xml:lang="en">Relates a concept to a concept with which there is an associative semantic relationship.</skos:definition>
    <rdfs:isDefinedBy rdf:resource="http://www.w3.org/2004/02/skos/core"/>
    <rdfs:label xml:lang="en">has related</rdfs:label>
    <owl:propertyDisjointWith rdf:resource="http://www.w3.org/2004/02/skos/core#broaderTransitive"/>
  </rdf:Property>

OWL2 DL

그런데, OWL2 DL은 결정가능성(decidability)의 이유로, DisjointObjectProperties의 사용에 몇가지 제약을 주고 있다고 합니다. 다음과 같은 형태로는 사용이 불가능하다고 합니다.

• SubObjectPropertyOf( ObjectPropertyChain( OPE1 … OPEn ) OPE ) with n > 1, or
• SubObjectPropertyOf( ObjectPropertyChain( OPE1 … OPEn ) INV(OPE) ) with n > 1, or
• TransitiveObjectProperty( OPE ), or
• TransitiveObjectProperty( INV(OPE) )

Pellet 2.0

Pellet 2.0.2에서 다음과 같은 결과가 나왔습니다.

WARNING: Unsupported axiom:
Ignoring transitivity and/or complex subproperty axioms for broaderTransitive
31-mrt-2010 14:09:54 org.mindswap.pellet.RBox ignoreTransitivity

SPIN

SPIN에서 제약 조건은 다음과 같은 쿼리로 만들 수 있습니다.

ASK WHERE {
   ?this skos:related ?object1 .
   ?this skos:broaderTransitive ?object2 .
   FILTER (?object1 = ?object2) .
}

(TopBraid Composer에서의 실행결과는 Paul 의 관련 포스트를 참고하세요.)

Pellet ICV 0.4

다음과 같이 제약 조건을 명시합니다.

<rdf:Description rdf:about="http://www.w3.org/2004/02/skos/core#related">
     <owl:propertyDisjointWith rdf:resource="http://www.w3.org/2004/02/skos/core#broaderTransitive"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.w3.org/2004/02/skos/core#broaderTransitive">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#TransitiveProperty"/>
</rdf:Description>

제약 조건이 위배됨을 리포트합니다.

c:\Program Files\pellet-2.1.0>pellet-ic –constraints C:\Users\Paul\TBCMEWorkspa
ce\test\s27c.rdf C:\Users\Paul\TBCMEWorkspace\Test\s27.rdf
15-apr-2010 12:43:41 org.mindswap.pellet.jena.graph.loader.DefaultGraphLoader ad
dUnsupportedFeature
WARNING: Unsupported axiom: Ignoring transitivity axiom due to an existing disjo
intness axioms for property broaderTransitive
15-apr-2010 12:43:41 org.mindswap.pellet.RBox ignoreTransitivity
WARNING: Unsupported axiom: Ignoring transitivity and/or complex subproperty axi
oms for broaderTransitive
Validating 2 integrity constraints
Will stop after 1 constraint violation(s) are found

Validating constraint: related disjointPropertyWith broaderTransitive
Constraint violated : Yes
Violating individuals (1): Concept_1,

Number of constraint(s) violated: 1

결론 : SPIN으로 아주 간단히 되는 제약 조건의 기술은 OWL2 DL 의 제한으로 OWL2로는 표현되지 못하지만, CWA를 사용하는 OWL IC(Pellet ICV)에 의해서는 간단히 처리되는 것을 볼 수 있습니다.

4) S55: The Property Chain

S55: The property chain (skosxl:prefLabel, skosxl:literalForm) is a sub-property of skos:prefLabel.
프로퍼티 체인(skosxl:prefLabel, skosxl:literalForm)은 skos:prefLabel의 하위 프로퍼티라는 제약조건입니다.

    • S55: The property chain (skosxl:prefLabel, skosxl:literalForm) is a sub-property of skos:prefLabel.
    • S56: The property chain (skosxl:altLabel, skosxl:literalForm) is a sub-property of skos:altLabel.
    • S57: The property chain (skosxl:hiddenLabel, skosxl:literalForm) is a sub-property of skos:hiddenLabel.

OWL2
OWL2 의 새로운 특징 중 하나가 바로 프로퍼티 체인입니다. 가장 고전적인 예가 바로 :hasParent와 :hasBrother의 조합으로 :hasUncle이라는 프로퍼티를 정의하는 것입니다.

다음과 같은 형식문법으로 표현합니다.

SubObjectPropertyOf( ObjectPropertyChain( OPE1 … OPEn ) OPE ).

이제 SKOS의 제약 조건을 살펴보지요.

  • skosxl:prefLabel은 Object property이다.
  • skos:literalForm은 Data property이다.
  • skos:prefLabel은 Annotation property이다.

이 세가지 타입의 프로퍼티에 대한 조합은 OWL2의 프로퍼티 체인 악시옴에서는 허용되지 않습니다.

(Note: skosxl은 SKOS eXtention for Labels(SKOS-XL)의 네임스페이스입니다. skosxl은 SKOS에서 사전적인 어휘목록을 다루는 skos:prefLabel, skos:hiddenLabel, skos:altLabel의 확장된 기능을 제공합니다.)

어쨌든 계속해 보겠습니다.

skos:prefLabel rdf:type owl:AnnotationProperty.
xl:prefLabel rdf:type owl:ObjectProperty.
xl:literalForm rdf:type owl:DatatypeProperty.

skos:prefLabel owl:propertyChainAxiom (
   xl:prefLabel
   xl:literalForm
).

Pellet 2.1.0은 예상 대로 warning을 내보냅니다.

WARNING: Unsupported axiom: Bnode in owl:propertyChainAxiom axiom is not a valid
property expression.

즉, 이러한 타입의 프로퍼티 체이닝은 OWL2에서 할 수 없습니다.

SPIN

SPIN에서는 다시한번 이 제약조건을 구현하는 것이 무척 간단하게 이루어집니다.

다음의 SPARQL CONSTRUCT 절을 spin:rule에 삽입하면

CONSTRUCT {
   ?this skos:prefLabel ?label .
}
WHERE {
   ?this xl:prefLabel ?prefLabel .
   ?prefLabel xl:literalForm ?label .
}

(TopBraid Composer에서의 실행결과는 Paul의 포스트를 확인하시기 바랍니다.)

결론

위의 네 가지 경우에서 OWL2가 적용될 수 있는 경우는 별로 없습니다. 그러나 SPIN/SPARQL의 경우에는 꽤 쉽고 빠르게 적용이 가능함을 알 수 있습니다.

SKOS Constraint SPIN OWL2 OWL2 IC
S14 Y +
S13 Y + +
S27 Y + +
S55 N +

C&P의 Pellet과 TopQuadrant의 SPIN을 이용한 Constraints Checking에서 다음과 같은 사실을 먼저 명확히 할 필요가 있습니다.

  • SPIN은 제약조건과 구성자를 기술하기 위한 언어(SPARQL로 된)로서, TBC에 구현되어 있으며, 오픈 소스로도 사용이 가능하다.
  • OWA(Open World Assumption)하의 OWL2에 대해 Holger는 유용성에 동의하지 않는다.
  • CWA(Closed World Assumption)하의 OWL2는 Pellet ICV로 구현되었고, 이제 OWL2 IC로 릴리즈 되었다.

SPIN과 Pellet ICV이 동의하는 것과 동의하지 않는 것


동의하는 것

  • OWA하의 OWL2는 많은 유즈케이스에서 비직관적이고 비생산적이다.
  • Closed world하에서 제약조건을 검사하는 데에 SPARQL을 사용하는 것이 가장 좋다.

양쪽은 단지 제약 조건을 검사하기 위한 SPARQL 쿼리를 만들어내는 방법이 다를 뿐입니다.

  • SPIN의 경우는 직접 SPARQL 쿼리를 작성해야 한다.
  • OWL2 IC의 경우는 백그라운드에서 SPARQL 쿼리로 변환되는 OWL 악시옴을 작성한다.

그러나, SPARQL 쿼리를 작성하는 것이 간단치 않고 이것은 Linked Data API()의 개발을 뒷받침하는 근거 중의하나가 되고 있습니다. 또한, SPIN은 단지 제약 조건을 검사하는 언어 이외에도 훨씬 많은 기능을 가지고 있는데, 특히 OWL2로 표현되지 못하는 Property Chain 추론의 솔루션이 될 수 있습니다.

동의하지 않는 것

양쪽은 OWL2의 중요성에 대해 동의하지 않습니다.

TopQuadrant의 입장은 OWL2가 단지 SKOS나, FOAF, 또는 SIOC 같은 수준의 vocabulary들의 목록일뿐이며, SW 애플리케이션 개발에서 부가적인 역할이라는 것입니다. Holger와 마찬가지로 Paul도 OWL2 (DL)은 모델링 하고자 하는 몇 가지의 제약 조건은 구현할 수 있으나 언제나 모든 요구사항에 들어맞지는 않는다는 생각입니다. 따라서 OWL2에 너무 종속적인 툴은 사용하지 말 것을 권하고 있습니다.

Holger는 OWL의 문제점에 대해서 다음과 같이 지적합니다[4].

  • Semantic Web 데이터 모델은 RDF 트리플로 이루어진 그래프 구조로, 이용자가 자신만의 방법으로 데이터와 지식을 자유롭게 표현하므로 단순 트리플 수준을 넘어선 복잡한 그래프 구조가 생기게 된다. 따라서 이런 복잡한 그래프 구조에 대해 제약조건을 검사하거나 룰을 실행하기 위한 추상화된 그래프 매칭 언어의 필요성이 대두된다.
  • OWL은 임의의 RDF 그래프 패턴을 (자유롭게) 표현하지 못하고 OWL의 설계자들이 유용하다고 찾아낸 몇가지 패턴의 하위집합만을 표현할 수 있다(Paul의 예에서 본 것처럼 서로 다른 타입의 프로퍼티들은 프로퍼티 체인으로 허용되지 않는다). DL 기반의 OWL2는 실세계의 유즈케이스를 다루기에는 제한적이고 불충분하다.
  • DL의 목적은 추론 엔진이 질문에 대해 유한한 시간 안에 답할 수 있도록 하는 논리의 “추적가능한” 하위집합을 발견하기 위한 것이다. 그러나 그 “유한한 시간”은 계산 가능하다는 것이지 엄청난 시간이 걸릴 수도 있다. 실제로 DL 추론엔진의 속도에 대한 이용자들의 불만이 많다.
  • RDF 그래프 모델에 제약조건 검사나 룰의 실행에 부합하는 툴은 Where 절로 구사되는 다양한 조건절을 가진 SPARQL이다. SPARQL과 SPIN이 DL 추론 엔진과 같이 매우 느린 쿼리를 만들 수 있지만 적어도 훨씬 유언하고 풍부한 표현이 가능하다.

실제로 개인적인 경험을 비추어 보아도 실세계의 지식을 OWL을 이용해 표현해 내기에는 한계가 너무 많았고, DL 추론을 위해서는 실세계의 사물(things)과 사물간의 관계(relationship)를 그대로 반영하기 보다는 인공적으로 하나의 class를 중심으로 property들을 배치하는 모델링이 될 수 밖에 없고, restriction/교집합, 합집합 선언을 통한 subset 추론 밖에 기대할 수 없었습니다. 애플리케이션 개발에 있어 필요한 Logic의 표현을 위해서는 SPARQL이 매우 유용하다는 생각이 듭니다. Holger가 언급한 것처럼 사실 SPARQL도 아직 많이 느리고, 필요한 기능들도 아직 구현되지 않아서(예를 들어 count, sum과 같은 aggregates, 서브쿼리, 부정문(negation) 등) 불편한 점이 있지만 이런 점을 보완한 SPARQL 1.1이 곧 등장할 예정입니다. 또한 CWA 하의 제약 조건 검사와 규칙 정의에 유용한 것으로 판명된 SPIN에 관심을 가지고 적용해볼 필요가 있겠습니다.

by ymchu

[Reference]
1. http://www.proxml.be/users/paul/weblog/d1855/Where_OWL_fails_another_OWL_arises.html
2. http://clarkparsia.com/weblog/2010/04/14/pellet-icv-0-4-release-using-owl-integrity-constraints-to-validate-skos/
3. http://clarkparsia.com/weblog/2009/02/11/integrity-constraints-for-owl/
4. http://composing-the-semantic-web.blogspot.com/2010/04/where-owl-fails.html

Advertisements


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중