AKSW / OntoWiki

Semantic data wiki as well as Linked Data publishing engine
https://ontowiki.net
205 stars 51 forks source link

correct OntoWiki usage #324

Closed elrido closed 9 years ago

elrido commented 9 years ago

Hello OntoWiki developers

I have read about the semantic web, RDF and JSON-LD and their usage on websites and REST APIs for a while now. Recently I started taking notes on a hobby project about the published works, authors, protagonists and locations in it and when I pondered if I should add this to a spreadsheet or to a "classic" wiki I realized that this is actually THE example use case for a graph database or a semantic web solution. So I wanted to use such a solution and due to the constraints of my server resources decided to give OntoWiki a try.

I have set up the latest stable OntoWiki release (0.9.11) using Erfurt 1.7 and RDFauthor 0.9.7 on a nginx webserver, PHP 5.3 and MySQL (only 1 GiB of RAM currently, so no space left for virtuoso).

After struggling yesterday afternoon to understand how to start to create my ontology (and watching the introduction video linked in the readme twice), I think I understood how to create the object types I want to use first, before starting to fill them with instances. I am trying to implement mostly schema.org style types like publication issues, articles, persons, authors, characters, places, etc. and their relations.

I have done two tries to set up the structure and threw it away again as I am not sure if I am doing it correctly. Can you give me some advice on these points?

  1. I would like to have some hierarchy: i.e. mister x is an author, author is a type of person. I experimented with having my author and character classes being a sub class of schema.org/Person, but then switched to having my own person class and declaring mister x to be a schema.org/Person and author. In the final iteration I am only using my own classes, but use schema.org properties in some of them, so I don't have to create everything on my own. What is the correct usage: Should I try to reuse as many existing classes and properties from other projects as possible or should I better create my own? In the end I just want to have a website where you can easily navigate between the properties, but I don't mind if these are also easily digestable by external search machines.
  2. Does it even make sense to declare that mister x is both a schema.org/Person and an author to help search engines learn that "my" authors are the same type of person objects as other websites declare or is this not the intended use for creating your own ontology?
  3. Currently all listings show the type to be set as filter, but then still show all kinds of items. Is this a limitation of my MySQL backend or do I possibly have an error in the way I created my objects?
  4. I know that the release I use is not the latest. Is there any newer version I should use or is i.e. the master of the project more targeted at developers?
  5. When creating new objects the system gives them URLs in the style [ontology]/owl_class/[objectname] and when I then create an instance they become [ontology]/[objectname]/[instancename]. I had adjusted that to be [ontology]/[objectname] for objects so that the instance URLs would be more logical (at least to me). Was that a mistake and is maybe the source of the confusion described in point 3?
  6. Where to create the relations? When I have an article mentioning a location, should I create the relation as location is mentioned in article or article mentions location? The other example I am not sure about is the publication and the article: It feels more natural to say publication has article but in the schema.org article and publication issue objects it is the other way around. Or should I always declare both sides of the relation?

You can review my ontology yourself at https://space1889.dssr.ch/

I will concentrate on filling in a few more items and leave the structure as is for now. I can always dump the content to file, do some large scale regex search and replace, delete the online ontology and reimport it based on your suggestions. I feel I have tapped another of those underestimated IT topics like database normalization.

white-gecko commented 9 years ago

Hey Rico(?), this is actually a cool use case for OntoWiki. I didn't read all of your points so far, but just want to give you some hints, which might or might not help you:

In the Semantic Web it is considered as best practice to reuse terms (classes and properties) from already existing and published vocabularies/namespaces as possible. In your case for modeling authors and characters I would recommend to use the foaf Vocabulary especially foaf:Person. Its semantic is defined as "The Person class represents people. Something is a Person if it is a person. We don't nitpic about whether they're alive, dead, real, or imaginary. The Person class is a sub-class of the Agent class, since all people are considered 'agents' in FOAF.". To distinguish between authors and charactors you could additionally create subclasses and assign them to the according instances.

regarding (3) there are some limitations and issues with the MySQL backend, but the behavior you are describing sounds, as I understand it, correct. Maybe you can give a more detailed example …

It sounds as if some of your questions are not limited to OntoWiki usage questions, since they are more general Semantic Web/RDF/Ontology modelling questions. I'd recommend you to have a look into some literature e.g.: http://patterns.dataincubator.org/book/ Maybe you can also somehow gain access to "Semantic web for the working ontologist" or if you also understand German: "Semantic Web: Grundlagen"

I hope I'll find time to reply to the other questions in the next days.

All the best and a nice Sunday, Natanael

Am 25.10.2015 um 09:34 schrieb El RIDO:

Hello OntoWiki developers

I have read about the semantic web, RDF and JSON-LD and their usage on websites and REST APIs for a while now. Recently I started taking notes on a hobby project about the published works, authors, protagonists and locations in it and when I pondered if I should add this to a spreadsheet or to a "classic" wiki I realized that this is actually THE example use case for a graph database or a semantic web solution. So I wanted to use such a solution and due to the constraints of my server resources decided to give OntoWiki a try.

I have set up the latest stable OntoWiki release (0.9.11) using Erfurt 1.7 and RDFauthor 0.9.7 on a nginx webserver, PHP 5.3 and MySQL (only 1 GiB of RAM currently, so no space left for virtuoso).

After struggling yesterday afternoon to understand how to start to create my ontology (and watching the introduction video linked in the readme twice), I think I understood how to create the object types I want to use first, before starting to fill them with instances. I am trying to implement mostly schema.org style types like publication issues, articles, persons, authors, characters, places, etc. and their relations.

I have done two tries to set up the structure and threw it away again as I am not sure if I am doing it correctly. Can you give me some advice on these points?

  1. I would like to have some hierarchy: i.e. mister x is an author, author is a type of person. I experimented with having my author and character classes being a sub class of schema.org/Person, but then switched to having my own person class and declaring mister x to be a schema.org/Person and author. In the final iteration I am only using my own classes, but use schema.org properties in some of them, so I don't have to create everything on my own. What is the correct usage: Should I try to reuse as many existing classes and properties from other projects as possible or should I better create my own? In the end I just want to have a website where you can easily navigate between the properties, but I don't mind if these are also easily digestable by external search machines.
  2. Does it even make sense to declare that mister x is both a schema.org/Person and an author to help search engines learn that "my" authors are the same type of person objects as other websites declare or is this not the intended use for creating your own ontology?
  3. Currently all listings show the type to be set as filter, but then still show all kinds of items. Is this a limitation of my MySQL backend or do I possibly have an error in the way I created my objects?
  4. I know that the release I use is not the latest. Is there any newer version I should use or is i.e. the master of the project more targeted at developers?
  5. When creating new objects the system gives them URLs in the style [ontology]/owl_class/[objectname] and when I then create an instance they become [ontology]/[objectname]/[instancename]. I had adjusted that to be [ontology]/[objectname] for objects so that the instance URLs would be more logical (at least to me). Was that a mistake and is maybe the source of the confusion described in point 3?
  6. Where to create the relations? When I have an article mentioning a location, should I create the relation as location is mentioned in article or article mentions location? The other example I am not sure about is the publication and the article: It feels more natural to say publication has article but in the schema.org article and publication issue objects it is the other way around. Or should I always declare both sides of the relation?

You can review my ontology yourself at https://space1889.dssr.ch/

I will concentrate on filling in a few more items and leave the structure as is for now. I can always dump the content to file, do some large scale regex search and replace, delete the online ontology and reimport it based on your suggestions. I feel I have tapped another of those underestimated IT topics like database normalization.

— Reply to this email directly or view it on GitHub https://github.com/AKSW/OntoWiki/issues/324.

elrido commented 9 years ago

Hello Natanael

Thank you for the reply on such short notice and the literature tips. I will definitely look into them, probably starting with the Grundlagen. This probably will solve points 1, 5 and 6.

While working on adding content I realised that the filtering does indeed work, just not how I had expected. When I click on the Article class I had expected to see only articles as the filter does say "Type: Article": ontowiki filter When I add the filter "rdfs:type" set to "Article", then I get the result I want. So it works, I had just misunderstood that I need to set the filter manually. This resolves point 3.

Point 2 you answered and the main reason I had moved away from my initial use of preexisting object types was that I suspected them to be responsible for the filtering issues. I will now simply add these to the appropriate objects (to the persons themselves, not the person, etc. classes I created).

The only question left is 4 (is it ok to use 0.9.11 or better to update), but to be honest the only bug I have encountered so far was once that my session timed out and then I always got the message below logged in the error log until I deleted my PHPSESSID cookie:

PHP Fatal error: Call to a member function getUri() on a non-object in /srv/www/dssr.ch/space1889/libraries/Erfurt/Ac/Default.php on line 334

Apart from this I had occasional glitches with the RDFauthor JS UI components. Sometimes when adding a property the input field did not appear. But then I could always add it manually in the source.

So for me 0.9.11 is stable enough and I will continue to use it. Will probably look into the "site" extension once there is enough content to make it easier to use for visitors.

Therefore please feel free to close the issue and thank you again for your support.

Best regards Simon

white-gecko commented 9 years ago

Am 25.10.2015 um 23:22 schrieb El RIDO:

Hello Natanael

Thank you for the reply on such short notice and the literature tips. I will definitely look into them, probably starting with the Grundlagen. This probably will solve points 1, 5 and 6.

While working on adding content I realised that the filtering does indeed work, just not how I had expected. When I click on the Article class I had expected to see only articles as the filter does say "Type: Article": ontowiki filter https://cloud.githubusercontent.com/assets/1017622/10718154/10434a02-7b6c-11e5-989c-66594cc941b0.png When I add the filter "rdfs:type" set to "Article", then I get the result I want. So it works, I had just misunderstood that I need to set the filter manually. This resolves point 3.

Maybe it is due to the fact, that the navigation module sets the filters, such that you get all instances of the specified class, aswell as of all its subclasses.

Point 2 you answered and the main reason I had moved away from my initial use of preexisting object types was that I suspected them to be responsible for the filtering issues. I will now simply add these to the appropriate objects (to the persons themselves, not the person, etc. classes I created).

The only question left is 4 (is it ok to use 0.9.11 or better to update), but to be honest the only bug I have encountered so far was once that my session timed out and then I always got the message below logged in the error log until I deleted my PHPSESSID cookie:

PHP Fatal error: Call to a member function getUri() on a
non-object in
/srv/www/dssr.ch/space1889/libraries/Erfurt/Ac/Default.php on line 334

Apart from this I had occasional glitches with the RDFauthor JS UI components. Sometimes when adding a property the input field did not appear. But then I could always add it manually in the source.

So for me 0.9.11 is stable enough and I will continue to use it. Will probably look into the "site" extension once there is enough content to make it easier to use for visitors.

I think those issues are even not fixed in the develop branch yet ;-)

Therefore please feel free to close the issue and thank you again for your support.

Best regards Simon

— Reply to this email directly or view it on GitHub https://github.com/AKSW/OntoWiki/issues/324#issuecomment-150980077.