Проблема генерации сборки OWL (OWLGrinder) - PullRequest
2 голосов
/ 30 мая 2009

Я собираю сборку из моей онтологии OWL, но при разборе онтологии возникает сообщение об ошибке в «свойствах типа данных», где объявлен тип и заданы некоторые значения. Я написал свою онтологию с использованием Protege v3.4.

Например, одним из свойств типа данных, которое вызывает ошибку, является «Язык» с типом «строка» и значениями типа «Английский и фарси». Ниже приведены ссылки, сделанные протеже:

<rdf:RDF xml:base="http://www.owl-ontologies.com/Ontology1243411901.owl"
xmlns="http://www.owl-ontologies.com/Ontology1243411901.owl#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:swrl="http://www.w3.org/2003/11/swrl#" 
xmlns:swrlb="http://www.w3.org/2003/11/swrlb#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" 
xmlns:xsp="http://www.owl-ontologies.com/2005/08/07/xsp.owl#">

И свойство "Language" упоминается ниже:

<owl:DatatypeProperty rdf:ID="language">
        <rdfs:range>
            <owl:DataRange>
                <owl:oneOf rdf:parseType="Resource">
                    <rdf:rest rdf:parseType="Resource">
                        <rdf:rest rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
                        <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Farsi</rdf:first>
                    </rdf:rest>
                    <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string">English</rdf:first>
                </owl:oneOf>
            </owl:DataRange>
        </rdfs:range>
        <rdfs:domain>
            <owl:Class>
                <owl:unionOf rdf:parseType="Collection">
                    <owl:Class rdf:about="#Teacher"/>
                    <owl:Class rdf:about="#ClassOfCourse"/>
                    <owl:Class rdf:about="#LearningResource"/>
                    <owl:Class rdf:about="#Discussion"/>
                    <owl:Class rdf:about="#Student"/>
                </owl:unionOf>
            </owl:Class>
        </rdfs:domain>
    </owl:DatatypeProperty>

Я просто добавляю одну онтологию в OWLGrinder. Эта ошибка возникает при генерации:

Assembly generation failed. 
OWL property 'http://www.owl-ontologies.com/Ontology1243411901.owl#language' has a range declaration that points to _:bnode10579059 but its definition is missing. 
Are you missing an ontology which declares this class?

Число перед «_: bnode» меняется каждый раз, когда я нажимаю кнопку «Создать». При удалении значений из свойства «Language» возникает другая ошибка, связанная со следующим свойством DataType. Это означает, что каждое свойство DataType, которое определено (и для него указаны некоторые значения), делает ошибку в OWLGrinder.

Мне было интересно, может ли кто-нибудь помочь мне разобраться с этой ошибкой.

Ответы [ 4 ]

2 голосов
/ 01 июня 2009

Я не знаком с OWLGrinder, но вы можете попробовать объявить именованный класс, такой как ExpectedLanguages (дать вашему анонимному узлу URI), а затем использовать его в качестве диапазона для предиката language. Сокращенный пример (в формате Turtle ):

:ExpectedLanguages
    a owl:DataRange ;
    owl:oneOf (
        "Farsi"^^xsd:string
        "English"^^xsd:string
    );
.

:languages
    rdfs:range :ExpectedLanguages ;
.

Для использования перечислимого типа данных OWL требуется, чтобы ваш код / ​​синтаксический анализатор / аргумент соответствовал как минимум OWL-DL.

Причина, по которой _:bnodeXXX (пустой узел / анонимный узел) каждый раз получает новый идентификатор, заключается в том, что он пуст. Однако в целях его идентификации в графе RDF (модели) в памяти необходимо сгенерировать идентификатор для каждого анонимного узла при его загрузке, поэтому во время анализа модели каждый узел (анонимный или именованный) может быть уникально идентифицирован. поэтому его входящие и исходящие ссылки могут быть идентифицированы.

1 голос
/ 22 июля 2009

Intellidimension предоставляет SDK, который может конвертировать OWL-Lite, OWL-Full или OWL-DL в классы .NET. Возможно, вы захотите взглянуть на это.

Sidenote
Я думаю, что вы путаете семантику домена в вашей онтологии. Похоже, что вы пытаетесь сказать, что «язык может существовать только в Teacher, ClassOfCourse, LearningResource, Discussion, Student», когда на самом деле вы говорите «Если язык используется для описания экземпляра, этот экземпляр может быть выведен как UnionOf Teacher , ClassOfCourse, LearningResource, Обсуждение и Студент. " Это распространенное неправильное толкование семантики OWL, так как кажется, что домен должен ограничивать использование свойств, хотя на самом деле это никогда не является функцией OWL (схема / проверка). OWL используется только для описания того, что следует выводить из использования, но не предписывает использование.

Семантика домена описана в руководстве OWL.

Используя UnionOf в домене свойства языка, вы говорите, что «все, что описано с использованием свойства языка, является учителем, или ClassOfCourse, или LearningResource, или Обсуждением, или Студентом». Я бы сказал, что это обычно не имеет смысла.

UnionOf семантики, описанной в руководстве OWL.

Диапазон аналогичен в том, что если вы определяете диапазон свойства определенного типа, то можно сделать вывод, что все литералы / ресурсы, на которые ссылается это свойство, относятся к типу, определенному в объявлении диапазона.

Диапазон, описанный в руководстве по OWL.

1 голос
/ 01 июня 2009

В настоящее время ROWLEX OwlGrinder ожидает, что диапазон будет литеральным или обычным классом. Я рекомендую создать класс-оболочку «LanguageList», который будет содержать ваше перечисление внутри, назначить его как диапазон. Я не проверял это, но я ожидаю, что это сработает.

0 голосов
/ 30 мая 2009

Я скопировал / вставил вашу онтологию в http://www.mygrid.org.uk/OWL/Validator:, где говорится, что эта онтология (по крайней мере) не является OWL-lite онтологией. Это может быть проблемой для вашего конфига Protege?

...