@prefix skos: . @prefix dce: . @prefix rdfs: . @prefix validation: . @prefix e: . @prefix log: . dce:title "SKOS Mapping Validation Rules"@en; dce:creator "Hong Sun"@en; dce:contributor "Jos De Roo, Giovanni Mels, Boris De Vloed"@en; dce:publisher "Agfa Healthcare/Belgium"@en; dce:description "Rules for SKOS constraint check"@en; skos:note "Rules to check SKOS mappings which may bring in non-consisitent pattern or vocabulary hijacking."@en; skos:note "A document which further explains these rules can be found at: http://arxiv.org/ftp/arxiv/papers/1310/1310.4156.pdf"@en; rdfs:seeAlso ; rdfs:seeAlso ; rdfs:seeAlso . #CLASSES # Classes, the classes below lists the false/suspicious patterns listed in the associated document. validation:Pattern1NonConsistentWithSKOSExtraRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping consists a cycle the with existing skos:braoderTransitive relation". validation:Pattern1VocabularyHijacking a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping is considered as vocabulary hijacking to the original vocabulary". validation:Pattern1NonConsistentWithSKOSRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping is considered as contradictory with the existing skos:related relation". validation:Pattern2NonConsistentWithSKOSExtraRules a rdfs:Class; rdfs:comment "The inferred skos:exactMatch relation via skos:exactMatch mapping is considered as contradictory with the existing skos:braoderTransitive relation". validation:Pattern2VocabularyHijacking a rdfs:Class; rdfs:comment "The inferred skos:exactMatch relation via skos:exactMatch mapping is considered as vocabulary hijacking to the original vocabulary". validation:Pattern3NonConsistentWithSKOSRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping and skos:broaderTransitive relation is considered as contradictory with the skos:relatedMatch mapping". validation:Pattern3NonConsistentWithSKOSExtraRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping and skos:broaderTransitive relation is considered as contradictory with the skos:exactMatch mapping". validation:Pattern4NonConsistentWithSKOSRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping and skos:broaderTransitive relation is considered as contradictory with the skos:relatedMatch mapping, reverse direction of validation:Pattern3NonConsistentWithSKOSRules". validation:Pattern4NonConsistentWithSKOSExtraRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping and skos:broaderTransitive relation is considered as contradictory with the skos:exactMatch mapping, reverse direction of validation:Pattern3NonConsistentWithSKOSExtraRules". validation:Pattern5NonConsistentWithSKOSExtraRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mappings and skos:broaderTransitive relation is considered as contradictory with the existing skos:braoderTransitive relation". validation:Pattern5NonConsistentWithSKOSRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mappings and skos:broaderTransitive relation is considered as contradictory with the existing skos:related relation". validation:Pattern5VocabularyHijacking a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mappings and skos:broaderTransitive relation is considered as vocabulary hijacking to the original vocabulary". validation:Pattern6NonConsistentWithSKOSRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping and skos:broaderTransitive relations is considered as contradictory with the skos:relatedMatch mapping". validation:Pattern6NonConsistentWithSKOSExtraRules a rdfs:Class; rdfs:comment "The inferred skos:broaderTransitive relation via skos:broadMatch mapping and skos:broaderTransitive relations is considered as contradictory with the skos:exactMatch mapping". validation:Pattern7CounterIntuitive a rdfs:Class; rdfs:comment "The paired mappings creats a cycle on skos:broaderTransitive, indirectly. Therefore this pattern is also considered as suspicious.". # Class relations validation:Pattern1NonConsistentWithSKOSExtraRules rdfs:subClassOf validation:Pattern1VocabularyHijacking. validation:Pattern1NonConsistentWithSKOSRules rdfs:subClassOf validation:Pattern1VocabularyHijacking. validation:Pattern2NonConsistentWithSKOSExtraRules rdfs:subClassOf validation:Pattern2VocabularyHijacking. validation:Pattern5NonConsistentWithSKOSExtraRules rdfs:subClassOf validation:Pattern5VocabularyHijacking. validation:Pattern5NonConsistentWithSKOSRules rdfs:subClassOf validation:Pattern5VocabularyHijacking. #MINIMAL INFERENCE #inference on mapping relations { ?x skos:exactMatch ?y } => { ?y skos:exactMatch ?x }. { ?x skos:narrowMatch ?y } => { ?y skos:broadMatch ?x }. { ?x skos:relatedMatch ?y } => { ?y skos:relatedMatch ?x }. #inference on semantic relations { ?x skos:narrower ?y } => { ?y skos:broader ?x }. { ?x skos:related ?y } => { ?y skos:related ?x }. { ?x skos:broader ?y } => { ?x skos:broaderTransitive ?y }. { ?x skos:broaderTransitive ?y. ?y skos:broaderTransitive ?z } => { ?x skos:broaderTransitive ?z }. #PATTERN DETECTION #Pattern1VocabularyHijacking { ?A1 skos:broadMatch ?B1. ?B1 skos:broadMatch ?A2. ?SCOPE e:findall ( ?A1 { ?A1 skos:broaderTransitive ?A2. } () ). { ?A1 skos:broadMatch ?B1. ?B1 skos:broadMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern1VocabularyHijacking. }. #Pattern1NonConsistentWithSKOSExtraRules { ?A1 skos:broadMatch ?B1. ?B1 skos:broadMatch ?A2. ?A2 skos:broaderTransitive ?A1. { ?A1 skos:broadMatch ?B1. ?B1 skos:broadMatch ?A2. ?A2 skos:broaderTransitive ?A1. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern1NonConsistentWithSKOSExtraRules. }. #Pattern1NonConsistentWithSKOSRules { ?A1 skos:broadMatch ?B1. ?B1 skos:broadMatch ?A2. ?A1 skos:related ?A2. { ?A1 skos:broadMatch ?B1. ?B1 skos:broadMatch ?A2. ?A1 skos:related ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern1NonConsistentWithSKOSRules. }. #Pattern2VocabularyHijacking { ?A1 skos:exactMatch ?B1. ?B1 skos:exactMatch ?A2. ?A1 log:notEqualTo ?A2. { ?A1 skos:exactMatch ?B1. ?B1 skos:exactMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern2VocabularyHijacking. }. #Pattern2NonConsistentWithSKOSExtraRules { ?A1 skos:exactMatch ?B1. ?B1 skos:exactMatch ?A2. ?A1 log:notEqualTo ?A2. ?A2 skos:broaderTransitive ?A1. { ?A1 skos:exactMatch ?B1. ?B1 skos:exactMatch ?A2. ?A2 skos:broaderTransitive ?A1. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern2NonConsistentWithSKOSExtraRules. }. #Pattern3NonConsistentWithSKOSExtraRules { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:exactMatch ?A2. { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:exactMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern3NonConsistentWithSKOSExtraRules. }. #Pattern3NonConsistentWithSKOSRules { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:relatedMatch ?A2. { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:relatedMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern3NonConsistentWithSKOSRules. }. #Pattern4NonConsistentWithSKOSExtraRules { ?A1 skos:broaderTransitive ?A2. ?B1 skos:broadMatch ?A1. ?A2 skos:exactMatch ?B1. { ?A1 skos:broaderTransitive ?A2. ?B1 skos:broadMatch ?A1. ?A2 skos:exactMatch ?B1. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern4NonConsistentWithSKOSExtraRules. }. #Pattern4NonConsistentWithSKOSRules { ?A1 skos:broaderTransitive ?A2. ?B1 skos:broadMatch ?A1. ?A2 skos:relatedMatch ?B1. { ?A1 skos:broaderTransitive ?A2. ?B1 skos:broadMatch ?A1. ?A2 skos:relatedMatch ?B1. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern4NonConsistentWithSKOSRules. }. #Pattern5VocabularyHijacking { ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:broadMatch ?A2. ?A1 log:notEqualTo ?A2. ?SCOPE e:findall ( ?A1 { ?A1 skos:broaderTransitive ?A2. } () ). { ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:broadMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern5VocabularyHijacking. }. #Pattern5NonConsistentWithSKOSExtraRules { ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:broadMatch ?A2. ?A2 skos:broaderTransitive ?A1. { ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:broadMatch ?A2. ?A2 skos:broaderTransitive ?A1. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern5NonConsistentWithSKOSExtraRules. }. #Pattern5NonConsistentWithSKOSRules { ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:broadMatch ?A2. ?A2 skos:related ?A1. { ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:broadMatch ?A2. ?A2 skos:related ?A1. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern5NonConsistentWithSKOSRules. }. #Pattern6NonConsistentWithSKOSExtraRules { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:exactMatch ?A2. { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:exactMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern6NonConsistentWithSKOSExtraRules. }. #Pattern6NonConsistentWithSKOSRules { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:relatedMatch ?A2. { ?A2 skos:broaderTransitive ?A1. ?A1 skos:broadMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:relatedMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern6NonConsistentWithSKOSRules. }. #Pattern7CounterIntuitive { ?A2 skos:broaderTransitive ?A1. ?A1 skos:exactMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:exactMatch ?A2. { ?A2 skos:broaderTransitive ?A1. ?A1 skos:exactMatch ?B1. ?B1 skos:broaderTransitive ?B2. ?B2 skos:exactMatch ?A2. } e:graphCopy ?pattern. } => { ?pattern a validation:Pattern7CounterIntuitive. }.