แบบฝึกหัดข้อมูลความรู้ฉันรายงานการมอบหมาย 201811528 (กลุ่มวันพุธ)
- ที่เก็บนี้คือ ...
- ปัญหาที่สร้างขึ้นในงาน "อาคาร OPAC" ในแบบฝึกหัดข้อมูลความรู้ I.
- ได้รับรางวัลเป็นรางวัลใหญ่ในชั้นเรียน (2019)
การแนะนำ
หน้านี้เป็นรายงานเกี่ยวกับปัญหาของ "การสร้าง OPAC" ใน " การออกกำลังกายข้อมูลความรู้ I " ซึ่งเป็นการเปิดโมดูล Spring AB สำหรับข้อมูลความรู้และวิทยาศาสตร์ห้องสมุด
สารบัญ
- 1. URL ของ OPAC ที่คุณสร้างขึ้น
- 2. รายการแหล่งที่มาของโปรแกรม CGI และคำอธิบายของพวกเขา
- 3. โครงสร้างความสัมพันธ์ (ตาราง) และคำอธิบาย
- 4. จุดอุดมคติ
- 5. ผลการวิจัย
1. URL ของ OPAC ที่คุณสร้างขึ้น
หน้าดัชนีสำหรับระบบ OPAC " Simple OPAC " ที่เราสร้างขึ้นคือ https://cgi.u.tsukuba.ac.jp/~s1811528/opac/index.html
ด้านล่างเป็นไดอะแกรมที่สรุป โครงสร้างลำดับชั้นด้านล่างไดเรกทอรี OPAC และ คำอธิบายของแต่ละไฟล์
W:wwwscgi-binopac > tree /F
フォルダー パスの一覧: ボリューム vol_home01
ボリューム シリアル番号は 000000FB 8082:1532 です
W:.
│ .htaccess...ユーザのサーバ設定ファイル
│ report.html...レポートページ
│ index.html...トップページ
│ sitemap.xml...サイトの構造文書
│ yet_list.html...未実装/実装したい機能のメモ
│
├─.git
│
│(省略)
│
├─data
│ bib_sche.sql...opac.dbスキーマ
│ kakou.rb...jbisc.txtをcsvに成形するプログラム
│ isbn.txt...isbn(10桁)を抽出したもの
│ jbisc.txt...書誌情報の元データ
│ kd.csv...DBにimportできる形式にしたもの
│ opac.db...書誌データベース
│
├─css
│ index.css...index.htmlのCSS
│ search.css...search.cgi
│ accurate.css...accurate.cgi
│ yet_list.css...yet_list.html
│ report.css...report.html
│
├─img
│ icon.png...ページicon
│ notfound.png...書誌画像がnullの時表示される画像
│ requirement.png...要件のスクリーンショット
│
├─cgi
│ accurate.cgi...書誌の詳細表示ページ
│ search.cgi...検索結果一覧ページ
│ def.rb...上記2つのcgi内で用いる関数を集めたもの
│
└─md
yet_list.md...yet_list.htmlの雛型
report.md...report.htmlの雛型▲รูปที่ 1 โครงสร้างลำดับชั้นของระบบ OPAC
2. รายการแหล่งที่มาของโปรแกรม CGI และคำอธิบายของพวกเขา
รายการแหล่งที่มา
ด้านล่างเป็นรายการของ หน้า และ ซอร์สโค้ด สำหรับโปรแกรม CGI ที่ฉันสร้างขึ้น
search.cgi
ความแม่นยำ cgi
คำอธิบาย
search.cgi (แต่ละฟังก์ชั่นเขียนใน def.rb)
- Makeword (CGI)
- นี่คือวิธีการประมวลผลข้อมูลที่ดึงมาจาก index.html เพื่อให้ง่ายต่อการแยกคำค้นหา
- <<field>: <value> รูปร่าง
- GSUB (/[ r n]/") ลบตัวแบ่งบรรทัดในคำตัวแปร
- delete_if {| i | ... } ลบและและหรือรายการว่าง
- ค่าส่งคืนได้รับการแก้ไขคำสั่งการค้นหา
- Makekeys (คำ)
- แยกคำสั่งการค้นหาที่ได้รับจาก makeword () เป็นคำหลักแต่ละคำเพื่อโยนลงในแบบสอบถาม SQL และแทรกลงในอาร์เรย์
- หรือเมื่อใดหรือมาให้แทรกมันตามที่เป็นอยู่
- เมื่อชื่อเรื่อง: หรือ ed: เข้ามามันเป็นแฮชของ {"title" => "val"} หรือสิ่งที่คล้ายกันแทรกมัน
- หากไม่มีการระบุฟิลด์ให้แทรกตามที่เป็นอยู่
- ผลตอบแทนเป็นอาร์เรย์ที่มีแฮชและสตริง
- all_any_search (คีย์, db)
- ทำการค้นหาใด ๆ (ค้นหาจากทุกฟิลด์) และดึงข้อมูลจาก DB
- ค่าส่งคืนเป็นอาร์เรย์สองมิติที่มี NBC (หมายเลขบรรณานุกรมแห่งชาติ) ของข้อมูล HIT [[NBC1], [NBC2], ... , [NBCN]]
- field_search_s (คีย์, db)
- ทำการค้นหาแต่ละรายการสำหรับฟิลด์ที่ระบุ
- ค่าส่งคืนคืออาร์เรย์ 2D ที่มี NBC (หมายเลขบรรณานุกรมแห่งชาติ) ของข้อมูล HIT
- Andor (Keys, DB)
- ทำซ้ำค่าที่ได้รับจาก makekeys () และแทรกผลการค้นหาลงในอาร์เรย์ที่ส่งผ่านไปยัง all_any_search () และ all_any_search () ตามลำดับ
- ถ้าหรือหรือผ่านไปให้ใส่ลงในอาร์เรย์ตามที่เป็นอยู่
- ค่าส่งคืนเป็นอาร์เรย์สองมิติที่มี NBC (หมายเลขบรรณานุกรมแห่งชาติ) ของข้อมูล HIT
- Strinterprep (กุญแจ)
- ตีความหรือและและของค่าคืนของ Andor (Keys, DB) เพื่อสร้างผลการค้นหาขั้นสุดท้าย
- หาก [Datan] ตามด้วย [Datan+1] ดังนั้นจะใช้ Union ([Datan] | [Datan+1])
- เมื่อถัดไปหรือหรือหรือมาหลังจาก [datan] ใช้ [datan+1] ถัดไปและถัดไป [datan+1] และชุดสะสม ([datan] & [datan+1])
- ค่าส่งคืนเป็นอาร์เรย์หนึ่งมิติ
- retr_hitdata (hit, db)
- รับข้อมูลฟิลด์บรรณานุกรมเต็มรูปแบบจาก NBC ของข้อมูลบรรณานุกรม Hit ที่สร้างขึ้นด้วย Strinterpret (Keys)
- ผลตอบแทนเป็นข้อมูลบรรณานุกรมที่ได้รับความนิยมทั้งหมด
- create_paging_link (hits, par)
- การสร้างลิงค์หน้าสำหรับฟังก์ชั่นการจัด pagenation
- หากค่าของ PS (Pagesize) ที่ได้รับจากหน้าดัชนีหรือ search.cgi ว่างเปล่าให้ตั้งค่าเป็น 20
- P (หน้า) คือค่าของจำนวนหน้าเว็บที่มีอยู่ในปัจจุบัน
- กำหนดจำนวนหน้าเว็บที่ต้องการ (= จำนวนลิงก์หน้า) ให้กับ HMP โดยคำนึงถึงจำนวนการค้นหาและ PS
- ถ้า p_size = 0, hmp = 0
- แทรกลิงค์หน้าใน Pagelinks
- ค่าส่งคืนคือ html ของลิงค์หน้าในตาราง
- create_table_html (data, par)
- ผลการค้นหาแม่พิมพ์ลงในตาราง HTML
- ให้ลิงค์แต่ละชื่อเพื่อส่ง NBC ไปยัง accureDer.cgi
- เมื่อพิจารณา P และ PS คำสั่งที่ต้องการจะถูกดึงออกมาจากข้อมูล (= ret_hitdata (hit, db))
- ค่าส่งคืนคือ html ของตาราง
- rep_hide (ต่อ)
- เข้าครอบครอง/บันทึกค่ารับสำหรับการโหลดซ้ำโดยการเปลี่ยน PS
- ฝังไว้ใน <อินพุต type = "ซ่อน">
- ค่าที่ส่งคืนคือ html ของ <อินพุต type = "ซ่อน"> ซึ่งฝังตัวจะได้รับค่าอื่นนอกเหนือจาก PS
- Main () (#main () และชิ้นส่วนที่เขียนใน search.cgi)
- ส่วนการดำเนินการของแต่ละฟังก์ชัน
- DB และ CGI ระบุ OPAC.DB เป็นวัตถุฐานข้อมูลของโมดูล SQLite และมีวัตถุ CGI
- cgi_values ต้องมีค่าทั้งหมดโดยใช้ cgi.instance_variable_get (:@params)
- เริ่ม
กู้ภัย สิ้นสุดหลีกเลี่ยงข้อผิดพลาดเมื่อไม่มีอะไรกรอกในแบบฟอร์มการค้นหา - hit_num กำหนดจำนวนการเข้าชม
- มีคำค้นหาใน search_display
- หาก hit_num คือ 0 pagenation และตารางผลลัพธ์จะไม่ปรากฏในส่วนหัว
- เปลี่ยนคำค้นหาระหว่างองค์ประกอบชื่อเรื่องและ <H1 />
- ส่ง rep_hide เมื่อคุณคลิก "โหลด" (หรือป้อนโดยใช้แบบฟอร์มอินพุต PS)
accurate.cgi (แต่ละฟังก์ชั่นเขียนใน def.rb)
- ISBNTO13 (ISBN10)
- แปลง ISBN จาก 10 เป็น 13 หลักเป็น agtion opendb
- ค่าส่งคืนคือสตริง (13 หลัก)
- field_search_a (คีย์, db)
- รับ NBC จาก search.cgi เพื่อดึงข้อมูลบรรณานุกรมทั้งหมด
- ค่าส่งคืนเป็นอาร์เรย์ที่มีข้อมูลบรรณานุกรมทั้งหมดของหนังสือเล่มหนึ่ง
- bibimage (ISBN13, ต่อ)
- รับรูปภาพหนังสือ
- เข้าถึงจุดสิ้นสุดของ OpENDB และตรวจสอบว่ามีข้อมูลบรรณานุกรมหรือไม่ (= ภาพ)
- ถ้า JSON เป็น NIL ให้ผ่านการแสดงภาพ 404 ภาพ HTML ไปยัง Bibhash
- หาก JSON ไม่ได้ผ่านการแสดงสำเนาที่แสดง HTML ไปยัง Bibhash
- ค่าส่งคืนคือ html ของ <img ... />
- Main () (ชิ้นส่วนที่เขียนใน #Main () และ accureDer.cgi)
- DB และ CGI ระบุ OPAC.DB เป็นวัตถุฐานข้อมูลของโมดูล SQLite และมีวัตถุ CGI
- ข้อมูลบรรณานุกรมสำหรับทุกฟิลด์ที่ได้รับจากค่า Get (NBC) ส่งผ่านจาก search.cgi ด้วย field_search_a (คีย์, db) [0] ถึงแถว
- ROW [1] .SCAN (/[0-9]/) เข้าร่วม [0,10] เฉพาะตัวเลขในฟิลด์ ISBN เท่านั้นที่นำมาจากจุดเริ่มต้นของ 10 หลักและจะถูกส่งผ่านไปยัง ISBNTO13 พร้อมกับแถวและมันจะถูกส่งไปยัง ISBNTO13 พร้อมกับแถว
- แต่ละรายการจะแสดงเป็นตาราง
3. โครงสร้างความสัมพันธ์ (ตาราง) และคำอธิบาย
โครงสร้าง
ด้านล่างคือ SQL (data/bib_sche.sql) เมื่อสร้างตาราง bibdata ใน opac.db
CREATE TABLE bibdata (
NBC TEXT primary key ,
ISBN TEXT ,
TITLE TEXT ,
AUTH TEXT ,
PUB TEXT ,
PUBDATE TEXT ,
ED TEXT ,
PHYS TEXT ,
SERIES TEXT ,
NOTE TEXT ,
TITLEHEADING TEXT ,
AUTHORHEADING TEXT ,
HOLDINGSRECORD TEXT ,
HOLDINGPHYS TEXT ,
HOLDINGLOC TEXT ); ▲รูปที่ 2, sql เพื่อสร้างตาราง bibdata
คำอธิบาย
แต่ละค่าถูกอธิบาย
- เอ็นบีซี
- หมายเลขบรรณานุกรมแห่งชาติ
- Ex) JP20564340
- isbn
- หมายเลข ISBN (10 หลัก)
- Ex) 4-86004-040-6
- ชื่อ
- ชื่อ
- Ex) เรื่องราวของมิตรภาพระหว่างครูและนักเรียน
- รับรองความถูกต้อง
- ผู้เขียน
- Ex) เขียนโดย Omori Masao
- ผับ
- สำนักพิมพ์และจำหน่าย
- Ex) Tsuchiura Tsukuba Shorin
- pubdate
- เอ็ด
- รุ่น
- อดีต) การแก้ไขครั้งที่ 1
- ฟี
- ชุด
- ชุด
- Ex) Kobunshapaperbacks; 41
- บันทึก
- หมายเหตุ
- Ex) ชื่อ Colophon (ข้อผิดพลาดในการพิมพ์) เรื่องราวของมิตรภาพระหว่างครูและนักเรียน
- หัวเรื่อง
- อ่านชื่อ
- Ex) อาจารย์เห็น Meow
- การเป็นนักเขียน
- การอ่านของผู้เขียน
- Ex) Omori, Masao (Omori, Masao)
- HoldingsRecord
- หมายเลขประจำตัวของวัสดุแต่ละชิ้น
- Ex) JP20564340-01
- HoldingPhys
- ชื่อสถานที่
- Ex) สหภาพแอฟริกามุ่งหน้าสู่ศตวรรษที่ 21
- HoldingLoc
- หมายเลขการจำแนกประเภท
- อดีต) F9-128
ฟิลด์ที่อาจมีหลายค่าถูกแทรกโดยการรวมค่าที่จะแทรก
ฉันไม่ได้ทำการทำให้เป็นมาตรฐานดังนั้นฉันจึงต้องการไตร่ตรอง
เนื่องจาก NBC มีความโดดเด่นเสมอ (ชื่อเรื่องและ HoldingLoc ไม่ซ้ำกัน) ฉันจึงระบุว่าเป็นคีย์หลัก
4. จุดอุดมคติ
รองรับและ/หรือค้นหา
- และ/หรือการค้นหาสามารถทำได้โดยใช้ AND/หรือ Operator
เลือก/ป้อนจำนวนรายการเพจ
- ตอนนี้คุณสามารถป้อน/เลือกจำนวนหน้าเว็บที่แสดงโดยใช้ <Datalist> ## การค้นหาที่ระบุฟิลด์ในช่องค้นหา
- ตอนนี้เราทำให้สามารถค้นหาแต่ละฟิลด์ได้แล้ว
- ตอนแรกฉันไม่ได้คิดเกี่ยวกับการค้นหาฟิลด์จากแบบฟอร์มดังนั้นฉันจึงคิดเกี่ยวกับการเพิ่มตัวดำเนินการเพื่อชี้ไปที่ฟิลด์เฉพาะเช่น "ชื่อเรื่อง: Tsukuba"
ออกแบบ
- โดยรวมแล้วมันอ่านง่ายและจอแสดงผลจะไม่แตกแม้ว่าจะดูบนสมาร์ทโฟน
- นอกจากนี้เรายังทำโทนสี/ขนาดที่ง่ายต่อการมองเห็นแม้กระทั่งสำหรับคนที่มีความบกพร่องทางสายตา
การสร้างแผนที่ไซต์สำหรับโครงสร้างแบบลำดับชั้นของไซต์
- ฉันสร้าง sitemap.xml
- ฉันกำลังอ่านหนังสือรวบรวมข้อมูลและพบว่า "ฉันควรเขียนเกี่ยวกับเรื่องนี้" ดังนั้นฉันจึงเขียนมัน
การตรวจสอบ/มาตรฐาน HTML และ CSS
- เนื่องจากเอกสาร HTML ไม่ได้รับข้อผิดพลาดพื้นฐานการกำหนดมาตรฐานจึงดำเนินการโดยใช้ตัวตรวจสอบความถูกต้องของ W3C (HTML/CSS) เพื่อตรวจสอบว่ามีปัญหาใด ๆ เกี่ยวกับรูปแบบความสัมพันธ์ในการสืบทอดโครงสร้างแบบลำดับชั้นและแท็ก HTML นั้นมีเนื้อหาใด ๆ ที่ควรเขียนใน CSS หรือไม่
5. ผลการวิจัย
การสร้างระบบฝั่งเซิร์ฟเวอร์
ㅤโดยปกติแล้วหน้าเว็บที่เราเห็นคือส่วนหน้าและประกอบด้วย HTML/CSS/JS เราไม่สามารถดูโปรแกรมหรือระบบบนเซิร์ฟเวอร์นั้นได้ ในแบบฝึกหัดนี้เมื่อสร้างหน้าแบบไดนามิกเราสามารถเข้าใจวิธีการทำงานของพวกเขาโดยการสร้างโปรแกรมภายใน นอกจากนี้เรายังทำให้ความรู้ของเราลึกซึ้งยิ่งขึ้นในชั้นเรียน PHP + MySQL ที่เราใช้ในเวลาเดียวกัน
การออกแบบโดยใช้แผ่นสไตล์หน้าเว็บ
ㅤจนถึงตอนนี้เมื่อฉันเริ่มสร้างหน้าเว็บฉันไม่ได้เขียน CSS มากนักโดยใช้ markdown หรือ bootstrap อย่างไรก็ตามเพื่อที่จะมุ่งเน้นไปที่การออกแบบฉันเขียน CSS ตั้งแต่ต้น ฉันคิดว่าฉันได้รับความรู้พื้นฐานเกี่ยวกับการออกแบบหน้าเว็บโดยใช้แผ่นสไตล์
การสร้างเอกสารที่มีโครงสร้าง
ㅤฉันได้รับความรู้เกี่ยวกับมาร์กอัปของเอกสารโครงสร้าง HTML และ XML
การก่อสร้าง db โดยใช้ sqlite
ㅤฉันใช้ MySQL โดยทั่วไปใน Python และ Ruby แต่นี่เป็นครั้งแรกที่ฉันได้ลอง SQLite ฉันสามารถเรียนรู้ความแตกต่างในสัญกรณ์ตัวแปรในตัวและรูปแบบการแทรก
การจัดการที่แตกต่างบนเว็บไซต์ gitHub
ความแตกต่างได้รับการจัดการเป็นมะเขือยาว/OPAC