Razvoj ontologije 101: Vodič za Stvaranje Prva Ontologija

Source: http://protege.stanford.edu/publications/ontology_development/ontology101-noy-mcguinness.html

Natalya F. Noy i Deborah L. McGuinness
Stanford University, Stanford, CA, 94305
[email protected] i [email protected]

1 Zašto se razvije ontologije?

U posljednjih nekoliko godina razvoja ontologije-eksplicitne formalne specifikacije termina u domenu i odnosa među njima (Gruber 1993) -ima kreće iz oblasti Artificial-obavještajne laboratorije za desktope stručnjaka domena. Ontologije su postali uobičajena na World-Wide Web. Ontologije na web rasponu od velikih taksonomija kategorizaciju Web stranice (kao što je na Yahoo!) na kategorizacije proizvoda za prodaju i njihove karakteristike (kao što je na Amazon.com). WWW Consortium (W3C) razvija Resource Description Framework (Brickley i Guha 1999), jezik za kodiranje znanja o web stranicama da je razumljivo da elektronski agenata u potrazi za informacijama.

Agencija za Defense Advanced Research Projects (DARPA), u saradnji sa W3C, razvija DARPA Agent Markup Language (DAML) proširenjem RDF sa više izražajnim konstruktima usmjerene na olakšavanje interakcije agent na Webu (Hendler i McGuinness 2000). Mnoge discipline sada razvijati standardizirane ontologije da stručnjaci domena može koristiti za dijeljenje i označiti informacije u svojim oblastima. Medicina, na primjer, je proizveo veliki, standardizovani, strukturiran rečnici kao što su SNOMED (Cijena i Spackman 2000.) i semantički mreže Jedinstvenom sistemu Medicinske jezik (Humphreys i Lindberg 1993). Broad opće namjene ontologije se pojavljuju kao dobro. Na primjer, Programa Ujedinjenih naroda za razvoj i Dun & Bradstreet u kombinaciji njihove napore da razviju UNSPSC ontologiju koja pruža terminologiju za proizvode i usluge (www.unspsc.org).

Ontologija definira zajedničku terminologiju za istraživače koji trebaju da dijele informacije u domenu. To uključuje stroj-tumačiti definicije osnovnih pojmova u domenu i odnose među njima.

Zašto bi neko želeo da se razvije ontologije? Neki od razloga su:

  • Da dijele zajedničko razumijevanje strukture informacije među ljudima ili softverskim agentima
  • Da biste omogućili ponovnu upotrebu domena znanja
  • Da bi domenu pretpostavke eksplicitne
  • Za odvajanje znanje domena iz operativnog znanja
  • Da analizira znanje domena

Dijeljenje zajedničko razumijevanje strukture informacije među ljudima ili softverskih agenata je jedan od zajedničkih ciljeva u razvoju ontologije (Musen 1992. godine; Gruber 1993). Na primjer, pretpostavimo da nekoliko različitih web stranicama sadrže medicinske informacije ili pružaju medicinske usluge e-trgovine. Ako ovi Web stranice dijele i objaviti iste osnovne ontologije uslovima koje svi koriste, onda kompjuter agenti mogu izdvojiti i agregatne informacije iz ovih različitih lokacija. Agenti mogu koristiti ovu agregirane informacije da odgovori korisnik upite ili kao ulazni podaci za druge aplikacije.

Omogućavanje ponovnu upotrebu domena znanja je bio jedan od pokretačkih snaga iza nedavnih skok u istraživanju ontologiji. Na primjer, modeli za različite domene treba da predstavlja pojam vremena. Ovo predstavljanje obuhvaća pojmove vremenskim intervalima, tačke u vremenu, relativna mjera vremena, i tako dalje. Ako jedna grupa istraživača razvija takve ontologije u detalje, drugi mogu jednostavno ponovno koristiti ga za svoje domene. Osim toga, ako je potrebno da se izgradi veliki ontologija, možemo integrirati nekoliko postojećih ontologije opisuje dijelove velikih domena. Mi također može ponovno koristiti opšte ontologije, kao što su UNSPSC ontologiju, i proširiti ga opisuju našu domenu interesa.

Izrada eksplicitne domenu pretpostavke za implementaciju omogućuje da lako promijeniti te pretpostavke, ako naše znanje o promjenama domenu. Hard-kodiranje pretpostavke o svijetu u kod programskom jeziku čini ove pretpostavke ne samo teško pronaći i shvatiti, ali i teško promijeniti, posebno za nekoga bez znanja programiranja. Osim toga, eksplicitne specifikacije domena znanja su korisni za nove korisnike koji moraju naučiti šta termina u domenu znače.

Odvajanje znanje domena iz operativnogo znanja je još jedan zajedničko korištenje ontologija. Možemo opisati zadatak konfiguriranja proizvoda iz njegovih komponenti prema traženoj specifikaciji i implementirati program koji radi ova konfiguracija nezavisno od proizvoda i komponenti sebe (McGuinness i Wright 1998). Mi tada može razviti ontologije PC-komponente i karakteristike i primijeniti algoritam za konfiguriranje made-to-order PC. Mi također može koristiti isti algoritam za konfiguriranje liftova ako “hraniti” lift komponenta ontologije da ga (Rothenfluh et al. 1996).

Analizirajući znanje domena je moguće jednom deklarativno specifikaciju termina je na raspolaganju. Formalna analiza termina je izuzetno vrijedan kada oba pokušaja ponovno koristiti postojeće ontologije i njihovim proširenjem (McGuinness i dr. 2000).

Često ontologije domena nije cilj sam po sebi. Razvoj ontologije je slično definiranje skup podataka i njihova struktura za druge programe za korištenje. metode rješavanja problema, aplikacije domena-nezavisna, i softverskih agenata koristiti ontologije i baze znanja izgrađena od ontologije kao podataka. Na primjer, u ovom radu smo razviti ontologije vina i hrane i odgovarajuće kombinacije vina uz obroke. Ova ontologija se zatim može koristiti kao osnova za neke aplikacije u paket alata restoran-upravljanje: Jedna aplikacija može stvoriti sugestije vino za menija dana ili odgovorite upita konobara i kupaca. Još jedna aplikacija mogla analizirati na listu inventar vinski podrum i predložiti koje vino kategorije da se proširi i koji posebno vina kupiti za predstojeće menije ili kuharica.

O ovom vodič

Mi gradimo na našem iskustvu koristeći Protege-2000 (Protege 2000), Ontolingua (Ontolingua 1997), Chimaera (Chimaera 2000) kao ontologije-uređivanje okruženja. U ovom vodiču, koristimo Protege-2000 za naše primjere.

Vino i primjer hrane koje koristimo u ovom vodiču, je labavo zasnovan na bazi primjer znanja predstavljen u ovom radu opisuje CLASSIC-na znanju reprezentacije sistem zasnovan na opis-logike pristup (Brachman et al. 1991). Classic tutorial (McGuinness i dr. 1994) je i dalje razvijati ovaj primjer. Protg-2000 i drugih sistema okvir zasnovan opisuju ontologije deklarativno, navodeći eksplicitno što klasa hijerarhije je i na koje klase pojedinci pripadaju.

Neki ontologije-dizajn ideje u ovom vodiču potiče iz literature o objektno orijentisanog dizajna (Rumbaugh et al 1991. godine;. Booch i dr 1997. godine.). Međutim, razvoj ontologije se razlikuje od osmišljavanja nastave i odnosa u objektno orijentirano programiranje. Objektno orijentisano programiranje centre prvenstveno oko načina na nastavu-programer donosi dizajn odluke na osnovu operativnih svojstva klase, dok je ontologije dizajner čini ove odluke na osnovu strukturnih svojstava klase. Kao rezultat toga, struktura i odnosa među klasama u ontologiji klase su različita od strukture za sličnu domenu u program objektno orijentisan.

Nemoguće je da se pokriju sva pitanja koja ontologije programer možda morati da se bore sa, a mi ne želimo da se obrati svima u ovom vodiču. Umjesto toga, nastojimo pružiti polazište; početni vodič koji će pomoći novim ontologiju dizajner za razvoj ontologija. Na kraju, predlažemo mjesta za tražiti objašnjenja komplikovanije struktura i mehanizama dizajn ako ih domenu zahtijeva.

Na kraju, ne postoji jedinstvena metodologija ispravna ontologije-dizajn i nismo pokušali da definišu jedan. Idejama koje ćemo predstaviti ovdje su one koje smo našli korisne u našem ontologiji-razvoj iskustvo. Na kraju ovog vodiča predlažemo popis referenci za alternativne metodologije.

2 Ono što je u ontologiji?

U vještački-obavještajne literatura sadrži mnoge definicije ontologije; mnoge od ovih suprotnosti jedna drugoj. Za potrebe ovog vodiča ontologije je formalni eksplicitan opis koncepata u domeni diskursa (klase (ponekad se naziva koncepata)), svojstva svaki koncept koji opisuje različite funkcije i atribute koncepta (slot (ponekad se naziva uloge ili svojstava) ), a ograničenja na slotova (faseta (ponekad se naziva ulogu ograničenja)). Ontologija zajedno sa skupom pojedinačnih slučajeva nastave predstavlja bazu znanja. U stvarnosti, postoji tanka linija u kojoj ontologiji završava i baze znanja počinje.

Nastava se fokus većine ontologija. Nastava opisuju koncepte u domenu. Na primjer, klase vina predstavlja sve vina. Specifični vina su slučajevi ove klase. Bordeaux vina u čašu ispred vas dok ste pročitali ovaj dokument je instanca klase Bordeaux vina. A klasa može imati podklase koje predstavljaju koncepte koji su više specifični nego superklase. Na primjer, možemo podijeliti u klasi svih vina u crveno, bijelo, i rose vina. Alternativno, možemo podijeliti klasu svih vina u pjenušava i gazirana vina.

Slote opisuju osobine klase i instance: Cheteau Lafite Rothschild Pauillac vino ima cijelo tijelo; se proizvodi od vinarije Cheteau Lafite Rothschild. Imamo dva slota opisuje vino u ovom primjeru: utor tijelo s vrijednosti puno i utor za kavu sa vrijednošću Cheteau Lafite Rothschild vinarija. Na nivou klase, možemo reći da instance klase vina će imati utora opisuje njihov ukus, tijelo, nivo šećera, proizvođač vina i tako dalje. [1]

Sve slučajevima klase vina, i njene podklase Pauillac, imaju priključak za kavu vrijednost koja je instanca klase Vinarija (Slika 1). Sve instance Vinarije klase imaju priključak proizvodi koji se odnosi na sva vina (instance klase vina i njene podklase) da vinarija proizvodi.

U praktičnom smislu, razvija ontologije uključuje:

  • definiranje klase u ontologiji,
  • uređenje klase u taksonomski (potklasa-superklase) hijerarhije,
  • definiranje slota i opisuje dozvoljenih vrijednosti za te slotove,
  • popunjavanje vrijednosti za slotove za instance.

Mi onda možemo stvoriti bazu znanja definisanjem pojedinačnim slučajevima ove klase popunjavanja konkretne informacije slot vrijednosti i dodatna ograničenja slotu.

Slika 1. Neki klase, instance, i odnose među njima u vinu domenu. Koristili smo crna za nastavu i crvena za instance. Direktne veze predstavljaju slota i interne veze, kao što su recimo-u i potklase-u.

3 Prosta znanje-inženjeringova metodologija

Kao što smo ranije rekli, ne postoji jedan “ispravan” način ili metodologija za razvoj ontologije. Ovdje govorimo o opštim pitanja koja treba razmotriti i ponuditi jedan Mogući proces za razvoj ontologije. Mi opisati iterativni pristup development ontologije: pocinjemo sa grubom prvom prolazu na ontologiji. Zatim smo revidirati i pobolsajte razvija ontologije i popunite detalje. Usput, govorimo o odlukama modeliranje koje dizajner mora napraviti, kao i prednosti, mane, i implikacije razlicitih rješenja.

Prvo, Želimo naglasiti nekih osnovnih pravila u ontologiju dizajna koje će se odnositi mnogo puta. Ova pravila može izgledati prilično dogmatski. Oni mogu Pomoći, Međutim, da se dizajn odluke u mnogim slučajevima.

  1. ne postoji jedan ispravan način da se model je domenu- uvijek postoje održive alternative. Najbolje rješenje skoro uvijek ovisi o aplikaciji da imate na umu i ekstenzije koje očekujete.
  2. razvoj ontologija je nužno iterativan proces.
  3. koncepti u ontologiji bi Trebalo da bude u blizini objekata (fizički ili logički) i odnose u domenu interesa. To su najvjerojatnije biti imenice (objekti) i glagoli (odnosi) u rečenice koje opisuju vaš domen.

To je, odlučujući šta ćemo koristiti ontologije za, i kako detaljna ili opšte ontologije će biti će voditi mnoge Odluke modeliranja niz put. Među Nekoliko alternativa, trebat će nam odrediti Kojih će raditi bolje za Planirani zadatak, biti više intuitivno, više Proširiv, i više održiv. Takođe, moramo Imati na umu da ontologije je model stvarnosti svijeta i koncepte u ontologiji mora odražavati ovu realnost. Nakon što smo definirati početne verzije ontologije, Možemo procijeniti i debug ga koristeći se u aplikacijama ili metode za Rješavanje problema ili razgovora sa stručnjacima na terenu, ili oboje. Kao rezultat toga, mi ćemo gotovo sigurno Morati da revidira početne ontologije. Ovaj proces iterativnog dizajna vjerojatno će se Nastaviti kroz cijeli životni ciklus ontologije.

Korak 1. Odredite domenu i obim ontologije

Predlažemo pokretanje razvoja ontologije definisanjem svojoj domeni i obim. To je, odgovoriti na nekoliko osnovnih pitanja:

  • Šta je domen koji će ontologija pokriti?
  • Za ono što ćemo koristiti ontologije?
  • Za koje vrste pitanja informacija u ontologiji treba dati odgovore?
  • Ko će koristiti i održavati ontologije?

Odgovori na ova pitanja mogu promijeniti tokom procesa ontologije-dizajn, ali u svakom trenutku oni pomažu ograničiti opseg modela.
Razmotrite ontologije vina i hrane koju smo ranije uveli. Predstavljanje hrane i vina je domena ontologije. Planiramo da biste koristili ovu ontologije za aplikacije koje ukazuju na dobre kombinacije vina i hrane.

Naravno, pojmovi koji opisuju različite vrste vina, glavne vrste hrane, pojam dobra kombinacija vina i hrane i loša kombinacija će shvatiti u našu ontologiju. U isto vrijeme, malo je vjerovatno da će ontologija uključuju koncepte za upravljanje nalazi u vinariji ili zaposleni u restoranu, iako su ovi koncepti su donekle odnose na pojmove vina i hrane.

Ako će se ontologije smo projektiranje koriste kako bi se pomoglo u obradi prirodnog jezika članaka u vinu časopisima, to može biti važno uključiti sinonime i part-of-govora informacija za pojmove u ontologiji. Ako će se ontologiju koristi da pomogne restoran kupaca odlučiti koji vino naručiti, moramo uključiti informacije prodajno-cijene. Ako se koristi za kupce vina u čarapa vinski podrum, veliko cijene i dostupnost može biti potrebno. Ako ljudi koji će održavati ontologije opisuju domenu na jeziku koji je različit od jezika korisnika ontologije, možda ćemo morati pružiti mapiranje između jezika.

Nadležnost pitanja.

Jedan od načina da se utvrdi obim ontologije je skicirati listu pitanja koja baze znanja na osnovu ontologije treba biti u stanju da odgovori, nadležnost pitanja (Grüninger i Fox 1995). Ova pitanja će poslužiti kao test lakmus kasnije: Da li ontologije sadrži dovoljno informacija da odgovori na ove vrste pitanja? Da li odgovore zahtijevaju određeni nivo detalja ili predstavljanja određenog područja? Ove nadležnosti pitanja su samo skice i ne moraju biti konačan.

U vina i hrane domeni, sljedeće su mogući nadležnosti pitanja:

  • Koje osobine treba da razmotre pri odabiru vina vino?
  • Je Bordeaux crveno ili bijelo vino?
  • Da li Cabernet Sauvignon idu dobro sa plodovima mora?
  • Koji je najbolji izbor vina za meso?
  • Koje karakteristike vina utjecati na njegovu prikladnost za jelo?
  • Da li buket ili tijelo određene promjene vino berba godine?
  • Koji su bili dobri berbi za Napa Zinfandel?

Sudeći po ovoj listi pitanja, ontologije će uključivati ​​informacije o različitim karakteristikama vina i vrste vina, berba godina-dobre i loše-klasifikacije namirnica koje su bitne za odabir odgovarajuće vino, preporučene kombinacije vina i hrane.

Korak 2. Razmotriti ponovnu upotrebu postojeće ontologije

To je gotovo uvijek vrijedi s obzirom na ono što je neko drugi uradio i provjere da li možemo poboljšati i proširiti postojeće izvore za naše određene domene i zadatak. Naknadno korištenje postojeće ontologije može biti uvjet ako naš sistem treba da komuniciraju sa drugim aplikacijama koje su već počinili određenim ontologije ili pod kontrolom rečnika. Mnogi ontologije su već dostupni u elektronskom obliku i mogu se uvoziti u ontologije-razvojno okruženje koje koristite.

Formalizmu u kojem ontologije često izražena nije bitno, jer mnogi znanja zastupljenost sistemi mogu uvoz i izvoz ontologije. Čak i ako na znanju reprezentacije sistem ne može raditi direktno sa posebnim formalizma, zadatak prevođenje ontologije iz jedne formalizam u drugi obično nije teška.

Postoje biblioteke za višekratnu upotrebu ontologija na Web i u literaturi. Na primjer, možemo koristiti ontologije biblioteka Ontolingua (http://www.ksl.stanford.edu/software/ontolingua/) ili ontologije biblioteka DAML (http://www.daml.org/ontologies/). Tu su i broj javno dostupnih komercijalnih ontologije (npr UNSPSC (www.unspsc.org), RosettaNet (www.rosettanet.org), DMOZ (www.dmoz.org)).

Na primjer, baze znanja francuskog vina možda već postoje. Ako ne možemo uvoziti ovu bazu znanja i ontologiju na kojima se zasniva, mi ćemo imati ne samo klasifikaciju francuskih vina, ali i prvog prolaza na klasifikaciju karakteristika vina koji se koriste za razlikovanje i opisivanje vina. Liste vina svojstava možda već biti dostupni od komercijalnih web stranicama kao što su www.wines.com da kupci smatraju koriste za kupovinu vina.

Za ovaj vodič, međutim mi ćemo pretpostaviti da nema relevantnih ontologije već postoje i početi razvoj ontologije od nule.

Korak 3. nabrojati važne pojmove u ontologiji

To je korisno da napiše spisak svih smislu želimo ili da daju izjave o ili da korisnik objasniti. Koji su uslovi želimo da razgovaramo? Šta svojstva da oni termini imaju? Šta bi mi da kažem o tim terminima? Na primjer, važno smislu vino u vezi će uključivati ​​vina, grožđa, vinarija, lokacija, boja vina je, tijelo, aroma i sadržaj šećera; različite vrste hrane, kao što su riba i crveno meso; podtipova vina, kao što su bijelo vino, i tako dalje. U početku, važno je da se sveobuhvatna lista termina bez brige o preklapanja između pojmova koje oni predstavljaju, odnose među terminima, ili bilo kakvog da se koncepti mogu imati, ili da li su koncepti su klase ili slotova.

Naredna dva koraka-razvoju klase hijerarhiju i definiranje svojstava koncepata (slotova) Jesi usko isprepletena. Teško je prva koja je to jedan od njih, a onda rade drugi. Tipično, stvaramo nekoliko definicije pojmova u hijerarhiji, a zatim nastaviti opisom svojstava ovih koncepata i tako dalje. Ova dva koraka su najvažniji koraci u procesu ontologiji-dizajn. Mi ćemo ih opisati ovdje ukratko, a zatim provesti naredne dvije sekcije raspravljaju o kompliciranije pitanja koja treba uzeti u obzir, česte zamke, odluka da se, i tako dalje.

Korak 4. Definirajte klase i hijerarhije klasa

Postoji nekoliko mogućih pristupa u razvoju hijerarhije klasa (Uschold i Grüninger 1996):

  • Proces top-down razvoj počinje s definicijom najopštijem koncepata u domeni i kasnije specijalizacije koncepata. Na primjer, možemo početi sa stvaranjem nastavu za opće koncepte vina i hrane. Onda smo Specijalizirani klase vina stvaranjem neke od njegovih podklase: belo vino, crno vino, rose vino. Možemo dalje kategorizirati Crno vino klase, na primjer, u Syrah, crni burgundac, Cabernet Sauvignon, i tako dalje.
  • Proces bottom-up razvoja odozdo prema gore počinje s definicijom najviše specifične klase, lišće hijerarhije, sa kasnijim grupisanje ove klase u više općim konceptima. Na primjer, možemo početi definisanjem nastave za Pauillac i Margaux vina. Zatim smo stvoriti zajedničku natklase za ove dvije klase-Medoc-što zauzvrat je potklasa Bordeaux.
  • Proces combination razvoja je kombinacija top-down i pristupa odozdo prema gore: Mi definirati više istaknutih koncepata, a zatim generalizirati i specijalizirati ih na odgovarajući način. Mogli bi početi s nekoliko koncepata najvišeg nivoa, kao što su vino, i nekoliko specifičnih koncepata, kao što su Margaux. Tada možemo da ih se odnose na koncept srednjeg nivoa, kao što je Medoc. Onda smo možda žele generirati sve regionalne klase vina iz Francuske, čime se stvaraju veliki broj koncepata srednjeg nivoa.

Slika 2 pokazuje mogući slom između različitih nivoa opštosti.

Slika 2. različitim nivoima vina taksonomiju: vino, crno vino, bijelo vino, rose vino su generalni pojmovi, na vrhunskom nivou. Pauillac i Margaux su najviše specifične klase u hijerarhiji, donji nivo.

Nijedan od ova tri načina je inherentno bolje od svih ostalih. Pristup da se snažno ovisi o lično mišljenje domena. Ako programer ima sistematski top-down pogled na domenu, onda to može biti lakše koristiti pristup top-down. Kombinacija pristup je često najlakši za mnoge ontologiju programere, jer koncepti “u sredini” imaju tendenciju da bude više opisne pojmove u domenu (Rosch 1978).

Ako ste skloni da misle vina po prvi razlikuje najviše generalnom plasmanu, a zatim pristup top-down može raditi bolje za vas. Ako biste radije početi budu kažnjeni sa specifičnim primjerima, i bottom-up pristup može biti prikladno.

Koji god pristup biramo, mi obično početi definiranjem klase. Na listi stvorili u koraku 3, biramo termine koji opisuju objekte koji postoji nezavisno, a ne izraza koji ti objekti. Ovi termini će biti nastave u ontologiji i postati sidra u klasi hijerarhiji. [2] Mi smo organizirati nastavu u hijerarhijski taksonomiju tražeći ako tako što instanca jedne klase, objekat će nužno (i.e., po definiciji) biti instanca neke druge klase.

Ako klase A je superklasa klase B, onda svaki slučaj B je također instanca A

Drugim riječima, klase B predstavlja koncept koji je “vrsta” A.

Na primjer, svaki Pinot Noir vina je nužno crno vino. Stoga je Pinot Noir klasa je potklasa od Red Wine klase.

Slika 2 prikazuje dio hijerarhije klasa za vino ontologije. Odjeljak 4 sadrži detaljnu diskusiju o stvarima tražiti kada definiranje hijerarhije klasa.

Slika 3. utora za klasu vina i aspekte ovih utora. Ikonu “I” pored utora za kavu ukazuje na to da slot ima inverznu (Sekcija 5.1)

Korak 5. Odredite svojstva klase-utora

Nastava sama neće pružiti dovoljno informacija da odgovori na nadležnost pitanja od koraka 1. Nakon što smo definisali neke klase, moramo opisati unutrašnju strukturu koncepata.

Mi smo već izabrali klase iz liste termina smo stvorili u koraku 3. Većina preostalih uslova će vjerovatno biti osobine ove klase. Ovi termini uključuju, na primjer, tijelo sadržaj vina je boja, okusa i šećer i lokaciju vinarije.

Za svaku imovinu na listi, moramo utvrditi kojoj klasi opisuje. Ove osobine postaju slota vezan za nastavu. Dakle, klase vina će imati sljedeće utora: boja, tijelo, aroma, i šećer. I Vinarija klasa će imati utor lokaciji.

U principu, postoji nekoliko vrsta objekata svojstva koja može postati slotova u ontologije:

  • “unutrašnje” svojstva kao što su okus vina;
  • “spoljašnji” osobine, kao što su ime vina, a područje je u pitanju iz;
  • dijelova, ako je predmet je strukturiran; to mogu biti i fizički i apstraktne “dijelova” (npr, kurseve obroka);
  • odnos prema drugim osobama; to su odnosi između pojedinih članova klase i ostale stavke (npr, proizvođač vina, predstavlja odnos između vina i vinarija, a grožđa vino je napravljen od.)

Tako je, pored osobine koje smo ranije identifikovali, moramo dodati sljedeće utora na klasu vina: ime, područje, kavu, grožđa. Slika 3 prikazuje slotove za klase vina.

Svi podklase klase nasljeđuju otvor te klase. Na primjer, svi slotovi klase vina će biti naslijedila sve podklase vina, uključujući i Red Wine and White Wine. Mi ćemo dodati dodatni slot, nivo tanina (nizak, umjeren, ili visoko), na Red Wine klase. slot razinu tanina će naslijedio sve klase predstavljaju crvena vina (kao što su Bordeaux i Beaujolais).

Slot treba priložiti na najopštiji klase koji mogu imati tu imovinu. Na primjer, tijelo i boju vina treba priložiti na klase vina, jer je najviše klasu čiji slučajevi će imati tijelo i boja.

Korak 6. Definirajte aspekte slotove

Slota mogu imati različite aspekte koji opisuje tip vrijednosti, dozvoljenih vrijednosti, broj vrijednosti (kardinalnost), i druge karakteristike vrijednosti otvor može uzeti. Na primjer, vrijednost imena utor (kao u “ime vino”) je jedan string. To je, ime je slot tipa vrijednosti String. A slot proizvodi (kao u “vinarija proizvodi ovih vina”) može imati više vrijednosti i vrijednosti su instance klase vina. To jest, proizvodi je slot tipa vrijednosti Osnovnim uz vino kao što je dozvoljeno klase.

Sada ćemo opisati nekoliko zajedničkih aspekata.

Slot kardinalnost

Slot kardinalnost definira koliko vrijednosti slot može imati. Neki sistemi razlikuju samo između jedne kardinalnost (omogućavajući na najviše vrijednosti) i više kardinalnost (dopuštajući bilo koji broj vrijednosti). Tijelo od vina će biti samo jedan slot kardinalnost (vino može imati samo jedno tijelo). Vina proizvedena od strane određenog vinarija ispunite slot više-kardinalnost proizvodi za Vinarija klasu.

Neki sistemi omogućuju specifikaciju minimalnog i maksimalnog kardinalnost preciznije opisati broj utora vrijednosti. Minimalna kardinalnost N znači da slot mora imati najmanje n vrijednosti. Na primjer, slot grožđa od vina ima minimum kardinalnost 1: svaki vino se sastoji od najmanje jedne sorte grožđa.

Maksimalna kardinalnost M znači da slot može imati najviše M vrijednosti. Maksimalna kardinalnost za slot grožđa za jednu sortnih vina je 1: ova vina su napravljeni od samo jedne sorte grožđa. Ponekad može biti korisno da postavite maksimalno kardinalnost na 0. bi Ova postavka ukazuju na to da slot ne može imati nikakve vrijednosti za određenu potklasa.

Slot-vrijednost

Tip vrijednost tipa aspekt opisuje ono što vrste vrijednosti mogu popuniti u otvor. Ovdje je popis vrsta češća vrijednosti:

  • String je najjednostavniji tip vrijednosti koji se koristi za proreze, kao što su ime: vrijednost je jednostavan string
  • Broj (ponekad i više specifične vrste vrijednosti Float i Integer se koriste) opisuje slota sa numeričkim vrijednostima. Na primjer, po cijeni od vina može imati Float tip vrijednosti
  • Boolean slota su jednostavni da-ne zastave. Na primjer, ako smo izabrali da ne predstavljaju pjenušava vina kao posebnu klasu, bez obzira da li ili ne vino pjenušava može predstaviti kao vrijednost Boolean slot: ako je vrijednost “true” ( “da”) je vino pjenušava i ako je vrijednost je “lažni” ( “ne”) vino nije iskričav jedan.
  • Nabrojali slota navesti listu specifičnih dozvoljenih vrijednosti za slot. Na primjer, možemo navesti da utor za ukus može uzeti na jednu od tri moguće vrijednosti: jak, umjeren, i delikatan. U Protege-2000 nabrojanih utora su tipa Simbol.
  • Instance tip utora omogućavaju definiranje odnosa između pojedinaca. Slotova tipa vrijednosti Osnovnim također mora definirati listu dozvoljenih klase iz kojih slučajeva može doći. Na primjer, slot proizvodi za klasu Vinarija mogu imati instance klase vina kao njegove vrijednosti. [3]

Slika 4 prikazuje definiciju otvor proizvodi u vinariji klase.

Slika 4. Definicija slot proizvodi koji opisuje vina proizvedena od strane vinarije. Slot ima kardinalnost više, tip vrijednosti instance, a klase vina kao dozvoljene klase za svoje vrijednosti.

Domena i niz slot

Dozvoljeni klase za slotova tipa instance se često naziva niz slotov. U primjeru na slici 4 klasi Vino je opseg proizvodi slot. Neki sistemi omogućavaju ograničavanje spektra slot kada je otvor u prilogu za određenu klasu.

Nastava na koji je priložen slot ili klase koje imovine slot opisuje, nazivaju domenu slot. Klasa Vinarija je domena proizvodi slot. U sistemima u kojima pridajemo utora na nastavu, nastava na koji otvor je pričvršćen obično čine domenu koja slot. Nema potrebe da odredite domenu zasebno.

Osnovna pravila za određivanje domena i niz slot su slične:

Prilikom definiranja domene ili raspon za slot, pronaći najopštiji klase ili klasa koja može biti, odnosno domenu ili raspon za slotove.

S druge strane, ne definiraju domena i opsegu koji je previše general: sve klase u domenu utor treba opisati utor i instance sve klase u rasponu od utor treba biti potencijalni punila za slot. previše klasu za opseg (i.e., jedan ne bi želeo da opseg stvar), ali jedan će žele odabrati klasu koja će obuhvatiti sve punila

Umjesto da svi sve moguće podklase klase vina za domet proizvodi slot, samo vinska karta. U isto vrijeme, mi ne želimo da odredite raspon slot kao THING-najopštiji klase u ontologiji.

U više specifične uslove:

Ako je popis klasa definira opseg ili domenu slot uključuje klase i njene podklase, uklonite podklase.

Ako je opseg otvor sadrži i klasu vina i Red Wine klase, možemo ukloniti Red Wine iz asortimana jer ne dodavati nove informacije: The Red Wine je potklasa vina i stoga opseg slot već implicitno uključuje se kao i sve druge podklase klase vina.

Ako je popis klasa definira opseg ili domenu slot sadrži sve podklase klase A, ali ne sama klase A, raspon treba da sadrži samo klase A, a ne potklase.

Umjesto definiranja opsega slot uključiti Red Wine, belo vino, i Rose vina (nabrajanja svih direktan podklase vina), možemo ograničiti opseg na samu klasu vina.

Ako je popis klasa definira opseg ili domenu slot sadrži sve osim nekoliko podklase klase A, razmotriti da li će klase A napraviti više odgovara definiciji opsega.

U sistemima u kojima je isti kao i dodavanjem klase na domenu slot pričvršćivanje utor za klasu, ista pravila važe za slot prilog: S jedne strane, treba da pokušamo da to što uopšte moguće. S druge strane, moramo osigurati da svaki razred u kojem smo pričvrstite utor zaista može imati imovinu koja slot predstavlja. Možemo pričvrstite utor razinu tanina u svakoj od klasa predstavlja crvena vina (npr, Bordeaux, Merlot, Beaujolais, itd). Međutim, s obzirom da svi crvena vina imaju imovinu tanina nivou, trebalo bi umjesto toga postavite slot ovom više klasu crvenih vina. Generalizacije domenu slot razinu tanina dalje (kao prilog u klasi vina umjesto) ne bi bilo ispravno, jer mi ne koristimo razinu tanina za opisivanje bijelih vina na primjer.

Korak 7. Kreiranje instanci

Posljednji korak je stvaranje pojedinačnih slučajeva nastave u hijerarhiji. Definiranje pojedinca instanca klase zahtijeva (1) odabir klase, (2) kreiranje individualnog instancu te klase, i (3) punjenje u vrijednosti utor. Na primjer, možemo stvoriti pojedinac primjer Chateau-Morgon-Beaujolais da predstavlja određenu vrstu Beaujolais vina. Chateau-Morgon-Beaujolais je instanca klase Beaujolais koji predstavljaju sve Beaujolais vina. Ovaj primjer ima sljedeće slot vrijednosti definirane (slika 5):

  • Body: Svjetlo
  • Boja: Crvena
  • Ukus: Delikatan
  • Tanina nivo: Nizak
  • Grožđe: Gamay (instanca klase vinove loze)
  • Maker: Chateau-Morgon (instanca Vinarija klase)
  • Regija: Beaujolais (instanca klase vina regija)
  • Šećer: Suvo

Slika 5. Definicija instanca Beaujolais klase. Na primjer je Chateua Morgon Beaujolais iz Beaujolais regije, proizvedeno od Gamay grožđa do vinarije Chateau Morgon. Ima svjetlo tijelo, delikatan okus, crvene boje, a nizak nivo tanina. To je suho vino.

4 Definiranje klasa i klasa hijerarhije

Ovo poglavlje raspravlja stvari paziti i greške koje su lako napraviti prilikom definisanja klase i klasa hijerarhije (korak 4 iz tačke 3). Kao što smo ranije spomenuli, ne postoji jedan ispravan hijerarhiju klasa za bilo koju domenu. Hijerarhija ovisi o mogućem upotreba ontologije, nivo detalja koji je neophodan za primjenu, ličnih sklonosti, a ponekad i zahtjevi za kompatibilnost s drugim modelima. Međutim, govorimo o nekoliko smjernica treba imati na umu prilikom izrade hijerarhije klasa. Nakon definiranja znatan broj novih klasa, to je korisno da odstupi i da li je u nastajanju hijerarhiju u skladu sa ovim smjernicama.

4.1 Osigurati da je klasa hijerarhija je ispravna

U “is-a” relacija
Klasa hijerarhija predstavlja “is-a” relacija: klasa A je podklasa od B ako je svaki slučaj B instanca A. Na primjer, Chardonnay je potklasa bijelog vina. Drugi način razmišljanja o taksonomske odnos je kao “vrsta-od” odnosa: Chardonnay je neka vrsta bijelog vina. A avion je vrsta aviona. Meso je vrsta hrane.

A podklasa klase predstavlja koncept koji je “vrsta” je koncept koji je superklase predstavlja.

Jedan vino nije podklasa od svih vina
Uobičajena modeliranje greška je da se uključuju i jednina i množina verzija istog koncepta u hijerarhiji što je bivši potklasa ovog drugog. Na primjer, da je pogrešno definirati klase vina i klasu vina kao potklasa vina. Kada mislite hijerarhije kao predstavljaju “vrsta-od” odnosa, greška modeliranje postaje jasno: jedan vina nije vrsta vina. Najbolji način da bi se izbjegla takva greška je uvijek koristiti ili jednini ili množini u imenovanju klase (vidi dio 6 za raspravu o imenovanju konceptima).

Tranzitivnosti hijerarhijskog odnosa
A potklasa odnos je tranzitivni:

Ako B je podklasa od A i C je podklasa od B, onda C je potklasa A

Na primjer, možemo definirati klase vina, a zatim definirati klasu bijelo vino kao potklasa vina. Onda ćemo definirati klasu Chardonnay kao potklasa bijelog vina. Tranzitivnosti potklase odnosa znači da klase Chardonnay je i potklasa vina. Ponekad mi razliku između direktnih potklasa i indirektne podklase. Direktna potklasa je “najbliži” potklasa klase: nema nastave između klase i njene direktne potklasa u hijerarhiji. To je, nema druge klase u hijerarhiji između klase i njene direktne natklase. U našem primjeru, Chardonnay je direktna potklasa bijelog vina i nije direktno potklasa vina.

Evolucija hijerarhije klasa
Održavanje konzistentan hijerarhije klasa može postati izazov kao domena razvijaju. Na primjer, dugi niz godina, sve Zinfandel vina bile crvene. Stoga, definiramo klasu Zinfandel vina kao potklasa Crvenog vina klase. Ponekad, međutim, počeo vinara pritisnuti grožđe i da odmah oduzeti aspekte boje za proizvodnju grožđa, čime modifikaciju boju rezultat vina. Tako smo dobili “bijele Zinfandel”, čiji je boja ruža. Sada moramo razbiti Zinfandel razred u dvije klase Zinfandel-White Zinfandel i Red Zinfandel-i klasificirati ih kao podklase Rose vina i crnog vina, odnosno.

Nastava i njihova imena
Važno je napraviti razliku između klase i ime:

Nastava predstavljaju koncepte u domenu, a ne riječi koje označavaju ove koncepte.

Ime klase može promijeniti ako se odabrati različite terminologije, ali sam pojam predstavlja objektivnu realnost u svijetu. Na primjer, možemo stvoriti klasu škampi, a zatim ga preimenovati Kozice-klase još uvijek predstavlja isti koncept. Odgovarajuće kombinacije vina koja se odnosila na škampe jela bi trebalo da pogledaju Prawn jela. U više praktičnom smislu, sljedeće pravilo uvijek treba slijedi:

Sinonimi za isti koncept ne predstavljaju različite klase.

Sinonimi su samo različita imena za koncept ili pojam. Stoga, ne treba imati klasu zove škampa i klase pod nazivom Prawn, i, eventualno klase pod nazivom Crevette. Umjesto toga, postoji jedna klasa, po imenu ili škampi ili kozica. Mnogi sistemi omogućavaju udruživanje popis sinonima, prevodi, ili imena prezentaciju sa klase. Ako se sistem ne dozvoljava ovog udruženja, sinonimi mogli uvijek biti navedeni u klasi dokumentaciji.

Izbjegavanje ciklusa klasa
Trebalo bi izbjeći ciklusa u klasi hijerarhiji. Mi kažemo da je ciklus u hijerarhiji kada su neki klase A ima potklasa B i istovremeno B je superklasa A. Stvaranje takvog ciklusa u hijerarhiji iznosi izjavljujući da su klase A i B su ekvivalentne: sve slučajevi A su slučajevi B i sve instance B su također slučajevi A. Zaista, jer B je podklasa od A, slučajeva sve B moraju biti instance klase A. budući da je potklasa B, sve A instance mora biti instance klase B.

4.2 Analizirajući braća i sestre u klasi hijerarhiji

Braća i sestre u klasi hijerarhiji
Braća i sestre u hijerarhiji su klase koje su direktno podklase iste klase (vidi Odjeljak 4.1).

Sva braća i sestre u hijerarhiji (osim za one u osnovi) mora biti na istom nivou općenitosti.

Na primjer, za bijelo vino i Chardonnay ne bi trebalo da bude podklase iste klase (recimo, vino). Bijelo vino je više generalni koncept od Chardonnay. Braća i sestre trebaju predstavljati koncepte koji padaju “na istoj liniji” na isti način na koji sekcije istom nivou u knjizi su na istom nivou općenitosti. U tom smislu, zahtjevi za klasu hijerarhije su slične zahtjeve za knjigu okvir.

Koncepti u osnovi hijerarhije, međutim (koji su često predstavljeni kao direktan podklase nekih vrlo klasu, kao što su Thing) predstavljaju glavne podjele domena i ne moraju biti slične koncepte.

Koliko je previše i koliko malo je premalo?
Ne postoje teško pravila za broj direktnih potklasa da klasa treba imati. Međutim, mnogi dobro strukturiran ontologije imaju između dva i desetak direktan podklase. Zbog toga, sljedeće dvije smjernice:

Ako razred ima samo jedan direktan potklasa možda postoji problem modeliranja ili ontologije nije potpuna.
Ako postoji više od desetak podklase za datu klasu onda bilo kakvih drugih kategorija može biti potrebno.

Prvi od dva pravila je sličan pravilu slog koji liste nabrajanja nikada ne treba imati samo jedan metak trenutku. Na primjer, većina crni burgundac vina Cotes d’Or vina. Pretpostavimo da smo htjeli da predstavljaju samo ova većina vrstu Burgundije vina. Mogli bi stvoriti klasu crni burgundac i onda jedan potklasa Cotes d’Or (Slika 6a). Međutim, ako u našem predstavljanju crni burgundac i Cotes d’Or vina su u suštini ekvivalentni (sve crni burgundac vina Cotes d’Or vina i sve Cotes d’Or vina su crni burgundac vina), stvaranje Cotes d’Or razred nije potrebno i ne dodavati nove informacije zastupljenosti. Ako smo uključiti Ctes Chalonnaise vina, koji su jeftiniji Burgundija vina iz regije južno od Cotes d’Or, onda ćemo stvoriti dvije podklase klase Burgundy: Cotes d’Or i Cotes Chalonnaise (Slika 6b ).

Slika 6. podklase Crvenog Burgundije klase. Imati jedan potklasa klase obično ukazuje na problem u modeliranju.

Pretpostavimo sada da smo listu svih vrsta vina kao direktan podklase klase vina. Ova lista bi onda uključuju takve općenitije vrste vina kao Beaujolais i Bordeaux, kao i posebne vrste, kao što su Paulliac i Margaux (Slika 7a). Klasa Vino ima previše direktan podklase i, zaista, za ontologiju odražava različite vrste vina u više organizirano, Medoc treba da bude potklasa Bordeaux i Cotes d’Or treba da bude potklasa od Burgundije. Također ima takvo srednje kategorije kao što su crno vino i bijelo vino će se odraziti i na konceptualni model domena vina da mnogi ljudi imaju (Slika 7b).

Međutim, ako ne prirodno klase postoje u grupu pojmova u dugoj listi braće i sestara, nema potrebe da se stvori umjetni klase-samo napustiti nastavu na način da su. Na kraju krajeva, ontologija je odraz stvarnog svijeta, a ako ne kategorizacije postoji u stvarnom svijetu, onda ontologije treba da odražava to.

Slika 7. Kategorizacija vina. Imajući sve vina i vrste vina u odnosu na koje imaju nekoliko razina kategorizacije.

4.3 Višestruki baštinu

Većina znanja zastupljenost sistemi omogućavaju više nasljedstva u hijerarhiji klasa: klasa može biti potklasa nekoliko klasa. Pretpostavimo da želimo da se stvori posebnu klasu desertnih vina, desert vino klase. Luka vino je i crno vino i desertno vino. [4] Stoga, ćemo definirati klasu Port imati dva superclasses:

Crveno vino i desert vino. Sve instance klase Luke će biti slučajeva kako Crno vino klase i desert vino klase. Luka klasa će naslijediti svog utora i njihovih aspekata od oba roditelja. Dakle, to će naslijediti vrijednost SWEET za slot šećera iz klase desert vino i slot razinu tanina i vrijednost za slot boju iz crvenog vina klase.

4.4 Kada uvesti novu klasu (ili ne)

Jedna od najtežih odluka da se tijekom modeliranja kada uvesti novu klasu ili kada predstavljaju razliku kroz različite vrijednosti imovine. Teško je za navigaciju i izuzetno ugnježdene hijerarhije sa mnogo nevažnih klase i vrlo ravna hijerarhija koja ima premalo klase s previše informacija kodirane u proreze. Pronalaženje odgovarajuće ravnoteže, iako nije lako.

Postoji nekoliko pravila palca koji pomažu odlučiti kada uvesti nove klase u hijerarhiji.

Podklase klase obično (1) imaju dodatne svojstva koja superklase nema, ili (2) ograničenja razlikuju od onih u superklase, ili (3) učestvuju u različitim odnosima od superclasses.

Crvena vina mogu imati različite razine tanina, a ove nekretnine se ne koristi za opisivanje vina u cjelini. Vrijednost za slot šećera u Desertno vino je sladak, a to nije istina od superklase klase desertno vino. Pinot Noir vina može dobro ići s plodovima mora, dok druga crvena vina ne. Drugim riječima, uvodimo novu klasu u hijerarhiji obično samo kada postoji nešto što možemo reći o ovoj klasi da ne možemo reći o superklase.

U praktičnom smislu, svaki potklasa treba ili imaju nove slotove dodao da je, ili imaju nove utor vrijednosti definirane, ili nadjačati neke aspekte za naslijeđeni utora. Međutim, ponekad može biti korisno za stvaranje nove klase, čak i ako oni ne uvoditi nikakva nova svojstva.

Nastava u terminološkom hijerarhija ne moraju da uvedu nove nekretnine

Na primjer, neke ontologije uključuju velike referentne hijerarhije zajedničkih pojmova koji se koriste u domenu. Na primjer, ontologije osnovi elektronski medicinski-zapis sistem može uključivati ​​klasifikaciju raznih bolesti. Ova klasifikacija može biti upravo to-hijerarhiju termina, bez svojstva (ili isti skup svojstava). U tom slučaju, to je još uvijek korisno organizirati termina u hijerarhiji, a ne ravna lista jer će (1) omogućiti lakši istraživanje i navigaciju i (2) omogućiti doktor lako odabrati razinu općenitosti pojma da je odgovarajuće za situaciju.

Još jedan razlog da se uvedu nove klase bez novih svojstava je za modeliranje koncepata među kojima stručnjaci domena često prave razliku iako smo možda odlučili da ne model sam razliku. Budući da smo koristiti ontologije bi se olakšala komunikacija među stručnjacima domena i između stručnjaka domena i sisteme zasnovane na znanju želimo da odražava mišljenju stručnjaka domena u ontologiji.

Na kraju, ne treba stvarati podklase klase za svaki dodatni ograničenja. Na primjer, uveli smo klase Crno vino, bijela vina, i Rose vina, jer ova razlika je prirodan jedan u svijetu vina. Nismo uvesti nastavu za delikatne vino, umjeren vino, i tako dalje. Prilikom definiranja klasa hijerarhije, naš cilj je uspostaviti ravnotežu između stvaranja novih klasa korisno za klasu organizaciju i stvaraju previše klase.

4,5 nove klase ili vrijednost imovine?

Kada modeliranje domene, često moramo odlučiti da li će model određenu razliku (kao što su bijela, crvena, ili Ros vino) kao vrijednost imovine ili kao skup klasa ponovo ovisi o obimu domena i zadatak na ruku.

Da li stvoriti klasu za bijelo vino ili ćemo jednostavno stvoriti klasu vina i popunite različite vrijednosti za boju slot? Odgovor obično leži u okviru koje smo definisali za ontologiju. Koliko je važan koncept za bijelo vino u našem domenu? Ako vina imaju samo marginalni značaj u domenu i da li ili ne vino je bijela nema neku posebnu implikacije za svoje odnose na druge objekte, onda ne treba uvesti posebnu klasu za bijela vina. Za model domena se koristi u tvornici za proizvodnju etiketa, pravila za vino etikete bilo koje boje su isti, a razlika nije jako važno. Alternativno, za predstavljanje vina, hrane, i njihove odgovarajuće kombinacije crveno vino je veoma razlikuje od bijelog vina: to je uparen sa različitim namirnicama, ima različite osobine, i tako dalje. Slično tome, u boji vina je važno za bazu vina znanje koje možemo koristiti kako bi se utvrdilo kako degustacija vina. Stoga, mi stvaramo posebnu klasu za bijelo vino.

Ako koncepata s različitim vrijednostima slot postati ograničenja za različite utora u druge klase, onda treba stvoriti novu klasu za razliku. U suprotnom, mi predstavljaju razliku u vrijednosti slot.

Slično tome, naša vina ontologije ima takvu nastavu Red Merlot i Bela Merlot, a ne jedne klase za sve Merlot vina: crveno Merlots i bijele Merlots zaista različitih vina (od istog grožđa) i ako se razvija detaljnu ontologije vino, ova razlika je važna.

Ako je razlika je važna u domenu i mislimo objekata sa različitim vrijednostima za razliku kao različite vrste objekata, onda treba stvoriti novu klasu za razliku.

S obzirom na potencijal pojedinca instance klase također mogu biti od pomoći u odlučivanju da li ili ne uvesti novu klasu.

A klase na koji pojedinac primjer pripada ne bi trebalo promijeniti često.

Obično kada koristimo spoljašnji, nego unutrašnja svojstva pojmova za razliku među klasama, instance te klase će se morati često migriraju iz jedne klase u drugu. Na primjer, rashlađeni vino ne bi trebalo da bude klase u ontologiju opisuje vinske boce u restoranu. Imovina rashlađeno treba jednostavno biti atribut vina u boci od instancu ohlađene vina mogu lako prestati biti instanca ove klase, a zatim ponovo postati primjer ove klase.

Obično brojevi, boje, lokacije su slot vrijednosti i ne uzrokuju stvaranje nove klase. Vino, međutim, je izuzetak jer je boja vina je toliko najvažnija za opis vina.
Na drugi primjer, uzmite u obzir ljudski-anatomije ontologije. Kada smo predstavljaju rebra, da smo stvoriti klasu za svaki od “1. levo rebro”, “2. levo rebro”, i tako dalje? Ili imamo klasu rebra sa slotovima za red i bočni položaj (lijevo-desno)? [5] Ako se informacije o svakoj od rebara koje zastupamo u ontologiji je znatno drugačiji, onda bi trebalo zaista stvoriti klasu za svaki od rebara. To je, ako želimo da predstavljaju detalje susjedstva i informacije o lokaciji (koji je različit za svaki rebro), kao i specifične funkcije koje svaki rebro playa i organe štiti, želimo klase. Ako smo modeliranje anatomiju na nešto nižem nivou opštosti, i sve rebra su vrlo slične što se tiče naše potencijale aplikacije su u pitanju (samo govorimo o tome koje rebro je razbijena na X-Ray bez implikacije za druge dijelove tijela) , možemo želimo pojednostaviti našu hijerarhiju i imaju samo klase rebro, sa dva slota: bočnom položaju, crveno.

4.6 Jedan primjer ili klase?

Odlučivanje da li određeni koncept je klasa u ontologiji ili pojedinca primjer zavisi od toga šta su potencijal primjene ontologije. Odlučujući gdje kraj nastave i individualnim slučajevima početi počinje da odlučuje što je najniži nivo analitiĉnosti u zastupanju. Nivo granularnost je opet određen potencijal primjene ontologije. Drugim riječima, ono što su najviše specifične predmete koji će biti predstavljeni u bazu znanja? Vraćajući se u nadležnost pitanja smo identifikovali u koraku 1 u poglavlju 3, najviše specifične koncepte koji će predstavljati odgovore na ta pitanja su vrlo dobri kandidati za pojedince u bazu znanja.

Pojedinačni slučajevi su najčešće specifične koncepte predstavljene u bazu znanja.

Na primjer, ako se samo pričati o uparivanju vina uz hranu nećemo biti zainteresirani za specifične fizičke boce vina. Dakle, pod uslovima koje Sterling Vinogradi Merlot vjerojatno će biti najviše posebne odredbe koje koristimo. Stoga, Sterling Vinogradi Merlot bi biti primjer u bazi znanja.
S druge strane, ako želimo da se održi popis vina u restoranu pored baze znanja dobrog uparivanja vina hrane, pojedinačne boce od svakog vina mogu postati individualni slučajevi u našoj bazi znanja.

Slično tome, ako želimo da snimi različita svojstva za svaku konkretnu vintage od Sterling Vinogradi Merlot, zatim specifične berbe vina je instanca u bazu znanja i Sterling Vinogradi Merlot je klasa koja sadrži slučajeva za sve svoje berbi.

Drugi pravilo može “kretati” nekog pojedinca slučajevima u skup klasa:

Ako koncepti formiraju prirodnu hijerarhiju, onda treba da ih predstavlja kao klase

Uzmite u obzir vinskih regija. U početku, možemo definirati glavne vinske regije, kao što su Francuska, Sjedinjene Države, Njemačka, i tako dalje, kao klase i specifične vinskih regija unutar tih velikih područja kao instance. Na primjer, Bourgogne regija je instanca francuskoj regiji klase. Međutim, mi bi da kažem da je Cotes d’Or regija je Bourgogne regija. Stoga, Bourgogne regija mora biti klase (kako bi se podklase ili instance). Međutim, što Bourgogne regija klase i Cotes d’Or regija instanca Bourgogne regija čini proizvoljno: to je vrlo teško jasno razlikovati koje regije su klase i koje su instance. Stoga, definišemo sve vinske regije kao klase. Protege-2000 omogućuje korisnicima da odredite neke klase kao Sažetak, što znači da se klasa ne može imati nikakve direktne instance. U našem slučaju, sve klase regija su apstraktne (Slika 8).

Slika 8. Hijerarhija vinskih regija. “A” ikona pored imena klasa ukazuju na to da nastave su apstraktne i ne može imati nikakve direktne instance.

U istoj klasi hijerarhija bi nepravilno ako izostavio riječ “regiona” iz imena klase. Ne možemo reći da je klasa Alsace je potklasa klase Francuska: Alsace nije vrsta Francuske. Međutim, regija Alsace je neka vrsta francuske regije.

Samo klase mogu se dogovoriti u hijerarhiji-znanje-reprezentacije sistemi nemaju pojam pod-instance. Dakle, ako postoji prirodna hijerarhija među smislu, kao što je u terminološkom hijerarhije iz točki 4.2, trebalo bi definirati ovih termina kao klase, iako oni ne mogu imati nikakve slučajeve svoje.

4.7 Ograničavanje obim

Kao konačni komentar na definiranje hijerarhije klasa, sljedeći set pravila je uvijek od pomoći u odlučivanju kada je definicija ontologije je potpuna:

Ontologiji ne treba da sadrži sve moguće informacije o domeni: ne treba da se specijaliziraju (ili generalizirati) više nego što je potrebno za vašu aplikaciju (najviše jedan dodatni nivo svaki put).

Za naše vino i primjer hranu, ne moramo znati šta papir se koristi za etikete ili kako kuhati škampe jela.

Slično tome, ontologije ne treba da sadrži sve moguće osobine i razlike među klasama u hijerarhiji.

U našem ontologije, mi sigurno ne uključuju sve osobine koje vino ili hrana može imati. predstavljeni smo najvažniji svojstva klase artikala u našem ontologiji. Iako bi nam vino knjige reći veličine grožđa, nismo uključeni ovo znanje. Isto tako, nismo dodao sve veze koje bi se moglo zamisliti među svim uslovima u našem sistemu. Na primjer, mi ne uključuju odnose, kao što su omiljeno vino i omiljena hrana u ontologiji samo kako bi se omogućilo više kompletne reprezentacije svih povezanosti termina smo definisali.

Posljednji pravila se odnosi i na uspostavljanje odnosa između pojmova koje smo već uključeni u ontologiji. Razmotrimo ontologiju opisuje biologije eksperimenata. Ontologije će vjerojatno sadržavati koncept bioloških organizama. To će također sadrži koncept Experimenter obavlja eksperiment (uz njegovo ime, pripadnost, itd). Istina je da je eksperimentator, kao osoba, također se događa da je biološki organizam. Međutim, mi vjerojatno ne bi trebalo da uključe ova razlika u ontologiji: za potrebe ove reprezentacije je eksperimentator nije biološki organizam, a mi ćemo vjerojatno nikada provesti eksperimente na sebi eksperimentatora. Ako smo sve što možemo reći o klasama u ontologiji predstavljaju, eksperimentator postati potklasa biološki organizam. Međutim, mi ne treba da sadrži to znanje u doglednoj aplikacije. U stvari, uključujući i ovu vrstu dodatne klasifikacije za postojeće klase zapravo boli: sada instancu Experimenter će imati utora za težinu, dob, vrsta, i druge podatke koji se odnose na biološki organizam, ali apsolutno irelevantno u kontekstu opisuje eksperiment . Međutim, trebalo bi snimiti takav dizajn odluku u dokumentaciji za dobrobit korisnika koji će biti upravo gleda ovaj ontologije i koji ne mogu biti svjesni aplikacije smo imali na umu.

4.8 Iščašen potklase

Mnogi sistemi nam omogućavaju da eksplicitno navesti da je nekoliko klasa su disjunktni. Nastava je iščašen ako ne mogu imati nikakve slučajeve zajedničko. Na primjer, desert vino i bijelo vino nastavu u našoj ontologije nisu disjunktni: postoje mnogi vina koja su slučajevi oba. U Rothermel Trochenbierenauslese rizling instanca Sweet rizling klasa je jedan takav primjer. U isto vrijeme, crno vino i bijelo vino klase su disjunktni: ne vino može biti istovremeno crvena i bijela. Navodeći da je nastava su disjunktni omogućava sistem za provjeru ontologije bolje. Ako se proglasi Crno vino i bijelo vino klase biti disjunktni i kasnije stvoriti klase koja je podklasa od oba rizling (potklasa bijelog vina) i Luka (potklasa crnog vina), sistem može ukazati da postoji modeliranje greška.

5 Definiranje svojstva-više detalja

U ovom dijelu ćemo razgovarati još nekoliko detalja koje treba imati na umu prilikom definisanja slota u ontologiji (korak 5 i korak 6 u točki 3). Uglavnom, govorimo o inverzna slota i default vrijednosti za slot.

5.1 Inverse utora

Vrijednost utor može ovisiti o vrijednosti od drugog slota. Na primjer, ako je vino proizvedeno od strane vinarije, onda vinarija proizvodi to vino. Ova dva odnosa, kavu i proizvodi, nazivaju se inverzni odnosa. Čuvanje informacija “u oba pravca” je suvišan. Kada znamo da je vino se proizvodi vinarija, neka aplikacija koja koristi bazu znanja mogu uvijek zaključiti vrijednost za inverzni odnos koji je vinarija proizvodi vino. Međutim, iz perspektive znanja-akvizicija je zgodno imati oba komada informacija eksplicitno na raspolaganju. Ovaj pristup omogućava korisnicima da ispunite vina u jednom slučaju i vinarije u drugom .. sistem znanja-akvizicija bi se onda automatski popuniti vrijednost za inverzni odnos osiguranja dosljednosti baze znanja.

Naš primjer ima par inverzne slotova: utor za kavu klase vina i proizvodi slot vinarije klase. Kada korisnik kreira instancu klase vina i popunjava vrijednost za utor za kavu, sistem automatski dodaje novostvorene instanca na proizvodi slot odgovarajuće Vinarija instance. Na primjer, kada kažemo da je Sterling Merlot se proizvodi vinarije Sterling Vineyard, sistem bi automatski dodati Sterling Merlot na listu vina koja Sterling vinograda vinarija proizvodi. (Slika 9).

Slika 9. Slučajevi sa inverznom utora. Slot proizvodi za klasu Vinarija je inverzna priključka za kavu za klasu vina. Punjenje u jednom od utora aktivira automatsko ažuriranje druge.

5.2 Standard vrijednosti

Mnogi sistemi okvir na bazi omogućuju specifikaciju zadane vrijednosti za slotove. Ako određeni slot vrijednost je ista za većinu slučajeva klase, možemo definirati ovu vrijednost kao zadanu vrijednost za slot. Zatim, kada se stvara svaki novi primjer klase koja sadrži ovaj slot, sistem automatski popunjava default vrijednosti. Mi tada može promijeniti vrijednost na bilo koju drugu vrijednost koja će aspekte dopustiti. To je, default vrijednosti su tu za praktičnost: oni ne izvrši nikakva nova ograničenja na modelu ili promijeniti model na bilo koji način.

Na primjer, ako je većina vina ćemo razgovarati su pun vina, možemo imati “pune” kao zadanu vrijednost za tijelo vina. Zatim, osim ako kažemo drugačije, svi vina definišemo biti pun.

Imajte na umu da je ovo drugačije od slot vrijednosti. Slot vrijednosti se ne mogu mijenjati. Na primjer, možemo reći da je slot šećer ima vrijednost SWEET za klasu desert vino. Onda sve podklase i instance desert vina klasa će imati SWEET vrijednost za slot šećer. Ova vrijednost se ne može mijenjati u bilo kojoj od podklase ili instance klase.

6 Što je u imenu?

Definiranje imenovanja konvencije za pojmove u ontologiji, a zatim strogo pridržavanje ove konvencije ne samo čini ontologiju lakše shvatiti, ali također pomaže izbjeći neke uobičajene greške modeliranja. Postoje mnoge alternative u imenovanju koncepata. Često ne postoji poseban razlog da izabere jednu ili drugu alternativu. Međutim, moramo

Definirajte imenovanja konvencije za nastavu i slotove i pridržavati ga.

Sljedeće karakteristike reprezentacije sistema znanja utjecati na izbor imenovanja konvencija:

  • Da li sistem imaju isto ime prostor za nastavu, slota, i instance? To je, da li sistem dozvoljava imaju klasu i slot sa istim imenom (kao što su klase vinarija i slot vinarija)?
  • Je sistem velika i mala slova? To je, da li je sistem tretira imena koja se razlikuju samo u slučaju kao različitim imenima (kao što su Vinarija i vinarija)?
  • Šta graničnici se sistem dozvoljava u imena? To je, mogu li imena sadrži razmake, zareze, zvezdicama, i tako dalje?

Protege-2000, na primjer, održava jedno ime prostora za sve svoje okvire. To je velika i mala slova. Stoga, ne možemo imati klasu vinarija i slot vinarija. Možemo, međutim, imaju klasu Vinarija (ne gornji slučaj) i slot vinarija. CLASSIC, s druge strane, nije velika i mala slova i održava drugo ime prostore za nastavu, slota, i pojedinaca. Tako je, iz perspektive sistema, nema problema u imenovanju i klase i slot Vinarija.

6.1 kapitalizacija i graničnici

Prvo, možemo uvelike poboljšati čitljivost ontologije ako koristimo u skladu kapitalizacije za imena koncept. Na primjer, uobičajeno je da se iskoriste imena klasa i koristiti mala slova za nazive slot (pod pretpostavkom da je sistem velika i mala slova).

Kada ime koncept sadrži više od jedne riječi (kao što je obrok naravno) moramo ograničiti riječi. Evo nekih mogućih izbora.

  • Koristite Space: Meal naravno (mnogim sistemima, uključujući Protg, omogućiti prostor u imenima koncept).
  • Pokrenite riječi zajedno i iskoristi svaku novu riječ: MealCourse
  • Koristite donje ili instrument ili drugi graničnik u ime: Meal_Course, Meal_course, Meal-golf, Meal-naravno. (Ako koristite graničnici, također ćete morati da odluče da li ili ne svaka nova riječ je kapitaliziran)

Ako je znanje-reprezentacije sistem omogućava prostore u imenima, koristeći ih može biti najviše intuitivno rješenje za mnoge ontologije programere. To je, međutim, važno uzeti u obzir druge sisteme sa kojima sistem može interakciju. Ako ti sistemi ne koriste prostore ili ako vaše prezentacije medij ne nositi prostora dobro, to može biti korisno koristiti drugu metodu.

6.2 Jednina ili množina

Ime klase predstavlja kolekciju objekata. Na primjer, klase vina zapravo predstavlja sve vina. Stoga, to bi moglo biti prirodnije za neke dizajnere da pozove Vina klase, a ne vino. No alternativa je bolji ili gori od drugih (iako jednini za imena klasa se koristi češće u praksi). Međutim, bez obzira na izbor, to bi trebalo biti u skladu tokom cijelog ontologije. Neki sistemi čak zahtijevaju svoje korisnike da se izjasni u unaprijed da li ili ne oni će koristiti jednini ili množini za imena koncept i ne dozvoljavaju im da zalutaju iz tog izbora.

Koristeći istu formu cijelo vrijeme i sprečava dizajner iz donošenje takve modeliranja greške kao stvaranje klase vina, a zatim stvaranje klase vina kao potklasa (vidi Odjeljak 4.1).

6.3 prefiks i sufiks konvencija

Neki baze znanja metodologija sugeriraju pomoću prefiksa i sufiksa konvencija u imena na razliku između klase i utora. Dva uobičajena praksa da dodate has- ili sufiks -of imenima slot. Stoga, naš slotovi postaju ima-kavu i ima-vinarija, ako smo izabrali has- konvencije. Proreze postati proizvođač-u i vinarije-u, ako smo izabrali of-konvencije. Ovaj pristup omogućava neko gleda termin odmah utvrditi da li je termin je klasa ili slot. Međutim, pojam imena postati nešto više.

6.4 Drugi imenovanje razmatranja

Evo još nekoliko stvari koje treba uzeti u obzir prilikom definiranja imenovanja konvencija:

  • Nemojte dodavati nizove kao što su “klasa”, “imovina”, “slot”, i tako dalje do imena koncept.

To je uvijek jasno oblik kontekstu da li je koncept je klasa ili slot, na primjer. Osim toga je da koristite različite konvencije imenovanja za nastavu i utora (recimo, kapitalizacije i ne kapitalizacije respektivno), i sam naziv bi bio pokazatelj šta je koncept.

  • To je obično dobra ideja da izbjeći skraćenice u imenima koncept (koji je, koriste Cabernet Sauvignon, a ne Cab)
  • Imena direktno podklase klase treba ili sve sadrže ili ne sadrže ime superklase. Na primjer, ako mi stvaramo dva podklase klase vina za zastupanje crvenih i bijelih vina, dvije podklase imena treba biti ili crveno vino i bijelo vino ili crveno i bijelo, a ne crveno vino i bijelo.

7 Ostali resursi

Koristili smo Protege-2000 kao okruženje ontologije-razvoju za naše primjere. Duineveld i kolege (Duineveld i dr. 2000) opisuju i usporedite niz drugih ontologije-razvojnih okruženja.

Pokušali smo da se obrati vrlo osnove razvoja ontologije i nisu razgovarali mnoge napredne teme ili alternativne metodologije za razvoj ontologije. Gmez-Prez (Gmez-Prez 1998) i Uschold (Uschold i Grüninger 1996) prisutan metodologije alternativa ontologije-razvoj. The Ontolingua tutorial (Farquhar 1997) razmatra neke formalne aspekte modeliranja znanja.

Trenutno, istraživači ističu ne samo razvoja ontologije, ali i ontologije analiza. Kao što je više ontologije se stvaraju i koriste, više alata će biti na raspolaganju za analizu ontologije. Na primjer, Chimaera (McGuinness i dr. 2000) pruža dijagnostičke alate za analizu ontologije. Analiza da Chimaera obavlja uključuje ček za logičke ispravnosti ontologije i dijagnostiku zajedničkih grešaka ontologije-dizajn. Ontologija dizajner može želite pokrenuti Chimaera dijagnostiku preko razvija ontologije za utvrđivanje usklađenosti sa zajedničkim prakse ontologije-modeliranje.

8 Zaključci

U ovom vodiču smo opisao metodologiju ontologije-razvoja deklarativno sisteme okvir na bazi. navedene smo korake u procesu ontologije-razvoja i obratio se složena pitanja definiranja hijerarhije i osobine klase i instance klase. Međutim, nakon što je sljedeće sva pravila i sugestije, jedna od najvažnijih stvari koje treba zapamtiti je sljedeće: ne postoji jedan ispravan ontologije za svaku domenu. Ontologija dizajn je kreativni proces i ne postoje dva ontologije dizajniran od strane različitih ljudi bi bili isti. Potencijal primjene ontologije i razumijevanje dizajnera i pogledom na domenu će nesumnjivo utjecati na ontologiji izbore dizajn. “Dokaz je u puding” Mi može procijeniti kvalitetu naših ontologije samo da ga koristite u aplikacijama za koje je dizajniran.

Priznanja

Protege-2000 (http://protege.stanford.edu) je razvijen od strane Mark Musen grupa na Stanfordu medicinsku informatiku. Ostvarili smo neke brojke sa OntoViz plugin za Protege-2000. uvezli smo početne verzije vina ontologije iz ontologije biblioteke Ontolingua (http://www.ksl.stanford.edu/software/ontolingua/) koji pak koristi verziju objavio Brachman i kolege (Brachman et al. 1991) i distribuira sa klasičnim predstavljanje znanja sistema. Zatim smo modifikovali ontologiju predstaviti principa konceptualne-modeliranje za deklarativno ontologije okvir na bazi. Ray Fergerson i iscrpne komentare Mor Peleg o ranijim nacrtima uvelike poboljšana ovom radu.

Reference

Booch, G., Rumbaugh, J. and Jacobson, I. (1997). The Unified Modeling Language user guide: Addison-Wesley.

Brachman, R.J., McGuinness, D.L., Patel-Schneider, P.F., Resnick, L.A. and Borgida, A. (1991). Living with CLASSIC: When and how to use KL-ONE-like language. Principles of Semantic Networks. J. F. Sowa, editor, Morgan Kaufmann: 401-456.

Brickley, D. and Guha, R.V. (1999). Resource Description Framework (RDF) Schema Specification. Proposed Recommendation, World Wide Web Consortium: http://www.w3.org/TR/PR-rdf-schema.

Chimaera (2000). Chimaera Ontology Environment. www.ksl.stanford.edu/software/chimaera

Duineveld, A.J., Stoter, R., Weiden, M.R., Kenepa, B. and Benjamins, V.R. (2000). WonderTools? A comparative study of ontological engineering tools. International Journal of Human-Computer Studies 52(6): 1111-1133.

Farquhar, A. (1997). Ontolingua tutorial. http://ksl-web.stanford.edu/people/axf/tutorial.pdf

Gomez-Perez, A. (1998). Knowledge sharing and reuse. Handbook of Applied Expert Systems. Liebowitz, editor, CRC Press.

Gruber, T.R. (1993). A Translation Approach to Portable Ontology Specification. Knowledge Acquisition 5: 199-220.

Gruninger, M. and Fox, M.S. (1995). Methodology for the Design and Evaluation of Ontologies. In: Proceedings of the Workshop on Basic Ontological Issues in Knowledge Sharing, IJCAI-95, Montreal.

Hendler, J. and McGuinness, D.L. (2000). The DARPA Agent Markup Language. IEEE Intelligent Systems 16(6): 67-73.

Humphreys, B.L. and Lindberg, D.A.B. (1993). The UMLS project: making the conceptual connection between users and the information they need. Bulletin of the Medical Library Association 81(2): 170.

McGuinness, D.L., Abrahams, M.K., Resnick, L.A., Patel-Schneider, P.F., Thomason, R.H., Cavalli-Sforza, V. and Conati, C. (1994). Classic Knowledge Representation System Tutorial. http://www.bell-labs.com/project/classic/papers/ClassTut/ClassTut.html

McGuinness, D.L., Fikes, R., Rice, J. and Wilder, S. (2000). An Environment for Merging and Testing Large Ontologies. Principles of Knowledge Representation and Reasoning: Proceedings of the Seventh International Conference (KR2000). A. G. Cohn, F. Giunchiglia and B. Selman, editors. San Francisco, CA, Morgan Kaufmann Publishers.

McGuinness, D.L. and Wright, J. (1998). Conceptual Modeling for Configuration: A Description Logic-based Approach. Artificial Intelligence for Engineering Design, Analysis, and Manufacturing – special issue on Configuration.

Musen, M.A. (1992). Dimensions of knowledge sharing and reuse. Computers and Biomedical Research 25: 435-467.

Ontolingua (1997). Ontolingua System Reference Manual. http://www-ksl-svc.stanford.edu:5915/doc/frame-editor/index.html

Price, C. and Spackman, K. (2000). SNOMED clinical terms. BJHC&IM-British Journal of Healthcare Computing & Information Management 17(3): 27-31.

Protege (2000). The Protege Project. http://protege.stanford.edu

Rosch, E. (1978). Principles of Categorization. Cognition and Categorization. R. E. and B. B. Lloyd, editors. Hillside, NJ, Lawrence Erlbaum Publishers: 27-48.

Rothenfluh, T.R., Gennari, J.H., Eriksson, H., Puerta, A.R., Tu, S.W. and Musen, M.A. (1996). Reusable ontologies, knowledge-acquisition tools, and performance systems:  PROTEGE-II solutions to Sisyphus-2. International Journal of Human-Computer Studies 44: 303-332.

Rumbaugh, J., Blaha, M., Premerlani, W., Eddy, F. and Lorensen, W. (1991). Object-oriented modeling and design. Englewood Cliffs, New Jersey: Prentice Hall.

Uschold, M. and Gruninger, M. (1996). Ontologies: Principles, Methods and Applications. Knowledge Engineering Review 11(2).


[1] Mi kapitalizirati imena klasa i početi imena slot sa niskim slova. Takođe koristimo pisaću mašinu font za sve uslove iz primjer ontologije.
[2] Ne možemo pogledati klase kao unary predikata-pitanja koja imaju jedan argument. Na primjer, “Je li ovo objekat vino?” Unarni predikata (ili klase) kontrast sa binarnim predikata (ili slotova) -pitanja koji imaju dva argumenta. Na primjer, “Da li je okus ovog objekta jak?” “Šta je ukus ovog objekta?”
[3] Neki sistemi samo navesti vrstu vrijednosti sa klase umjesto zahtijevaju posebnu izjavu tipa instance slotova.
[4] Mi smo izabrali da predstavljaju samo crvene Luke u našem ontologije: bijela Luke postoje, ali su vrlo neuobičajeno.
[5] Ovdje pretpostavljamo da je svaki anatomski organ je klasa, jer bismo također željeli da govore o “John je 1. levo rebro.” Pojedinih organa postojećih ljudi će biti predstavljeni kao pojedinci u našem ontologiji.

Kako koristiti AWK

Source: http://sparky.rice.edu/~hartigan/awk.html

Awk je moćan jezik komanda koja omogućava korisniku da manipulirati datoteke koje sadrže kolone podataka i gudače. Awk je izuzetno koristan, kako za opšte rad Unix naredbe, i za redukciju podataka (npr IRAF). Možda ćete naučiti kako da koristite editor potok sed. Mnoge aplikacije awk liče na one raditi na PC proračunske tablice.

Ova datoteka sadrži niz primjera kako koristiti awk. Ja sam sastavio ovo sto postepeno tokom nekoliko godina kao što sam naučio da radi nove stvari. Svi koji smanjuje podataka sa IRAF treba naučiti osnove AWK. Učenje učiniti čak i jednostavne stvari će vam puno vremena uštedjeti na duge staze. Trebalo bi da te manje od sat vremena da pročitate ovaj fajl i naučiti osnove.

Postoje dva načina za pokretanje awk. Jednostavan awk komanda se može pokrenuti iz jedne komandne linije. Više kompleks awk skripte treba pisati na komandu datoteku. I predstaviti primjere obje vrste ulaza ispod.

Awk uzima svaku liniju ulaza i pokušava da odgovaraju “obrazac” (vidi dolje), i ako uspije da će učiniti sve što vam to reći da to u {} (zove akcija). Awk najbolje radi na datoteke koje imaju kolone brojeva ili nizova koji su odvojeni razmakom (tabova ili prostora), iako na većini mašine možete koristiti -F opciju ako se podesiti kolona osim po drugi karakter. Awk se odnosi na prvu kolonu $ 1, drugi stupac kao $ 2, itd, a cijela linija kao $ 0. Ako imate datoteku (kao što je katalog) koji uvijek ima brojeva u specifičnim kolone, možete i želite da pokrenete naredbu “colrm ‘i kombiniranje s awk. Tu je i priručnik stranica na colrm. Tu je i vrlo nepotpun čovjek stranica na awk.

Ja ću vas voditi kroz dva primjera. Prvo, pretpostavimo da imate datoteku pod nazivom “file1 ‘koja ima 2 kolone brojeva, a želite napraviti novu datoteku pod nazivom’ file2 ‘koji ima kolone 1 i 2 kao i ranije, ali i dodaje treću kolonu koja je omjer brojevi u kolonama 1. i 2. Pretpostavimo da želite novi 3-kolona file (file2) da sadrži samo one linije sa koloni 1 manji od kolona 2. Ili od sljedeće dvije naredbe radi ono što želite:

awk ‘$ 1 <2 $ {print $ 0, $ 1/2}’ file1> file2

– Ili –

cat file1 | awk ‘$ 1 <2 $ {print $ 0, $ 1/2}’> file2

Pogledajmo drugi. Svi znate da je “mačka file1 ‘ispisuje sadržaj file1 na ekranu. The | (Koji se naziva cijevi) usmjerava izlaz ‘mačka file1’, koji obično ide na ekranu, komandi awk. Awk smatra da je ulaz iz ‘mačka file1’ jednu liniju u jednom trenutku, i pokušava da odgovaraju ‘model’. Obrazac je ono što je između prvog ‘i {, u ovom slučaju je uzorak $ of 1> 2 $. Ako je uzorak lažna, awk nastavlja u sljedeći redak. Ako je uzorak istina, awk radi sve što je u {}. U ovom slučaju smo postavili awk da proverite da li je prva kolona je manje od sekunde. Ako ne postoji obrazac, awk pretpostavlja da je uzorak istina, i ide na akciju sadržane u {}.

Što je akcija? Gotovo uvijek je to otisak izjava neke vrste. U ovom slučaju želimo awk da ispisati cijelu liniju, i.e. $ 0, a zatim ispisati odnos kolona 1 i 2, i.e. $ 1 / $ 2. Mi smo zatvorili akciju sa}, i zatvorite awk naredbu s ‘. Na kraju, za čuvanje krajnji rezultat 3 kolone u file2 (inače to ispisuje na ekran), dodamo ‘> file2’.

Kao drugi primjer, pretpostavimo da imate nekoliko tisuća datoteke koje želite da se preseli u novi direktorij i preimenovati dodavanjem .dat na imena datoteka. Ti bi mogao učiniti jedan po jedan (nekoliko sati), ili koristite vi da pristojno komandu datoteku da to uradi (nekoliko minuta), ili koristiti awk (nekoliko sekundi). Pretpostavimo datoteke se nazivaju junk * (* je džoker za bilo koji niz znakova), i treba da se seli u ../iraf i imaju ‘.dat “u prilogu ime. Da biste to ovaj tip

ls junk * | awk ‘{print “MV” $ 0 Države “../iraf/”$0″.dat”}’ | CSH

ls junk * navodi imena datoteka, i ovaj izlaz je piped u awk umjesto odlaska u ekran. Ne postoji obrazac (ništa između “i {), pa awk nastavlja da štampate nešto za svaku liniju. Na primjer, ako prva dva reda iz ‘ls junk *’ proizvela junk1 i junk2, odnosno, tada awk će ispisati:

mv junk1 ../iraf/junk1.dat
mv junk2 ../iraf/junk2.dat

U ovom trenutku mv komande su jednostavno ispisane na ekranu. Za izvršenje komande uzmemo izlaz awk i cijevi ga natrag u operativni sistem (C-shell). Dakle, da završim izjavu dodamo ‘| CSH ‘.

Više kompleks awk skripte treba pokrenuti iz datoteke. Sintaksa za takve slučajeve je:

cat file1 | awk -f a.awk> file2

gdje file1 je ulazne datoteke, file2 je izlaznu datoteku, a a.awk je datoteka koja sadrži awk naredbe. Primjeri ispod koje sadrže više od jedne linije awk treba pokrenuti iz datoteka.

Neke korisne awk varijable definirane za ste NF (broj stupaca), NR (trenutna linija koja AWK radi na), END (true ako awk dosegne EOF), počnite (istina prije awk piše ništa), a dužina (broj znakova u liniji ili string). Tu je i petlje sposobnost, naredbu za pretragu (/), podniz komanda (izuzetno korisno), i formatirani štampanje na raspolaganju. Postoji logično varijable || (Ili) i && (i) koje se mogu koristiti u “pattern”. Možete definirati i manipulirati svoj korisnički definirane varijable. Primjeri su navedeni u nastavku. Jedini bug ja znam je da Sun verzija awk neće učiniti trigonometrijske funkcije, iako to ne rade za rezanje. Postoji nešto što se zove Gawk (GNU proizvod), koja se bavi još nekoliko stvari od Sunca awk, ali oni su u osnovi isti. Obratite pažnju na upotrebu naredbe ‘da’ dolje. Zajedno s ‘glave’ i ‘awk’ uštedjeti sata kucanja ako imate mnogo datoteka na analizu ili preimenovati.

Sretno!


PRIMJERI # je komentar lik za awk. ‘Polje’ znači ‘kolonu’

# Ispis prva dva polja u obrnutom redoslijedu:
awk ‘{print $ 2, $ 1}’ file
# Print linije duže od 72 znakova:
awk ‘Dužina> 72’ fajl
# Print dužina niza u 2. koloni
‘{Duljina ispisa ($ 2)}’ awk datoteku
# Dodaj up prvoj koloni, print zbroj i prosjek:
{E + = $ 1}
END {print “suma”, e, “prosjek”, s / NR}
# Print polja u obrnutom redoslijedu:
awk ‘{for (i = NF; i> 0; –I) print $ i}’ datoteke
# Ispis zadnja linija
{Linija = $ 0}
KRAJ {print linija}
# Ispis ukupan broj linija koje sadrže riječ Pat
/ Pat / {nlines = nlines + 1}
KRAJ {print nlines}
# Print sve linije između start / stop parova:
awk ‘/ start /, / stop /’ file
# Ispis svih linija čiji je prvi na terenu se razlikuje od prethodnog:
! Awk ‘$ 1 = prev {print; prev = $ 1} ‘file
# Ispis kolona 3 ako kolona 1> kolona 2:
awk ‘$ 1> 2 $ {print $ 3}’ datoteke
# Print liniju ako kolona 3> kolona 2:
awk ‘3 $> $ 2’ file
# Count broj linija gdje col 3> col 1
awk ‘3 $> $ 1 {print i + “1”; i ++} ‘datoteke
# Print redni broj, a zatim koloni 1 file:
awk ‘{print NR, $ 1}’ file
# Ispis svaka linija nakon brisanja 2. polje
awk ‘{$ 2 = “”; print} ‘datoteke
# Print hi 28 puta
Da | glava -28 | awk ‘{print “hi”}’
# Print hi.0010 da hi.0099 (NAPOMENA IRAF KORISNIKA!)
Da | glava -90 | awk ‘{printf ( “hi00% 2.0F \ n”, NR + 9)}’

# Print out 4 slučajnih brojeva između 0 i 1
Da | glava -4 | awk ‘{print rand ()}’

# Print out 40 slučajnih cijelih brojeva modulu 5
Da | glava -40 | awk ‘{print Int (100 * rand ())% 5}’
# Zamijenite svakom polju po apsolutnoj vrijednosti
{For (i = 1; i <= NF; i = i + 1) if ($ i <0) $ i = – $ i print}

# Ako imate još jedan lik koji ograničava polja, koristite -F opcija
# Na primjer, da se ispiše broj telefona za Jones u sljedećim datoteku,
# 000902 | Beavis | Theodore | 333-242-2222 | 149092
# 000901 | Jones | Bill | 532-382-0342 | 234023
# …
# tip
awk -F “|” ‘$ 2 == “Jones” {print $ 4}’ filename

# Neki petlje naredbe
# Uklonite gomilu poslova štampanja iz reda
begin {
for (i = 875; i> 833; i -) {
printf “lprm -Plw% d \ n”, i
} Izlaz
}
Formatiran otisci su oblika printf ( “format \ n”, value1, vrednost2, … valueN)
na primjer printf ( “zdravo% -8S Šta je to brate.% .2f \ n”, $ 1 $ 2 * $ 3)
% S = string
% -8S = 8 znakova lijevo opravdano
% .2f = Broj sa 2 mjesta iza.
% 6.2f = polje 6 znakova sa 2 karaktera poslije.
\ N novi red
\ T karticu
# Print učestalost histogram kolone brojeva
$ Ukupno 2 <= 0,1 {na = na + 1}
($ 2> 0,1) && ($ ukupno 2 <= 0,2) {nb = nb + 1}
($ 2> 0,2) && ($ ukupno 2 <= 0,3) {nc = nc + 1}
($ 2> 0,3) && ($ ukupno 2 <= 0,4) {nd = nd + 1}
($ 2> 0,4) && ($ ukupno 2 <= 0,5) {ne = ne + 1}
($ 2> 0,5) && ($ ukupno 2 <= 0,6) {NF = nf + 1}
($ 2> 0,6) && ($ ukupno 2 <= 0,7) {ng = ng + 1}
($ 2> 0,7) && ($ ukupno 2 <= 0,8) {nh = NH + 1}
($ 2> 0,8) && ($ ukupno 2 <= 0,9) {ni = ni + 1}
($ 2> 0,9) {nj = nj + 1}
KRAJ {print na, nb, NC, nd, NE, NF, ng, NH, ni, nj, NR}
# Pronađite maksimalne i minimalne vrijednosti prisutne u koloni 1
NR == 1 {m = $ 1; p = $ 1}
$ 1 »= m {m = $ 1}
$ 1 <= p {p = $ 1}
END {print “Max =” m “, Min =” p}

# Primjer definiranja varijabli, više naredbi u jednoj liniji
NR == 1 {prev = $ 4; Preva = $ 1; prevb = $ 2; n = 0; suma = 0}
$ 4 = prev {print Preva, prevb, prev, suma / n!; n = 0; suma = 0; prev = $ 4; Preva = $ 1; prevb = 2 $}
$ 4 == prev {n ++; 5 suma = suma + $ / 6 $}
KRAJ {print Preva, prevb, prev, suma / n}

# Primjer definiranja i koristeći funkciju, umetanje vrijednosti u niz
# I rade cijeli aritmetička mod (n). Ova skripta pronalazi broj dana
# Proteklo od Jan 1, 1901. (iz http://www.netlib.org/research/awkbookcode/ch3)
funkcija daynum (y, m, d, dana, i, n)
{# 1 == Jan 1, 1901
Split ( “31 28 31 30 31 30 31 31 30 31 30 31”, dana)
# 365 dana u godini, plus jedan za svaku prestupne godine
n = (y-1901) * 365 + int ((y-1901) / 4)
if (y% 4 == 0) # prijestupna godina 1901-2099
dana [2] ++
for (i = 1; i <m; i ++)
n + = dana [i]
povratak n + d
}
{Print daynum ($ 1 $ 2, $ 3)}

# Primjer uporabe podstringova
# Substr ($ 2,9,7) izdvaja znakove 9-15 kolone 2
{Print “imarith”, substr ($ 2,1,7) “-” $ 3, “out”. Substr ($ 2,5,3)}
{Print “imarith”, substr ($ 2,9,7) “-” $ 3, “out”. Substr ($ 2,13,3)}
{Print “imarith”, substr ($ 2,17,7) “-” $ 3, “out”. Substr ($ 2,21,3)}
{Print “imarith”, substr ($ 2,25,7) “-” $ 3, “out”. Substr ($ 2,29,3)}

Piton kao Prvi Jezik

Source: http://mcsp.wartburg.edu/zelle/python/python-first.html

John M. Zelle
Odjel za matematiku, računarstva i fizike
Wartburg College
Waverly, IA 50677
[email protected]

Sažetak

Trenutno, malo je konsenzus o tome koji programski jezik je najprikladniji za uvodne nastave informatike. Većina škola koristi tradicionalni sistem programski jezik, kao što su C, C ++, Java, ili Ada u CS1 i CS2. Međutim, programski jezici kao što su Tcl, Perl i Python postaju sve popularniji razvoj softverskih alata. Ovaj članak govori o prednosti koristeći programski jezik kao prvi jezik u računarstvu nastavnog plana i programa. Scripting jezici su jednostavnije, sigurnije i fleksibilnije od sistema jezika. Python posebno pojavljuje kao u blizini idealan kandidat za prvi programski jezik.

1. Uvod

Prije kao nedavno pet godina, gotovo svi su se složili da je Pascal je odgovarajući jezik za opise pojmova u računarstvu. Budding kompjuterski stručnjaci su počeli učeći programirati u Pascal, a studenti gornji nivo koristi udžbenike na osnovu Pascal. Onda je došao revolucija objektno orijentisan. Danas, o jedini konsenzus o jezicima u računarstvu nastavni plan je da Pascal je passe. Ovaj potez od Pascal je izrečena u posljednjih nekoliko godina, ali ni jedan jezik je nastao kao jasan nasljednika. Jedna nedavna anketa csab akreditovanih programa pokazala je najpopularniji prvi jezik, C ++, koji se predaje na samo 22% odgovora institucija (McCauley i Manaris, 1998). Dodavanje u zabunu je meteorski uspon Java iu industriji i akademskim krugovima.
Neki su predložili da se “ jezik ratova ” su preko i (samo) razuman izbor su:. C, C ++, Java, Ada (a možda i Eiffel) ([fusnota] Ovo se činilo da je konsenzus panel diskusija ‘ `mogućih budućnosti za CS2 ” na SIGCSE ’98.) vjerujem proglašava ratove preko je prerano priznao poraz. A kada postoji malo konsenzusa o jednoj prvi jezik čini se da je pravi trenutak da se vratimo na prvu principima i uzeti u obzir ono što bi trebalo da bude prvi jezik. Usput, možemo otkriti da su neki od najboljih kandidata nisu ni uzeti u obzir.

U ovom radu, tvrdim da vrlo visokom nivou programski jezici kao što su Python, Perl, Tcl, Rexx, i Visual Basic su bolji kandidati za prvi jezik. Jedan posebno, Python, čini gotovo idealno.

2 Kriteriji za prvi jezik

2.1 Pretpostavke o CS1 i CS2

Shvativši da postoji značajna neslaganja o tome šta materijala treba učiti u CS1 i CS2, svaka inteligentna rasprava o kojim jezicima su najprikladnije mora početi sa osnovnim pretpostavkama o samim kursevima. U sljedeće pretpostavke odražavaju prilično zajednički pristup, ali sam shvatio da oni nisu potpuno nesporne.
Prvo, CS1 / CS2 sekvenca je u osnovi o kompjuterskom programiranju. Dok ovih kurseva sigurno bave širim pitanjima informatike teorije i prakse, srž informatike i od ove prve klase je i dalje rješavanje problema, dizajn i programiranje. Učenje na programu je vrlo mnogo ruku na aktivnosti a, i ove klase uključuju dizajn i programiranje projekata različitih veličina u bilo otvorenog ili zatvorenog laboratorija postavke.

Drugo, programski jezik po sebi nije u fokusu ove klase. Dok naši učenici često se odnose na ove klase kao “ C ++ klase ” ili “ Java klase, ” kursevi su dizajnirani da daju uvod u oblasti informatike. Jezik koji se koristi je stvarno sekundarno pitanje. Tendencija da mislim o CS1 kao uvod u određeni jezik je simptom složenosti jezika koji se često koriste.

Treće, ove klase se studenti upoznaju osnovne paradigme za dizajn i rješavanje problema u upotrebi danas, naime strukturiranog i objektno orijentiranih metoda implementirana u imperativ (izjava orijentisan) jezik. Iako postoje snažni zagovornici za druge pristupe (npr pomoću funkcionalne jezika u prve klase), velika većina uvodnih klase imaju tendenciju da prate tradicionalne put.

Četvrto, i možda najkontroverznije, pretpostavljam da je cilj CS1 je da se uključe i educirati informatike majora i, možda, zaposliti nove. S obzirom na trenutnu potražnju za naše diplomce i potreba za sve obrazovane pojedince da razumiju informacijske tehnologije, to je velika medvjeđa usluga da razmotri CS1 kao “ weedout ” klasi. Programiranje je teško, ali treba težiti da ga ne teže nego što treba da bude.

2.2 Implikacije za programski jezik izbor

Ako uvodnom klase zaista o računarstvu, a ne detalje o određenom jeziku, slijedi da izabrani jezik treba da ima jednostavnu sintaksu i semantiku. Svi smo iskusili frustracije od CS1 naravno da propadne u raspravi o sintaksi grešaka i jezik konstrukcije. U mjeri u kojoj je to moguće, trebalo bi da izaberete jezik koji minimizira ove složenosti, tako da više vremena može biti potrošen na razvoj dizajna vještine. A posljedica ovog filozofija je da jednostavno probleme treba jednostavno riješiti. A jezik koji zahtijeva značajne notnog iznad glave riješiti čak trivijalan problem prisiljava jezik, a ne tehnike rješavanja problema da postane predmet proučavanja.

Ruke na, eksperimentalne prirode uvodnog predmeta također ima implikacije za izbor jezika. A jezik koji omogućava dizajna da se izrazi s minimalnim nadzemne ohrabruje eksperimentisanje i prepravljanje. Dakle, jezik bi trebao biti vrlo visokom nivou i fleksibilan, omogućujući studentima da brzo i jednostavno eksperimentisati sa alternativnim dizajna. To olakšava razmišljanje o algoritam i dizajn pitanja, a ne detalje implementacije niskog nivoa. Koliko je to moguće, jezik treba da obezbedi sigurnost za eksperimente. Trebalo bi da daju prednost jezike koji štite od misterioznog pada od pokazivača ili niza-granica greške. Studenti na ovom nivou su samo tehnike za pronalaženje i fiksiranje greške učenja; jezik treba pomoći da nauče, da ih ne frustrira.

Također je važno da je podrška jezik moderne pristupe dizajnu uključuju apstrakcije, enkapsulacija i objektno orijentisan tehnike. Dok dizajna objektno baziran može implementirati u bilo kojem jeziku, time na jeziku koji podržava objekata je mnogo više intuitivno i jednostavno. Opet, ovo omogućava kurs da se fokusiraju na konceptualna pitanja na višem nivou, a ne detalji implementacije.

Na kraju, postoje praktična razmatranja u odabiru jezika. To je poželjno da jezik bude široko dostupna na različitim platformama. Isto tako, jezik koji se koristi od strane stručnjaka izvan akademske zajednice je poželjno da jezik koji je za “ učenje samo, ” pod uslovom da ispunjava ostale kriterije gore navedeno. Nastava jezika X jednostavno zato što je obično koristi jezik ne bi trebao biti važan faktor sam po sebi. Naši studenti će naučiti i koristiti mnoge jezike tijekom svoje karijere. Ono što je važno u prvom kurseva dajući im na najbolji mogući temelj osnovne principe i tehnike koje će im omogućiti da usvoje i prilagode različitim jezicima koje će suočiti u “ stvarnom svijetu. ”

3 Piton prednost

3.1 Slučaj za programski jezici

Ousterhout (1998) pravi razliku između sistema programskim jezicima (npr C, C ++, Pascal, Ada, Java) i programski jezici (npr Perl, Tcl, Python, Rexx, Visual Basic). Bivši su statički otkucao, obično sastavljen, i predstavljaju skroman apstrakcija iz osnovnog uređaja. Potonji su dinamički otkucao, obično tumači, i vrlo visokom nivou. Scripting jezici su generalno opisani kao “ ljepilo jezika ” za povezivanje nezavisne komponente u aplikacije velikih razmjera ili kao prototipova alata za brzi razvoj aplikacija. Međutim, kao što Ousterhout (1998, 23) ističe:

… Nekoliko nedavnih trendova, kao što je brže mašine, bolje skriptiranje jezika, sve veći značaj grafičkog korisničkog sučelja i komponentu arhitekture, i rast Interneta, su znatno povećava primjenjivost skriptiranje jezika. Ovi trendovi će se nastaviti u narednih deset godina sa sve više i više novih aplikacija napisana u potpunosti skriptiranje jezika i sistema programskih jezika koji se koriste prvenstveno za stvaranje komponente.

Tradicionalno, programi nauke kompjuterski su naglasili sistema programskim jezicima preko skriptiranje jezika. Međutim, programski jezici se čini da ponudi niz prednosti, posebno za uvodno programiranje sekvence. Scripting jezici uglavnom imaju jednostavnije sintakse i semantike nego sistem jezika. Zbog dinamične kucanja i tumačenje da su vrlo fleksibilni i podstiču eksperimentisanje. priroda vrlo visokom nivou omogućava studentima da se izgradi više sofisticirane i zanimljivih projekata s manje implementaciju napora.

Vjerovatno, nedostatak interesa za skriptiranje jezika je proizašla iz percepcije da su “igračka” jezika i ne odgovara za programiranje opće namjene. Iako je možda bila istina rane skriptiranje jezika (npr Unix shell skripti), to sigurno nije istina modernih varijanti.

3,2 Malo Pytona

Različitih popularnih skript jezika, Piton je vjerojatno najbliži u obliku tradicionalnih jezika sistema (Laird i Soraiz, 1998b). Takođe, verovatno, ima najbolje konstelacije funkcija da ga preporučiti kao prvi programski jezik. To nije namjera ovog rada dati Python tutorial; nekoliko dobrih reference su na raspolaganju za tu svrhu (Lutz, 1996; Watters, Van Rossum, i Ahlstrom, 1996). ([Fusnota] Niz dobrih Python resursa može se naći na internetu na http://www.python.org.). Umjesto toga, ja ću se fokusirati na karakteristike Python da je posebno dobar izbor među programski jezici kao prvi programski jezik napraviti. U toku diskusije ću uporediti Python u C ++, trenutno najčešći prvi jezik, i Java, jezik najčešće navedeni kao “ u obzir. (McCauley i Manaris, 1998) ”

3.2.1 Python je jednostavan

U principu, programski jezici su mnogo jednostavnije nego sistem jezicima kao što su C ++ i Java (Laird i Soraiz, 1998b). Python je jednostavan, običan sintaksu. Izjave su prestaje do kraja linije, a blok struktura je označeno uvlačenja. Python programi izgledaju kao izvršni pseudo-koda. To eliminira niz problematičnih grešaka za početak programere, posebno plasman polu-dvotočke, bracketing i uvlačenja. Na primjer, zajednički greška u C ++ i Java je propust da se priložiti blok u protezu kao:

if (x <0)
   cout << “x je negativan”;
   x = -x;

U Pitonu odgovarajući kod izvršava kao što se očekivalo, jer je sama udubljenje određuje bloka:

ako je x <0:
    print “x je negativan”
    x = -x

Piton podržava upotrebu funkcije i klase, ali to nije na silu. Jednostavni programi zaista jednostavno. Na primjer, razmotrimo sveprisutni program “Hello World” u Piton:

print “Hello World!”
C ++ zahtijeva ovaj program bude umotan u funkciju i prethodi direktive pretprocesora:

#include <iostream.h>
int main ()
{
   cout << “Hello World!”;
}

U Java, situacija je još gora, kao i sve kod mora biti unutar klase:

public class HelloWorld
{
   public static void main (String [] args)
   {
     System.out.println ( “Hello World!”);
   }
}
Semantički, Piton je jednostavan. Piton je dinamički otkucala, tako da nema potrebe za varijablu deklaracije. To smanjuje količinu koda koji studenti moraju pisati i eliminira uobičajene greške koje proizlaze iz nesporazuma suptilne razlike deklaracije, definicije i upotrebu. Na primjer, studenti u C ++ i Java često “slučajno” redeclare varijable gdje su zaista samo žele da ih koriste (kucanje int count = 0; kada oni znače count = 0). Takve greške može biti teško pronaći.

Piton ima minimalan, ali kompletan set jednostavnih kontrolne strukture: jedan izbor konstrukt (ako-elif-drugo), jedan definitivno petlje (za) i jedan neodređeni petlje (a). Piton također ima modernu iznimka rukovanje mehanizam sličan onome naći u C ++ i Java. Za razliku od Java, međutim, ne morate da shvate mehanizam izuzetak pisati jednostavne programe. Iz pedagoškog perspektive, Piton za petlje je ilustrativan. To omogućava kontrolu varijablu da preuzme uzastopnih vrijednosti u nizu. To se može koristiti za ponoviti kroz bilo koji niz kao što su liste (niza) ili string. Na primjer, stavke u listi mogu da se štampaju na sljedeći način:

za stavku u listu:
    print stavka

Operacija opseg proizvodi niz brojeva u određenom rasponu. Na primjer, opseg (5) daje popis [0,1,2,3,4]. To se može koristiti za pružanje numerički kontrolom petlje. U prethodnom kod mogao biti napisan (manje jasno) kao:

for i in range (len (Lista)):
    print List [i]

Petlja je jednostavan i siguran, što joj je omogućilo da se upoznaju vrlo rano bez straha od beskonačne petlje.

Piton ima jednostavan jedinstven model podataka. Varijable su uvijek reference na gomilu dodijeljena vrijednosti (objektima). Ovaj model je u skladu, izbjegavajući konfuzija oko gomile u odnosu na automatske varijable u C ++ ili primitivni u odnosu na vrste objekata u Javi. Oba ova jezika zahtijeva učenje više modela raspodjele za realizaciju čak i relativno jednostavnih programa.

Slično tome, Piton ima jedan mehanizam jedini parametar prolazu (po vrijednosti). Parametar prolazu je jednostavno zadatak stvarnog formalnim parametrima u trenutku poziva. Kada učenici shvate jednostavan model zadatak, oni se prenos parametara za besplatno.

3.2.2 Piton je siguran

Piton pruža punu dinamičan provjere tipa run-time i provjera granica na niz indeksi. Python zapošljava odvoz smeća, tako da nema problema sa visećim pokazivačima ili curenje memorije. Nemoguće je za korisnika kod Python da proizvede segmentacije prekršaj. U tom smislu Python je sličan Java, i oba su mnogo sigurnije nego C ++.

3.2.3 Piton podržava objektno orijentisano programiranje

Iako se ne moraju koristiti klase pisati Piton programa, Piton ne podržava objektno orijentisano programiranje kroz mehanizam klasu sličan onome koji pružaju C ++ i Java. Ovaj model klasa Piton je pojednostavljenje ++ model C i podržava više nasljedstva. Od Pitona je dinamički otkucan, nema potrebe za apstraktne klase a la C ++ ili mehanizam interfejs Java. U tom smislu, Piton je zapravo bliži čisto model objekta koje Smalltalk.

Jedna slabost Piton iz razvoja sistema perspektive je da enkapsulacija se izvršava samo kroz konvenciju. Ne postoji mehanizam za određivanje da su pripadnici klase su privatne. Pedagoški, ovo ne izgleda kao veliki slabost, jer je još uvijek moguće naučiti principe podataka krije; To je samo ne sprovode jezik. Jezik pruža elegantan mehanizam, ali drži je jednostavan, izbjegavajući složenost različitih “prikaza vidljivost” koji moraju biti razmatrano u C ++ ili Java.

Dinamički kucanje model Pitonu čini posebno pogodnim za razmatranje kontejner klase u strukture podataka, naravno. A stack klase, na primjer, može se koristiti za čuvanje bilo koju vrstu objekta. To može biti int stack, float stack, niz dimnjak, ili mješavina vrsta. To se postiže bez potrebe da se uvede generika (predložaka) ili obavlja dinamički tip casting. Slika 1 prikazuje primjer definicija jednostavne ograničene stack klase.


class Stack:   
   def __init__(self,size):
       self.data = [None]*size
       self.size = 0

   def push(self,item):
      self.data[self.size] = item
      self.size = self.size + 1    

   def pop(self):
      self.size = self.size - 1
      return self.data[self.size]    

   def is_empty(self):
      return self.size == 0

   def is_full(self):     
      return self.size == len(self.data)

Slika 1: bstack.py – jednostavan ogranicen stack.


 

Piton također pruža čist sistem modul koji dinamički učitava datoteke u run-time sličan Java (minus glomazna ograničenja organizacije paket). Ovo omogućava jednostavno upravljanje modularnih projekata (Laird i Soraiz, 1998a) bez potrebe za datoteke zaglavlja i pretprocesor direktivama C ++. Realizacija steka se može koristiti preko import izjavu:

od bstack uvoz Stack

myStack = Stack (100)
myStack.push ( “Hello”)

A različite realizacije mogu se zamijeniti jednostavnom promenom ime modula u izjavi za uvoz.

3.2.4 Python je zabavno

Jednostavnost Pitonu olakšava naučiti. Osim liste (dinamički niz) strukturu podataka, Piton pruža torke (nepromjenjivi liste) i rječnika (hash tabele). Zajedno s mehanizmom klase, te se može koristiti za brzo graditi sofisticirane strukture podataka za zanimljivih projekata. Nedostatak tipa deklaracije čini manje kod i fleksibilniji programiranje. Tu je i veliki biblioteku standardnih i module pružanje komponente za programiranje GUI, klijent-server aplikacija, HTML gledatelja, baze podataka, animacije, i još mnogo toga. Rastuća popularnost skriptiranje jezika je direktno pripisati lakoća s kojom sofisticirane aplikacije mogu biti izgrađen kombinacijom off-the-polica komponente. Zanimljivi projekti se mogu razviti samo mali dio koda koji će biti potrebni na jeziku sistemu. Ako smo ozbiljni u vezi dizajniranju privlačan uvodne kurseve, Piton izgleda kao prirodan izbor.

3.2.5 Piton je praktična

Programski jezika općenito postaju sve popularniji ([fusnota] Vidi, na primjer, pitanje dr Dobbs Journal, specijalno izdanje sadrži programski jezici Februar 1998.). Po nekim računima, više softver je napisan u skriptiranje jezika u odnosu na više tradicionalnom sistemu jezika. Iako Python je nešto više nejasno od svog rođaka (Perl, Tcl, Visual Basic), to je zrela jezik i uživa široku upotrebu u industriji (Laird i Soraiz, 1998a). Python je na raspolaganju za sve glavne platforme (Windows, MacOS, Linux, Unix, BeOS, Java). I to je potpuno besplatno.
4 Neki Prepreke (Real i Imagined)

S obzirom na prednosti korištenja programski jezik kao Python za uvodne nastave informatike, dugotrajnim pitanje je zašto se nisu svi (svako) to rade? Scripting jezici su često odbačena bez odgovarajuće razmatranje. U ovom dijelu razmatram neke od tipičnih prigovora.

4 Neki prepreke (istinski i zamišljanje)

S obzirom na prednosti korištenja programski jezik kao Python za uvodne nastave informatike, dugotrajnim pitanje je zašto se nisu svi (svako) to rade? Scripting jezici su često odbačena bez odgovarajuće razmatranje. U ovom dijelu razmatram neke od tipičnih prigovora.

4.1 Nedostatak sastaviti – vrijeme provjera

Neki edukatori prigovor na dinamičan jezika jer im nedostaje sastaviti vremenu provjere, posebno tip-provjere. Nekad sam mislio da je jak statički kucanje je neophodno za prvi jezik. Moja teorija je da je kompajler treba uhvatiti što više grešaka moguće za studente. Svi znamo razvoj mudrost softver koji greške su lakše popraviti ranije su otkrivene.

Iskustvo nastava jezika kao što su Pascal, C ++, a Java me je uvjeren da je trebalo prednosti kompiliranja vremena greška provjeru za početnik programeri su iluzorna. Prvo, velika većina grešaka otkriti kompajler su prilično pešačke (npr sveprisutni nedostaje “;”). A jezik kao Python eliminira mnoge od ovih zajedničkih grešaka kroz jednostavniji sintakse. Osim toga, većina preostalih čisto sintaksi greške će se odmah prijavila Python prevodioca, koji analizira sintakse programa u trenutku opterećenja. Drugo, malo je prednost u hvatanje više suptilne greške (npr tip nekompatibilnosti) u vrijeme kompiliranja. A čest tip greška je uzrokovana neusklađenost između deklaracije i upotrebu. Mnogi od tih grešaka su samo greške u deklaraciji. Na jeziku, bez deklaracije, te greške ne dešavaju. Kada je greška je pravi greška u tome kako se koristi tip, greška će i dalje biti uhvaćen u dinamički tipiziran jezik. Razlika je u tome što će biti uhvaćen i dijagnosticira u run-time. Za vrste programa obično pisane u prva dva CS klase, sastaviti vremenu provjere nije mnogo prednost. Jednostavnost ciklusa edit-tumače daleko nadmašuje bilo kakvu korist pronalaženja više grešaka u kompajliranja.

Sastaviti vremenu provjere zapravo može biti štetno za neke studente u nekoliko načina. Prvo, to je demorališuće. Studenti moraju imati kompletan sintaktički ispravan program prije nego što su dobili nikakve rezultate. Sastavljanje programa i zuri u screenfull od zvocanja poruka je dosadan i ogorčenosti aktivnost. Sa tumačiti jezik, barem nešto dogodi; program generira parcijalne izlaz prije zaustavljanja za grešku. Student vidi program u (parcijalne) Akcija i ima samo jednu grešku popraviti na vrijeme. Svaki fix donosi veći napredak. To je mnogo više ohrabrujuće situacije.

Drugi kleveta opsežnih kompiliranja vrijeme provjere je da daje studentima iluziju temeljitosti. Oni vjeruju da je jednom program sastavlja, ona mora biti prilično tačno. Jedan simptom, to nije dovoljno za testiranje. Drugi problem je u tome što odlaže otkrivanje grešaka dizajna. U mom iskustvu, to nije neuobičajeno za učenike da ulože mnogo vremena na programu i smatraju da su skoro gotov, jer postoji samo jedan mali bug ne mogu shvatiti. Samo što ispada jedan mali bug je i dalje kompajliranja greška. Daleko od toga da “skoro gotov”, zadatak je zbog u nekoliko sati, a oni nisu ni dobili program još sastaviti! Oni nisu imali priliku da otkriju velike nedostatke u logiku njihovog rješavanja. U tumači jezikom, pronalaženje grešaka ide ruku pod ruku sa testiranja; prisustvo tip greške ne mora nužno spriječiti otkriće više ozbiljnih grešaka dizajn.

4.2 Programski jezici su previše neefikasno

Istina je da će se tumačiti jezik biti sporiji (obično za faktor 10) od sastavio jezika. Mnogi rani programski jezici su čak i mnogo gore od ovoga. Međutim, moderni programski jezik, kao što su Piton, Perl ili Tcl je dovoljno brzo za izgradnju velikih aplikacija. Na primjer, Python i Tcl su oba koriste za implementaciju potpuno opremljenog grafičko web preglednicima. Svakako za vrste programa koji su razvijeni u CS1 i CS2, programski jezici, čak i radi na skromnih hardver, bi trebalo biti više nego dovoljno.

U svakom slučaju to briga za efikasnost izvršenja je pogrešno. Počevši programeri obično ne pišemo kod proizvodnje. Njihovi programi obično nemaju teško vremena ograničenja i da će se pokrenuti samo nekoliko puta. Zabrinutost pravi efikasnost je količina vremena provedenog u razvoju programa. Ovo je mjesto gdje skriptiranje jezika sjaj. Brz uredi/tumače ciklus, odsustvo deklaracija, i priroda skriptiranje jezika vrlo visokom nivou im savršen alat za ovo okruženje učiniti.

4.3 Učenici treba da nauče sistem jezik

Istina je da nema informatike većih treba diplomirati bez učenja barem jedan sistem programskom jeziku, kao što su C ++, Java, ili Ada. U stvari, bilo bi dobro da naučite više od jednog. Programski jezici ne zamijeniti sistema jezika; Umjesto toga, oni su komplementarni. Sve više i više softverskih sistema su izgrađeni od dijelova programiran u sistemu jezika i zalijepljen zajedno sa skriptni jezik. Stoga, jednako je istina da studenti treba da uče programski jezik. Na ovaj način oni su naoružani sa setom alata, tako da oni mogu primijeniti najprikladniji za određeni zadatak.

Postavlja se pitanje postaje, onda, koji bi trebao biti jezik prve klase (es)? Jedan argument za učenje jezika poput C ++, Java ili Ada u prve klase je da su ovi sami jezici su tako složene i teško da studenti treba da počne da ih uče odmah, kako bi imali dovoljno vremena da ih savlada. Ovaj argument postaje unazad. Prva klasa ne bi trebalo da bude oko jezika, već o informatike i, u osnovi, dizajn. Pokušavam da nauči jezik je inherentno umanjuje od tog cilja, jer studenti moraju provesti više vremena ovladavanje jezikom i, samim tim, manje vremena savladavanje drugih materijala. To je razlog neki edukatora u potrazi na Java kao jednostavniji alternativu C ++, ali čak i Java je vrlo složena u odnosu na Python.

A više razuman pristup je da se prvo naučiti dizajn, počevši studenti sa jednostavnim, ali moćan jezik. Uz solidnu uhvatite programiranja i dizajn je mnogo lakše shvatiti pojmove kao što su statički kucanje, vidljivost, generičkih i polimorfizam. Kao misaoni eksperiment, zamislite stvarno objašnjavajući značenje svakog dijela programa HelloWorld Java početnik programer. Zamislite koliko lakše bi bilo da objasni javnosti, klasa, statički, prazninu, i String [], da student koji je već razumije funkcije, klase, recimo varijable, varijable klase, vrste podataka i polja. U kompliciranije konstrukcije sistema jezika (npr C ++ šablona, ​​virtualne metode, dinamičan odljevaka) su stvarno mehanizmi za postizanje neke fleksibilnost pruža dinamičan jezika unutar statički otkucala okvir. Zašto prvo ne uči koncepte na jeziku koji ne zahtijevaju takve složenosti da ih izrazi? principi A drugoj razini programskih jezika klase ili sisteme programiranja klase čini više prikladno mjesto za rješavanje zamršenost jezika sistema.

4.4 Piton je nepoznato

Neki fakultet može usprotiviti Piton kao prvi jezik, jer je nepoznato. Međutim, programski jezici su jednostavni, a neko kvalificiran za podučavanje informatike može pokupiti Piton u danima, ako ne i sati. U stvari, ja bih usudio reći da nakon par dana se igra sa Piton, puno fakulteta koji sada predaje C ++ bi bolje znati Piton. C ++ je evoluirala tijekom standardizacije, i mnogo toga što se vidi u udžbenicima je zastarjela. Istina stručnjaka na modernim C ++ su relativno rijetki.

4.5 Naša studenti žele jezik X

Učenici (i roditelji i poslodavci) imaju predrasude o tome šta treba da se uči u nastavnom planu i programu. Međutim, ništa treba reći da to nije u njihovom najboljem interesu da se najjači mogući temelj u programiranju i dizajnu. Kao što je već rečeno, počevši sa skript jezik nije vjerojatno da uspore napredak studenata u učenje jezika X (bez obzira na X). Umjesto toga, to je vjerojatno da ih bolje programera u bilo kojem jeziku (e) su na kraju koriste. Kada sam uveo Piton u klasama gornjem nivou, gotovo univerzalna reakcija je bila ” Zašto nismo se koristiti na prvom mjestu?”

4.6 Ne postoje udžbenici

Glavna poteškoća u pokušaju da nauči nestandardni jezik u uvodnoj sekvenci je nedostatak podrške udžbenika. Jedna opcija može biti da koriste jezik neutralan knjiga i razviti podršku laboratorija koristeći jedan od dostupnih Python reference. Ono što je zaista potrebno je za neke pionire da predaju uvodnom klase koristeći skriptiranje jezika i razviti odgovarajuće bilješke koje bi mogle postati udžbenika. Brojni edukatori uzeo pad sa Java prije bilo tekstova; Kao rezultat toga, postoji mnogo novih naslova koristeći Java sada dolazi na tržište.

Ovaj članak je poziv na buđenje za one koji razmišljaju prekidač za Java. Ako ste možda prebacivanje jezika, pažljivo razmotriti motive za svoj prekidač. Pedagoški razmatranja tvrde za korak dalje od sistema jezika skript jezicima, a Piton je vrlo dobar izbor. Ono što je potrebno je nekoliko stout duše reskirati s Piton i razviti odgovarajuće materijale. Možda neki sadašnji autori možda i pristati da se razvije Piton verzije popularnih tekstova.

4.7 Šta je šema?

Za one koji su pomoću šema u uvodnom klase, poziv za jednostavnu prvi jezik nije ništa novo. Shema ima mnogo zajedničkih karakteristika sa skript jezicima u tome što je mala, dinamičan i interaktivan. (U stvari, to se često koristi kao skriptni jezik.) Shema je dobar izbor za prvi jezik, jer je jednostavan i moćan. Shema omogućava raspravu različitih programskih paradigmi, a tu su i nekoliko vrlo dobrih udžbenika za CS1 koristeći šemu. Čini se da je idealan izbor.

Slabost šeme je u tome što se percipira kao marginalna jezik koji je potpuno drugačiji od jezika sistema koji se koriste drugdje u nastavnom planu i programu. Ovo je ograničena svoju popularnost u CS1. Piton nudi mnoge prednosti šeme dok je još bio sličan jezicima kao što su C ++, Java, i Ada, na taj način olakšava prelazak na te jezike. Za one koji žele istraživati ​​više programskih paradigmi u prvom kursevima, Piton ima podršku za funkcionalnom stilu, uključujući funkcije prvog reda, karta, primijeniti, lambda i zatvaranja.

5 Zaključci

Pojava skript jezika, kao što su Piton, Tcl, i Perl kao glavni alat u razvoju softvera predstavlja potencijalno revolucionarnih promjena u kompjuterskom programiranju. Trenutno, programski jezici su nedovoljno zastupljene u računarstvu nastavnog plana i programa. To je iznenađujuće, kao, iz pedagoških stanovišta, programski jezici se čini idealno pogodna za vrstu programa koji se obično radi u uvodnom klase.

Jedan od glavnih pravila nastojimo usaditi u našim studentima je ideja koristeći odgovarajuće sredstvo za dati posao. Ako klijent došao do mene i predložio joj je potreban program napisan u vrlo kratkom vremenskom periodu, da program nije imao čvrsto vremena ili memorije ograničenja, i da nakon završene bi se pokrenuti samo nekoliko puta, ja bih odmah predložiti scripting jezik kao odgovarajući alat. To su upravo uvjeti pod kojima programiranje javlja u većini CS1 i CS2 klase. S obzirom na postojanje scripting jezika, kao što su Python koji također pružaju dobru podršku za modularni i objektno orijentisanog dizajna programa, ne postoji dobar razlog za njih ne koriste. Scripting jezici su najprikladniji alat za naše uvodne kurseve. S obzirom na trenutni nedostatak konsenzusa na jednom prvi jezik, čini se kao idealno vrijeme za početak pokreta za skriptiranje jezika. Razmislite o korištenju Piton u uvodnom klase.

Reference

Laird, C., Soraiz, K., (1998). Getting Started with Python, SunWorld Online, February, http://www.sun.com/sunworldonline/swol-02-1998/swol-02-python.html

Laird, C., Soraiz, K., (1998). Get a Grip on Scripts, Byte, June, pp. 89-96.

Lutz, M., (1996). Programming Python, O’Reilly & Associates, Inc.

McCauley, R. and Manaris, B., (1998). Computer Science Programs: What Do They Look Like? Proceedings of the 29th SIGCSE Technical Symposium on Computer Science Education, February, pp. 15-19.

Ousterhout, J., (1998). Scripting: Higher Level Programming for the 21st Century, IEEE Computer, March.

Watters, A., van Rossum, G., Ahlstrom, J., (1996). Internet Programming with Python, M & T Books, New York, New York.