Search code examples
sparqlrdfowlontologyrdfs

Custom ontology and RDFs


I created a custom OWL ontology using Protege which is serialized in a tree-based RDF/XML format.

What I want to do is create RDF triples from my predefined classes in custom ontology and store them in RDF file. And query those triples using SPARQL. How can I do this?

=== Update ===

This is what my custom ontology looks like, which has Comment class and isAbout object property.

<?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>

And my RDF file looks like

<?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>

So i can't figure it out a way to comment which is created from Comment class.

can't I write something like ?

select *
where {
  ?Comment rdf:type ns:Review ;
}

Solution

  • RDF/XML is RDF. Any repository or library that accepts SPARQL queries should also accept the file as it is, through whichever loading mechanism the library supports. For example, Jena and ARQ would be able to deal with that as libraries, and Fuseki as a SPARQL endpoint.