2013-08-06 6 views
0

Я только что переключился с TopBraid, чтобы опробовать Protege.Protege 4 - Сохранение переформатов RDF вложенных пустых узлов

У меня есть онтология с некоторым RDF, который напоминает это:

instances:some_thing1 a semapi:SomeClass ; 
           semapi:hasChainTo (
             [ 
              a semapi:SomeOtherClass ; 
              semapi:hasChainTo (
               [ ... ] 
               [ ... ] 
              ) 
             ] 
          ) . 

Идея заключается в том, что этот вложенном синтаксис пустых узлов отлично работает, потому что цепи получить очень глубокими и этот синтаксис жидкости и очень читаемый и сопровождаемый, поскольку цепи могут время от времени меняться, и новые цепи могут быть добавлены.

Не только это, но я уже писал запросы для полученного графика.

Проблема, если я импортировать это в Protege, а затем сохранить его прямо обратно, результат переформатированы к чему-то вроде:

instance:some_thing1 rdf:type semapi:SomeClass , 
           owl:NamedIndividual ; 
           semapi:hasChainTo [ ] . 


    [ rdf:type semapi:SomeClass ; 
     semapi:hasChainTo [ ] 
    ] . 

Полученный RDF полностью ломает систему запрашивая, а также другие преимущества использования этого подхода для представления «цепочки».

Есть ли способ обойти это? Если нет, я могу быть вынужден переключиться на TopBraid.

UPDATE: Вот репродукция выпуска:

Я написал bugTest.ttl затем открыть его в Protege и немедленно Сохранить как> черепаха>bugTestOutput.ttl:

https://dl.dropboxusercontent.com/u/13814624/bugTest.ttl https://dl.dropboxusercontent.com/u/13814624/bugTestOutput.ttl

+0

Благодарим Вас за предоставление некоторых образцов данных; они иллюстрируют тип проблемы, с которой вы сталкиваетесь. Если все так, как вы говорите, это похоже на то, что TopBraid или Protégé теряют важную информацию в процессе сохранения или чтения, и это плохая вещь. Учитывая серьезность проблемы, можете ли вы представить минимальный пример (полные файлы RDF), которые иллюстрируют эту проблему?Часто попытка воспроизвести проблему минимальным образом покажет проблему с вашей стороны, которая раньше не была очевидна, или же служит очень хорошим образцом для отправки соответствующим разработчикам. –

+0

Кроме того, это похоже на проблему, которая находится либо в TopBraid, либо в Protégé, но не в обоих. Если есть некоторая сериализация RDF онтологии, которую Protégé управляет, она должна делать это независимо от того, какое приложение создало ее. Точно так же, если TopBraid производит мусор, он должен делать это независимо от того, кто его потребляет. –

+0

Спасибо за ответ. Я попытаюсь воспроизвести бит проблемы сейчас. – parliament

ответ

1

Короче , ваша онтология не является действительной онтологией OWL, и Protégé следует принципу «мусора, мусора». Так как некоторые плохие данные поступают (хотя Protégé пытается его спасти), вы получаете плохие данные (фактически, только данные, которые были спасены). Вы можете проверить онтологию с помощью Manchester OWL Validator, но вам нужно выбрать профиль OWL 2 DL, чтобы получить соответствующую диагностику.На документе, выход:

Онтология и/или один из его импорта НЕ в профиле DL OWL 2

Импорт Закрытие

Ontology IRI           Physical URI 
OntologyID(OntologyIRI(<http://ideation.io/semapi>)) 

Подробный отчет

Использование зарезервированного словарного запаса для класса IRI

SubClassOf (semapi: BaseClass RDFS: Class)

Использование необъявленной класса

SubClassOf (semapi: BaseClass RDFS: Класс)

Помимо тот факт, что у вас есть тройной:

<http://ideation.io/semapi> 
     a  owl:Ontology . 

В первом файле это вообще не является онтологией OWL. НАПРИМЕР,

semapi:BaseClass a rdfs:Class; 
       rdfs:subClassOf rdfs:Class . 

является определение некоторых классов, которые могут быть использованы в ИСС лексики, но не объявляла owl:Class эс. Когда вы делаете что-то вроде

semapi:hasChainTo a owl:ObjectProperty; 
        rdfs:domain semapi:BaseClass; 
        rdfs:range semapi:BaseClass . 

у вас есть owl:ObjectProperty, что собирается быть в отношении semapi:BaseClass Э.С., каждый из которых также rdfs:Class, поэтому у вас есть свойство объекта, который собирается быть в отношении rdfs:Class эсов, но в OWL DL свойства объекта могут относиться только к отдельным лицам. Где вы начинаете использовать списки RDF, то есть в:

instances:Instance1 a semapi:DerivedClass; 
         semapi:hasChainTo (
          [ 
           a semapi:DerivedClass; 
           semapi:hasChainTo (
... 

вы используете список RDF в качестве объекта в объект собственности утверждения. Однако списки RDF не могут использоваться в OWL DL, поскольку они также используются в сериализации RWF OWL. Казалось бы, Protégé отбрасывает кучу информации, которая не имеет смысла для него как сериализация RDF онтологии OWL. Можно было бы утверждать, что, когда Protégé не знает, что делать с некоторыми RDF, которые он хочет, он должен сохранить его, но это действительно несостоятельная позиция, когда RDF - это всего лишь одна возможная сериализация сериализованной вещи (онтология OWL) что Protégé обеспокоен. lint инструмент

Pellet производит ряд предупреждений:

[Untyped classes] 
- http://ideation.io/semapi#DerivedClass 
- http://ideation.io/semapi#BaseClass 
- http://www.w3.org/2000/01/rdf-schema#Class 

[Untyped individuals] 
- 6 BNode(s) 

[Using rdfs:Class instead of owl:Class] 
- http://ideation.io/semapi#DerivedClass 
- http://ideation.io/semapi#BaseClass 



========================================================= 
OWL 2 DL violations found for ontology <http://ideation.io/semapi>: 
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [ObjectPropertyRange(<http://ideation.io/semapi#hasChainTo> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid5) in <http://ideation.io/semapi>] 
Use of undeclared class: rdfs:Class [SubClassOf(<http://ideation.io/semapi#BaseClass> rdfs:Class) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid11) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [SubClassOf(<http://ideation.io/semapi#DerivedClass> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid9) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [SubClassOf(<http://ideation.io/semapi#BaseClass> rdfs:Class) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid1) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#BaseClass> [ObjectPropertyDomain(<http://ideation.io/semapi#hasChainTo> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid7) in <http://ideation.io/semapi>] 
Use of reserved vocabulary for class IRI: rdfs:Class [SubClassOf(<http://ideation.io/semapi#BaseClass> rdfs:Class) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> _:genid3) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [SubClassOf(<http://ideation.io/semapi#DerivedClass> <http://ideation.io/semapi#BaseClass>) in <http://ideation.io/semapi>] 
Use of undeclared class: <http://ideation.io/semapi#DerivedClass> [ClassAssertion(<http://ideation.io/semapi#DerivedClass> <http://ideation.io/instances#Instance1>) in <http://ideation.io/semapi>] 


No OWL lints found for ontology <http://ideation.io/semapi>. 

<http://ideation.io/semapi> does not import other ontologies. 
+0

Благодарим вас за это, это имеет большой смысл. Можете ли вы предложить какие-либо предложения двигаться вперед? Я планировал использовать логику RDFS ++ от AllegroGraph, поэтому в настоящее время у меня нет веских оснований даже использовать OWL. Я действительно пытался избежать этого, но я не знаю, как избежать использования совы: ObjectProperty, например, поэтому я просто использовал его. Если я удалю заголовок '... aww: Ontology', но он все еще задыхается в списке. Как я могу сейчас двигаться дальше (помимо TopBraid), так как нет времени для нарушения изменений хотя бы на неделю. – parliament

+1

@parliament 1) Есть ли причина, по которой вы пытаетесь загрузить вещи в Protégé в первую очередь? Если вы попытаетесь передать документ через OWL-совместимый инструмент (например, Protégé), вы, вероятно, получите искаженные результаты. 2) Если вы просто хотите заявить, что что-то является свойством, то просто скажите, что ' rdf: type rdf: Property' (см. [Rdf: Свойство] (http://www.w3.org/TR/rdf-schema/# ch_property) в рекомендации RDF Schema). –

+1

@парламент. Тем не менее, вы должны заметить, что даже если вы делаете 'hasChainTo a rdf: Свойство; rdfs: домен BaseClass; rdfs: range BaseClass', у вас в данных вашего экземпляра трижды 'instance1 hasChainTo (...)', что означает, что некоторый список RDF также будет выведен как экземпляр 'BaseClass'. Это то, что вы намеревались? –