지식 정보 연습 I보고 과제 201811528 (수요일 그룹)
- 이 저장소는 ...
- 지식 정보 연습에서 "OPAC 빌딩"작업에서 생성 된 문제 I.
- 수업에서 최우수상으로 수여됩니다. (2019)
소개
이 페이지는 지식 정보 및 도서관 과학을위한 Spring AB 모듈의 시작 인 " 지식 정보 연습 I "에서 "OPAC 빌딩"문제에 대한 보고서입니다.
내용물
- 1. 당신이 만든 OPAC의 URL
- 2. CGI 프로그램 소스 목록 및 설명
- 3. 관계 (표) 구조 및 설명
- 4. 이상적인 점
- 5. 발견
1. 당신이 만든 OPAC의 URL
우리가 구축 한 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 (각 함수는 def.rb로 작성됩니다)
- Makeword (CGI)
- 이것은 검색어를 쉽게 분리하기 위해 Index.html에서 검색된 데이터를 처리하는 방법입니다.
- <필드> : <value> 모양
- gsub (/[ r n]/") 변수 단어의 선 파단을 제거합니다
- delete_if {| i | ...} 삭제 및 또는 널 항목.
- 반환 값은 편집 된 검색 문입니다
- Makeys (단어)
- makeword ()에서 수신 된 검색 문을 각 키워드로 나누어 SQL 쿼리에 던져 배열에 삽입하십시오.
- 또는 언제 또는 오실 때 그대로 삽입하십시오
- 제목 : 또는 ed : 들어 오면 { "title"=> "val"}의 해시 또는 비슷한 것입니다.
- 지정된 필드가 없으면 그대로 삽입하십시오.
- 반환은 해시와 문자열을 포함하는 배열입니다
- all_any_search (key, db)
- 검색 (모든 필드에서 검색)을 수행하고 DB에서 데이터를 검색하십시오.
- 반환 값은 적중 데이터 [[NBC1], [NBC2], ..., [NBCN]의 NBC (National Bibliographic Number)를 포함하는 2 차원 배열입니다.
- field_search_s (키, DB)
- 지정된 필드에 대한 개별 검색을 수행합니다
- 반환 값은 NBC (National Bibliographic Number)의 적중 데이터를 포함하는 2D 배열입니다.
- Andor (키, DB)
- makekeys ()에서받은 값을 반복하고 검색 결과를 All_any_Search () 및 all_any_search ()로 적절하게 전달한 배열에 삽입하십시오.
- OR, 또는 전달 된 경우 배열에 삽입하십시오.
- 반환 값
- Strighterpret (키)
- 최종 검색 결과를 생성하기 위해 Andor (Keys, DB)의 반환 값을 해석합니다.
- [datan] 뒤에 [datan+1]가 이어지면 Union ([datan] | [datan+1])가 취해집니다.
- 다음 또는 또는 또는 [datan] 이후에 오면 다음 [datan+1]과 다음 [datan+1]을 가져 가면 축적 세트 ([datan] & [datan+1]).
- 반환 값은 1 차원 배열입니다
- ret_hitdata (hit, db)
- Strighterpret (Keys)로 생성 된 Hit Bibliographic 데이터의 NBC에서 전체 서지 필드 데이터를 얻으십시오.
- 반품은 전체 적중 서지 데이터입니다
- create_paging_link (hits, par)
- Pagenation 기능을위한 페이지 링크 생성
- 인덱스 페이지 또는 검색에서 수신 된 ps (pagesize)의 값이 비어 있으면 20으로 설정하십시오.
- P (페이지)는 현재 사용 가능한 페이지 수입니다.
- 검색 수와 ps를 고려하여 필요한 페이지 수 (= 페이지 링크 수)를 HMP에 할당하십시오.
- p_size = 0이면 hmp = 0입니다
- PageLinks에 페이지 링크를 삽입하십시오
- 반환 값은 테이블의 페이지 링크의 HTML입니다.
- create_table_html (data, par)
- 곰팡이 검색 결과 HTML 테이블로 결과
- 각 타이틀을 정확하게 보내는 링크를 제공하십시오 .CGI
- P 및 PS를 고려하면 필요한 명령문은 데이터에서 추출됩니다 (= ret_HitData (HIT, DB))
- 반환 값은 테이블의 HTML입니다
- rep_hide (per)
- PS를 변경하여 다시로드하기위한 GET 값을 인수/저장
- <input type = "hidden">에 포함시킵니다
- 리턴 값은 <input type = "hidden">의 html이며, 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 /> 사이의 검색 단어를 변경하십시오
- "Reload"를 클릭 할 때 Rep_Hide를 보내십시오 (또는 PS 입력 양식을 사용하여 입력).
accurate.cgi (각 함수는 def.rb로 작성 됨)
- ISBNTO13 (ISBN10)
- ISBN을 10 자리에서 13 자리로 변환합니다.
- 반환 값은 문자열 (13 자리)입니다.
- field_search_a (키, DB)
- 전체 서지 데이터를 검색하려면 search.cgi에서 NBC를 받으십시오.
- 반환 값은 한 권의 책의 모든 서지 데이터를 포함하는 배열입니다.
- Bibimage (ISBN13, PER)
- 책 이미지 획득
- OPENDB 엔드 포인트에 액세스하고 서지 데이터가 있는지 확인하십시오 (= 이미지)
- JSON이 NIL 인 경우 404 Image Display HTML을 Bibhash로 통과하십시오.
- JSON이 NIL이 아닌 경우 사본 표시 html을 Bibhash로 전달하십시오.
- 반환 값은 <img ... />의 html입니다
- main () (#main () 및 정확한 .cgi로 작성된 부분)
- DB 및 CGI는 opac.db를 SQLITE 모듈의 데이터베이스 개체로 지정하고 CGI 객체가 있습니다.
- field_search_a (key, db) [0]로 search.cgi에서 전달 된 get 값 (nbc)에서 얻은 모든 필드에 대한 서지 데이터
- row [1] .Scan (/[0-9]/). [0,10], ISBN 필드의 숫자 만 10 자리의 시작부터 가져오고 행과 함께 ISBNTO13으로 전달되며 행과 함께 ISBNTO13으로 전달되며 이미지 디스플레이 HTML이라고합니다.
- 각 항목은 테이블로 표시됩니다.
3. 관계 (표) 구조 및 설명
구조
다음은 opac.db에서 테이블 bibdata를 만들 때 SQL (data/bib_sche.sql)입니다.
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, 테이블 Bibdata를 생성하는 SQL
설명
각 값이 설명됩니다.
- NBC
- ISBN
- ISBN 번호 (10 자리)
- 예) 4-86004-040-6
- 제목
- 인증
- 작가
- 예) Omori Masao에 의해 작성되었습니다
- 선술집
- 출판 및 배포
- 예) Tsuchiura Tsukuba 쇼린
- Pubdate
- 에드
- 물리
- 시리즈
- 시리즈
- 예) Kobunshapaperbacks; 41
- 메모
- 메모
- 예) Colophon 제목 (인쇄상의 오류) 교사와 학생 간의 우정 이야기
- 타이틀 헤드
- 제목을 읽습니다
- 예) Sensei는 Meow를 보았다
- 저작물
- 저자의 독서
- 예) Omori, Masao (Omori, Masao)
- HoldingsRecord
- 개별 자료의 식별 번호
- 예) JP20564340-01
- 보관소
- 위치 이름
- 예) 21 세기로 향하는 아프리카 연합
- HoldingLoc
삽입 할 값을 결합하여 여러 값을 가질 수있는 필드를 삽입했습니다.
정규화를하지 않았으므로 반영하고 싶습니다.
NBC는 항상 독특하기 때문에 (제목과 HoldingLoc은 고유하지 않음) 기본 키로 지정했습니다.
4. 이상적인 점
지원 및/또는 검색
- 및/또는 검색은 및/또는 연산자를 사용하여 수행 할 수 있습니다.
페이징 품목 수를 선택/입력하십시오
- 이제 <datalist>를 사용하여 표시되는 페이지 수를 입력/선택할 수 있습니다. ## 검색 창에서 필드 지정 검색
- 우리는 이제 각 필드를 검색 할 수있게했습니다.
- 처음에는 양식에서 필드를 검색하는 것에 대해 생각하지 않았으므로 "Title : Tsukuba"와 같은 특정 필드를 가리키기 위해 연산자를 추가하는 것에 대해 생각했습니다.
설계
- 전반적으로 읽기 쉽고 스마트 폰에서 볼 때도 디스플레이가 파손되지 않습니다.
- 우리는 또한 시각 장애가있는 사람들에게도 쉽게 볼 수있는 색 구성표/크기를 만들었습니다.
사이트의 계층 구조를위한 사이트 맵 작성
- siteemap.xml을 만들었습니다.
- 나는 크롤러 책을 읽고 "나는 그것에 대해 써야 할 것"이라고 말하는 것을 발견했다. 그래서 나는 그것을 썼다.
HTML 및 CSS 검증/표준화
- HTML 문서는 기본 오류가 발생하지 않기 때문에 W3C의 유효성 검사기 (HTML/CSS)를 사용하여 표준화를 수행하여 형식, 상속 관계, 계층 구조 및 HTML 태그에 CSS로 작성 해야하는 컨텐츠가 포함되어 있는지 여부를 확인합니다.
5. 발견
서버 측 시스템 구축
일반적으로 우리가 보는 웹 페이지는 프론트 엔드이며 HTML/CSS/JS로 구성됩니다. 해당 서버의 프로그램이나 시스템을 볼 수 없습니다. 이 연습에서 동적 페이지를 만들 때 내부 프로그램을 만들어 어떻게 작동하는지 이해할 수있었습니다. 우리는 또한 우리가 동시에 복용 한 PHP + MySQL 수업에 대한 지식을 심화 시켰습니다.
웹 페이지 스타일 시트를 사용하여 설계
지금까지 지금까지 웹 페이지를 만들기 시작했을 때 Markdown 또는 Bootstrap을 사용하여 CSS를 많이 쓰지 않았습니다. 그러나 디자인에 집중하기 위해 처음부터 CSS를 썼습니다. 스타일 시트를 사용하여 웹 페이지 디자인에 대한 기본 지식을 얻었습니다.
구조화 된 문서 작성
HTML 및 XML 구조화 된 문서의 마크 업에 대한 지식을 얻었습니다.
sqlite를 사용한 DB 구조
ㅤ 기본적으로 Python과 Ruby에서 MySQL을 사용했지만 SQLITE를 처음 시도한 것은 이번이 처음입니다. 표기법, 내장 변수 및 삽입 형식의 차이점을 배울 수있었습니다.
웹 사이트 GitHub의 차이 관리
차이는 가지/opac로 관리되었습니다.