Tudás Gráf reprezentációk #
Az előző fejezetekben bemutattuk, hogyan lehet tényállításokat kifejezni resource-ok, predikátumok, és literál értékek alkalmazásával. Ezeket a tényállítás hármasokat tripleteknek is nevezzük.
Bevezettük az IRI fogalmát, ami alkalmas arra, hogy a tényállításokat formalizáltan, általános érvénnyel írjuk le. Rendelkezésünkre áll tehát egy egyszerű módszer arra, hogy a tudásgráf csomópontjait és éleit, valamint azok címkéit szövegszerkesztővel szerkeszthető, egyszerű text formátumba alakítsuk, file-okban tároljuk, és ezen file-ok tartalmát betöltsük a tudásgráfot megvalósító adatbázisba, a számítógép memóriájába, továbbá, hogy onnan kinyerjük, és visszatároljuk file-ba.
Létezik tehát a tudásgráfnak egy olyan reprezentációja, ami a számítógép memóriájában helyezkedik el, és olyan is, ami valamilyen szabványosított formátumú file-ban kerül tárolásra. Ezekből a file formátumokból számos létezik. Az alábbiakban azokat a formátumokat soroljuk fel, amelyekkel a Cayley használata során találkozni fogunk.
Az erőforrások (resource-ok) formális ábrázolását definiáló keretrendszert RDF-nek nevezzük. Az RDF a Resource Description Framework kifejezés rövidítése.
Az RDF többféle file-szerializációs formátumot is definiál. A leggyakoribb formátumok általában szöveg alapúak (text, XML), amiknek szabványos mime azonosítójuk is van.
Az alábbi táblázat összefoglalja a leggyakrabban használatos formátumokat.
Megjegyzés:
A táblázat csak a teljesség kedvéért sorolja fel a formátumokat. Számunkra első közelítésben, szinte kizárólag az
n-quads
,n-triples
formátumok funtosa. ATurtle
formátum szintén nagyon hasznos, ezt alkalmazni is fogjuk néhány példában. A többit nem szükséges mélyebben tanulmányozni, ahhoz, hogy a szakácskönyv példáit megértsük, és hogy a Cayley -t használhassuk.
formátum | kiterjesztés | mime-type | mikor használjuk? |
---|---|---|---|
n-triples | .nt |
application/n-triples |
Ha elfogadható performanciát, és magas szintű kompatibilitást akarunk biztosítani. |
n-quads | .nq |
application/n-quads |
ua. mint n-triples |
Turtle | .ttl |
application/x-turtle |
Ha manuálisan kell szerkeszteni, olvasni. |
N3 | .n3 |
text/n3 |
Ha szükségünk van RDF szabályok alkalmazására. |
RDF/XML | .xml |
application/rdf+xml |
Ha XML-t kell használnunk. |
JSON-LD | .jsonld |
application/ld+json |
Ha JSON API-t akarunk biztosítani, vagy ahhoz csatlakozunk, és nincs nagy performancia-igény. |
n-triples, n-quads #
Ez a két formátum szinte azonos. Az n-triples
lényegében nem más, mint amit korábban a kijelentések c. fejezetben bemutattunk. Minden kijelentés subject predicate object
formában, külön sorban szerepel, amit egy .
karakter zár le. Például:
<Luke-Skywalker-from-StarWars> <is-a> <Person> .
<Luke-Skywalker-from-StarWars> <has-given-name> "Luke" .
<Luke-Skywalker-from-StarWars> <has-family-name> "Skywalker" .
<Luke-Skywalker-from-StarWars> <has-age> 23 .
az n-quads
formátum ettől annyiban tér el, hogy az object
és a záró .
közé még elhelyezünk egy opcionális label
stringet. Ez a label
(címke), arra jó, hogy az egy csoportba (gráfba) tartozó kijelentéseket megjelölhessük vele. Ezzel az adatbázis-kezelő performanciáját javíthatjuk, ha a keresést csak meghatározott gráfokra szűkítjük, az összes feltöltött gráf helyett.
Például az alábbi kódrészlet n-quads
kijelentéseket tartalmaz, a "a-new-hope"
címkével kiegészítve:
<Luke-Skywalker-from-StarWars> <is-a> <Person> "a-new-hope" .
<Luke-Skywalker-from-StarWars> <has-given-name> "Luke" "a-new-hope" .
<Luke-Skywalker-from-StarWars> <has-family-name> "Skywalker" "a-new-hope" .
<Luke-Skywalker-from-StarWars> <has-age> 23 "a-new-hope" .
Ez a címke az epizódra utal, amiben a szereplők először feltűntek.
A következő kódrészlet a Dantooine bolygót írja le n-triples
formátumban. Ezt a többi formátummal való összehasonlítás kedvéért hoztuk létre. Ugyanezen bolygó-leírást láthatjuk a további fejezetekben, többféle formátumban megjelenítve.
<https://swapi.co/resource/planet/25> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://swapi.co/vocabulary/Planet> .
<https://swapi.co/resource/planet/25> <http://www.w3.org/2000/01/rdf-schema#label> "Dantooine"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://swapi.co/resource/planet/25> <http://www.ontotext.com/business-object/type> "Planet" .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/climate> "temperate"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/desc> "None"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/diameter> "9830"^^<http://www.w3.org/2001/XMLSchema#integer> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/gravity> "1 standard"^^<http://www.w3.org/2001/XMLSchema#string> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/orbitalPeriod> "378"^^<http://www.w3.org/2001/XMLSchema#integer> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/population> "1000"^^<http://www.w3.org/2001/XMLSchema#integer> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/rotationPeriod> "25"^^<http://www.w3.org/2001/XMLSchema#integer> .
<https://swapi.co/resource/planet/25> <https://swapi.co/vocabulary/terrain> "oceans, savannas, mountains, grasslands"^^<http://www.w3.org/2001/XMLSchema#string> .
Turtle #
A Turle egy nagyon népszerű formátum. Nagyon hasonlít az n-quads
-ra, de sokkal tömörebb. A file elején definiálhatjuk a prefixeket és namespace-eket, és a kijelentéseinkben a subject-et elegendő csak egyszer megadni, majd ezt követhetik a predicate-object párosok, amelyeket a ;
karakter zárja le, majd a teljes kijelentéshalmazt a .
zárja le.
A Turtle formátum további könnyítéseket is tartalmaz, amiből adódóan kiválóan alkalmazható olyan esetben, ahol olvasnunk, vagy kézzel kell írnunk a tartalmat.
A Dantooine bolygó leírása Turtle formátumban:
@prefix bo: <http://www.ontotext.com/business-object/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix voc: <https://swapi.co/vocabulary/> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
<https://swapi.co/resource/planet/25> a voc:Planet ;
rdfs:label "Dantooine"^^xsd:string ;
bo:type "Planet" ;
voc:climate "temperate"^^xsd:string ;
voc:desc "None"^^xsd:string ;
voc:diameter 9830 ;
voc:gravity "1 standard"^^xsd:string ;
voc:orbitalPeriod 378 ;
voc:population 1000 ;
voc:rotationPeriod 25 ;
voc:terrain "oceans, savannas, mountains, grasslands"^^xsd:string .
N3 #
Az N3-at, más néven Notation3 formátumot Tim-Berners Lee dolgozta ki, az eredeti RDF/XML formátum helyettesítésére. Az N3 a szemantikus információ teljes körű leírására alkalmas. Egyenértékű az RDF/XML formátummal, de annál sokkal jobban olvasható, átlátható emberi szem számára. Az N3 nagyon hasonlít a Turtle-re, a Turtle valójában az N3 egy részhalmaza.
A Dantooine bolygó leírása N3 formátumban:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix ns0: <http://www.ontotext.com/business-object/> .
@prefix ns1: <https://swapi.co/vocabulary/> .
<https://swapi.co/resource/planet/25>
a <https://swapi.co/vocabulary/Planet> ;
rdfs:label "Dantooine"^^xsd:string ;
ns0:type "Planet" ;
ns1:climate "temperate"^^xsd:string ;
ns1:desc "None"^^xsd:string ;
ns1:diameter 9830 ;
ns1:gravity "1 standard"^^xsd:string ;
ns1:orbitalPeriod 378 ;
ns1:population 1000 ;
ns1:rotationPeriod 25 ;
ns1:terrain "oceans, savannas, mountains, grasslands"^^xsd:string .
RDF/XML #
Az RDF/XML az a szerializációs formátum, amit legelőször hoztak létre, és ami teljes körűen lefedi a szemantikus web tudás-reprezentációval szemben támasztott igényeit.
Sajnos az RDF/XML meglehetősen bőbeszédű, ember számára nem túl jól olvasható. Leginkább akkor használjuk, ha az XML formátum alkalmazása szükséges.
A Dantooine bolygó leírása XML/RDF formátumban:
<?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:ns0="http://www.ontotext.com/business-object/"
xmlns:ns1="https://swapi.co/vocabulary/">
<rdf:Description rdf:about="https://swapi.co/resource/planet/25">
<rdf:type rdf:resource="https://swapi.co/vocabulary/Planet"/>
<rdfs:label rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Dantooine</rdfs:label>
<ns0:type>Planet</ns0:type>
<ns1:climate rdf:datatype="http://www.w3.org/2001/XMLSchema#string">temperate</ns1:climate>
<ns1:desc rdf:datatype="http://www.w3.org/2001/XMLSchema#string">None</ns1:desc>
<ns1:diameter rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">9830</ns1:diameter>
<ns1:gravity rdf:datatype="http://www.w3.org/2001/XMLSchema#string">1 standard</ns1:gravity>
<ns1:orbitalPeriod rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">378</ns1:orbitalPeriod>
<ns1:population rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">1000</ns1:population>
<ns1:rotationPeriod rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">25</ns1:rotationPeriod>
<ns1:terrain rdf:datatype="http://www.w3.org/2001/XMLSchema#string">oceans, savannas, mountains, grasslands</ns1:terrain>
</rdf:Description>
</rdf:RDF>
JSON-LD #
A JSON-LD formátumú reprezentáció egy szabályos JSON dokumentum. A JSON-t elterjedten alkalmazzák REST API-ok request/response formátumaként. Jól olvasható ember számára is. Mivel mérete meglehetősen nagy, a feldolgozása sok erőforrást igényelhet, ezért nem a legoptimálisabb formátum, ha a feldolgozási sebesség fontos szempont.
A Dantooine bolygó leírása JSON-LD formátumban:
[
{
"@id": "https://swapi.co/resource/planet/25",
"@type": [
"https://swapi.co/vocabulary/Planet"
],
"http://www.ontotext.com/business-object/type": [
{
"@value": "Planet"
}
],
"http://www.w3.org/2000/01/rdf-schema#label": [
{
"@value": "Dantooine"
}
],
"https://swapi.co/vocabulary/climate": [
{
"@value": "temperate"
}
],
"https://swapi.co/vocabulary/desc": [
{
"@value": "None"
}
],
"https://swapi.co/vocabulary/diameter": [
{
"@value": 9830
}
],
"https://swapi.co/vocabulary/gravity": [
{
"@value": "1 standard"
}
],
"https://swapi.co/vocabulary/orbitalPeriod": [
{
"@value": 378
}
],
"https://swapi.co/vocabulary/population": [
{
"@value": 1000
}
],
"https://swapi.co/vocabulary/rotationPeriod": [
{
"@value": 25
}
],
"https://swapi.co/vocabulary/terrain": [
{
"@value": "oceans, savannas, mountains, grasslands"
}
]
},
{
"@id": "https://swapi.co/vocabulary/Planet"
}
]