2010-07-01 5 views
0

У меня есть следующий RDF:RDF избежать ИСС: subClassOf

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

Это выглядит хорошо, но я хотел бы избежать возможностей делать subClassOf Джон. Например, это не должно работать:

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

Как я могу добавить, что ограничение?

EDIT:

После cygri's answer я попробовал другой подход:

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

Но это все еще работает :(

ответ

3

Не уверен, что вы пытаетесь сделать Ваше моделирование выглядит странно. я, почему Джон класс? Джон должен быть индивидуумом типа Person. (И у вас не может быть подклассов людей, поэтому изменение Джона на отдельного человека отвечает на ваш вопрос о предотвращении подклассификации тоже.)

Обновлено: RDF как таковой не мешает вам говорить бессмысленные вещи. Таким образом, вы все равно можете анализировать, сериализовывать и запрашивать свои данные, даже если это абсурд. Но вы можете использовать проверку согласованности OWL для проверки своей онтологии. В этом конкретном случае вам нужно проверить, что онтология находится в OWL DL. (OWL DL - это вариант OWL, который вводит ограничение на то, что отдельные люди не могут иметь подклассы, среди прочего. В OWL Full это разрешено, если вы не добавите ограничение, которое класс Class не пересекается с классом Person.

.
+0

Можете ли вы предоставить фрагмент xml, чтобы сделать человека человеком? – Macarse

+0

Я только что редактировал свой вопрос с другим подходом, но он все еще не работает должным образом. – Macarse

3

Вы по-прежнему лечения Джона как класс Вы хотите что-то вроде этого:

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

ИСС: subClassOf и РДФА: типа различных видов отношений

ИСС:. subClassOf полезно для постановки что, скажем, все люди - это млекопитающие, а все млекопитающие - животные.

rdf: тип используется для указания, что, скажем, Джон - это Человек (и Джон - это млекопитающее и животное, если на то пошло).

Для чего это стоит, semanticoverflow.com также является хорошим местом для вопросов, связанных с RDF.