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...

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.