Semantic Web Technologies: RDFS Inference
来源:互联网 发布:web前端后端数据交互 编辑:程序博客网 时间:2024/04/26 12:10
The purpose of this lab is to build an RDFS inference engine using a rule system.
Introduction
RDFS reasoning can be realized by a set of rules (See Figure 1). Therefore, RFDS reasoning can be implemented using a rule engine. Each RDF triple xxx yyy zzz . can be modeled as a (Datalog) fact.
triple(xxx, yyy, zzz)
The entailment patterns can be modeled as Datalog rules. For instance, entailment pattern rdfs2 said that
If S contains triples “aaa rdfs:domain xxx .” and “yyy aaa zzz .”, then S RDFS entails the triple “yyy rdf:type xxx .”
It can be captured by the following Datalog rule
triple(Y, "rdf:type", X) :- triple(A, "rdfs:domain", X), triple(Y, A, Z).
Together with the the following facts
triple(":hasTripAdvisorRating", "rdfs:domain", ":TourismObject").triple("i:ChickenHut", ":hasTripAdvisorRating", "3.5") .
We can compute all the entailed triples using a Datalog engine like DLV.
$ ~/bin/dlv rdfs-2-example.dlvDLV [build BEN+ODBC/Dec 17 2012 gcc 4.2.1 (Apple Inc. build 5666) (dot 3)]{ triple(":hasTripAdvisorRating","rdfs:domain",":TourismObject"), triple("i:ChickenHut","rdf:type",":TourismObject"), triple("i:ChickenHut",":hasTripAdvisorRating","3.5") }
Figure 1: RFDS Entailment Patterns
Tasks
Convert the tourism RDFS ontology into a Datalog file (“tourism.dlv”).
tourism-rdfs.ttl
@prefix : <http://example.org/term/> .@prefix i: <http://example.org/inst/> .@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .:Museum rdfs:subClassOf :TourismAttraction .:ArtMeseum rdfs:subClassOf :Museum .:ModernArtMuseum rdfs:subClassOf :ArtMeseum .:Landmark rdfs:subClassOf :TourismAttraction .:OutdoorSpot rdfs:subClassOf :TourismAttraction .:AmusementPark rdfs:subClassOf :TourismAttraction .:Restaurant rdfs:subClassOf :TourismObject .:Hotel rdfs:subClassOf :TourismObject .:TourismAttraction rdfs:subClassOf :TourismObject .:hasTripAdvisorRating rdfs:domain :TourismObject .:hasTripAdvisorRating rdfs:subPropertyOf :hasRating .i:Museion rdf:type :ModernArtMuseum .The TripAdvisor rating of Chicken Hut is 3.5.i:ChickenHut :hasTripAdvisorRating "3.5"^^xsd:decimal .
tourism.dlv
triple(":Museum", "rdfs:subClassOf", ":TourismAttraction") .triple(":ArtMeseum", "rdfs:subClassOf", ":Museum") .triple(":ModernArtMuseum", "rdfs:subClassOf", ":ArtMeseum") .triple(":Landmark", "rdfs:subClassOf", ":TourismAttraction") .triple(":OutdoorSpot", "rdfs:subClassOf", ":TourismAttraction") .triple(":AmusementPark", "rdfs:subClassOf", ":TourismAttraction") .triple(":Restaurant", "rdfs:subClassOf", ":TourismObject") .triple(":Hotel", "rdfs:subClassOf", ":TourismObject") .triple(":TourismAttraction", "rdfs:subClassOf", ":TourismObject") .triple(":hasTripAdvisorRating", "rdfs:domain", ":TourismObject") .triple(":hasTripAdvisorRating", "rdfs:subPropertyOf", ":hasRating") .triple("i:Museion", "rdf:type", ":ModernArtMuseum") .triple("i:ChickenHut", ":hasTripAdvisorRating", "3.5^^xsd:decimal") .
Implement rdfs2, rdfs3, rdfs5, rdfs7, rdfs9, rdfs11 in Datalog (“rdfs.dlv”)
rdfs.dlv
% RDFS2triple(Y, "rdf:type", X) :- triple(A, "rdfs:domain", X), triple(Y, A, Z).% RDFS3triple(Z, "rdf:type", X) :- triple(A, "rdfs:range", X), triple(Y, A, Z).% RDFS5triple(X, "rdfs:subPropertyOf", Z) :- triple(X, "rdfs:subPropertyOf", Y), triple(Y, "rdfs:subPropertyOf", Z).% RDFS7triple(X, B, Y) :- triple(A, "rdfs:subPropertyOf", B), triple(X, A, Y).% RDFS9triple(Z, "rdf:type", Y) :- triple(X, "rdfs:subClassOf", Y), triple(Z, "rdf:type", X).% RDFS11triple(X, "rdfs:subClassOf", Z) :- triple(X, "rdfs:subClassOf", Y), triple(Y, "rdfs:subClassOf", Z).
Test“tourism.dlv”and“rdfs.dlv”using DLV to check whether we can get all expected entailed triples.
dlv.mingw tourism.dlv
We can see that the output is the same as its original data.
{triple(":Museum","rdfs:subClassOf",":TourismAttraction"), triple(":TourismAttraction","rdfs:subClassOf",":TourismObject"), triple(":ArtMeseum","rdfs:subClassOf",":Museum"), triple(":ModernArtMuseum","rdfs:subClassOf",":ArtMeseum"), triple(":Landmark","rdfs:subClassOf",":TourismAttraction"), triple(":OutdoorSpot","rdfs:subClassOf",":TourismAttraction"), triple(":AmusementPark","rdfs:subClassOf",":TourismAttraction"), triple(":Restaurant","rdfs:subClassOf",":TourismObject"), triple(":Hotel","rdfs:subClassOf",":TourismObject"), triple(":hasTripAdvisorRating","rdfs:domain",":TourismObject"), triple(":hasTripAdvisorRating","rdfs:subPropertyOf",":hasRating"), triple("i:Museion","rdf:type",":ModernArtMuseum"), triple("i:ChickenHut",":hasTripAdvisorRating","3.5^^xsd:decimal")}
dlv.mingw tourism.dlv rdfs.dlv
Now we can see that we successfully get all the entailed triples using DLV.
{triple(":Museum","rdfs:subClassOf",":TourismAttraction"), triple(":Museum","rdfs:subClassOf",":TourismObject"), triple(":TourismAttraction","rdfs:subClassOf",":TourismObject"), triple(":ArtMeseum","rdfs:subClassOf",":Museum"), triple(":ArtMeseum","rdfs:subClassOf",":TourismAttraction"), triple(":ArtMeseum","rdfs:subClassOf",":TourismObject"), triple(":ModernArtMuseum","rdfs:subClassOf",":Museum"), triple(":ModernArtMuseum","rdfs:subClassOf",":TourismAttraction"), triple(":ModernArtMuseum","rdfs:subClassOf",":ArtMeseum"), triple(":ModernArtMuseum","rdfs:subClassOf",":TourismObject"), triple(":Landmark","rdfs:subClassOf",":TourismAttraction"), triple(":Landmark","rdfs:subClassOf",":TourismObject"), triple(":OutdoorSpot","rdfs:subClassOf",":TourismAttraction"), triple(":OutdoorSpot","rdfs:subClassOf",":TourismObject"), triple(":AmusementPark","rdfs:subClassOf",":TourismAttraction"), triple(":AmusementPark","rdfs:subClassOf",":TourismObject"), triple(":Restaurant","rdfs:subClassOf",":TourismObject"), triple(":Hotel","rdfs:subClassOf",":TourismObject"), triple(":hasTripAdvisorRating","rdfs:domain",":TourismObject"), triple(":hasTripAdvisorRating","rdfs:subPropertyOf",":hasRating"), triple("i:Museion","rdf:type",":Museum"), triple("i:Museion","rdf:type",":TourismAttraction"), triple("i:Museion","rdf:type",":ArtMeseum"), triple("i:Museion","rdf:type",":ModernArtMuseum"), triple("i:Museion","rdf:type",":TourismObject"), triple("i:ChickenHut",":hasTripAdvisorRating","3.5^^xsd:decimal"), triple("i:ChickenHut",":hasRating","3.5^^xsd:decimal"), triple("i:ChickenHut","rdf:type",":TourismObject")}
Analyzation
triple(":Museum", "rdfs:subClassOf", ":TourismAttraction") .triple(":TourismAttraction", "rdfs:subClassOf", ":TourismObject") .
According to RDFS11 rule
triple(X, "rdfs:subClassOf", Z) :- triple(X, "rdfs:subClassOf", Y), triple(Y, "rdfs:subClassOf", Z).
here X
triple(":Museum", "rdfs:subClassOf", ":TourismObject") .
- Semantic Web Technologies: RDFS Inference
- 语义网技术(Semantic Web Technologies)复习资料
- Semantic Web for the Working Ontologist: Effective Modeling in RDFS and OWL
- Semantic Web Technologies : Trends and Research in Ontology-based Systems
- Semantic Web Technologies and E-Business: Toward the Integrated Virtual Organization and Business Pr
- Semantic Web
- Semantic Web
- Semantic Web
- semantic web
- Practical Web Technologies
- For Web Software Technologies' Homework
- Resource for Semantic Web
- Semantic Web相关资源
- Tags or Semantic Web
- Semantic Web介绍
- 语义网(Semantic Web)
- Semantic Web学习资料库
- Semantic Web 参考资料
- 51nod 1490 多重游戏
- tmux
- HBase内置过滤器的一些总结
- 【LeetCode】45. Jump Game II (Hard)
- Unity3D自学笔记——UGUI背包系统(八)物品的分类与整理
- Semantic Web Technologies: RDFS Inference
- OJ_1186数学公式【在化简分数时调用函数进行化简】【简便方法】
- 基于可靠消息的分布式事务错误处理
- 高并发性能的提升
- 错位排列的魅力
- SQL语句之CASE WHEN
- int 和 Integer 的区别
- Unity3D自学笔记——UGUI背包系统(九)装备对HP影响的逻辑及使用药品
- 【LeetCode】329. Longest Increasing Path in a Matrix (Hard)