|
|
pl:dydaktyka:semweb:lab-rdfmodel2 [2017/11/05 21:02] kkutt [1 Modeling knowledge with RDF triples [20 minutes]] |
pl:dydaktyka:semweb:lab-rdfmodel2 [2019/06/27 15:50] |
====== Modeling and using knowledge in RDF ====== | |
| |
^ Last verification: | 20171001 | | |
^ Tools required for this lab: | -- | | |
| |
===== Before the lab ===== | |
Reading: | |
* [[http://www.w3.org/TR/rdf-schema/|RDF Schema 1.1]] | |
* [[#if_you_want_to_know_more|If you want to know more...]] | |
| |
===== Lab instructions ===== | |
| |
<WRAP center round important 100%> | |
During this lab we will use [[http://any23.org/|Anything to Triples]] website. If it is down, there is also a possibility to download any23 service and run it on your own computer: | |
* download **Apache Any23 Service (Standalone server embedded) 1.1** file from https://any23.apache.org/download.html (mirror: {{http://home.agh.edu.pl/~kkutt/semweb/apache-any23-service-1.1-server-embedded.tar.gz|apache-any23-service-1.1-server-embedded.tar.gz}}) and unpack the zip somewhere | |
* execute command to start server with any23 service: <code>[PATH-to-unpacked-archive]/apache-any23-service-1.1-server-embedded/bin/any23server </code> | |
* Note: use the any23server.bat file if you are using Windows OS | |
* Change ''<nowiki>"$REPO"</nowiki>'' into ''%REPO%'' twice (line #79 in any23server.bat file) if ''Error: Unable to access jarfile $REPO/jetty-runner-8.1.4.v20120524.jar.'' message appears | |
* after few seconds any23 service will appear on [[http://localhost:8080/apache-any23-service/]] address :) | |
</WRAP> | |
| |
During this lab, you will serialize (using Turtle syntax) an RDF graph created before (The Bold and the Beautiful vs The Game of Thrones). | |
| |
==== - Modeling knowledge with RDF triples [20 minutes] ==== | |
RDF is a data model for which several syntaxes have been developed. | |
RDF document is an RDF graph (describing some objects) serialized into chosen representation/syntax. | |
In this task, you will convert the graph representation into so called Turtle syntax. | |
| |
- Create a new document with a ''*.ttl'' extension. | |
- Create a document describing the graph created during the [[lab-rdfmodel#modeling_knowledge_with_rdf_graphs_25_minutes|previous lab]]. Use the [[http://www.w3.org/TR/turtle/|RDF Turtle]] for reference. | |
- Define namespaces for your document URIs, e.g., a standard RDF namespace and one "your own" for this specific topic: <code>@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. | |
@prefix bb: <http://yourname/b-and-b#>.</code> | |
* You can also use a base namespace: <code>@base <http://kkutt/b-and-b/> .</code> | |
- Write down ~14 selected triples from your graph. Make sure you include each of the following at least once: | |
- resources, | |
- datatype values. | |
- Notes: | |
* Comments in Turtle begins with ''#'' symbol. | |
* In RDF we are describing something (a subject) and giving it a unique ID, e.g.: ''<nowiki><http://kkutt/b-and-b/brooke-logan></nowiki>''. To make notation more compact, we can use [[http://www.w3.org/TR/turtle/#prefixed-name|prefixes]] and/or [[http://www.w3.org/TR/turtle/#relative-iri|base namespace]]. | |
* 8-) To separate statements we can use dot (.), semicolon (;) and comma (,). What is the difference between them? | |
- Go to the <wrap caution>[[http://any23.org/|Anything to Triples]]</wrap> webpage: | |
* Validate your document using this tool (section "Convert copy&pasted document"): | |
* input format: **Turtle (text/turtle)** | |
* output format: **turtle** | |
* validation: **validate** | |
* report: **checked** | |
* annotate: **unchecked** | |
* paste your code and click "Convert" button | |
* if something is wrong, you can see details in report (in web browser), e.g.: \\ {{:pl:dydaktyka:semweb:any23_some_problems_web.png?400|}} | |
* if code was successfully validated then you get an XML with a lot of empty tags and your Turtle code inside ''<data><![CDATA[ ... ]]></data>'' (indentation may be changed) | |
- 8-) Include model (''.ttl'' file) in the report archive. | |
| |
==== - RDF: Containers and Collections [10 minutes] ==== | |
In RDF there are two ways to describe set or sequences of objects: //[[http://www.w3.org/TR/rdf11-mt/#rdf-containers|Containters]]// and //[[http://www.w3.org/TR/rdf11-mt/#rdf-collections|Collections]]//. | |
| |
The container and collection are resources that contain things. The contained things are members. | |
RDF defines three types of containers: | |
* ''rdf:Bag'', | |
* ''rdf:Seq'', | |
* ''rdf:Alt'', | |
and one type of collection: | |
* ''rdf:List''. | |
While "a //container// only says that certain identified resources are members; it does not say that other members do not exist." with a //Collection// we can describe groups containing __only__ the specified members. | |
| |
[[http://www.w3.org/TR/rdf11-mt/#rdf-containers|Read about them]] and then: | |
- 8-) Describe shortly what is the difference between different types of containers. | |
- Create a container in your database. | |
- In your RDF file create also an //RDF Collection//. For hint and examples see the [[http://www.w3.org/TR/turtle/#collections|recommendation]]. | |
| |
==== - RDF: Datatypes [10 minutes] ==== | |
Add the references to [[http://www.w3.org/TR/xmlschema-2/|XML Schema datatypes]] to chosen information in your RDF file, e.g.: | |
<code> | |
# ... | |
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . | |
# ... | |
| |
# ... | |
<brooke-logan> <daughter-of> <beth-logian>; | |
<born> "1900-01-01"^^xsd:date; | |
<studied> "Chemistry"^^xsd:string; | |
# ... | |
</code> | |
Use at least 3 different datatypes! | |
| |
==== - RDF Visualization [3 minutes] ==== | |
| |
We are in the middle, so let's visualize our RDF files. | |
| |
- There are two ways to do this: | |
- Using <wrap caution>[[http://any23.org/|Anything to Triples]]</wrap> service convert your file to RDF/XML (''rdfxml'') format. Do not analyze resulting code. Simply copy it :) \\ Go to the [[http://www.w3.org/RDF/Validator/|RDF Validator]] page and simply paste generated code into ''Check by Direct Input'' field. Select ''Graph only'' from dropdown list and click ''Parse RDF'' | |
- Use the [[http://loki.ia.agh.edu.pl/wiki/docs:rdfeditor|RDF Editor]] developed at AGH UST (by Artur Smaroń, EIS 2015-2016) | |
- Analyze the results: | |
- 8-) How containers are represented in the graph? | |
- 8-) How collections are represented in the graph? | |
| |
==== - Semantic vocabularies: FOAF, Dublin Core and FHKB [10 minutes] ==== | |
| |
Semantic vocabularies are sets of predefined properties for describing some domains. Examples include: | |
* [[http://semanticweb.org/wiki/Dublin_Core|Dublin Core]] | |
* [[http://semanticweb.org/wiki/FOAF|FOAF]] | |
* [[http://semanticweb.org/wiki/SIOC|SIOC]] | |
* etc. | |
| |
- Have a look at [[https://github.com/blokhin/genealogical-trees/blob/master/data/header.ttl|Family History Knowledge Base (FHKB)]] ontology, [[http://dublincore.org/documents/dc-rdf/|Expressing Dublin Core metadata using the Resource Description Framework]] and [[http://xmlns.com/foaf/spec/|FOAF Vocabulary Specification]]. | |
- Modify your RDF file to use the properties from FHKB, Dublin Core and FOAF vocabulary, e.g.: | |
<code> | |
# ... | |
@prefix dc: <http://purl.org/dc/elements/1.1/>. | |
@prefix dcterms: <http://purl.org/dc/terms/> . | |
@prefix foaf: <http://xmlns.com/foaf/0.1/> . | |
@prefix fhkb: <http://www.example.com/genealogy.owl#> . | |
# ... | |
| |
# ... | |
<brooke-logan> fhkb:isDaughterOf <beth-logian>; | |
<born> "1900-01-01"^^xsd:date; | |
<studied> "Chemistry"^^xsd:string; | |
foaf:name "Brooke Logan", "Brooke Forrester", "Brooke Chambers", "Brooke Jones", "Brooke Marone", "Brooke Spencer". | |
# ... | |
</code> | |
* Hint: comprehensive list of ''dcterms:'' and ''dc:'' elements is [[http://dublincore.org/documents/dcmi-terms/|here]] ("Section 2: Properties in the /terms/ namespace" = ''dcterms:'', "Properties in the /elements/1.1/ namespace" = ''dc:'') | |
| |
| |
==== - RDF Schema: classes [10 minutes] ==== | |
RDF Schema allows to organize objects into classes and define simple taxonomies. | |
| |
- Define classes of items in your database. Consider reusing the classes from dictionaries mentioned before, e.g. | |
<code> | |
@base <http://kkutt/got/> . | |
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |
| |
<Character> rdf:type rdfs:Class . | |
| |
<Dwarf> rdf:type rdfs:Class ; | |
rdfs:subClassOf <Character> . | |
| |
foaf:Person rdfs:subClassOf <Character> . | |
</code> | |
| |
Add the ''rdf:type'' statements to your RDF file, e.g.: | |
<code> | |
<brooke-logan> a foaf:Person . | |
<tyrion-lannister> rdf:type <Dwarf> . | |
</code> | |
| |
Note that ''a'' is an alias for ''rdf:type'' so two statements: <code><tyrion-lannister> rdf:type <Dwarf> .</code><code><tyrion-lannister> a <Dwarf> .</code> are equivalent. | |
| |
==== - RDF Schema: properties [10 minutes] ==== | |
| |
RDF Schema also provides a way to define Properties as well as their domains and ranges. | |
| |
- In your file identify properties that are not defined in external dictionaries (e.g. Dublin Core), e.g. in this code:<code> | |
<brooke-logan> fhkb:isDaughterOf <beth-logian>; | |
<born> "1900-01-01"^^xsd:date; | |
<studied> "Chemistry"^^xsd:string; | |
foaf:name "Brooke Logan", "Brooke Forrester", "Brooke Chambers", "Brooke Jones", "Brooke Marone", "Brooke Spencer". | |
</code> ''<studied>'' is not defined in external dictionary -- it is defined in our own namespace. | |
- Describe each such property using RDF Schema capabilities:<code> | |
@base <http://kkutt/b-and-b/> . | |
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |
| |
<studied> rdf:type rdfs:Property ; | |
rdfs:domain foaf:person ; | |
rdfs:range rdfs:Literal. | |
</code> | |
| |
You may find [[http://www.w3.org/TR/rdf-schema/|RDF Schema 1.1]] recommendation useful. | |
| |
==== - RDF Schema: Non-modeling properties [3 minutes] ==== | |
| |
RDF Schema also provides some handful properties that are not used in inference process. These are: | |
* ''rdfs:label'' -- used by convention to provide a human-readable name that is displayed by semantic web agents, | |
* ''rdfs:seeAlso'' -- cross-referencing; provide links to supplementary information, | |
* ''rdfs:isDefinedBy'' -- subPropertyOf rdfs:seeAlso; provides a link to the primary source of information, | |
* ''rdfs:comment'' -- for everything you want :) . | |
| |
- Use each of them in your RDF file. | |
- 8-) Include final RDF **Turtle** file in the report archive. | |
* Check if your Turtle file passes validation on <wrap caution>[[http://any23.org/|Anything to Triples]]</wrap>! | |
===== Control questions ===== | |
* What container elements are available in RDF? | |
* What is RDF Schema? | |
* What are core RDF Schema Classes and properties? | |
* How constraints on domain and range of properties are added? | |
| |
===== If you want to know more ===== | |
| |
{{section>.:lab-rdfmodel#if_you_want_to_know_more&noheader}} | |