Open World
Dlaczego pomysł SW może być interesujący dla programisty? Powód pierwszy: Sieć Semantyczna zakłada istnienie „świata otwartego”. Podejście takie oznacza przyjęcie założenia, że sam fakt, iż coś nie zostało powiedziane, nie oznacza jeszcze, że nie jest to prawdą. W przeciwieństwie do światów „zamkniętych”, jak bazy danych i programowanie obiektowe, gdzie jeśli czegoś nie powiedziano, to tego po prostu nie ma. Świat otwarty wymusza specyficzne podejście do znajdywanych informacji — założenie ich niekompletności i przyjęcie tendencji do wyciągania wniosków uzupełniających zamiast zgłaszania błędów.
Prosty przykład: załóżmy, że operujemy na danych wykorzystując ontologię, w której istnieje taki fragment (notacja RDF/XML):
<owl:ObjectProperty rdf:ID="hasMother">
<rdfs:domain rdf:resource="#Person"/>
<rdfs:range rdf:resource="#Woman"/>
</owl:ObjectProperty>
<owl:Class rdf:ID="Person">
<owl:Restriction>
<owl:onProperty rdf:resource="#hasMother"/>
<owl:cardinality rdf:datatype="&xsd;nonNegativeInteger">1</owl:cardinality>
</owl:Restriction>
</owl:Class>
W tłumaczeniu na polski zapisane są tu dwa fakty. Po pierwsze istnieje cecha o nazwie hasMother
, która łączy obiekty klasy Person
z obiektami klasy Woman
. Po drugie klasa Person
posiada ograniczenie, zgodnie z którym może wystąpić tylko jedno wystąpienie cechy hasMother
. Innymi słowy: dla każdej osoby jedna i tylko jedna kobieta jest matką (można dopowiedzieć „matką biologiczną”, choć to nie jest powyżej zapisane).
Zgodnie z założeniami świata otwartego trzeba przyjąć, że już sam fakt, że jakiś zasób (nazwijmy go #person1
) jest typu Person
oznacza (zgodnie z daną ontologią), że istnieje dla tego zasobu relacja hasMother
bez względu na to czy zostanie to wskazane w dostępnych nam danych czy nie. W najgorszym przypadku jest to wartość nieznana. Nie można jednak założyć, że jest to wartość NULL
jak w bazie danych, ani tym bardziej zgłosić jakiegoś NullPointerException
jak w programowaniu obiektowym. Zatem zgadzamy się, że osoba #person1
posiada matkę, tylko na razie nie wiadomo kto nią jest. Może się tego dowiemy za chwilę, a może nie dowiemy się nigdy...
Jeszcze ciekawszy jest drugi przypadek: znajdujemy w danych RDF dwa wyrażenia (notacja N3):
<#person1> :hasMother <#woman1> .
<#person1> :hasMother <#woman2> .
To jeszcze nie powód żeby orzekać sprzeczność danych. Pozornie wygląda na to, że zasób #person1
posiada podwójną relację hasMother
, mimo iż ontologia tego wyraźnie zabrania. W świecie otwartym zamiast potraktować to jako błąd należy wyciągnąć wniosek:
<#woman1> owl:sameAs <#woman2> .
Skoro zostało stwierdzone, że zarówno #woman1
jak i #woman2
oznaczają matkę zasobu #person1
, to widocznie są to dwa identyfikatory tego samego obiektu klasy Woman
. Przynajmniej dopóki nie natrafimy na stwierdzenie, że są to obiekty różne, np. przez jawne:
<#woman1> owl:differentFrom <#woman2> .
W świecie otwartym nikt nie może zabronić wypowiadać się na temat jednego obiektu wielu różnym autorom, w wielu różnych kontekstach i z wieloma różnymi identyfikatorami lokalnymi. Żaden zbiór RDF nie może być uważany za skończony. I to zarówno zbiór opisujący indywidualne zasoby jak i zbiór definiujący ontologie. Ponieważ model RDF z definicji jest „sieciowy” mogą gdzieś istnieć nie znane nam dokumenty na temat tych samych obiektów i mogą one opisywać jego cechy, których istnienia nawet nie podejrzewamy. Porównując tę sytuację do programowania obiektowego można stwierdzić, że obiekt w Sieci Semantycznej istnieje równocześnie w potencjalnie nieskończonej ilości nieznanych klas(!).
Tu oczywiście od razu pojawia się problem zaufania do danych, ale to już inna i znacznie poważniejsza sprawa...
patrz również:
2005.12.06 | 5 komentarzy |
tagi » semantic web, technologie i rozwiązania, rdf
Komentarze
#1 | 2005.12.06 17:21 | Domel
Wkradło się do przykładu małe nie dopowiedzenie. Rozumiem, że to tylko fragment ale zamiast encji &xsd; trzeba było wstazać http://www.w3.org/2001/XMLSchema# . Bardziej elegancko (co oczywiście nie oznacza, że tak trzeba konecznie robić co zreszta widać czasami na w3.org) i wiadomo o co chodzi (co kryje sie za encja i jak ma wyglądać wartość atrybutu datatype).
#2 | 2005.12.06 17:23 | Riddle
Dziękuję za ten i za poprzedni wpis. Coś zaczyna mi się rozjaśniać i liczę, że kolejne wpisy (nie zaraz, nie na hura, oczywiście) zarysują mi, jeśli nie kompletny, to podstawowy obraz SW. I będzie to podstawa do dalszych poszukiwań.
Jeszcze raz dzięki. ;-)
#3 | 2005.12.06 17:39 | Bellois
Gratuluje. Pomysl opisu sieci semantycznej jest wyborny i chyba w polskiej sieci dosyc pionierski. Moze mi sie to przyda, a moze nie, ale zycze Ci, abys mial dosyc energii i samozaparcia do kontynuowania tematu.
#4 | 2005.12.07 07:41 | MiMaS
zamiast encji &xsd; trzeba było wstazać http://www.w3.org/2001/XMLSchema#
Oj nie czepiaj się... ;-) Jest taki zestaw encji/prefiksów/namespace'ów, które każdy, kto choć liznął ten temat, bezbłędnie rozpoznaje. Nie mam zamiaru w skrótowych przykładach rozpisywać wszystkich oczywistych szczegółów...
#5 | 2005.12.07 09:05 | Domel
:-) Wiem, że się czepiam ale o tych parę znaków, właśnie dla tych którzy nic jeszcze z tego nie "lizali" :-) . Ten frafment tak naprawde jest bardzo istotny, bo korzysta z bardzo specyficznego słownika. (bo nie konieczie wynika z tej encji, bo przeciez możesz odwołać sie do jakiegoś swojego lub innego nie-w3.org).
Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.