2016-07-21 23 views
0

저는 TopBraid Composer Free Edition을 사용하여 온톨로지와 스핀 규칙을 작성하고 있습니다. TopBraid Composer Free Edition에서 저장 한 RDF 파일을 사용하여 Sesame OpenRDF Workbench에 내 온톨로지를로드하고 있습니다.SPIN 규칙에 Active/Inactive 개념을 추가하는 방법은 무엇입니까?

나는 수백 개의 규칙 중 어느 것이 적용되어야하는지 동적 인 SPIN 규칙 (더 정확하게는 SPIN 생성자)을위한 응용 프로그램을 가지고 있습니다. SPIN 규칙에 "활성"또는 "비활성"의 개념을 추가하는 방법을 찾고 싶습니다. WHERE 절의 각 규칙에 체크를 추가하여 "활성"규칙 만 기꺼이 기꺼이합니다. 설명하기 위해 SPIN : constructor의 두 하위 속성을 만들고이를 myPrefix:activeConstructormyPrefix:inactiveConstuctor이라고합니다.

은 이제 형태의 트리플 내 생성자의 WHERE 절에 추가 할 :

?thisConstructorURI a myPrefix:activeConstructor . 

이 방법은 ?thisConstuctorURI 정의에 달려있다. SPIN은 규칙과 연관된 클래스의 현재 인스턴스에 ?this을 설정합니다. 그 규칙의 URI와 비슷한 것이 있습니까?

나는 또한 규칙이 빈 노드에 있다고 생각한다. 예를 들어, 내 sxxicc의 생성자를 Pub7Proposal 클래스 참깨/OpenRDF 워크 벤치에서 볼 때 13 생성자에 대한 다음과 같은 트리플을 가지고

SUBJECT    PREDICATE   OBJECT 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14591 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14638 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14710 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14787 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14841 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox14927 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15002 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15088 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15114 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15195 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15257 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15336 
sxxicc:Pub7Proposal spin:constructor _:node1anlqmpiox15377 

정말 필요한 것은 (내가 생각하는)에

  1. 규칙입니다 스스로 (내 ?thisConstructorURI 아이디어)
  2. 것은 내가 그들을 쓸 때 규칙의 이름을 할 수 있기를 참조 할 수 있습니다 (예 : sxxicci:Pub7ProposalSecurityClassificationConsistencyCheck)
,

이것은 규칙을 하나씩 (또는 임의의 명명 된 그룹에서 간단한 확장으로) 활성화/비활성화 할 수 있도록하기위한 것입니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

위의 1. 만족은 spin:ConstraintViolation에 포함될 수있는 제약 조건에 대해 이미 지원되는 spin:violationSource과 유사합니다. 그러나 제약 조건 대신 생성자를 사용하는 것은 의도적으로 클래스의 인스턴스화를 차단하고 싶지 않기 때문에 주로 의도적으로 사용하고 있습니다.

현재의 SPIN 표준 및 구현은이를 지원하지 않으며이를 지원하기 위해 표준을 확장하기 위해 지원 구현을 변경해야 할 것이라고 생각합니다.

+0

나는 조금 진전되었지만 어색함. 생성자는 다음과 같은 고유 한 주석 문자열이 있다고 가정하여 자신을 찾을 수 있습니다. 'sxxicc : Pub7Proposal sxxicc : activeSxxiPub7ComplianceCheckRule? thisRule. ? thisRule rdfs : comment "주요 기능 식별 정보가 잘못되었습니다. (511 02)"^^ xsd : string .' –

답변

1

나는 생성자를 활성화/비활성화하는 데 어려움을 겪었습니다. 나는 다음과 같은 하위 속성 구조를 사용하고 있습니다 : 내가 따라 다음 conststructor을 만들

spin:constructor 
    sxxicc:sxxiPub7ComplianceCheckRule 
    sxxicc:activeSxxiPub7ComplianceCheckRule 

sxxicc:sxxiPub7ComplianceCheckRule :

# THE MAJOR FUNCTION IDENTIFIER IS INVALID. (511 02) 
CONSTRUCT { 
    ?this sxxicc:pub7ProposalHasComplianceMessage "THE MAJOR FUNCTION IDENTIFIER IS INVALID. (511 02)"^^xsd:string . 
} 
WHERE { 
    ?this a sxxicc:Pub7Proposal . 
    ?this sxxicc:pub7ProposalHasDataItem ?dataItem511 . 
    sxxicc:Pub7Proposal sxxicc:activeSxxiPub7ComplianceCheckRule ?thisRule . 
    ?thisRule rdfs:comment "THE MAJOR FUNCTION IDENTIFIER IS INVALID. (511 02)"^^xsd:string . 
    ?dataItem511 a sxxicc:Pub7DataItem511 . 
    ?dataItem511 sxxicc:pub7DataItemHasStringValue ?majorFunctionID . 
    ?this sxxicc:pub7ProposalHasDataItem ?dataItem102 . 
    ?dataItem102 a sxxicc:Pub7DataItem102 . 
    ?dataItem102 sxxicc:pub7DataItemHasStringValue ?serialNumString . 
    BIND (SUBSTR(?serialNumString, 1, 4) AS ?orgString) . 
    FILTER (((((?orgString = SUBSTR("AF X"^^xsd:string, 1, 4)) || (?orgString = SUBSTR("AR X"^^xsd:string, 1, 4))) || (?orgString = SUBSTR("N X"^^xsd:string, 1, 4))) || (?orgString = SUBSTR("NS X"^^xsd:string, 1, 4))) || (?orgString = SUBSTR("MC X"^^xsd:string, 1, 4))) . 
    FILTER (!(((((((((((?majorFunctionID = "AIR OPERATIONS") || (?majorFunctionID = "GROUND OPERATIONS")) || (?majorFunctionID = "SEA OPERATIONS")) || (?majorFunctionID = "SPACE OPERATIONS")) || (?majorFunctionID = "RANGE OPERATIONS")) || (?majorFunctionID = "SURVEILLANCE/RECONNAISSANCE")) || (?majorFunctionID = "SPECIAL OPERATIONS")) || (?majorFunctionID = "C3")) || (?majorFunctionID = "SUSTAINING OPERATIONS")) || (?majorFunctionID = "DOMESTIC SUPPORT OPERATIONS")) || (?majorFunctionID = "OTHER OPERATIONS"))) . 
} 

활성화를위한이 쿼리의 가장 관련성 라인

은 다음과 같습니다

sxxicc:Pub7Proposal sxxicc:activeSxxiPub7ComplianceCheckRule ?thisRule . 
?thisRule rdfs:comment "THE MAJOR FUNCTION IDENTIFIER IS INVALID. (511 02)"^^xsd:string . 

기본적으로이 규칙에는 수퍼 속성이 있지만 활성 하위 속성이 없으므로 오류 메시지가 생성 될 수 없습니다.sxxicc:Pub7ProposaldataItem511으로 설정하여 "확인 표시"로 설정하여 확인했습니다 (올바른 주요 기능 식별자가 아님). 이 생성자는 오류 메시지를 생성하지 않습니다.

나는 다음이 생성자에 "활성"변경하려면 OpenRDF 워크 벤치 "수정/SPARQL 업데이트"에서 다음 SPARQL 업데이트 쿼리를 실행 :

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX sxxicc: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheck#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX sp: <http://spinrdf.org/sp#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX smf: <http://topbraid.org/sparqlmotionfunctions#> 
PREFIX fn: <http://www.w3.org/2005/xpath-functions#> 
PREFIX spl: <http://spinrdf.org/spl#> 
PREFIX spin: <http://spinrdf.org/spin#> 
PREFIX arg: <http://spinrdf.org/arg#> 
PREFIX SXXIComplianceCheckIndividuals: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheckIndividuals#> 
PREFIX sxxicci: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/SXXIComplianceCheckIndividuals#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX bugs: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction#> 
PREFIX BugReproduction: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproduction#> 
PREFIX bugsi: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#> 
PREFIX BugReproductionInstantiations: <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/BugReproductionInstantiations#> 

INSERT { 
    sxxicc:Pub7Proposal sxxicc:activeSxxiPub7ComplianceCheckRule ?thisRule . 
} 
WHERE { 
    sxxicc:Pub7Proposal sxxicc:sxxiPub7ComplianceCheckRule ?thisRule . 
    ?thisRule rdfs:comment "THE MAJOR FUNCTION IDENTIFIER IS INVALID. (511 02)"^^xsd:string . 
} 

내가 다른 동일 sxxicc:Pub7Proposal (다른 IRI)를 주장, 그리고이 규칙은 실제로 "시력 관찰"이 예상대로 중요한 주요 기능 식별자가 아니라고 불평했습니다.

동일한 양식이지만 위의 INSERT 절 (동일한 트리플)을 대체하는 DELETE 절이있는 쿼리는 생성자를 동적으로 비활성화 할 수 있습니다. 보다 정확하게는 오류 메시지가 다시 생성되는 것을 방지합니다.

이것은 생성자의 동적 활성화 및 비활성화를 수행하는 비효율적 인 방법입니다. 나는 생성자를 고정시키는 빈 노드 주위를 돌아서 많은 작업을하고있다. 유일성을 보장하기 위해 규칙의 주석을 사용하고 있으며 규칙 자체의 검색 범위를 제한하기 위해 자체 하위 속성을 사용하고 있습니다. 나는 더 나은 방법을 동적으로/생성자 규칙을 완전히로드/언로 드하지 않고 활성화/비활성화하는 것을 원합니다. 규칙 엔진 자체가 "활성"개념을 이해하면 "비활성"규칙을 불필요하게 실행하여 비활성 상태임을 알 수 있으므로 좋을 것입니다.