|
|
pl:miw:miw08_ard_rdf [2008/09/16 23:10] miw |
pl:miw:miw08_ard_rdf [2019/06/27 15:50] |
====== Opis ====== | |
Rafał Szymczyk, <raf.szymczyk@o2.pl> | |
| |
Zapis ARD przy pomocy RDF w XSLT | |
| |
====== Spotkania ====== | |
===== 08.03.04 ===== | |
| |
===== 08.03.18 ===== | |
* repr atrybutów dla reguł RIF/OWL/RDF | |
| |
===== 080401 ===== | |
* missed | |
| |
===== 080408 ===== | |
* ??? | |
| |
===== 080422 ===== | |
* to co na 18.3.2008 | |
| |
====== Projekt ====== | |
jak sensownie repr. ard w rdf? | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
===== 1. RIF(Rule Interchange Format) ===== | |
| |
RIF jest stworzonym przez W3C [[http://www.w3.org/|(Word Wide Web Consorcium)]] formatem reguł pozwalających na ich wymianę dla różnych języków reguł w sieciach semantycznych (RDF, OWL). Format RIF jest ciągle w fazie rozwoju, jedyne dostępne dokumenty są to szkice specyfikacji poszczególnych modułów (Working Draft). Do rozwijanych dokumentów należą m.in. [[http://www.w3.org/2005/rules/wg/draft/rif-fld/|RIF Framework for Logic Dialects ]] oraz [[http://www.w3.org/2005/rules/wg/draft/rif-bld/|RIF Basic Logic Dialect]] | |
| |
Dokładny opis specyfikacji RIF można znaleźć w projekcie [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_xtt_rif|XTT_RIF]]. Z punktu widzenia projektu, jest wiedza jak zapisywać typowe dla reguł elementy tj: | |
| |
* wartosc logiczna: np: B | |
| |
<code xml> | |
<Var> B </Var> | |
</code> | |
| |
* stałe argumenty: np: 300 | |
| |
<code xml> | |
<arg><Const type="rds:long"> 300 </Const></arg> | |
</code> | |
| |
* suma: n+1 | |
| |
<code xml> | |
<Uniterm> | |
<op><Const type="rif:iri"> op:numeric-add </Const></op> | |
<arg><Const type=""> 1 </Const></arg> | |
<arg><Var> n </Var></arg> | |
</Uniterm> | |
</code> | |
| |
* różnica: n-1 | |
| |
<code xml> | |
<Uniterm> | |
<op><Const type="rif:iri"> op:numeric-subtract </Const></op> | |
<arg><Const type=""> 1 </Const></arg> | |
<arg><Var> n </Var></arg> | |
</Uniterm> | |
</code> | |
| |
* równość: (wyr_1) = (wartosc) | |
| |
<code xml> | |
<Equal> | |
<arg> wyr_1 </arg> | |
<arg> wartosc </arg> | |
</Equal> | |
</code> | |
| |
* nierówność: n > 0 | |
| |
<code xml> | |
<Uniterm> | |
<op><Const type="rif:iri"> op:numeric-greater-than </Const></op> | |
<arg><Var> n </Var></arg> | |
<arg><Const type="xsd:decimal"> 0 </Const></arg> | |
</Uniterm> | |
</code> | |
| |
* nierówność: n <= 1 | |
| |
<code xml> | |
<Uniterm> | |
<op><Const type="rif:iri"> op:numeric-less-or-equal-than </Const></op> | |
<arg><Var> n </Var></arg> | |
<arg><Const type="xsd:decimal"> 0 </Const></arg> | |
</Uniterm> | |
</code> | |
| |
* suma logiczna : (wyr_1) and (wyr_2) | |
| |
<code xml> | |
<And> | |
<formula> | |
(wyr_1) | |
</formula> | |
<formula> | |
(wyr_2) | |
</formula> | |
</And> | |
</code> | |
| |
* warunek if : (conclusion) if (conditions) | |
| |
<code xml> | |
<Implies> | |
<if> | |
(conditions) | |
</if> | |
<then> | |
(conclusion) | |
</then> | |
</Implies> | |
</code> | |
| |
Teraz, na podstawie powyższej wiedzy, możemy spróbować zapisać za pomocą RIF przykład: | |
<code xml> | |
Rule: 1 | |
if the day is Monday | |
or the day is Tuesday or the day is Wednesday | |
or the day is Thursday or the day is Friday | |
then today is a workday | |
</code> | |
| |
Wygląda on następująco: | |
<code xml> | |
<?xml version="1.0" encoding="UTF-8"?> | |
<Group xmlns="http://www.w3.org/2007/rif#"> | |
<sentence> | |
<Implies> | |
<if> | |
<Or> | |
<formula> | |
<Equal> | |
<side><Var>dayofweek</Var></side> | |
<side><Const type="xsd:string">Monday</Const></side> | |
</Equal> | |
</formula> | |
<formula> | |
<Equal> | |
<side><Var>dayofweek</Var></side> | |
<side><Const type="xsd:string">Tuesday</Const></side> | |
</Equal> | |
</formula> | |
<formula> | |
<Equal> | |
<side><Var>dayofweek</Var></side> | |
<side><Const type="xsd:string">Wednesday</Const></side> | |
</Equal> | |
</formula> | |
<formula> | |
<Equal> | |
<side><Var>dayofweek</Var></side> | |
<side><Const type="xsd:string">Thursday</Const></side> | |
</Equal> | |
</formula> | |
<formula> | |
<Equal> | |
<side><Var>dayofweek</Var></side> | |
<side><Const type="xsd:string">Friday</Const></side> | |
</Equal> | |
</formula> | |
</Or> | |
</if> | |
<then> | |
<Atom> | |
<op><Const type="rif:iri">thrm:is-workday</Const></op> | |
<arg><Var>dayofweek</Var></arg> | |
</Atom> | |
</then> | |
</Implies> | |
</sentence> | |
</Group> | |
</code> | |
| |
W analogiczny sposób możemy zapisać większość reguł. Przykładem może być tu całość [[https://ai.ia.agh.edu.pl/wiki/hekate:hekate_case_thermostat|HeKatE Case Thermostat]] którego reguły przedstawione w RIF wyglądają nastepująco: [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_xtt_rif:thermostat|therm in RIF]]. | |
| |
| |
===== RDF===== | |
**Resource Description Framework (RDF)** jest podstawowym językiem | |
używanym do zapisu informacji w Sieci Semantycznej i przeznaczonym do | |
przetwarzania maszynowego. Każdy dokument RDF może być zakodowany | |
w postaci dokumentu XML, więc istnieje możliwość łatwej jego wizualizacji. | |
| |
W dosłownym tłumaczeniu RDF jest środowiskiem do opisu zasobów. | |
Zacząć trzeba więc od wyjaśnienia co jest rozumiane przez jego twórców pod | |
pojęciem zasobu. Otóż jako zasób można rozumieć nie tylko dowolny obiekt | |
znajdujący się w sieci ale również pojęcia abstrakcyjne, relacje i obiekty | |
fizyczne. Zasoby są w RDF reprezentowane przez wspomniane powyżej zunifikowane | |
identyfikatory zasobów (ang. Uniform Resource Identifier, URI). | |
URI jest pojęciem szerszym niż popularnie używane identyfikatory lokalizacji | |
zasobów (ang. Uniform Resource Locator, URL). URL opisuje zasób, który | |
musi być fizycznie dostępny w Internecie (jak strona WWW, plik na serwerze FTP) i jest szczególnym przypadkiem URI. URI może opisywać dowolny | |
obiekt, niezależnie od tego, czy znajduje się on w Internecie czy nie. Przykładowo | |
przy pomocy URI możemy reprezentować osobę przez nadanie jej | |
identyfikatora URI będącego jej adresem e-mail, adresem jej domowej strony | |
WWW lub innym identyfikatorem nadanym przez pewną organizację | |
pozwalającym w sposób jednoznaczny zidentyfikować daną osobę. | |
| |
Do opisu zasobów używa się tzw. stwierdzeń (ang. statements). Często | |
zamiennie z terminami zdanie i stwierdzenie używane jest jeszcze określenie | |
trójka (ang. triple). To ostatnie określenie wynika z faktu, że każde stwierdzenie | |
w RDF ma strukturę podobną do prostego zdania w języku naturalnym | |
i składa się z trzech elementów: | |
- **Podmiotu** (//ang. subject//). Podmiotem jest opisywany zasób reprezentowany przez URI. | |
- **Orzeczenia** (predykatu) (//ang. predicate//). Orzeczenie jest nazwą cechy lub relacji dotyczącej opisywanego podmiotu i podobnie jak podmiot jest reprezentowane przez URI. | |
- **Obiektu** (//ang. object//). Obiektem może być inny zasób (reprezentowanyprzez URI) lub stała wartość określana mianem literału (//ang. literal// ). | |
Najczęściej mamy do czynienia z jedną z dwóch sytuacji - opisujemy | |
relację między dwoma zasobami (wtedy obiektem jest URI reprezentujące zasób) | |
lub mówimy, że podmiot ma jakąś cechę o zadanej wartości | |
(wtedy używamy literału). Literał reprezentować może dowolną wartość | |
o ile daje się ona zapisać w postaci ciągu znaków. W RDF literałami mogą być tylko obiekty, nie jest możliwe ich użycie w charakterze | |
podmiotu czy orzeczenia.Każde zdanie można uważać za etykietowany graf skierowany. | |
| |
| |
{{:pl:miw:1.gif|:pl:miw:1.gif}} | |
| |
**Rys.1 Graf przedstawiajacy dwa zdania RDF.** | |
| |
Podmiot i obiekt są węzłami takiego grafu, natomiast orzeczenie jest reprezentowane jako krawędź skierowana od węzła podmiotu do węzła obiektu i | |
etykietowana przy pomocy URI orzeczenia. Przy rysowaniu grafów wizualizujących dane zapisane w RDF przyjęło się używanie owali do oznaczania | |
węzłów, które są zasobami (są reprezentowane przez URI). Obiekty będące literałami są natomiast reprezentowane przez prostokąty. | |
| |
[[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_ard_rdf:rdf:rdfexample|Bardziej rozbudowany przykład zapisu w RDF]] | |
| |
**Użycie faktów: | |
** | |
Wyrażenia RDF występują w postaci trójek zwanych zdaniami (statements). Wszystko do czego odnoszą się zdania są zasobami z pewnymi identyfikatorami lub wartościami. Po to aby fakty były użyte w zdaniach, musimy dysponować pewną tożsamością, która z kolei odpowiada pewniej wartości zasobu. | |
| |
By zapewnić taką reprezentacje faktów, wprowadza się nowe identyfikatory zasobów, powiązanych tutaj z przestrzenią nazw z prefixem rul: która wskazuje na przestrzeń nazw URI | |
<http://id.ninebynine.ord/RDFRules/1.0/>: | |
| |
* rul:Fact – jest pomocniczym typem danych który jest stosowany jako zasób reprezentujący fakt. | |
* rul:pred – to własność który określa predykat użyty przez fakt | |
* rul:args – to własność określająca listę argumentów predykatu użytą w fakcie | |
| |
| |
Przykład pewnego faktu reprezentowanego w RDF /N3 jako | |
| |
<code xml> | |
ex:subj ex:pred [ rdf:type rdf:List ; | |
rdf:first ex:val2 ; | |
rdf:rest [ rdf:type rdf:List ; | |
rdf:first ex:val3 ; | |
rdf:rest [ rdf:type rdf:List | |
: | |
... rdf:rest rdf:nil ]]] . | |
</code> | |
| |
Resource który reprezentuje ten fakt jest konstruowany jak pokazano w tym przykładzie RDF/N3: | |
| |
<code xml> | |
[ rdf:type rul:Fact ; | |
rul:pred ex:pred ; | |
rul:args [ rdf:type rdf:List ; | |
rdf:first ex:subj ; | |
rdf:rest _:genid1 ] ] . | |
</code> | |
| |
gdzie _:genid1 jest identyfikatorem reprezentującym „ogon” listy argumentów predykatu | |
| |
**Reprezentacja reguł:** | |
Podstawowa struktura reguł których używamy to zbiór faktów poprzedników (antecedent facts) i faktów z nich wynikających (consequent facts) | |
| |
Reguła: | |
| |
Afact1 & Afact2 & ... -> Cfact1 & Cfact2 & ... | |
| |
jest reprezentowana w RDF, używając notacji N3, jako: | |
<code xml> | |
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |
@prefix rul: <http://id.ninebynine.org/RDFRules/1.0/> . | |
@prefix ex: <http://example.org/#> . | |
| |
[ rdf:type rul:Rule ; | |
rul:from Afact1 ; | |
rul:from Afact2 ; | |
... | |
rul:infer Cfact1 ; | |
rul:infer Cfact2 ; | |
... ] . | |
</code> | |
Taka reprezentacja reguł wprowadza pewne nowe identyfikatory zasobów, powiązanych tutaj z przestrzenią nazw z prefixem rul: która wskazuje na przestrzeń nazw URI | |
<http://id.mimesweeper.com/RDFExpert/V1.0/ess#>: | |
| |
* rul:Rule - to pomocniczy typ danych który opisuje zasób który reprezentuje regułę | |
* rul:from - to właściwość która określa zasób reprezentujący fakt Afact (antecedent fact) reguły, jeden z faktów z którego może być wyciągnięty wniosek | |
* rul:infer – to właściwość która wskazuje fakt Cfact (conclusion fact) który może być wywnioskowany jeśli wszystkie fakty poprzedzające (antecedent facts) są prawdą. | |
| |
| |
Tak oto poniższa reguła: | |
| |
ex:a1( ex:a1s, ex:a1v2, ex:a1v3 ) & | |
ex:a2( ex:a2s, ex:a2v2 ) -> | |
ex:c1( ex:c1s, ex:c1v2, ex:a1v3 ) & | |
ex:c2( ex:c2s ) . | |
| |
była by reprezentowana w RDF/N3 jako: | |
<code xml> | |
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |
@prefix rul: <http://id.ninebynine.org/RDFRules/1.0/> . | |
@prefix ex: <http://example.org/#> . | |
| |
[ rdf:type rul:Rule ; | |
rul:from _:genid1 ; | |
rul:from _:genid2 ; | |
rul:infer _:genid3 ; | |
rul:infer _:genid4 ] | |
</code> | |
gdzie: genid1, genid2, genid3, genid4 są identyfikatorami reprezentującymi „ogon” listy argumentów predykatu np. genid2 może być opisany jako: | |
<code xml> | |
_:genid2 rdf:type rul:Fact ; | |
rul:pred ex:a2 ; | |
rul:args [ rdf:type rdf:List ; | |
rdf:first ex:a2s ; | |
rdf:rest [ rdf:type rdf:List ; | |
rdf:first ex:a2v2 ; | |
rdf:rest rdf:nil ]] . | |
</code> | |
**Zmienne | |
** | |
w ogólnym znaczeniu to identyfikatory które reprezentują pewne określone wartości, ale mogą róznież reprezentować różne wartości jeśli są użyte w innym kontekscie lub w róznych odwołaniach. Na przykład, reguła: | |
| |
parents( ?a, ?b, ?c ) & | |
parents( ?b, ?d, ?e ) & | |
parents( ?c, ?f, ?g ) -> grandparents( ?a, ?d, ?e, ?f, ?g ) | |
| |
Moze być wywołana dla zbiorów faktów ,które jednocześnie pasują do reguły przodka (antecedents); dla kazdego zbioru faktów, zmienne będą związane z innymi wartościami. | |
| |
Zmienne są reprezentowane przez zasób typu rul:Var, oraz posiadają rdfs:label własność która jest nazwą zmiennej. Tak oto fakt: | |
| |
ex:Parents( ?a, ?b, ?c ) . | |
| |
może być reprezentowany w RDF/N3 jako: | |
<code xml> | |
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . | |
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |
@prefix rul: <http://id.ninebynine.org/RDFRules/1.0/> . | |
@prefix ex: <http://example.org/#> . | |
| |
_:genid1 ex:Parents [ rdf:type rdf:List ; | |
rdf:first _:genid2 ; | |
rdf:rest [ rdf:type rdf:List ; | |
rdf:first _:genid3 ; | |
rdf:rest rdf:nil ] ] . | |
_:genid1 rdf:type rul:Var ; | |
rdfs:label "?a" . | |
_:genid2 rdf:type rul:Var ; | |
rdfs:label "?b" . | |
_:genid3 rdf:type rul:Var ; | |
rdfs:label "?c" . | |
</code> | |
| |
Linki: | |
| |
[[http://www.ninebynine.org/RDFNotes/RDFFactsAndRules.html#xtocid-7560072| Representing Facts and Rules in RDF]] | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
===== OWL - Web Ontology Language ===== | |
| |
OWL jest językiem ze składnią opartą na XML, a semantyką opartą na tzw. logice deskrypcyjnej (ang. description logics). Stanowi on rozszerzenie [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_hml_rules:rdf|RDF (ang. Resource Description Framework)]]. Służy do reprezentacji i przetwarzania danych w sieci WWW. OWL umożliwia opisywanie danych w postaci ontologii i budowanie w ten sposób tzw. Semantycznego Internetu. OWL posiada trzy podjęzyki o wzrastającej ekspresyjności: OWL Lite, OWL DL, and OWL Full. Zapis w języku OWL składa się z definicji ontologicznych metadanych (container), definicji | |
relacji binarnych, pojęć, przykładów pojęć oraz aksjomatów definiujących omówione dodatkowe | |
właściwości pojęć i relacji. | |
| |
Ponieważ OWL posiada pewne ograniczenia - nie można uchwycić złożonych relacji pomiędzy zdefiniowanymi właściwościami (chociażby ogólnie znany przykład "uncle") - powstała idea rozszerzenia OWL'a o pewne formy regułowe przy jednoczesnym zachowaniu maksymalnej kompatybilności z istniejącą składnią i semantyką OWL. | |
| |
Obecnie istnieje propozycja języka **[[http://www.daml.org/2003/11/swrl/|SWRL - Semantic Web Rule Language]]** (początkowo nazwany ORL - OWL Rules Language) opartego na połączeniu podjęzyków OWL DL i OWL Lite języka OWL z fragmentami języka [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_hml_rules:ruleML|RuleML (Rule Markup Language)]]. Propozycja ta rozszerza zbiór aksjomatów zapisanych w języku OWL tak, aby obejmował reguły mające postać klauzul. Pozwala to łączyć takie reguły z bazą wiedzy zapisaną w języku OWL. Proponowane reguły mają postać implikacji pomiędzy poprzednikiem (ciałem) i następnikiem (nagłówkiem). Poprzednik i następnik mogą być zbudowane z koniunkcji atomów, pojedynczego atomu albo być puste. (Wiadomo, że regułę zawierającą koniunkcję w następniku można przekształcić w zestaw reguł zawierających tylko jeden atom w następniku). Reguła ma następujące znaczenie: jeśli warunki podane w poprzedniku zachodzą, to warunki podane w następniku także muszą zachodzić. Pusty poprzednik jest traktowany jako trywialnie prawdziwy, a pusty następnik jako trywialnie fałszywy. Atomy w regułach mogą być postaci C(x), P(x,y), sameAs(x,y) lub differentFrom(x,y), gdzie C jest deskrypcją pojęcia języka OWL, P jest własnocią, a x,y są albo zmiennymi, albo indywiduami, albo wartościami danych. | |
| |
W tzw. Human Readable Syntax czyli składni bardziej czytelnej człowiekowi reguły przyjmują formę: | |
| |
<code xml> | |
antecedent -> consequent czyli poprzednik -> następnik | |
</code> | |
| |
gdzie zarówno antecedent jak i consequent składają się ze zbioru atomów a1 ^ a2 ^ ... ^ an. Zmienne są zaznaczane przy użyciu standardowej konwencji prefixowania ich znakiem zapytania (np.?x). Korzystając z tej składni reguła stwierdzająca że połączenie własności 'parent' i 'brother' da nam własność 'uncle' może być zapisana następująco: | |
| |
<code xml> | |
parent(?a,?b) ^ brother (?b,?c) -> uncle(?a,?c) | |
</code> | |
| |
czyli jeśli Mary jest rodzicem Johna i Bill jest bratem Mary, to ta reguła wymaga by Bill był wujkiem Johna. | |
| |
Indywidua są zaznaczane za pomocą ich nazw w OWL. Przykładem indywiduum może być 'Fred' lub 'Mary'. Przykład reguły w SWRL określającej własność hasBrother, korzystającej z indywiduum : | |
| |
<code xml> | |
Person(Mary) ^ hasSibling(Mary, Fred) ^ Male(Fred) -> hasBrother(Mary, Fred) | |
</code> | |
| |
Podstawowe typy takie jak integer, long, float czy double są określane za pomocą XML Schema datatypes. Wartości typu Boolean czyli prawda i fałsz są przedstawiane za pomocą vartości "true" i "false". Przykłady literałów: | |
<code xml> | |
34 | |
4.45 | |
-34 | |
True | |
false | |
"a literal" | |
</code> | |
Wszystkie typy danych muszą być poprzedzone prefixem przestrzeni nazw 'xsd:', np: | |
<code xml> | |
xsd:unsignedInt | |
xsd:string | |
</code> | |
Nie wszystkie typy danych XML Schema są obecnie obsługiwane. Do tych wpieranych zaliczamy xsd:int, xsd:short, xsd:long, xsd:boolean, xsd:float, xsd:double, xsd:string, xsd:time, xsd:anyURI, xsd:base64Binary, xsd:xsd:byte, xsd:duration, xsd:dateTime, oraz xsd:date. | |
| |
Literały mogą być sprecyzowane typem danych przez poprzedzenie ich parą "^^" oraz nazwą typu danej, np: | |
<code xml> | |
34^^xsd:unsignedInt | |
"a literal"^^xsd:string | |
</code> | |
| |
Jedną z najważniejszych cech SWRL jest możliwość korzystania z zdefiniowanych przez użytkownika predykatów. Predykaty te mogą pobierać jeden lub więcej argumentów i ocenić prawdę jeśli argumenty te odpowiadają predykatowi. Na przykład predykat 'równości' może być zdefiniowany tak by przyjmować dwa argumenty i zwracać true jeśli te argumenty są takie same. Duża liczba typowych predykatów wykonujących operacje matematyczne oraz operacje na stringach zawarte są w SWRL Built-in Submission. | |
| |
Przykład reguły SWRL korzystającej z wbudowanego predykatu by stwierdzić że osoba z wiekiem większym niż 17 jest osobą dorosłą: | |
<code xml> | |
Person(?p) ^ hasAge(?p, ?age) ^ swrlb:greaterThan(?age, 17) -> Adult(?p) | |
</code> | |
| |
Dla zachowania konwencji predykaty zawarte w SWRL poprzedzane są prefixem swrlb. | |
<code xml> | |
Person(?p) ^ hasNumber(?p, ?number) ^ swrlb:startsWith(?number, "+") -> hasInternationalNumber(?p, true) | |
</code> | |
| |
W SWRL negacja nie jest możliwa, czyli poniższa reguła jest błędem: | |
<code xml> | |
Person(?p) ^ ¬ hasCar(?p, ?c) -> CarlessPerson(?p) | |
</code> | |
| |
Więcej informacji oraz odpowiedzi na najczęściej zadawane pytania odnośnie SWRL: http://protege.cim3.net/cgi-bin/wiki.pl?SWRLLanguageFAQ | |
| |
Teraz kilka słów o SWRL zapisywanym w XML Presentation Syntax. | |
| |
* **owlr** - prefix przestrzeni nazw dla nowo przedstawianej składni (**swrlx** w innych opracowaniach) | |
* **owlx** - prefix przestrzeni nazw http://www.w3.org/2003/05/owl-xml | |
| |
Deklaracje zmiennych są zdaniami wskazującymi by dany URI był używany jako zmienna. Na przykład: | |
| |
<code xml> | |
<owlr:Variable owlr:name="x1"/> | |
</code> | |
| |
Aksjomaty reguł posiadają poprzedników (owlr:antecedent) oraz następników (owlr:consequent), które są listami atomów tworzonych z klas, predykatów, równości i nierówności. Na przykład: | |
| |
<code xml> | |
<owlr:classAtom> | |
<owlx:Class owlx:name="Person"/> | |
<owlr:Variable owlr:name="x1"/> | |
</owlr:classAtom> | |
</code> | |
| |
jest atomem klasy używającym nazwy //Person//, natomiast: | |
| |
<code xml> | |
<owlr:classAtom> | |
<owlx:IntersectionOf> | |
<owlx:Class owlx:name="Person"/> | |
<owlx:ObjectRestriction owlx:"hasParent"/> | |
<owlx:someValuesFrom owlx:class="Physician"/> | |
<owlx:ObjectRestriction/> | |
<owlx:IntersectionOf> | |
<owlr:Variable owlr:name="x2"/> | |
</owlr:classAtom> | |
</code> | |
| |
jest atomem klasy używającym opis reprezentujący osobę('Person') mającą przynajmniej jednego rodzica, który jest lekarzem('Physician') | |
| |
//PropertyAtom// zawiera atrybut //name// oraz dwa elementy które mogą być zmiennymi, indywiduami, albo wartościami danych. Na przykład: | |
| |
<code xml> | |
<owlr:datavaluedPropertyAtom owlr:property="grade"> | |
<owlr:Variable owlr:name="x1"> | |
<owlx:DataValue rdf:datatype="&xsd:integer">4</owlx:DataValue> | |
</owlr:datavaluedPropertyAtom> | |
</code> | |
| |
Na koniec jeszcze przykład atomu wskazującego równość (nierówność) pomiędzy zbiorami indywiduów i nazwami zmiennych. | |
| |
<code xml> | |
<owlr:sameIndividualAtom> | |
<owlr:Variable owlr:name="x1"/> | |
<owlr:Variable owlr:name="x2"/> | |
<owlx:Individual owlx:name="Clinton"/> | |
<owlx:Individual owlx:name="Bill_Clinton"/> | |
</owlr:sameIndividualAtom> | |
</code> | |
| |
Przykład zapisu zdania : jeżeli dzień=poniedziałek wtedy temp=20st za pomocą SWRL: | |
| |
<code xml> | |
monday(?day) -> temp(20) | |
</code> | |
| |
w składni XML: | |
| |
<code xml> | |
<owlx:Rule> | |
<owlr:antecedent> | |
<owlr:individualPropertyAtom owlr:property="monday"> | |
<owlr:Variable owlr:name="day"/> | |
</owlr:individualPropertyAtom> | |
</owlr:antecedent> | |
<owlr:consequent> | |
<owlr:datavaluedPropertyAtom owlr:property="temp"> | |
<owlx:DataValue rdf:datatype="&xsd:integer">20</owlx:DataValue> | |
</owlr:datavaluedPropertyAtom> | |
</owlr:consequent> | |
</owlx:Rule> | |
</code> | |
| |
=====ARD w RDF===== | |
| |
Proponaowane rozwiązanie: | |
| |
<code xml> | |
<?xml version="1.0"?> | |
<rdf:RDF | |
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" | |
xml:base="http://example.org" | |
> | |
<rdf:Description rdf:ID="ard:Attribute"> | |
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> | |
</rdf:Description> | |
| |
<rdf:Property rdf:ID="ard:Property"> | |
<rdfs:domain rdf:resource="#ard:Attribute1"/> | |
<rdfs:range rdf:resource="#ard:Attribute2"/> | |
</rdf:Property> | |
| |
</rdf:RDF> | |
</code> | |
| |
i przykład: | |
| |
<code xml> | |
<?xml version="1.0"?> | |
<rdf:RDF | |
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" | |
xml:base="http://example.org" | |
> | |
<rdf:Description rdf:ID="Thermostat"> | |
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> | |
</rdf:Description> | |
| |
<rdfs:Class rdf:ID="Time"> | |
<rdfs:subClassOf rdf:resource="#Thermostat"/> | |
</rdfs:Class> | |
| |
<rdf:Property rdf:ID="is_attribute_of"> | |
<rdfs:domain rdf:resource="#Time"/> | |
<rdfs:range rdf:resource="#Thermostat"/> | |
</rdf:Property> | |
</rdf:RDf> | |
</code> | |
| |
Poniżej przedstawiono inny przykład zapisu ARD w RDF za pomocą biblioteki DublinCore: | |
<code xml> | |
<?xml version="1.0"?> | |
<rdf:RDF | |
xmlns:rdf="http://www.w3.org/TR/WD-rdf-syntax#" | |
xmlns:dc="http://purl.org/dc/elements/1.0/" | |
xmlns:dcq="http://purl.org/dc/qualifiers/1.0/"> | |
<rdf:Description about="http://www.thermostat.org/Thermostate"> | |
<dc:Relation> | |
<rdf:Description> | |
<dcq:RelationType | |
rdf:resource="http://purl.org/dc/vocabularies/RelationTypes/v1.0/IsReferencedBy"/> | |
<rdf:value resource="http://www.thermostat.org/Time"/> | |
</rdf:Description> | |
</dc:Relation> | |
<dc:Relation> | |
<rdf:Description> | |
<dcq:RelationType | |
rdf:resource="http://purl.org/dc/vocabularies/RelationTypes/v1.0/IsReferencedBy"/> | |
<rdf:value resource="http://www.thermostat.org/Temperature"/> | |
</rdf:Description> | |
</rdf:Description> | |
</rdf:RDF> | |
</code> | |
| |
| |
| |
| |
| |
| |
====== Sprawozdanie ====== | |
| |
| |
| |
====== Materiały ====== | |
| |
[[hekate:hekate_case_thermostat]] | |
| |
**ARD:** | |
| |
https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-userv | |
| |
Nalepa, G. J. (2008). UServ Case Study, Conceptual Design with ARD+ Method. Paper presented at the FLAIRS2008. | |
| |
https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-ardformal | |
| |
Nalepa, G. J., & Wojnicki, I. (2008). Towards Formalization of ARD+ Conceptual Design and Refinement Method. Paper presented at the FLAIRS2008. | |
| |
https://ai.ia.agh.edu.pl/wiki/hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog | |
| |
Nalepa, G. J., & Wojnicki, I. (2008). An ARD+ Design and Visualization Toolchain Prototype in Prolog. Paper presented at the FLAIRS2008. | |
| |
**RDF:** | |
| |
http://www.w3.org/RDF/ | |
| |
If you want to learn about the Resource Description Format (RDF), you should read this primer. | |
| |
http://en.wikipedia.org/wiki/Resource_Description_Framework | |
| |
An explanation of RDF by Wikipedia. | |
| |
http://www.w3.org/TR/NOTE-rdf-simple-intro | |
| |
Lassila, Ora. Introduction to RDF Metadata, W3C., Note 1997-11-13 | |
| |
http://www.w3.org/RDF/FAQ | |
| |
Frequently asked Questions about RDF, W3C. | |
| |
http://www.ariadne.ac.uk/issue14/what-is | |
| |
An introductory explanation of RDF by Rachel Heery in Ariadne magazine online. | |
| |
http://www.rdfabout.com/intro/ | |
| |
http://www.xml.com/pub/a/2001/01/24/rdf.html | |
| |
http://xml.coverpages.org/rdf.html | |
| |
__The RDF tutorials__ : | |
| |
http://www.w3schools.com/rdf/default.asp | |
| |
http://www.zvon.org/xxl/RDFTutorial/General/book.html | |
| |
[[http://webdesign.about.com/gi/dynamic/offsite.htm?zi=1/XJ/Ya&sdn=webdesign&cdn=compute&tm=15&f=00&su=p284.8.150.ip_&tt=14&bt=0&bts=0&zu=http%3A//www710.univ-lyon1.fr/%7Echampin/rdf-tutorial/|RDF tutorial]] | |
| |
| |
| |
| |
**XSLT** : | |
* http://www.w3.org/Style/XSL/ | |
* http://zvon.org/xxl/XSLTutorial/Output/index.html | |
* http://w3schools.com/xsl/default.asp | |
* [[wp>XSLT]] | |
* http://www.w3.org/TR/xslt20/ | |
| |
| |
| |
FIXME | |
| |