自定义 ontology 和 RDF
Custom ontology and RDFs
我使用 Protege 创建了自定义 OWL ontology,它以基于树的 RDF/XML 格式序列化。
我想要做的是从自定义 ontology 中预定义的 classes 创建 RDF 三元组并将它们存储在 RDF 文件中。并使用 SPARQL 查询这些三元组。我怎样才能做到这一点?
===更新===
这是我的自定义 ontology 的样子,其中包含评论 class 和
isAbout 对象 属性.
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY reviews_2 "http://review-analyzer.local/ontologies/reviews_2.owl#" >
]>
<rdf:RDF xmlns="http://review-analyzer.local/ontologies/reviews_2.owl#"
xml:base="http://review-analyzer.local/ontologies/reviews_2.owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:reviews_2="http://review-analyzer.local/ontologies/reviews_2.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://review-analyzer.local/ontologies/reviews_2.owl"/>
<!--
//
// Object Properties
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#isAbout -->
<owl:ObjectProperty rdf:about="&reviews_2;isAbout">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&reviews_2;Feature"/>
<rdfs:domain rdf:resource="&reviews_2;Review"/>
</owl:ObjectProperty>
<!--
//
// Data properties
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#comment -->
<owl:DatatypeProperty rdf:about="&reviews_2;comment">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&reviews_2;Review"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#rating -->
<owl:DatatypeProperty rdf:about="&reviews_2;rating">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&reviews_2;Review"/>
<rdfs:range rdf:resource="&xsd;integer"/>
</owl:DatatypeProperty>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#type -->
<owl:DatatypeProperty rdf:about="&reviews_2;type">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&reviews_2;Feature"/>
</owl:DatatypeProperty>
<!--
//
// Classes
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Battery -->
<owl:Class rdf:about="&reviews_2;Battery">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Body -->
<owl:Class rdf:about="&reviews_2;Body">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Camera -->
<owl:Class rdf:about="&reviews_2;Camera">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Display -->
<owl:Class rdf:about="&reviews_2;Display">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Feature -->
<owl:Class rdf:about="&reviews_2;Feature"/>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Memory -->
<owl:Class rdf:about="&reviews_2;Memory">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Platform -->
<owl:Class rdf:about="&reviews_2;Platform">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Review -->
<owl:Class rdf:about="&reviews_2;Review"/>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#front -->
<owl:Class rdf:about="&reviews_2;front">
<rdfs:subClassOf rdf:resource="&reviews_2;Camera"/>
</owl:Class>
<!--
//
// Individuals
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Battery -->
<owl:NamedIndividual rdf:about="&reviews_2;Battery">
<rdf:type rdf:resource="&reviews_2;Battery"/>
<type rdf:datatype="&xsd;string">battery</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#OLED -->
<owl:NamedIndividual rdf:about="&reviews_2;OLED">
<rdf:type rdf:resource="&reviews_2;Display"/>
<type rdf:datatype="&xsd;string">OLED</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#amoled -->
<owl:NamedIndividual rdf:about="&reviews_2;amoled">
<rdf:type rdf:resource="&reviews_2;Display"/>
<type rdf:datatype="&xsd;string">amoled</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#fCameraReview -->
<owl:NamedIndividual rdf:about="&reviews_2;fCameraReview">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">3</rating>
<comment rdf:datatype="&xsd;string">awesome</comment>
<isAbout rdf:resource="&reviews_2;frontCamera"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#frontCamera -->
<owl:NamedIndividual rdf:about="&reviews_2;frontCamera">
<rdf:type rdf:resource="&reviews_2;front"/>
<type rdf:datatype="&xsd;string">front camera</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#review -->
<owl:NamedIndividual rdf:about="&reviews_2;review">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">3</rating>
<comment rdf:datatype="&xsd;string">great</comment>
<isAbout rdf:resource="&reviews_2;amoled"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#tt -->
<owl:NamedIndividual rdf:about="&reviews_2;tt">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">3</rating>
<comment rdf:datatype="&xsd;string">nice one</comment>
<isAbout rdf:resource="&reviews_2;amoled"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#tt2 -->
<owl:NamedIndividual rdf:about="&reviews_2;tt2">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">2</rating>
<comment rdf:datatype="&xsd;string">dfgh</comment>
<isAbout rdf:resource="&reviews_2;amoled"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#xx -->
<owl:NamedIndividual rdf:about="&reviews_2;xx">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">4</rating>
<comment rdf:datatype="&xsd;string">great battery</comment>
<isAbout rdf:resource="&reviews_2;Battery"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#xx2 -->
<owl:NamedIndividual rdf:about="&reviews_2;xx2">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">1</rating>
<comment rdf:datatype="&xsd;string">fghjk</comment>
<isAbout rdf:resource="&reviews_2;frontCamera"/>
</owl:NamedIndividual>
<!--
//
// General axioms
//
-->
<rdf:Description>
<rdf:type rdf:resource="&owl;AllDisjointClasses"/>
<owl:members rdf:parseType="Collection">
<rdf:Description rdf:about="&reviews_2;Battery"/>
<rdf:Description rdf:about="&reviews_2;Body"/>
<rdf:Description rdf:about="&reviews_2;Camera"/>
<rdf:Description rdf:about="&reviews_2;Display"/>
<rdf:Description rdf:about="&reviews_2;Memory"/>
<rdf:Description rdf:about="&reviews_2;Platform"/>
</owl:members>
</rdf:Description>
</rdf:RDF>
我的 RDF 文件看起来像
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:cmnt="http://review-analyzer.local/ontologies/reviews_2.owl#"
xmlns:admin="http://webns.net/mvcb/">
<cmnt:Comment rdf:ID="me">
<cmnt:review>Great one!</cmnt:review>
<cmnt:raitng>5</cmnt:raitng>
<cmnt:isAbout>
<cmnt:Display rdf:ID="amoled">
<cmnt:type>amoled</cmnt:type>
</cmnt:Display>
</cmnt:isAbout>
</cmnt:Comment>
</rdf:RDF>
所以我想不出从评论 class 创建评论的方法。
我不能写类似的东西吗?
select *
where {
?Comment rdf:type ns:Review ;
}
RDF/XML 是 RDF。任何接受 SPARQL 查询的存储库或库也应该通过库支持的任何加载机制按原样接受文件。例如,Jena 和 ARQ 可以将其作为库来处理,而 Fuseki 作为 SPARQL 端点来处理。
我使用 Protege 创建了自定义 OWL ontology,它以基于树的 RDF/XML 格式序列化。
我想要做的是从自定义 ontology 中预定义的 classes 创建 RDF 三元组并将它们存储在 RDF 文件中。并使用 SPARQL 查询这些三元组。我怎样才能做到这一点?
===更新===
这是我的自定义 ontology 的样子,其中包含评论 class 和 isAbout 对象 属性.
<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
<!ENTITY owl "http://www.w3.org/2002/07/owl#" >
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
<!ENTITY reviews_2 "http://review-analyzer.local/ontologies/reviews_2.owl#" >
]>
<rdf:RDF xmlns="http://review-analyzer.local/ontologies/reviews_2.owl#"
xml:base="http://review-analyzer.local/ontologies/reviews_2.owl"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:reviews_2="http://review-analyzer.local/ontologies/reviews_2.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<owl:Ontology rdf:about="http://review-analyzer.local/ontologies/reviews_2.owl"/>
<!--
//
// Object Properties
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#isAbout -->
<owl:ObjectProperty rdf:about="&reviews_2;isAbout">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:range rdf:resource="&reviews_2;Feature"/>
<rdfs:domain rdf:resource="&reviews_2;Review"/>
</owl:ObjectProperty>
<!--
//
// Data properties
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#comment -->
<owl:DatatypeProperty rdf:about="&reviews_2;comment">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&reviews_2;Review"/>
<rdfs:range rdf:resource="&xsd;string"/>
</owl:DatatypeProperty>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#rating -->
<owl:DatatypeProperty rdf:about="&reviews_2;rating">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&reviews_2;Review"/>
<rdfs:range rdf:resource="&xsd;integer"/>
</owl:DatatypeProperty>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#type -->
<owl:DatatypeProperty rdf:about="&reviews_2;type">
<rdf:type rdf:resource="&owl;FunctionalProperty"/>
<rdfs:domain rdf:resource="&reviews_2;Feature"/>
</owl:DatatypeProperty>
<!--
//
// Classes
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Battery -->
<owl:Class rdf:about="&reviews_2;Battery">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Body -->
<owl:Class rdf:about="&reviews_2;Body">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Camera -->
<owl:Class rdf:about="&reviews_2;Camera">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Display -->
<owl:Class rdf:about="&reviews_2;Display">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Feature -->
<owl:Class rdf:about="&reviews_2;Feature"/>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Memory -->
<owl:Class rdf:about="&reviews_2;Memory">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Platform -->
<owl:Class rdf:about="&reviews_2;Platform">
<rdfs:subClassOf rdf:resource="&reviews_2;Feature"/>
</owl:Class>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Review -->
<owl:Class rdf:about="&reviews_2;Review"/>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#front -->
<owl:Class rdf:about="&reviews_2;front">
<rdfs:subClassOf rdf:resource="&reviews_2;Camera"/>
</owl:Class>
<!--
//
// Individuals
//
-->
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#Battery -->
<owl:NamedIndividual rdf:about="&reviews_2;Battery">
<rdf:type rdf:resource="&reviews_2;Battery"/>
<type rdf:datatype="&xsd;string">battery</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#OLED -->
<owl:NamedIndividual rdf:about="&reviews_2;OLED">
<rdf:type rdf:resource="&reviews_2;Display"/>
<type rdf:datatype="&xsd;string">OLED</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#amoled -->
<owl:NamedIndividual rdf:about="&reviews_2;amoled">
<rdf:type rdf:resource="&reviews_2;Display"/>
<type rdf:datatype="&xsd;string">amoled</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#fCameraReview -->
<owl:NamedIndividual rdf:about="&reviews_2;fCameraReview">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">3</rating>
<comment rdf:datatype="&xsd;string">awesome</comment>
<isAbout rdf:resource="&reviews_2;frontCamera"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#frontCamera -->
<owl:NamedIndividual rdf:about="&reviews_2;frontCamera">
<rdf:type rdf:resource="&reviews_2;front"/>
<type rdf:datatype="&xsd;string">front camera</type>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#review -->
<owl:NamedIndividual rdf:about="&reviews_2;review">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">3</rating>
<comment rdf:datatype="&xsd;string">great</comment>
<isAbout rdf:resource="&reviews_2;amoled"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#tt -->
<owl:NamedIndividual rdf:about="&reviews_2;tt">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">3</rating>
<comment rdf:datatype="&xsd;string">nice one</comment>
<isAbout rdf:resource="&reviews_2;amoled"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#tt2 -->
<owl:NamedIndividual rdf:about="&reviews_2;tt2">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">2</rating>
<comment rdf:datatype="&xsd;string">dfgh</comment>
<isAbout rdf:resource="&reviews_2;amoled"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#xx -->
<owl:NamedIndividual rdf:about="&reviews_2;xx">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">4</rating>
<comment rdf:datatype="&xsd;string">great battery</comment>
<isAbout rdf:resource="&reviews_2;Battery"/>
</owl:NamedIndividual>
<!-- http://review-analyzer.local/ontologies/reviews_2.owl#xx2 -->
<owl:NamedIndividual rdf:about="&reviews_2;xx2">
<rdf:type rdf:resource="&reviews_2;Review"/>
<rating rdf:datatype="&xsd;integer">1</rating>
<comment rdf:datatype="&xsd;string">fghjk</comment>
<isAbout rdf:resource="&reviews_2;frontCamera"/>
</owl:NamedIndividual>
<!--
//
// General axioms
//
-->
<rdf:Description>
<rdf:type rdf:resource="&owl;AllDisjointClasses"/>
<owl:members rdf:parseType="Collection">
<rdf:Description rdf:about="&reviews_2;Battery"/>
<rdf:Description rdf:about="&reviews_2;Body"/>
<rdf:Description rdf:about="&reviews_2;Camera"/>
<rdf:Description rdf:about="&reviews_2;Display"/>
<rdf:Description rdf:about="&reviews_2;Memory"/>
<rdf:Description rdf:about="&reviews_2;Platform"/>
</owl:members>
</rdf:Description>
</rdf:RDF>
我的 RDF 文件看起来像
<?xml version="1.0"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:cmnt="http://review-analyzer.local/ontologies/reviews_2.owl#"
xmlns:admin="http://webns.net/mvcb/">
<cmnt:Comment rdf:ID="me">
<cmnt:review>Great one!</cmnt:review>
<cmnt:raitng>5</cmnt:raitng>
<cmnt:isAbout>
<cmnt:Display rdf:ID="amoled">
<cmnt:type>amoled</cmnt:type>
</cmnt:Display>
</cmnt:isAbout>
</cmnt:Comment>
</rdf:RDF>
所以我想不出从评论 class 创建评论的方法。
我不能写类似的东西吗?
select *
where {
?Comment rdf:type ns:Review ;
}
RDF/XML 是 RDF。任何接受 SPARQL 查询的存储库或库也应该通过库支持的任何加载机制按原样接受文件。例如,Jena 和 ARQ 可以将其作为库来处理,而 Fuseki 作为 SPARQL 端点来处理。