Question

Je le RDF suivant:

<?xml version="1.0" encoding="UTF-8"?>
<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:ppl="http://www.blah.com/people#">

    <rdfs:Class rdf:ID="Person">
        <ppl:Name/>
        <ppl:LastName/>
    </rdfs:Class>

    <rdfs:Class rdf:ID="John">
        <rdfs:subClassOf rdf:resource="#Person"/>
        <ppl:name>John</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdfs:Class>
</rdf:RDF>

Cela ressemble bien, mais je voudrais éviter la possibilité de faire un subClassOf John. Par exemple, cela ne devrait pas fonctionner:

<?xml version="1.0" encoding="UTF-8"?>
<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:ppl="http://www.blah.com/people2#">

    <rdfs:Class rdf:ID="Person">
        <ppl:Name/>
        <ppl:LastName/>
    </rdfs:Class>

    <rdfs:Class rdf:ID="John">
        <rdfs:subClassOf rdf:resource="#Person"/>
        <ppl:name>John</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdfs:Class>

    <rdfs:Class rdf:ID="Peter">
        <rdfs:subClassOf rdf:resource="#John"/>
        <ppl:name>Peter</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdfs:Class>
</rdf:RDF>

Comment puis-je ajouter cette restriction?

EDIT:

Après la réponse cygri J'ai essayé une approche différente:

<rdf:Description ID="John">
    <rdf:type rdf:resource="#Person"/>
    <ppl:name>John</ppl:name>
    <ppl:LastName>Smith</ppl:LastName>
</rdf:Description>

<rdf:Description ID="Peter">
    <rdf:type rdf:resource="#John"/>
    <ppl:name>Peter</ppl:name>
    <ppl:LastName>Smith</ppl:LastName>
</rdf:Description>

Mais cela fonctionne encore: (

Était-ce utile?

La solution

Je ne sais pas ce que vous essayez de faire. Votre modélisation semble bizarre pour moi, pourquoi est-John une classe? John doit être une personne de type personne. (Et vous ne pouvez pas avoir des sous-classes d'individus, afin de changer John dans une réponse individuelle à votre question sur la prévention aussi le sous-classement).

Mise à jour: RDF en tant que telle ne vous empêche pas de dire des choses insensées. Ainsi, vous pouvez toujours analyser, sérialisation et interroger vos données même si elle est un non-sens. Mais vous pouvez utiliser un vérificateur de cohérence OWL pour valider votre ontologie. Dans ce cas particulier, vous devez vérifier wether l'ontologie est dans OWL DL. (OWL DL est la variante de OWL qui introduit la restriction que les individus ne peut pas avoir des sous-classes, entre autres. Dans OWL Full, ce serait permis, sauf si vous ajoutez une contrainte que la classe Class est disjointe avec la classe Person.

Autres conseils

Vous traitez encore John en tant que classe. Vous voulez quelque chose comme ceci:

<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:ppl="http://www.blah.com/people#">

    <rdfs:Class rdf:ID="Person" />

    <rdf:Description rdf:ID="John">
        <rdf:type rdf:resource="#Person"/>
        <ppl:name>John</ppl:name>
        <ppl:LastName>Smith</ppl:LastName>
    </rdf:Description>

</rdf:RDF>

rdfs: subClassOf et rdf: type sont différentes sortes de relations

.

rdfs:. SubClassOf est utile pour affirmer que, par exemple, tous les gens sont des mammifères, et tous les mammifères sont des animaux

rdf: type est utilisé pour affirmer que, par exemple, John est une personne (et John est un mammifère et un animal pour cette matière)

.

Pour ce que ça vaut, semanticoverflow.com est aussi un bon endroit pour poser des questions liées à RDF.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top