RDF избегая rdfs: subClassOf - PullRequest
       39

RDF избегая rdfs: subClassOf

0 голосов
/ 01 июля 2010

У меня есть следующий RDF:

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

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

<?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 Я попробовал другой подход:

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

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

Ответы [ 2 ]

3 голосов
/ 08 июля 2010

Ты все еще относишься к Джону как к классу. Вы хотите что-то вроде этого:

<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 и rdf: type - это разные типы отношений.

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

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

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

3 голосов
/ 02 июля 2010

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

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

...