You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Maatary Daniel OKOUYA <ok...@yahoo.fr> on 2011/08/24 16:48:50 UTC

[RDFS validation]

I have the following RDF schema files:

<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
   xml:base="http://www.people.lu.unisi.ch/fornaran/schemas/ocean-rdf0">

<rdfs:Class rdf:ID="Event">
   <rdfs:subClassOf rdf:resource="http://www.w3c.org/TR/1999/PR-rdf-schema-19990303#Resource 
"/>
</rdfs:Class>

<rdfs:Class rdf:ID="TimeEvent">
   <rdfs:subClassOf rdf:resource="#Event"/>
</rdfs:Class>

<rdf:Property rdf:ID="atTime">
   <rdfs:domain rdf:resource="#Event"/>
</rdf:Property>

<rdfs:Class rdf:ID="Action">
   <rdfs:subClassOf rdf:resource="#Event"/>
   <rdfs:comment>This describes the set of actions</rdfs:comment>
</rdfs:Class>

<rdfs:Class rdf:ID="Agent">
   <rdfs:subClassOf rdf:resource="http://www.w3c.org/TR/1999/PR-rdf-schema-19990303#Resource 
"/>
</rdfs:Class>

<rdf:Property rdf:ID="hasActor">
   <rdfs:domain rdf:resource="#Action"/>
   <rdfs:range rdf:resource="#Agent"/>
</rdf:Property>

<rdf:Property rdf:ID="hasDeadline">
   <rdfs:domain rdf:resource="#Action"/>
</rdf:Property>

<rdf:Property rdf:ID="hasDuration">
   <rdfs:domain rdf:resource="#Action"/>
</rdf:Property>

</rdf:RDF>





<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<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:ocean="http://www.people.lu.unisi.ch/fornaran/schemas/ocean-rdf0# 
"
   xml:base="http://www.people.lu.unisi.ch/fornaran/schemas/app">

<rdfs:Class rdf:ID="Pay">
   <rdfs:subClassOf rdf:resource="ocean:Action"/>
</rdfs:Class>

<rdf:Property rdf:ID="hasAmount">
   <rdfs:domain rdf:resource="ocean:Pay"/>
</rdf:Property>

<rdfs:Class rdf:ID="Deliver">
   <rdfs:subClassOf rdf:resource="ocean:Action"/>
</rdfs:Class>

<rdf:Property rdf:ID="hasRecipient">
   <rdfs:domain rdf:resource="ocean:Deliver"/>
   <rdfs:domain rdf:resource="ocean:Pay"/>
</rdf:Property>

<rdf:Property rdf:ID="hasObject">
   <rdfs:domain rdf:resource="ocean:Deliver"/>
</rdf:Property>

</rdf:RDF>




the following instance file where i have included the misstake  
<app:hasAmounty>5</app:hasAmounty> hasAmounty is defined nowhere:

<!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
<rdf:RDF    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:ocean="http://www.people.lu.unisi.ch/fornaran/schemas/ocean-rdf0# 
"
             xmlns:app="http://www.people.lu.unisi.ch/fornaran/schemas/app-rdf0# 
"
             xml:base="http://www.people.lu.unisi.ch/fornaran/example/promise 
">

   <app:Pay rdf:ID="JohnAction1">
        <ocean:hasActor>John</ocean:hasActor>
        <ocean:hasDuration>2</ocean:hasDuration>
        <app:hasRecipient>Mary</app:hasRecipient>
        <app:hasAmount>5</app:hasAmount>
        <app:hasAmounty>5</app:hasAmounty>
   </app:Pay>

   <app:Deliver rdf:ID="MaryAction1">
        <ocean:hasActor>Mary</ocean:hasActor>
        <app:hasRecipient>John</app:hasRecipient>
        <app:hasObject rdf:resource="#book1"></app:hasObject>
   </app:Deliver>

   <app:book rdf:ID="book1"></app:book>

</rdf:RDF>


I don't understand why the validation do not raise an error.

here is my code

/ create an empty model
         Model modelschema =  
FileManager.get().loadModel(modelschemafilename);
         Model modelschema2 =  
FileManager.get().loadModel(modelschemafilename2);
         modelschema.add(modelschema2);
         Model model = FileManager.get().loadModel(modelfilename);


InfModel inf = ModelFactory.createRDFSModel(modelschema, model);
         ValidityReport vrpt = inf.validate();


         System.out.println("is valid: " + vrpt.isValid());
         System.out.println("is clean: " + vrpt.isClean());
         Iterator<Report> itrpt = vrpt.getReports();

         while(itrpt.hasNext()) {
         	Report rpt =  itrpt.next();
         	rpt.toString();
         }


And the answer is always:


is valid: true
is clean: true


Can anyone give a hand here ?


Re: [RDFS validation]

Posted by Paolo Castagna <ca...@googlemail.com>.
See, for example, here:

 "RDFS/OWL are not constraint or validation languages"
  http://answers.semanticweb.com/questions/1837/common-semantic-web-misconceptions-youve-encountered

You might be interested in http://openjena.org/Eyeball/ which, according to the
documentation, can check for "unknown [with respect to the schemas] properties
and classes".

Paolo

Maatary Daniel OKOUYA wrote:
> I have the following RDF schema files:
> 
> <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
> <rdf:RDF
>   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>   xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
>   xml:base="http://www.people.lu.unisi.ch/fornaran/schemas/ocean-rdf0">
> 
> <rdfs:Class rdf:ID="Event">
>   <rdfs:subClassOf
> rdf:resource="http://www.w3c.org/TR/1999/PR-rdf-schema-19990303#Resource"/>
> </rdfs:Class>
> 
> <rdfs:Class rdf:ID="TimeEvent">
>   <rdfs:subClassOf rdf:resource="#Event"/>
> </rdfs:Class>
> 
> <rdf:Property rdf:ID="atTime">
>   <rdfs:domain rdf:resource="#Event"/>
> </rdf:Property>
> 
> <rdfs:Class rdf:ID="Action">
>   <rdfs:subClassOf rdf:resource="#Event"/>
>   <rdfs:comment>This describes the set of actions</rdfs:comment>
> </rdfs:Class>
> 
> <rdfs:Class rdf:ID="Agent">
>   <rdfs:subClassOf
> rdf:resource="http://www.w3c.org/TR/1999/PR-rdf-schema-19990303#Resource"/>
> </rdfs:Class>
> 
> <rdf:Property rdf:ID="hasActor">
>   <rdfs:domain rdf:resource="#Action"/>
>   <rdfs:range rdf:resource="#Agent"/>
> </rdf:Property>
> 
> <rdf:Property rdf:ID="hasDeadline">
>   <rdfs:domain rdf:resource="#Action"/>
> </rdf:Property>
> 
> <rdf:Property rdf:ID="hasDuration">
>   <rdfs:domain rdf:resource="#Action"/>
> </rdf:Property>
> 
> </rdf:RDF>
> 
> 
> 
> 
> 
> <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
> <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:ocean="http://www.people.lu.unisi.ch/fornaran/schemas/ocean-rdf0#"
>   xml:base="http://www.people.lu.unisi.ch/fornaran/schemas/app">
> 
> <rdfs:Class rdf:ID="Pay">
>   <rdfs:subClassOf rdf:resource="ocean:Action"/>
> </rdfs:Class>
> 
> <rdf:Property rdf:ID="hasAmount">
>   <rdfs:domain rdf:resource="ocean:Pay"/>
> </rdf:Property>
> 
> <rdfs:Class rdf:ID="Deliver">
>   <rdfs:subClassOf rdf:resource="ocean:Action"/>
> </rdfs:Class>
> 
> <rdf:Property rdf:ID="hasRecipient">
>   <rdfs:domain rdf:resource="ocean:Deliver"/>
>   <rdfs:domain rdf:resource="ocean:Pay"/>
> </rdf:Property>
> 
> <rdf:Property rdf:ID="hasObject">
>   <rdfs:domain rdf:resource="ocean:Deliver"/>
> </rdf:Property>
> 
> </rdf:RDF>
> 
> 
> 
> 
> the following instance file where i have included the misstake
> <app:hasAmounty>5</app:hasAmounty> hasAmounty is defined nowhere:
> 
> <!DOCTYPE rdf:RDF [<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#">]>
> <rdf:RDF    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>            
> xmlns:ocean="http://www.people.lu.unisi.ch/fornaran/schemas/ocean-rdf0#"
>            
> xmlns:app="http://www.people.lu.unisi.ch/fornaran/schemas/app-rdf0#"
>            
> xml:base="http://www.people.lu.unisi.ch/fornaran/example/promise">
> 
>   <app:Pay rdf:ID="JohnAction1">
>        <ocean:hasActor>John</ocean:hasActor>
>        <ocean:hasDuration>2</ocean:hasDuration>
>        <app:hasRecipient>Mary</app:hasRecipient>
>        <app:hasAmount>5</app:hasAmount>
>        <app:hasAmounty>5</app:hasAmounty>
>   </app:Pay>
> 
>   <app:Deliver rdf:ID="MaryAction1">
>        <ocean:hasActor>Mary</ocean:hasActor>
>        <app:hasRecipient>John</app:hasRecipient>
>        <app:hasObject rdf:resource="#book1"></app:hasObject>
>   </app:Deliver>
> 
>   <app:book rdf:ID="book1"></app:book>
> 
> </rdf:RDF>
> 
> 
> I don't understand why the validation do not raise an error.
> 
> here is my code
> 
> / create an empty model
>         Model modelschema =
> FileManager.get().loadModel(modelschemafilename);
>         Model modelschema2 =
> FileManager.get().loadModel(modelschemafilename2);
>         modelschema.add(modelschema2);
>         Model model = FileManager.get().loadModel(modelfilename);
> 
> 
> InfModel inf = ModelFactory.createRDFSModel(modelschema, model);
>         ValidityReport vrpt = inf.validate();
> 
> 
>         System.out.println("is valid: " + vrpt.isValid());
>         System.out.println("is clean: " + vrpt.isClean());
>         Iterator<Report> itrpt = vrpt.getReports();
> 
>         while(itrpt.hasNext()) {
>             Report rpt =  itrpt.next();
>             rpt.toString();
>         }
> 
> 
> And the answer is always:
> 
> 
> is valid: true
> is clean: true
> 
> 
> Can anyone give a hand here ?
> 
>