Reifikacja (informatyka)

Reifikacja to proces, w wyniku którego abstrakcyjna koncepcja programu komputerowego zostaje przekształcona w jawny model danych lub inny obiekt utworzony w języku programowania . Obiekt obliczalny/adresowalny — zasób — jest tworzony w systemie jako serwer proxy dla obiektu, którego nie można obliczyć/adresować. Za pomocą urzeczowienia coś, co wcześniej było ukryte, niewyrażone i być może niewyrażalne, zostaje wyraźnie sformułowane i udostępnione manipulacji pojęciowej (logicznej lub obliczeniowej). Nieformalnie o reifikacji często mówi się jako o „uczynieniu z czegoś obywatela pierwszej klasy”. "w zakresie konkretnego systemu. Pewien aspekt systemu można zreifikować na etapie projektowania języka , co wiąże się z odzwierciedleniem w językach programowania. Można go zastosować jako stopniowe udoskonalanie na etapie projektowania systemu . Reifikacja jest jedną z najbardziej często stosowane techniki analizy pojęciowej i reprezentacji wiedzy .

Refleksyjne języki programowania

W kontekście języków programowania reifikacja to proces, w wyniku którego program użytkownika lub dowolny aspekt języka programowania, który był ukryty w przetłumaczonym programie i systemie wykonawczym, jest wyrażany w samym języku. Proces ten udostępnia je programowi, który może sprawdzać wszystkie te aspekty jak zwykłe dane . W językach refleksyjnych dane reifikacyjne są przyczynowo powiązane z powiązanym z nimi aspektem urzeczowionym w taki sposób, że modyfikacja jednego z nich wpływa na drugi. Dlatego dane reifikacyjne są zawsze wierną reprezentacją powiązanego z nimi aspektu urzeczowionego [ potrzebne wyjaśnienia ] . Często mówi się, że dane reifikacyjne są obiektem pierwszej klasy [ potrzebne źródło ] . Reifikacji, przynajmniej częściowo, doświadczono do tej pory w wielu językach: we wczesnych dialektach Lispa i obecnych dialektach Prologu programy traktowano jak dane, chociaż związek przyczynowy często pozostawiano w gestii programisty. W Smalltalk -80 kompilator przekształcający tekst źródłowy w kod bajtowy jest częścią systemu wykonawczego od pierwszych implementacji tego języka.

Reifikacja danych a udoskonalanie danych

Reifikacja danych ( stopniowe udoskonalanie ) polega na znalezieniu bardziej konkretnej reprezentacji abstrakcyjnych typów danych używanych w formalnej specyfikacji .

Reifikacja danych to terminologia Wiedeńskiej Metody Rozwoju (VDM), którą większość ludzi nazwałaby udoskonalaniem danych. Przykładem jest zrobienie kroku w stronę implementacji poprzez zastąpienie reprezentacji danych bez odpowiednika w zamierzonym języku implementacji, takim jak zestawy, reprezentacją, która ma odpowiednik (np. mapy ze stałymi domenami, które można zaimplementować za pomocą tablic) lub co najmniej taki, który jest bliższy odpowiednikowi, na przykład sekwencje. Społeczność VDM woli słowo „reifikacja” od „udoskonalenia”, ponieważ proces ten ma więcej wspólnego z konkretyzacją pomysłu niż z jego udoskonalaniem.

Aby zapoznać się z podobnymi zastosowaniami, zobacz Reifikacja (lingwistyka) .

W modelowaniu koncepcyjnym

Reifikacja jest szeroko stosowana w modelowaniu koncepcyjnym . Reifikacja relacji oznacza postrzeganie jej jako całości. Celem reifikacji relacji jest jej wyraźne określenie, kiedy należy do niej dodać dodatkowe informacje. Rozważ typ relacji IsMemberOf(member:Person, Committee) . Instancja IsMemberOf to relacja reprezentująca fakt, że dana osoba jest członkiem komitetu. Poniższy rysunek przedstawia przykładową populację IsMemberOf w formie tabelarycznej. Osoba P1 jest członkiem komitetów C1 i C2 . Osoba P2 jest członkiem wyłącznie komitetu C1 .

Przykładowa populacja relacji IsMemberOf w formie tabelarycznej. Osoba P1 jest członkiem komitetów C1 i C2. Osoba P2 jest członkiem wyłącznie komitetu C1.

Jednakże ten sam fakt można również postrzegać jako całość. Patrząc na relację jako na byt, można powiedzieć, że byt reifikuje relację. Nazywa się to reifikacją związku. Jak każda inna jednostka, musi to być instancja typu jednostki. W tym przykładzie typ jednostki został nazwany Membership . Dla każdej instancji IsMemberOf istnieje jedno i tylko jedno wystąpienie Membership , i wzajemnie. Teraz możliwe staje się dodanie większej ilości informacji do pierwotnej relacji. Jako przykład można wyrazić fakt, że „osoba p1 została nominowana na członka komisji c1 przez osobę p2”. Reifikowana relacja Członkostwo może służyć jako źródło nowej relacji IsNominateBy(Membership, Person) .

Aby zapoznać się z powiązanymi zastosowaniami, zobacz Reifikacja (reprezentacja wiedzy) .

W ujednoliconym języku modelowania (UML)

Diagram klas UML dla przykładu członkostwa.

UML zapewnia konstrukcję klasy asocjacji służącą do definiowania reifikowanych typów relacji. Klasa asocjacyjna jest pojedynczym elementem modelu, który jest zarówno rodzajem asocjacji, jak i rodzajem klasy. Zarówno skojarzenie, jak i typ jednostki, który podlega reifikacji, są tym samym elementem modelu. Należy pamiętać, że atrybutów nie można reifikować.

W sieci semantycznej

RDF i OWL

W językach sieci semantycznej , takich jak RDF i język ontologii sieciowej ( OWL), instrukcja jest relacją binarną. Służy do łączenia dwóch osób lub osoby i wartości. Aplikacje czasami wymagają opisywania innych wyciągów RDF, na przykład w celu rejestrowania informacji, np. kiedy sporządzono oświadczenia lub kto je sporządził, co jest czasami nazywane informacjami o „ pochodzeniu ”. Jako przykład możemy chcieć przedstawić właściwości relacji, takie jak nasza pewność co do niej, dotkliwość lub siła relacji, znaczenie relacji i tak dalej.

Przykład z sekcji modelowania koncepcyjnego opisuje konkretną osobę o URIref person:p1 , która jest członkiem komitetu :c1 . Trójka RDF z tego opisu to

          osoba  :  p1  komisja  :  jestczłonkiem  komisji  :  c1  . 

Rozważ przechowywanie dwóch kolejnych faktów: (i) odnotowanie, kto nominował tę konkretną osobę do tej komisji (oświadczenie o samym członkostwie) oraz (ii) odnotowanie, kto dodał ten fakt do bazy danych (oświadczenie o oświadczeniu).

Pierwszy przypadek to przypadek klasycznej reifikacji, jak powyżej w UML: reifikuj członkostwo i przechowuj jego atrybuty i role itp.:

                        
                   
         
       komitet  :  Członkostwo  rdf  :  typ  sowa  :  Klasa  .  komitet  :  członkostwo12345  rdf  :  typ  komitet  :  członkostwo  .  komitet  :  członkostwo12345  komitet  :  ofPerson  osoba  :  p1  .  komisja  :  członkostwo12345  komisja  :  wKomitet  komisja  :  c1  . 
                         osoba  :  p2  komisja  :  nominowana  komisja  :  członkostwo12345  . 

Dodatkowo RDF udostępnia wbudowane słownictwo przeznaczone do opisywania instrukcji RDF. Opis wypowiedzi przy użyciu tego słownictwa nazywa się reifikacją wypowiedzi. Słownik reifikacyjny RDF składa się z typu rdf:Statement oraz właściwości rdf:subject , rdf:predicate i rdf:object .

Używając słownictwa reifikacyjnego, reifikację oświadczenia o członkostwie danej osoby można uzyskać poprzez przypisanie mu identyfikatora URIref, takiego jak komitet: członkostwo12345 , dzięki czemu oświadczenia opisujące można zapisać w następujący sposób:

             
          
         
            komitet  :  członkostwo12345Stat  rdf  :  typ  rdf  :  Oświadczenie  .  komitet  :  członkostwo12345Stat  rdf  :  temat  osoba  :  p1  .  komitet  :  członkostwo12345Stat  rdf  :  komitet  predykatowy  :  isMemberOf  .  komitet  :  członkostwo12345Stat  rdf  :  przedmiot  komitet  :  c1  . 

Stwierdzenia te mówią, że zasób zidentyfikowany przez komitet URIref:membership12345Stat jest oświadczeniem RDF, że podmiot oświadczenia odnosi się do zasobu zidentyfikowanego przez osobę:p1 , predykat oświadczenia odnosi się do zasobu zidentyfikowanego przez komitet:isMemberOf , oraz przedmiot oświadczenia odnosi się do komitetu ds. zasobów:c1 . Zakładając, że oryginalne oświadczenie zostało faktycznie zidentyfikowane przez komitet:membership12345 , porównując oryginalne stwierdzenie z urzeczowieniem, powinno być jasne, że urzeczowienie faktycznie je opisuje. Konwencjonalne użycie słownictwa reifikacyjnego RDF zawsze wiąże się z opisywaniem wypowiedzi przy użyciu czterech stwierdzeń według tego wzorca. Dlatego czasami określa się je mianem „kwadratów reifikacyjnych”.

Stosując reifikację zgodnie z tą konwencją, moglibyśmy odnotować fakt, że osoba:p3 dodała instrukcję do bazy danych przez

            osoba  :  p3  komitet  :  dodano do bazy danych  komitet  :  członkostwo12345Stat  . 

Należy zauważyć, że w konwencjonalnym użyciu reifikacji zakłada się, że podmiot trójki urzeczowienia identyfikuje konkretny przypadek trójki w konkretnym dokumencie RDF, a nie jakąś dowolną trójkę mającą ten sam podmiot, orzeczenie i przedmiot. Ta szczególna konwencja jest stosowana, ponieważ reifikacja ma na celu wyrażenie właściwości, takich jak daty składu i informacje o źródle, jak w podanych już przykładach, a właściwości te należy zastosować do konkretnych przypadków trójek. Zauważ, że opisana trójka (podmiot predykat dopełnienie) samo w sobie nie jest implikowane przez taką czwórkę reifikacyjną (i nie jest konieczne, aby faktycznie istniała w bazie danych). Pozwala to również na użycie tego mechanizmu do wyrażenia, które trójki nie obowiązują .

Siła słownika reifikacyjnego w RDF jest ograniczona przez brak wbudowanych środków do przypisywania URIrefów do instrukcji, więc aby wyrazić tego rodzaju informacje o „pochodzeniu” w RDF, trzeba użyć jakiegoś mechanizmu (poza RDF ), aby przypisać identyfikatory URI do poszczególnych instrukcji RDF, a następnie sporządzić dalsze instrukcje dotyczące tych indywidualnych instrukcji, używając ich identyfikatorów URI do ich identyfikacji.

W Mapach tematycznych

W mapie tematów XML (XTM) tylko temat może mieć nazwę lub odgrywać rolę w powiązaniu. Można użyć skojarzenia, aby wysunąć twierdzenie na dany temat, ale nie można bezpośrednio formułować twierdzeń na temat tego twierdzenia. Jednakże możliwe jest utworzenie tematu, który reifikuje konstrukcję nietematyczną na mapie, umożliwiając w ten sposób nazwanie skojarzenia i traktowanie go jako samego tematu.

relacje n -arne

W językach sieci semantycznej, takich jak RDF i OWL, właściwość to relacja binarna używana do łączenia dwóch osób lub osoby i wartości. Jednakże w niektórych przypadkach naturalnym i wygodnym sposobem przedstawienia pewnych koncepcji jest użycie relacji w celu powiązania jednostki z więcej niż jedną osobą lub wartością. Relacje te nazywane są relacjami n-arnymi . Przykładami są relacje między wieloma osobami, takimi jak komitet, osoba będąca członkiem komitetu i inna osoba, która wyznaczyła pierwszą osobę na członka komitetu, lub kupujący, sprzedający i przedmiot, który został kupiony podczas opisywania zakup książki.

Bardziej ogólne podejście do reifikacji polega na utworzeniu jawnej nowej klasy i n nowych właściwości reprezentujących n -arną relację, czyniąc instancję relacji łączącej n jednostek instancją tej klasy. Podejścia tego można również użyć do przedstawienia informacji o pochodzeniu i innych właściwości pojedynczej instancji relacji.

 
              
        
 
              
       
         :  p1  a  :  Osoba  ;  :  has_membership  _  :  członkostwo_12345  .  _  :  członkostwo_12345  a  :  Członkostwo  ;  :  komisja  :  c1  ;  :  nominowany przez  :  p2  . 

Vs. cytat

Należy również zauważyć, że opisana tutaj reifikacja nie jest tym samym, co „cytat” występujący w innych językach. Zamiast tego urzeczowienie opisuje związek między konkretnym wystąpieniem trójki a zasobami, do których ta trójka się odnosi. Reifikację można intuicyjnie odczytać jako stwierdzenie „ta trójka RDF mówi o tych rzeczach”, a nie (jak w cytacie) „ta trójka RDF ma tę formę”. Na przykład w przykładzie reifikacji użytym w tej sekcji potrójna:

          komitet  :  członkostwo12345  rdf  :  temat  osoba  :  p1  . 

opisujący rdf:subject oryginalnej instrukcji mówi, że podmiotem wypowiedzi jest zasób (osoba) zidentyfikowany przez URIref person:p1 . Nie stwierdza, że ​​przedmiotem instrukcji jest sam identyfikator URIref (tj. ciąg znaków rozpoczynający się od określonych znaków), jak miałby to miejsce w cudzysłowie.

Zobacz też