EAV

fox mulder képe

Sziasztok!

[Bocs] Megint hoszú lettem. [/Bocs]
Most olvastam az EAV-ról (entity-attribute-value) a weblaboron, ami egy adatmodellezési mód és akkor érdemes használni, ha:

az egy objektumot leíró attribútumok potenciális száma több nagyságrenddel meghaladja az egy adott objektumot konkrétan leíró tulajdonságok számát

(az idézet innen való és Prakash Nadkarni-tól származik).

Szeretnék valami hasonlót megvalósítani Drupal modulként. A dolog hasonlít a MediaWiki szoftver Semantic Mediawiki kiterjesztéséhez, illetve az RDF adatmodelljéhez (subject-predicate-object), vagyis az volna a lényege, hogy egy node-hoz (entity ill. subject) hozzá lehessen rendelni egy másikat (attribute ill. predicate), majd egy harmadikat (ez a legutóbbi node helyett lehet sima érték is, pl.: int, string stb. Ez a value, azaz az object). Ha lenne olyan Node reference-hez hasonló CCK modul, amiben a mező neve is lehetne Node reference, az is hasonlítana erre.

Előzmények: volt nekem egy kérdésem (tervem), amit némi Semantic MediaWiki próbálkozás után (annó) végül is Drupal alatt saját modullal sikerült összetákolni, de arra gondoltam innen már csak egy kis lépés a dolog általánosítása. [Zárójel] Valszeg nem én vagyok az ideális megalkotója egy ilyen modulnak, hisz angol és PHP tudásom egyaránt közepesen csökött, de fejlődőképes [/Zárójel].
Szóval ebben a modulban a következő módszert alkalmaztam (és csak azért említem, hogy figyelembe vegyétek, ha végre eljutok a kérdésig):

  • Van a Dolgok szótár és a Dolog tartalomtípus.
  • Van a Tulajdonságok szótár és a Tulajdonság tartalomtípus.
  • Van a Tulajdonságértékek szótár és a Tulajdonságérték tartalomtípus.
  • Van egy NAT modul, ami azt csinálja, hogy automatikusan létrehoz egy kifejezést abban a szótárban, amit hozzárendeltünk az adott tartalomtípushoz.
  • Ezzel a modullal minden új Dolog létrehozásakor létrejön egy kifejezézés a Dolgok szótárban.
  • Minden új Tulajdonság létrehozásakor létrejön egy kifejezés a Tulajdonságok szótárban.
  • Minden új Tulajdonságérték létrehozásakor létrejön egy kifejezés a Tulajdonságértékek szótárban.
  • ÉS (ez már not NAT):
  • Minden Tulajdonságértéket be kell illeszteni egy, a Tulajdonságok szótárba tartozó kifejezésbe (melyik Tulajdonsághoz tartozik az adott Tulajdonságérték).
  • Minden Dolgot be kell illeszteni egy, a Tulajdonságértékek szótárba tartozó kifejezésbe (több is választható, itt adjuk meg, hogy melyik Tulajdonságértékek tartoznak az adott Dologhoz).
  • Az így létrejövő taxonómia rendszert használjuk a Tulajdonságértékek szerinti Dolog-keresésre (=határozás).
  • És kaptunk egy tetszőlegesen kiterjeszthető szerkezetet.

És végre a kérdés: Ha ki akarom terjeszteni ezt az egész határozó-dolgot egy általános subject-predicate-object modellé akkor hosszú távon jobban megéri-e saját adattáblákat használni, vagy jó ez a taxonómiából buherált dolog (annó azért választottam ezt, mert más Drupal modulok már fel vannak készülve a taxonómiával való együttműködésre (pl.: Views)). Később össze lehetne kapcsolni az egészet az RDF API-val.

Drupal verzió: