전자문서와하이퍼텍스트 - Esantomi/digital-humanities GitHub Wiki
- 1주차. 오리엔테이션
- 2주차. EXIF와 포토 아카이브 구축
- 3주차. INTERNET과 WWW / 포토 아카이브
- 4주차. XML의 이해
- 5주차. XML의 구조와 표현
- 6주차. XSL
- 8주차. XSL 실습
- 9주차. Xpath
- 10주차. XML 데이터베이스
- 11주차. XML 서버 데이터베이스 (1)
- 12주차. XML 서버 데이터베이스 (2)
- 13주차. XML 서버 데이터베이스 (3)
- 14주차. XML 서버 데이터베이스 (4)
- 15주차. XML 서버 데이터베이스 (5)
- 전자문서와 하이퍼텍스트 2022
- 본 문서는 김현, ‘전자문서와 하이퍼텍스트’ 수업 자료를 바탕으로 작성되었음을 밝힙니다.
- 시험
- 플레인 텍스트가 주어지면 XML로 바꾸고, 데이터베이스에 적재하여 서비스할 수 있게끔 하는 것
- 과거 워드 프로세서는 위지윅(WYSIWYG) 방식이 아니었다.
- 위지윅은 눈에 보이지 않는 문자(감추어진 부분)를 보여 주지 못한다.
- 텍스트 기반 문서 작성을 통해 어떤 제어 문자, 태그가 들어가 있는지 직접 확인할 필요가 있다.
- 본 강의에서는 XML 문서를 제작하는 방법과 XML을 데이터베이스상에서 운용하는 방식을 배울 것
- 조선 시대에는 '앎이 곧 행함'으로 이어진다고 믿는 경우가 많았으나, 이는 신분 사회의 뒷받침 덕분이었다.
- 단순히 지식이 많은 것만으로는 부족하다.
- 특히, 변화에 필요한 사회적 역할이 주어지지 않는다면 개인적 실천에 그칠 뿐이다.
- 즉, 지식이 많아도 실천으로 이어질 방법이 없다면 어떡할 것인가?
- 지식을 통해 얻은 status를 통해 특정 기능을 수행할 수 있다는 것은 망상이나, 오늘날도 여전히 널리 받아들여진다.
- 실천을 할 수 있는, 유효하고 올바른 능력을 신장시키기 위한 공부가 필요하다.
- 소피스트들의 '말의 시대'는 갔다.
- 사회 규모가 점차로 커졌기 때문.
- '글의 시대'가 왔고, 조선 시대 과거 시험의 목적도 사대부에 걸맞은 작문이 가능한지 판단하는 것에 있었다.
- 단순히 문학성 있는 글을 쓰는 것이 아닌, 고사들을 적절히 인용함으로써 설득력 있는 글을 쓰는 능력을 말한다.
- 이 당시에는 글을 잘 쓰는 능력이 실제로 세상을 움직이는 결과로 이어질 수 있었다.
- 마르크스의 《공산당 선언》과 디지털 인문학 선언문(Digital Humanities Manifesto)을 읽어 볼 것
- 단순히 문학성 있는 글을 쓰는 것이 아닌, 고사들을 적절히 인용함으로써 설득력 있는 글을 쓰는 능력을 말한다.
- 이제는 '데이터의 시대'다.
- 지금은 문서도 전자적으로 제작되고 전자시스템을 통해 전달된다.
- 데이터는 실천력을 갖는다.
- 데이터 시대에 유효한 커뮤니케이션 능력을 확보함으로써, 사회를 움직이는 데 기여하는 인력이 될 수 있다.
- 세상이 돌아가는 데 인문학이 아무런 영향을 미치지 못한다면, 인문학은 사라지고 말 것이다.
- 인문학적 지식이 데이터로 운용됨으로써, 의사소통 속에서 어떤 역할과 기능을 수행할 수 있어야 한다.
- 즉, '글의 시대'에 융성했던 인문학 지식이 '데이터의 시대'에서 사라지지 않을 수 있도록 해야 한다.
- 인문학은 왜 유독 디지털과 거리가 먼가?
- 애초에 디지털화되기 어려운 개념들을 다룬다. (이산적이지 않은 데이터들)
- 자연과학, 사회과학에 비해 관심사가 더 과거에 치우쳐 있다.
- 디지털인문학자로서, 직접 인문지식을 탐구하는 사람이 직접 데이터를 취급할 수 있는 능력을 가져야 한다.
- 정통적 인문학이 아니어도, 오늘날 유효한, 사람에 대한 탐구를 디지털적으로 '직접' 접근할 수 있어야 한다.
- 인문학자와 컴퓨터 전문가의 협업은 길어야 1년이다.
- 프로세스를 통해 도출한 데이터를 스스로, 추가로 손볼 수 있는 사람이 디지털인문학자이다.
- 기술은 항상 새롭게 나오므로, 중요한 건 기술 자체가 아니라 인문학적 목표 의식이다.
-
FTP(File Transfer Protocol)
- 파일 전송 프로토콜(규약)
- 프로토콜(protocol)이란 '나'(사용자)와 '상대'(서버) 간 사용하기로 약속한 언어 (e.g. HTTP로 대화)
- FTP에 의한 파일 전송을 쉽게 해 줄 수 있는 소프트웨어 (e.g. FileZilla)
- 내 디렉터리는
2022 - 201 - student - s08
- 파일 전송 프로토콜(규약)
- 본인 컴퓨터에 사진 파일 10장 준비할 것
- 메타데이터를 추출, 사진을 볼 때 메타데이터를 같이 볼 수 있게끔 XML 데이터로 만들어 볼 예정
-
2022-201:Photo Archive Home
- EXIF 메타데이터를 바탕으로 한 아카이브
- 메타아카이브의
/public_html/photoAlbum/s08
사용
- 설치 프로그램
-
Exif Pilot
- a useful application for individuals dealing with JPEG EXIF information on a daily basis.
- Edit EXIF/IPTC/XMP 클릭 후 세부정보 수정
- 한번에 EXIF 데이터를 다운받으려면 별도의 유료 플러그인(
batchediting.plg
), Registration Code 필요Plugins - Batch Editing - Add Plugin
-
Import/Export - Create Template for Export - Settings - Export/Import to/from single File
체크 -
Import/Export - Export EXIF/IPTC/XMP to CSV
- csv로 저장 완료!
-
EXIF(Exchangeable image file format)
- 디지털카메라의 이미지 파일 안에 저장되어 있는 화상 파일 형식
- 화상 데이터와 함께 카메라 제조사(Maker), 카메라 모델(Model), 이미지 에디터(Software), 사진을 보정한 날짜(Datetime), Exif 버전(Exif Version), 촬영한 날짜(Shoot Datetime), 웹에 올려진 사진의 실제 크기(Image Size), 노출 시간(Exposure Time:셔터 스피드), 촬영 프로그램(Exposure Program), 렌즈 초점 길이(Focal Length), 조리개 개방 수치(F-Number), 플래시 사용 여부 등 세부적인 부가정보를 기록할 수 있다.
- a useful application for individuals dealing with JPEG EXIF information on a daily basis.
-
csv2xml
- Exif Pilot으로 생성한 csv 파일을
extractPhotoMetaXml.bat
,extractPhotoMetaKml.bat
파일을 통해 XML, KML 파일로 변환
- Exif Pilot으로 생성한 csv 파일을
-
Easy Thumbnails
- a popular free Windows utility for creating accurate thumbnail images and scaled-down/up copies from a wide range of popular picture formats.
- 섬네일 파일은
thumb
폴더를 만들어 별도 저장- 이때 원본 이미지와 파일명이 같아야 함
- 섬네일 파일은
- a popular free Windows utility for creating accurate thumbnail images and scaled-down/up copies from a wide range of popular picture formats.
-
Exif Pilot
- 서버 업로드
- dh 서버 메타아카이브의 자기 폴더에 업로드
- 지리정보 포함된 album01과 album02를 만들기
- 두 앨범은 성격이 다르게 설정
- 맛집 앨범과 취미 앨범?
- 지리정보 없으면 새로 찍기 (또는 지리정보 삽입)
- 내 개인 위키에 구축해도 좋음
- 두 앨범은 성격이 다르게 설정
-
ARPANET
- 1963년 미국 국방성의 ARPA(The Advanced Research Projects Agency)는 긴급 사태 시에도 장애를 받지 않고 정상적으로 제 기능을 발휘할 수 있는 통신망 구축 방법에 대한 연구를 추진
- 1969년부터 ARPA 연구원들 간의 정보 자원 공유를 위하여 ARPANET이라는 컴퓨터 통신망을 구축하여 운용하기 시작
-
TCP/IP
- 당시 근거리통신망(LAN) 기술과 워크스테이션의 보급에 따라 새로운 컴퓨터 통신망들이 탄생하여 발전하기 시작하였고, ARPANET은 이들 통신망들과의 상호 연결이 필요
- ARPA는 기종에 관계없이 통신망에 접속된 모든 컴퓨터 간의 통신이 가능한 컴퓨터 통신망 구축을 위해 새로운 통신 프로토콜을 정의하게 되었는데, 그것이 TCP/IP 프로토콜
- 미국방성의 DCA(the Defense Communications Agency)는 모든 ARPANET 호스트들의 TCP/IP 사용을 의무화
- TCP/IP는 인터넷의 표준 프로토콜로 자리를 잡게 됨
-
NSFNET
- 1985년 미국과학재단(NSF: The National Science Foundation)은 5개의 수퍼 컴퓨터 센터를 설치하고 미국의 각 대학에서 이 자원을 공동으로 이용할 수 있게 하는 계획을 수립
- 5개 센터의 수퍼 컴퓨터를 많은 사용자들이 공동으로 사용하기 위해서는 통신망 구축이 필요
- 기존의 ARPANET을 사용하려 했으나, 관료적 문제점들로 인해 실패
- TCP/IP 기술을 바탕으로 한 고유의 통신망을 구축하기로 결정
- 모든 대학이 수퍼 컴퓨터 센터와 직접 연결하는 것이 아니라, 지역별로 독립된 통신망을 구축하고 각 지역망들이 다시 체인처럼 연결되게 하며, 이러한 체인망들 중에 하나가 수퍼 컴퓨터 센터와 접속
-
INTERNET
- 대학 사회에서의 컴퓨터 통신망 구축이 활발하게 전개
- 컴퓨터 자원 활용 면에서는 크게 성공적이었으나 곧 트래픽의 한계에 봉착
- 망 및 망 제어 컴퓨터의 성능을 지속적으로 개선
- 국가기관 종사자들의 전유물이었던 인터넷을 교육 분야로 확대
- 미국의 4년제 대학에 입학하는 모든 학생을 인터넷 사용자화
- 이들이 대학 졸업 후, 각자가 속한 기업, 단체에서 인터넷 활용을 촉진
-
하이퍼텍스트(Hypertext)란?
- 문서 내의 중요한 키워드마다 다른 문서 또는 유관한 시청각 자료로 연결되는 통로를 만들어 여러 개의 문서가 하나의 문서인 것처럼 보여 주는 문서 형식
- Hypertext의 반대되는 개념은 Linear text
- 문서 내의 중요한 키워드마다 다른 문서 또는 유관한 시청각 자료로 연결되는 통로를 만들어 여러 개의 문서가 하나의 문서인 것처럼 보여 주는 문서 형식
- 하이퍼텍스트 이론의 발전
-
메멕스(memex)
- 1945년 바네바 부시(Vannevar Bush)가 제안한, 여러 정보를 꼬리에 꼬리를 물고 따라갈 수 있게 한 문서 관리 체제
- 부시는 지식의 폭발적인 증가로 사용자가 자신에게 유용한 정보를 찾아갈 수 있는 경로가 여러 가지로 존재해야 한다고 주장 (‘As we may think’)
-
하이퍼텍스트(Hypertext)
- 테드 넬슨(Ted Nelson)은 이 개념을 정리하여 하이퍼텍스트란 용어를 창안
- 1981년에 '리터러리 머신(Literary Machine)'이라는 글을 발표하여, 재나두(Xanadu)라는 시스템을 설명
- 재나두는 문서의 내부에 노드로 표현되는 정보들을 연결한 최초의 하이퍼텍스트 시스템
-
메멕스(memex)
- 하이퍼텍스트의 실용화
- 1987년, 미국의 애플사는 자사의 매킨토시 시스템에서 사용되는 하이퍼텍스트 응용 상품 ‘하이퍼카드(HyperCard)’를 출시
- 하이퍼카드의 성공 요인
- 매킨토시 운영체제와 함께 제공되는 무료 소프트웨어 패키지
- 텍스트뿐 아니라, 소리와 이미지로의 링크를 제공
- 하이퍼텍스트와 인터넷의 만남
-
팀 버너즈리(Tim Berners-Lee)
- CERN에 취직한 후, 범세계적인 정보 서비스를 위한 하이퍼텍스트 프로젝트를 제안 (1989)
- 로베르 카이오(Robert Cailliau)와 함께 월드 와이드 웹(WWW)의 하이퍼텍스트 시스템을 고안
- 사용자가 마음 먹은 대로 브라우징할 수 있는 노드들의 웹(WEB)으로 다양한 종류의 연결된 정보들에 접근하는 방법을 제공
-
팀 버너즈리(Tim Berners-Lee)
-
월드 와이드 웹(World Wide Web: WWW)
- 하이퍼텍스트 문서를 지원하는 인터넷 서버들의 범세계적인 집합
- WWW stands for "World Wide Web"; the large global collection of Internet servers which support hypertext documents coded in HTML, and transferred via HTTP
- The universe of hypertext servers (HTTP servers) which are the servers that allow text, graphics, sound files, etc. to be mixed together
- 하이퍼텍스트 문서를 지원하는 인터넷 서버들의 범세계적인 집합
-
웹 서버(Web Server)
- 인터넷상에서 WWW 방식의 정보 서비스를 가능하게 해 주는 시스템 소프트웨어
- 인터넷상에서 WWW 방식의 정보 서비스를 가능하게 해 주는 시스템 소프트웨어
-
웹 브라우저(Web Browser)
- WWW의 클라이언트 측에서 서버와 메시지를 교환하고, 서버의 메시지를 해석하여 사용자에게 보여 주는 기능을 하는 소프트웨어
- WWW 브라우저는 http, ftp 등 여러 가지 프로토콜을 통해 URL로 지정된 서버와 메시지를 교환
-
HTTP(HyperText Transfer Protocol)
- WWW의 서버와 클라이언트가 하이퍼텍스트 문서를 송수신하기 위해 사용하는 프로토콜
- TCP/IP 위에서 동작, 기본적으로 TCP 포트 80번이 지정
- Request/Response 방식 동작
- 서비스를 요구하면 TCP 연결이 만들어지고 서버가 응답을 보내어 데이터 전송을 끝내면 자동적으로 연결 마감
- 하이퍼 링크를 통해 다른 호스트에 문서를 요청할 수 있으므로 효율적
- 하나의 호스트에서 여러 문서를 가져올 경우에는 소모적인 방식
-
URL(Uniform Resource Locator)
- 인터넷상의 여러 가지 정보 자원을 일원적으로 표기하는 약속
- URL 개념의 발명은 여러 가지 형태의 리소스를 포괄적으로 처리하는 정보 시스템인 WWW의 기반이 되었다.
-
CGI(Common Gateway Interface)
- 클라이언트로부터의 입력을 외부의 프로그램에 넘겨 처리하고, 그 결과에 기초해서 응답을 해 주는 기능
- CGI를 이용한 WEB 데이터베이스의 구현
- 클라이언트의 web 문서 요청을 데이터베이스 검색 명령으로 치환
- 데이터베이스 검색 수행
- 검색 결과를 WEB 문서 형태로 변환
- 클라이언트에게 WEB 문서 전송
- 클라이언트로부터의 입력을 외부의 프로그램에 넘겨 처리하고, 그 결과에 기초해서 응답을 해 주는 기능
-
HTML(Hypertext Markup Language)
- 하이퍼텍스트를 만드는 수단. 사용자에게 보여 줄 문서의 표현 형식을 만들어 내는 언어
- HTML 표준 문서의 기본 틀은 항상 SGML(Standard Generalized Markup Language)이라고 하는 페이지 서술 언어
- 이미 어떠한 원칙과 사용자가 존재하는 환경에서 HTML이 태동 → 지속적인 표준화가 가능
- XML을 웹에 띄우는 방법
- XML을 프로그램이 읽어 들여 parsing해서 보여 주기
- 스타일시트(stylesheet)를 이용 (HTML 스크립트 사용) : XSLT!
-
XSLT(Extensible Stylesheet Language Transformations)
- XSLT는 XML 문서를 다른 XML 문서로 변환하는 데 사용하는 XML 기반 언어이다.
- XSLT는 XML 데이터를 웹 페이지로 표시하기 위해 HTML 또는 XHTML 문서로 변환할 때 자주 사용된다.
-
API(Application Programming Interface)
- 내가 가진 자원을 제3자가 쓸 수 있게 해 주는 것
-
장소감(sense of place)
- 장소에 대한 인간의 정서적 감정을 의미하는 것으로 인간과 장소의 경험이 상호작용을 통해 소속감이나 애착과 같은 정서적 유대가 형성되는 것을 의미한다(권영락과 황만익, 2005)
- 장소감이 느껴지는 이유는 우리가 그곳에 얽힌 이야기를 알기 때문
- Photo Archive Home
- 재미있는 글쓰기
- 사람의 기억력은 한정적이므로, 재밌는 이야기를 쓰기 위해서는 소재가 풍성한 것도 좋으나 많은 것을 버릴 수 있어야 함
- 논문도 마찬가지. '너무 많은 것을 담으려 하지 말 것'.
- 코페르니쿠스적 전회(Copernican revolution) : 칸트 曰 시공간은 외재하는 게 아니라 인간 내면에 있는, 세상을 이해하기 위한 감성의 범주
-
<?xml>
: XML 태그 -
<?xml-stylesheet>
: XML 스타일시트 태그로, 보이는 형태 규정 -
<Album>
: 아래 태그는 모두 사용자가 임의로 설정-
<Photo>
<FileName>
<PixelWidth>
<PixelHeight>
<Description>
<DateTimeOriginal>
<Latitude>
<Longitude>
<Keywords>
<ObjectName>
-
-
XML(eXtensible Markup Language)
- W3C-recommended general-purpose markup language.
- W3C Recommendation : XML 문서의 구조와 XML 프로세서의 요건을 정의
- General-Purpose : 특정 분야, 특정 목적의 전자문서 생산에 적용할 수 있는 보편적 표준을 제공
- Interoperable : 시스템의 상이함에 구애되지 않는 데이터 공유
-
Open, Free Standard : 누구나 사용할 수 있는 개방된 표준
- 전자문서 기술 언어의 세계적인 표준
- W3C에서 개발된, 다른 특수한 목적을 갖는 마크업 언어를 만드는 데 사용하도록 권장하는 다목적 마크업 언어
- 즉, 다른 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어
- W3C-recommended general-purpose markup language.
-
XML의 특징
- XML은 다른 목적의 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어입니다.
- XML은 다른 시스템끼리 다양한 종류의 데이터를 손쉽게 교환할 수 있도록 해줍니다.
- XML은 새로운 태그를 만들어 추가해도 계속해서 동작하므로, 확장성이 좋습니다.
- XML은 데이터를 보여주지 않고, 데이터를 전달하고 저장하는 것만을 목적으로 합니다.
- XML은 텍스트 데이터 형식의 언어로 모든 XML 문서는 유니코드 문자로만 이루어집니다.
- 탄생 배경
- 하이퍼텍스트 상용화와 SGML 국제 표준화에 힘입어 HTML이 등장했으나, HTML은 SGML의 정신(구조, 내용, 모양의 분리)을 계승하지 않았으므로 그 특성을 살려 새롭게 만든 것이 XML이다.
- 기말 시험에 나옴!!
-
SGML(Standard Generalized Markup Language)
- 문서에 담긴 정보 요소와 그 요소들 간의 관계를 컴퓨터가 이해할 수 있도록 만든 마크업 언어
- 1969년 미국의 IBM 사의 찰스 골드파브(Charles Goldfarb)와 그 동료들(Ed Mosher, Ray Lorie)에 의해 GML(Generalized Markup Language)이라는 이름으로 처음 개발
- 그 후 지속적으로 발전하여 1986년 국제표준기구에 의해 구조적 데이터 표현의 표준안(ISO 8876)으로 인증
-
HTML(Hypertext Markup Language)
- HTML도 기본적으로는 SGML을 기반으로 만들어진 것
- 그러나 HTML은 문서를 ‘내용’, ‘구조’, ‘모양’으로 구분하여 그 각각의 독립성과 유연성을 추구한 SGML의 기본 사상에 충실하지 않았다.
- 대신 누구나 쉽게 ‘하이퍼텍스트’ 문서를 만들 수 있도록 하였고, 그것에 의해 월드 와이드 웹이 탄생
- SGML을 차용하되, SGML에 얽매이지 않는 것이 HTML의 성공 요인
-
XML(eXtensible Markup Language)
- HTML이 약화시켰던 SGML의 중요한 목적을 다시 회복
- HTML이 표현하지 못했던 문서의 구조와 내용 요소의 성격을 명확하게 표현
- XML 문서의 대표적 특성
- 문서를 “문서의 구조”, “문서의 내용”, “문서의 모양” 3가지로 분리한다는 것
- 문서의 내용과 모양을 구분함으로써, 내용을 그대로 두고 모양만을 바꾼다거나, 모양에 손대지 않은 채 내용을 확장하고 수정할 수 있는 유연성 보장
- 문서를 “문서의 구조”, “문서의 내용”, “문서의 모양” 3가지로 분리한다는 것
- XML은 인터넷과 하이퍼텍스트가 결합한 곳에서 텍스트의 구조와 정보 요소까지 드러내고자 하는 취지에서 개발된 것
- HTML이 약화시켰던 SGML의 중요한 목적을 다시 회복
-
KML(Keyhole Markup Language)
- 구글 어스, 구글 지도 및 기타 응용 프로그램에 쓰이는 XML 기반의 마크업 언어 스키마
- HTML
- 구조, 내용, 모양의 통합 (문서의 내용과 모양을 한꺼번에 취급)
- 구조, 내용, 모양의 통합 (문서의 내용과 모양을 한꺼번에 취급)
- XML
- 구조, 내용, 모양의 분리
- XML : 문서의 내용
- XSD : 문서의 구조
- XSL : 문서의 모양
- 예시: letter
-
letter.htm
<html> <head> <title>편지</title> </head> <body> <p style="color:red; text-align:left">영이에게</p> <p style="color:green; text-align:center">생일 축하해!</p> <p style="color:blue; text-align:right">철수</p> </body> </html>
-
letter.xml
<?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="letter.xsl"?> <편지 xmlns="letter.xsd"> <수신>영이에게</수신> <본문>생일 축하해!</본문> <날짜>2019. 4. 25</날짜> <발신>철수</발신> </편지>
-
letter.xsd
<?xml version="1.0" encoding="utf-8"?> <xs:schema targetNamespace="letter.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="편지"> <xs:complexType> <xs:sequence> <xs:element ref="수신"/> <xs:element ref="본문"/> <xs:element ref="날짜"/> <xs:element ref="발신"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="수신" type="xs:string"/> <xs:element name="본문" type="xs:string"/> <xs:element name="날짜" type="xs:string"/> <xs:element name="발신" type="xs:string"/> </xs:schema>
-
letter.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ltt="letter.xsd" exclude-result-prefixes="ltt" > <xsl:template match="/"> <html> <head> <title>편지</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template> <xsl:template match="ltt:편지"> <xsl:apply-templates/> </xsl:template> <xsl:template match="ltt:수신"> <p style="color:red; text-align:left"><xsl:value-of select="."/></p> </xsl:template> <xsl:template match="ltt:본문"> <p style="color:green; text-align:center"><xsl:value-of select="."/></p> </xsl:template> <xsl:template match="ltt:날짜"> <p style="color:grey; text-align:center"><xsl:value-of select="."/></p> </xsl:template> <xsl:template match="ltt:발신"> <p style="color:blue; text-align:right"><xsl:value-of select="."/></p> </xsl:template> </xsl:stylesheet>
-
- 구조, 내용, 모양의 분리
-
SEADDA(Saving European Archaeology from the Digital Dark Age)
- SEADDA is a community of archaeologists and digital specialists working together to secure the future of archaeological data across Europe and beyond.
- 데이터의 공개와 공유를 통해 다수의 공유 자산으로 삼아 소실로부터 saving 하고자 함
- 강철 같은 미디어에 새겨 두는 것이 아니라, 블록체인처럼 여럿이 소유하게 함
- 디지털 기록을 남겨 둘 수 있는 환경 구축을 목표로 함
-
Arches
- Arches is an open-source data management platform that is freely available for organizations worldwide to install, configure, and extend in accordance with their individual needs and without restrictions on its use.
-
패러데이터(Paradata)
- 데이터가 만들어지는 프로세스에 대한 데이터
- The paradata of a data set or survey are data about the process by which the data were collected.
- 데이터 자체는 남으나, 데이터가 어떻게 만들어졌는지에 대한 데이터는 잘 남지 않음
- 데이터가 만들어지는 프로세스에 대한 데이터
- Element(요소)
- Opening tag(시작 태그)
- Attribute(속성)
- Value(요소 값)
- Closing tag(종료 태그)
- Opening tag(시작 태그)
- 빈 태그(empty tag)
예) <br />, <img src="C:\Users\admin" />
- XML 문서의 구조
-
<?xml version="1.0" encoding="UTF-8"?>
- XML 문서는 맨 첫 줄에
<xml>
태그를 사용하여 XML 문서임을 명시
- XML 문서는 맨 첫 줄에
- 구조 요소
- 최상위 요소(root 요소)
- XML 문서에 단 하나만이 존재
- XML 문서에 존재하는 모든 요소의 조상(ancestor) 요소가 됨
- 문중 요소(child 요소)
- 최상위 요소(root 요소)
- 참고 : TCP School - XML 구조
-
-
스키마(Schema)
- 다른 언어를 정의하기 위해서는 먼저 해당 언어에 필요한 요소와 속성을 파악해야만 하는데, 이러한 정보들의 집합을 스키마(schema)라고 함
- XML은 다른 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어
- 스키마는 일관성 있는 XML 문서를 유지하는 데 아주 중요한 역할을 수행
- 다른 언어를 정의하기 위해서는 먼저 해당 언어에 필요한 요소와 속성을 파악해야만 하는데, 이러한 정보들의 집합을 스키마(schema)라고 함
- XML 스키마 작성법
-
DTD(Document Type Definition)
- 문서 타입 정의(DTD)는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의
- DTD를 사용하여 새로운 XML 문서의 구조를 정의함으로써 새로운 문서 타입을 만들 수 있음
- DTD 문법
-
<!DOCTYPE 루트요소 DTD식별자 [ 선언1 선언2 ... ]>
-
<!DOCTYPE
: DTD 시작 -
루트(root) 요소
: XML 파서(parser)에 명시된 루트 요소부터 파싱(parsing)을 시작하라고 알려주는 역할을 수행 -
DTD 식별자
: 프로그램 외부에 존재하는 DTD 파일을 위한 식별자-
외부 서브셋(subset)
: DTD 식별자가 외부 주소를 가리키고 있는 경우
-
-
내부 서브셋(subset)
: 추가로 선언한 엔티티(entity)의 리스트로, 괄호([]
) 안에 위치함
-
- DTD 내·외부 서브셋
- DTD가 XML 파일 내부에서 선언되면, 그 선언은 반드시
<!DOCTYPE>
안에 위치해야 함 - DTD가 XML 파일 외부에서 선언되면,
<!DOCTYPE>
은 반드시 외부 DTD 파일의 주소 정보를 포함해야 함
- DTD가 XML 파일 내부에서 선언되면, 그 선언은 반드시
-
.dtd
확장자를 사용하여 저장
-
- DTD의 단점
- 네임스페이스 지원 불가
- XML 문법이 아닌 별도 문법으로 작성
- 제한된 타입 지원
- 재사용 및 확장 불가
- 참고 : TCP School - DTD 개요
- 문서 타입 정의(DTD)는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의
-
XSD(XML Schema Definition)
- XML 스키마 정의(XSD)는 XML 문서의 구조 및 해당 문서가 포함할 수 있는 적법한 요소와 속성을 명시함
- 즉, 해당 XML 문서가 유효한(valid) XML 문서로서 포함할 수 있는 관계를 정의
- DTD의 단점으로 인해 2001년 W3C에서 새로운 스키마 언어인 XSD를 공표
- 네임스페이스 지원
- XML 문법으로 작성 가능하여 재사용 및 확장이 용이
- 정수, 문자열 등의 다양한 타입을 지원
- XSD 문법
- 모든 XSD 문서의 루트 요소는
<schema>
<?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://codingsam.com" xmlns="http://codingsam.com" elementFormDefault="qualified"> ... </xs:schema>
-
xmlns:xs
속성 : XSD의 요소와 타입에 사용할 W3C의 XML 스키마 네임스페이스를 명시 -
targetNamespace
속성 : 요소를 정의할 XML 스키마 네임스페이스를 명시 -
xmlns
속성 : 기본 XML 스키마 네임스페이스를 명시 -
elementFormDefault
속성 : 해당 스키마를 이용해 선언한 XML 문서의 모든 요소가 네임스페이스를 만족한다는 것을 명시
-
- 모든 XSD 문서의 루트 요소는
- 참고 : TCP School - XSD 개요
- XML 스키마 정의(XSD)는 XML 문서의 구조 및 해당 문서가 포함할 수 있는 적법한 요소와 속성을 명시함
-
DTD(Document Type Definition)
-
XSL(eXtensible Stylesheet Language)
- 각각의 장치는 내부적으로 자신만의 고유한 데이터 구조를 사용하므로 각각의 장치가 전달받은 XML 문서를 자신이 사용하는 데이터 구조로 변환할 때 사용할 규칙이 필요
- 이러한 변환 규칙에 대한 명세를 작성할 수 있는 언어가 바로 XSL(eXtensible Stylesheet Language)
- CSS가 HTML 문서를 위한 스타일 시트 언어라면, XSL은 XML 문서를 위한 스타일 시트 언어
- XSL 적용 예시
- 각각의 장치는 내부적으로 자신만의 고유한 데이터 구조를 사용하므로 각각의 장치가 전달받은 XML 문서를 자신이 사용하는 데이터 구조로 변환할 때 사용할 규칙이 필요
- xml로 자신의 이력서를 만들어 보기
-
네임서버(DNS: Domain Name Server)
- 영문 도메인을 네 자리의 IP 주소로 매핑시켜 주는 서버
- 인터넷 주소창에 도메인을 입력할 때 도메인 등록 시 지정된 네임서버를 통해 해당 도메인과 연결된 IP 주소를 확인하여 연결
- 영문 도메인을 네 자리의 IP 주소로 매핑시켜 주는 서버
-
도메인 네임(Domain name)
- 외우거나 식별하기 어려운 IP 주소(
예:240.10.20.1
)의 단점을 보완하고자example.com
처럼 기억하기 쉽게 만들어 주는 네트워크 호스트 이름- 보통 루트 네임 서버(최상위 DNS 서버이며 IANA에서 관리)에 등록된 최상위 호스트 네임 및 각 최상위 호스트 네임을 관리하는 도메인 레지스트리에서 관리하는 하위 호스트 네임을 이르는 말
- 최상위 호스트 네임은 최상위 도메인이라고 부르며 해당 레지스트리에 등록된 하위 호스트 네임들은 '
.
'으로 구분된 호스트가 얼마나 붙었는지에 따라 2차 도메인, 3차 도메인 등으로 불린다.- 대한민국의 경우
.kr
이라는 ccTLD를 부여받아 KRNIC(실질적으로는 한국인터넷진흥원 인터넷주소센터)에서 관리
- 대한민국의 경우
- 도메인의 종류
-
최상위 도메인(TLD, Top Level Domain)
-
국가 도메인(ccTLD, country code Top Level Domain)
- 인터넷상에서 국가를 나타내는 도메인으로 ‘
.kr
(대한민국)’, ‘.jp
(일본)’, ‘.cn
(중국)’, ‘.us
(미국)’ 등 영문으로 구성된 영문 국가도메인이 있다. 또한 ‘.한국
(대한민국)’처럼 자국어 국가도메인도 있다.
- 인터넷상에서 국가를 나타내는 도메인으로 ‘
-
일반 도메인(gTLD, generic Top Level Domain)
- ‘
.com
(회사)’, ‘.net
(네트워크 관련기관)’, ‘.org
(비영리기관)’, ‘.biz
(사업)’ 등 등록인의 특성에 따라 사용할 수 있는 도메인이다.
- ‘
-
국가 도메인(ccTLD, country code Top Level Domain)
-
최상위 도메인(TLD, Top Level Domain)
- 외우거나 식별하기 어려운 IP 주소(
-
XSL(eXtensible Stylesheet Language)
- 문서의 스타일을 정의하기 위한 언어
- XSL 적용 방법
- XML 문서 최상단의 태그 아래에
<?xml-stylesheet type="text/xsl" href="파일명.xsl"?>
삽입
- XML 문서 최상단의 태그 아래에
- XSL의 구성
-
XSLT
- XSL Transformations
- XML 문서를 다른 구조의 문서로 변환시키기 위한 마크업 언어
예) XML → HTML, XML → WML, XML → XML
- XPath : XML 문서의 특정 요소나 속성에 접근하기 위한 경로를 지정하는 언어
-
XSL-FO
- XML 데이터를 출력하기 위한 목적으로 설계된 언어
- XML 문서를 非XML 문서(XML 권고안 문법에 따라 작성된 텍스트 형식의 파일이 아닌 문서)로 변환하는 방법
예) XML 문서 → PDF 문서
- XML 문서를 非XML 문서(XML 권고안 문법에 따라 작성된 텍스트 형식의 파일이 아닌 문서)로 변환하는 방법
- XSL-FO는 2012년에 발표된 2.0 버전을 마지막으로, 2013년부터는 더 이상의 업데이트를 진행하고 있지 않으므로, 현재는 CSS3로 대체하여 사용
- XML 데이터를 출력하기 위한 목적으로 설계된 언어
-
XSLT
-
XSLT(Extensible Stylesheet Language Transformations)
- XSLT는 XML 문서를 XHTML 문서나 또 다른 XML 타입의 문서로 변환하기 위해 사용하는 언어
- XSLT는 W3C 표준 권고안으로, XSL에서 가장 중요한 언어
- 위와 같은 변환 과정에서 XSLT는 XPath를 이용하여 XML 문서에서 필요한 정보를 찾는 역할을 수행
- 참고 : TCP School - XSLT 개요
- XSLT는 XML 문서를 XHTML 문서나 또 다른 XML 타입의 문서로 변환하기 위해 사용하는 언어
- XSL의 요소
- 기본 요소
-
xsl:stylesheet
- XSLT의 최상위 요소
-
xsl:output
- XSLT를 통해 변환된 결과가 어떠한 문서인지를 표시(XML, HTML, TEXT)
- Indent 속성…… 요소 사이의 공백 표시/제거
-
xsl:template
- XML 문서의 어느 부분을 어떻게 변환할 것인지 결정한다.
- match 속성을 이용하여 문맥 노드의 위치를 XPath 표현식으로 지정한다.
-
xsl:apply-templates
- 문맥 노드의 하위에 있는 자식 요소의 처리를 지시한다.
- select 속성을 이용하여 특정 노드를 선택할 수 있다.
-
xsl:value-of
- 요소나 속성의 내용을 문자열 형식으로 출력한다.
- select 속성을 이용하여 특정 노드를 선택할 수 있다.
-
- 제어 요소
-
xsl:if
- test 속성의 조건이 참일 경우의 처리를 지시한다.
-
xsl:choose
,xsl:when
,xsl:otherwise
- test 속성의 조건이 참일 경우와 거짓일 경우의 처리를 지시한다.
-
xsl:for-each
- select 속성을 통해 선택한 노드를 반복적으로 처리한다.
-
xsl:sort
- xml 문서의 내용을 순차적으로 정렬한다.
- 나 의 자식 요소로 사용할 수 있다.
- order 속성으로 차순(ascending|descending)을 지정
- data-type 속성으로 숫자/문자 여부(number|text)를 지정
-
- XML 문서 생성 요소
-
xsl:element
- 결과 트리를 출력할 때 새로운 요소를 생성한다.
-
xsl:attribute
- 결과 트리에 출력되는 요소의 속성값을 동적으로 할당한다.
-
- 기본 요소
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:html="http://www.w3.org/1999/xhtml">
-
xmlns(xml name space) : XML 네임스페이스의 선언
- xsl은 XSL/Transform을 네임스페이스로, html은 xhtml을 네임스페이스로 지정
<xsl:output method="xml" indent="yes"/>
-
<xsl:output>
: 변환 결과(xml) 선언
<xsl:template match="/">
<html:html>
...
</html:html>
</xsl:template>
-
<xsl:template>
: 템플릿(template)은 특정 노드가 일치할 때 해당 노드에 적용할 규칙들을 포함-
/
는 문서 전체를 지칭
-
-
<html:html>
: html 규약에 따른 html
<html:body>
<xsl:apply-templates/>
</html:body>
-
<xsl:apply-templates/>
- 특정 노드나 특정 노드의 자식 노드에 템플릿을 적용할 때 사용
- 그 아래를 처리해 달라고 요청
<xsl:template match="항목명">
<html:font style="color:red;font-weight:bold;font-size:18pt;">
<html:p style="text-align:center;">
<xsl:value-of select="."/>
</html:p>
</html:font>
<html:br/><html:br/>
</xsl:template>
-
<xsl:value-of/>
: 내용을 문자열로 출력
- 사진이 포함된 관심 주제에 대한 XML 문서 2개와 XSL 문서 1개(XML 문서 둘 다에 적용)를 만들고 FTP로 서버에 올린 뒤 카톡방에 링크 올리기
- XML을 XSL을 통해 어떻게 구조화할 것인가?
- 개별 요소를 상위 개념을 통해 구조화
- 기술적으로는 XSL을 통해 구조화
-
Oxygen XML Editor
- The Oxygen XML Editor (styled ) is a multi-platform XML editor, XSLT/XQuery debugger and profiler with Unicode support.
- 유료 프로그램 (연구소 라이센스 구매 완료)
-
Xpath
- XML 문서 내의 특정 부분(element, attribute)을 찾아가기 위해 사용되는 경로 표기 언어
- 1999년 11월 W3C 권고안으로 XPath 1.0 발표
- XPath의 용도
- 스타일 시트
- 스타일을 적용할 요소를 찾아가는 경로 표시자로 사용
-
xsl:template
요소의match
속성 혹은xsl:apply-templates
,xsl:value-of
요소의select
속성에 사용
- 데이터베이스
- 데이터상에서 검색 대상 요소를 찾아내는 경로 표시자로 사용
- XML Data Type Method에서 사용
- 스타일 시트
-
노드(node)
- XML 문서를, 루트(root)라는 하나의 개체에서 시작하여 여러 개의 연결된 개체로 뻗어 나간 나무(tree) 형태의 자료로 이해하고, 서로 연결된 각각의 구성 요소를 노드(node)라고 명명
- 위키백과의 각각의 항목이 모두 노드
- 백과사전의 편찬은 지식의 노드를 구축하는 작업
- XML 문서상에서 명시적으로 확인되는 노드는 요소(element)와 속성(attribute)이지만, XPath에서는 정교하고 유연한 조작을 위해 다음을 모두 노드로 간주
- 루트(root), 요소(element), 속성(attribute), 텍스트(text), 이름공간(namespace), 프로세싱 명령문(processing instruction), 주석(comment)
- 노드 집합(node collection) : XML 문서상의 모든 노드 중에서 특정 조건에 부합하는 노드들의 집합
-
루트 노드(root node)
- XML 문서 자체를 지시하는 가상적인 최상위 노드
- 문서 루트(document root)라고도 하며, ("/")로 표기
-
문맥 노드(context node)
- 템플릿(template)의 적용의 시작점이 되는 노드
- XML 문서를, 루트(root)라는 하나의 개체에서 시작하여 여러 개의 연결된 개체로 뻗어 나간 나무(tree) 형태의 자료로 이해하고, 서로 연결된 각각의 구성 요소를 노드(node)라고 명명
-
위치 경로 : 문맥 노드의 위치를 지정하는 방법
-
/
: 루트 노드를 선택 -
/tag
- 루트 노드의 자식인 모든 요소를 선택
- 문맥 노드가 루트 노드에서 요소로 이동
-
tag
- 문맥 노드의 자식인 모든 요소를 선택
- 문맥 노드가 상위 노드에서 요소로 이동
-
/tag/stag/sstag
- 루트 노드의 자식 요소를 찾은 후
- 요소의 자식 요소를 찾은 후
- 요소의 자식 요소를 선택
- 문맥 노드는 최종적으로 선택된 요소로 이동
-
@attr
: 문맥 노드의 attr 속성을 선택 -
.
: 문맥 노드 자체를 선택 -
..
: 문맥 노드의 상위 노드를 선택
-
-
경로 연산자
- 재귀적 내림 연산자(Recursive Descent Operator) "
//
"- 찾고자 하는 노드의 위치와 상관없이 노드 이름을 찾아 경로 이동
-
//인명
: 문서 내의 모든 <인명> 요소를 선택 -
//@id
: 문서 내의 모든 id 속성을 선택
- OR 연산자 "
|
"- 어떤 노드가 하나 이상의 패턴과 일치할 경우 템플릿을 활성화
-
인명 | 지명
: 노드 이름이 <인명> 또는 <지명>인 경우의 처리 지시
- 재귀적 내림 연산자(Recursive Descent Operator) "
-
노드 선택 필터 "
[]
"- 특정 조건을 만족하는 노드의 선택
- 필터는 문맥 노드의 위치에 영향을 주지 않는다.
- 예시
-
분야[소분야]
- 문맥 노드의 자식 중 <소분야> 자식 요소를 가진 모든 <분야> 요소 선택
- 문맥 노드가 <소분야> 요소가 아니라 <분야> 요소까지만 이동
-
인명[@id]
- 문맥 노드의 자식 중 id 속성을 가진 모든 <인명> 요소만 선택
-
분야[소분야= 'A']
- 문맥 노드의 자식 중 <소분야> 요소의 값이 "A"인 자식 노드를 가진 모든 <분야> 요소 선택
-
유형[. = 'B']
- 문맥 노드의 자식 중 값이 'B'인 모든 <유형> 요소
-
//명단[인명/@id = 'C']
- id 속성 값이 'C'인 <인물> 요소를 자식으로 가진 모든 <명단> 요소
-
- 응용
/프로젝트[@code = 'D']/명단/인명[@id = 'C']
- 필터 연산자
- 필터 조건문에 사용하는 연산자
-
비교 연산자
-
=
: 같다 -
!=
: 같지 않다 -
<
: 작다 -
<=
: 작거나 같다 -
>
: 크다 -
>=
: 크거나 같다
-
-
관계 연산자
-
and
: 두 조건을 모두 만족 -
or
: 적어도 하나를 만족
-
- 노드 함수
-
node()
: 노드 그 자체를 반환 -
text()
: 노드의 PCDATA 내용을 반환
-
- 위치 함수
-
count()
: 노드 집합에서 노드의 개수를 반환 -
position()
- 노드 집합 내의 노드의 위치를 문서 순서대로 반환
- "
tag[position() = 2]
"는 "tag[2]
"와 동일
-
last()
: 노드 집합에서 마지막 노드의 위치를 반환
-
- 수치 함수
-
number()
: PCDATA를 수치 값으로 변환하여 반환 -
sum()
: 노드 집합 내의 모든 수치 값을 합하여 반환
-
- 부울 함수
-
boolean()
- XPath expression을 진위를 판단하여 true 혹은 false를 반환
- 수치 값 : 0인 경우 → false, 0이 아닌 경우 → true
- 문자열 : 1개 이상의 문자로 구성된 경우 → true
- 노드 집합 : empty인 경우 → false
-
- 문자열 함수
-
string()
: 임의의 값을 문자열로 변환하여 반환 -
string-length()
: 공백을 포함한 문자열의 길이를 반환 -
concat()
: 2개 이상의 문자열을 합하여 하나의 문자열로 반환 -
contains()
: 두 번째 문자열의 내용이 첫 번째 문자열에 포함되었는지 진위를 반환 -
substring()
,substring-after()
,substring-before()
: 문자열의 일부를 반환 -
translate()
: 두 번째 문자열에 속하는 문자를 세 번째 문자열에 속하는 문자로 변환
-
- 데이터베이스 실습 예시
- sql 코드
use hanyang2022 select label, infoUrl from hanyang2022Data where label like '%명성황후%'
- MSSQL 실행 결과
- sql 코드
-
Xpath.sql
- sql 코드
/* § XPath란? • XML 문서 내의 특정 부분(element, attribute)을 찾아가기 위해 사용하는 경로 표기 언어 § XPath의 용도 • 스타일 쉬트 ☞ 스타일을 적용할 요소를 찾아가는 경로 표시자로 사용 ※ xsl:template 요소의 match 속성 혹은 xsl:apply-templates, xsl:value-of 요소의 select 속성에 사용. • 데이터베이스 ☞ 데이터 상에서 검색 대상 요소를 찾아내는 경로 표시자로 사용 ※ XML data type method에서 사용 */ declare @xmltxt xml set @xmltxt =N' <항목 ID="10001332"> <항목명> 수내동 가옥 </항목명> <메타데이터> <분야>생활·민속</분야> <유형>건물</유형> </메타데이터> <본문> <지명>분당</지명> 신도시 개발 전 이곳에 세거하였던 <인명 유형="성씨">한산이씨(韓山李氏)</인명>의 살림집 중 한 채로 <인명>이택구</인명>씨가 거주하였던 집이다. <사진 url="house_a.jpg">수내동 가옥</사진> <사진 url="house_b.jpg">수내동 가옥</사진> </본문> </항목> ' /* Xpath 노드 사용 예시 */ --select @xmltxt.query('/항목/메타데이터/유형') --select @xmltxt.query('//인명') --select @xmltxt.value('(//인명)[1]', 'nvarchar(40)') /* Xpath 함수 사용 예시 */ --select @xmltxt.query('count(/항목/본문/사진)') --select @xmltxt.value('(/항목/본문/사진/@url)[1]', 'nvarchar(40)') --select @xmltxt.value('(/항목/본문/사진/@url)[2]', 'nvarchar(40)') /* Xpath 필터 사용 예시 */ --select @xmltxt.query('/항목/본문/사진[.="수내동 가옥"]') --select @xmltxt.query('/항목/본문/사진[./@url="house_a.jpg"]') --select @xmltxt.query('//인명[./@유형="성씨"]')
-
declare
- 변수 선언
declare @변수명 데이터타입
-
@
: variable 앞에 무조건 붙임
-
set
- 변수 할당
set @변수명 =N'값'
-
N
: 유니코드 문자열 앞에 무조건 붙임
-
.query()
- xml 데이터 형식 변수 또는 열에 저장된 XML 인스턴스에 대해 쿼리를 지정하는 데 사용
select @변수명.query('경로')
-
//
- 재귀적 내림 연산자
- 찾고자 하는 노드의 위치와 상관없이 노드 이름을 찾아 경로 이동
-
.value()
- 값을 반환
-
예) select @xmltxt.value('(//인명)[1]', 'nvarchar(40)')
- 인명의 첫 번째(
[1]
) 값만 반환 (유니코드 40자 이내로)
- 인명의 첫 번째(
-
@url
: url이라는 이름의 attribute 지정
-
[]
- 노드 선택 필터
- 특정 조건을 만족하는 노드의 선택
- 예시
-
select @xmltxt.query('/항목/본문/사진[.="수내동 가옥"]')
: xmltxt라는 xml 텍스트 내의 항목/본문/사진 경로에서, 그 값이 "수내동 가옥"인 것을 찾으라. -
select @xmltxt.query('/항목/본문/사진[./@url="house_a.jpg"]')
: 사진 태그의 url attribute가 "house_a.jpg"인 것을 찾으라. -
select @xmltxt.query('//인명[./@유형="성씨"]')
: 경로 무관하게 인명 태그로 가서 유형 attribute가 "성씨"인 것을 찾으라.
-
-
- MSSQL 실행 화면
- 코멘트를 제거하며 시험해 보자.
- 파란색은 명령어, 빨간색은 데이터
- 코멘트를 제거하며 시험해 보자.
- sql 코드
- 추후 XML을 데이터베이스에 올리고, 조작하는 실습을 위주로 할 것
- 출처 : 김현, “조선 지성의 꽃, 퇴계와 율곡의 향기”, 전북대학교 건지리버럴아츠 특강 발표자료, 2022. 11 2. 전북대학교
- 퇴계(退溪) 이황(李滉, 1501-1570)과 율곡(栗谷) 이이(李珥, 1536-1584), 그들이 존경받는 이유
- 퇴계와 율곡은 그들의 학문 활동을 통해 모든 인간이 ‘예의·염치’를 실현할 수 있는 능력을 지녔고, 그 능력을 발휘해야 하는 의무를 지닌 존재임을 밝혔다. 이들의 학설은 유교의 이상을 건국 이념으로 삼았던 조선 왕조의 통치 체제를 든든하게 받쳐 주는 이론적 지주가 되었고, 그 가치관은 가난한 시골 마을의 풍속에까지 영향을 끼쳤다.
-
사단칠정설(四端七情說)
- 퇴계
- “四端之發, 純理, 故無不善; 七情之發, 兼氣, 故有善惡.” (李滉, 「與奇明彦」, 『退溪集』 권16 書, 1b)
- 인간의 감정 가운데 기쁨, 노여움, 슬픔, 두려움, 좋아함, 싫어함, 욕망과 같은 자연 감정[七情]은 그 발출 원인이 기(氣)에 있지만, 불쌍히 여기는 마음, 부끄럽게 여기는 마음, 양보하는 마음, 옳고 그름을 가리는 마음 등 인의예지(仁義禮智)의 도덕 원리에 합치하는 사단(四端)은 이(理)의 발동에 의해 일어나는 것이다.
- “四端之發, 純理, 故無不善; 七情之發, 兼氣, 故有善惡.” (李滉, 「與奇明彦」, 『退溪集』 권16 書, 1b)
- 율곡
- “四端只是善情之別名, 言七情則四端在其中矣.” (李珥, 「答成浩原」, 『栗谷全書』 권10 書二, 7a)
- 인간의 감정은 도덕적인 것, 비도덕적인 것의 구분 없이 모두 다 기 (氣)의 발동에서 발생하는 것이다. 단, 이때 기의 발동이 이(理)가 정하는 원리에 그대로 합치한 것을 일컬어 ‘사단’이라고 칭하고, 그 합치여부를 따짐이 없이 발생한 감정 전체를 일컬을 경우에는 ‘칠정’이라고 한다.
- “四端只是善情之別名, 言七情則四端在其中矣.” (李珥, 「答成浩原」, 『栗谷全書』 권10 書二, 7a)
- 퇴계
- 퇴계의 이기호발설(理氣互發說)
- 惻隱․羞惡․辭讓․是非, 何從而發乎? 發於仁義禮智之性焉爾. 喜․怒․哀․懼․愛․惡․欲, 何從而發乎? 外物觸其形而動於中, 緣境而出焉爾. (李滉, 「答奇明彦非四端七情分理氣辯」, 『退溪集』 권16 書, 9b)
- “도덕적인 감정인 사단(四端)은 인의예지의 본성으로부터 직접 발현되며, 몰가치적인 칠정(七情)은 외물이 형기에 감촉되어 발현된다.”
- 도덕적인 감정은 그 발현의 주체는 이(理)라고 하는 점, 바꿔 말해 이(理)가 감정발현의 주체가 되어 도덕적인 감정을 발현할 수 있음을 강조한 것.
- 惻隱․羞惡․辭讓․是非, 何從而發乎? 發於仁義禮智之性焉爾. 喜․怒․哀․懼․愛․惡․欲, 何從而發乎? 外物觸其形而動於中, 緣境而出焉爾. (李滉, 「答奇明彦非四端七情分理氣辯」, 『退溪集』 권16 書, 9b)
- 율곡의 기발이승일도설(氣發理乘一途說)
- 見孺子入井, 然後乃發惻隱之心. 見之而惻隱者氣也, 此所謂氣發也; 惻隱之本則仁也, 此所謂理乘之也. 非特人心爲然, 天地之化, 無非氣化而理乘之也. (李珥, 「答成浩原」, 『栗谷全書』 권10 書2, 5b)
- “어린아이가 우물에 빠지는 것을 보게 되면 측은히 여기는 마음을 발출하게 된다. 보는 순간 측은한 마음이 생기게 되는 기의 작용이다. 그런데 그 때 그것을 측은히 여기는 마음의 근원은 인(仁)이니 이것을 일컬어 이(理)가 거기(기의 발현)에 올라탔다고 하는 것이다.”
- 이(理)와 기(氣)의 역할을 구분하는 이기이원론의 틀 속에서 인간의 심리현상을 합리적으로 설명. 도덕의 실현을 위한 현실적 토대의 중요성[이(理)의 가치 실현을 위한 토대로서의 기(氣)의 중요성]을 강조.
- 見孺子入井, 然後乃發惻隱之心. 見之而惻隱者氣也, 此所謂氣發也; 惻隱之本則仁也, 此所謂理乘之也. 非特人心爲然, 天地之化, 無非氣化而理乘之也. (李珥, 「答成浩原」, 『栗谷全書』 권10 書2, 5b)
- 퇴계와 율곡의 학문이 남긴 문제점
- 퇴계의 호발설이 인간의 자발적인 도덕성을 지나치게 강조한 면이 있는 반면, 율곡의 기발이승일도설은 인간들이 때로 부도덕할 수 있다는 현실을 인정하면서 그것을 개선할 수 있는 가능성을 제시했다는 점이 장점이다.
- 하지만 율곡의 이론은 기질(氣質)의 환경이 극도로 나쁜 경우[기질이 탁박해진 경우] 자발적인 도덕의 실현을 기대할 수 없게 된다는 뜻으로 해석될 수도 있다.
- 농암(農巖) 김창협(金昌協, 1651~1708)의 비판
- 栗谷人心道心說, 善者淸氣之發, 惡者濁氣之發 ..... 今若以善惡之情, 一歸之於氣之淸濁, 則恐無以見理之實體而性之爲善也. (金昌協, 「論退栗兩先生四端七情說」, 『農巖續集』 卷下 說, 69a-70a)
- “율곡(栗谷) 선(善)은 맑은 기[淸氣]에서 발현하고, 악(惡)은 탁한 기(濁氣)에서 발현한다고 하였다..... (그러나) 인간의 감정[情]이 선하고 악하게 되는 원인을 기(氣)의 청탁(淸濁)에만 돌린다면 이(理)의 실체와 성(性)의 선함을 드러낼 길이 없게 될 것이다.”
- 栗谷人心道心說, 善者淸氣之發, 惡者濁氣之發 ..... 今若以善惡之情, 一歸之於氣之淸濁, 則恐無以見理之實體而性之爲善也. (金昌協, 「論退栗兩先生四端七情說」, 『農巖續集』 卷下 說, 69a-70a)
- 퇴계의 호발설이 인간의 자발적인 도덕성을 지나치게 강조한 면이 있는 반면, 율곡의 기발이승일도설은 인간들이 때로 부도덕할 수 있다는 현실을 인정하면서 그것을 개선할 수 있는 가능성을 제시했다는 점이 장점이다.
- 녹문(鹿門) 임성주(任聖周, 1711~1788)의 철학
- 퇴계와 율곡 이후 조선의 성리학자들은 퇴계와 율곡이 남긴 업적과 정신을 계승하면서, 그들이 못 다한 숙제를 마무리 지으려 치열한 노력을 기울였다. 녹문(鹿門) 임성주(任聖周, 1711~1788)의 철학은 그 발전적 전개의 한 단면을 보여 준다.
- 녹문(鹿門)의 기일원론(氣一元論)
- 人性之善, 乃氣質之善耳, 非氣質外別有善底性也. (任聖周, 「鹿廬雜識」, 『鹿門集』, 권19 雜著 5a)
- “인간의 성품이 선한 것은 인간의 기질이 선하기 때문이다. 기질 밖에 따로 선한 본성이 있는 것이 아니다.”
- 녹문은 기(氣)의 차별성보다는 그 본래의 순수성을 강조하고, 기로 인해 구체화된 인간의 마음[心]은 그 속에 품고 있는 원리[理]와 다름 없이 순수하다고 하는 이론을 강력하게 제기.
- 녹문이 생각한 심(心)은 순수한 이(理)와 청탁(淸濁)이 섞여 있는 기(氣)가 합쳐진 2차적 존재가 아니라 이와 기를 구별할 필요가 없이 순수하면서 역동적인 하나의 실체.
- 人性之善, 乃氣質之善耳, 非氣質外別有善底性也. (任聖周, 「鹿廬雜識」, 『鹿門集』, 권19 雜著 5a)
- 임성주의 철학의 의의
- 인간의 마음은 그 자체로 선하고, 환경의 제약 없이 선을 실천할 수 있다고 하는 심선설(心善設)의 완성
- 중국 유학
- 자세한 건 PPT 참고!!
- 중국의 역대 왕조
- 하(夏) - 은(殷) - 주(周) - 춘추전국(春秋戰國) - 진(秦) - 한(漢) - 위진남북조(魏晋南北朝) - 수(隋) - 당(唐) - 송(宋) - 원(元) - 명(明) - 청(淸) - 중화민국(中華民國) - 중화인민공화국(中華人民共和國)
- 선진유학(先秦儒學)
- 공자, 맹자, 순자
- 한대유학(漢代儒學)
- 동중서(董仲舒)
- 송대(宋代) 성리학(性理學)
- 이기이원론(理氣二元論)
-
XML 데이터베이스
- 일반적인 데이터베이스는 그것을 구성하는 정보의 조각(데이터베이스의 행과 열)에 문자나 숫자만을 담을 수 있는 데 반해, XML 지원 데이터베이스는 XML 언어로 쓰여진 데이터를 담을 수 있는 기능을 지원
- 일반적인 DBMS 기능 + XML 데이터 타입 지원 + XML 데이터 조작 메소드 제공
-
XML-Enabled Database
- XML 데이터 포맷과 데이터 모델(보통 관계형 데이터베이스) 간 매핑(mapping), 변환을 위한 확장 기능을 제공하는 데이터베이스
- XML 데이터 조작 메소드
-
메소드(method)
- 특정 유형의 개체에 대해 동작하는 서브 프로그램
- a piece of code that is exclusively associated either with a class or with an object
-
메소드(method)
XMLdb_practice1.sql
-
select * from common.dbo.남한산성_xml
- 아래 xmltxt를 눌러 내용을 확인해 볼 것
- 메소드 사용 : xmltxt의 인명, 지명, 집필자 검색
select xmltxt.query('//인명') from common.dbo.남한산성_xml select xmltxt.query('//지명') from common.dbo.남한산성_xml select xmltxt.query('/항목/메타데이터/집필자') from common.dbo.남한산성_xml
-
select * from common.dbo.paintings
- 아래 xmltxt를 눌러 내용을 확인해 볼 것
- 노드의 선택
select xmltxt.query('/') from common.dbo.paintings where id='w01' --id가 01인 최상위 노드 select xmltxt.query('/개체/속성/작가') from common.dbo.paintings where id='w01' select xmltxt.query('/개체/표제'), xmltxt.query('/개체/속성/작가') from common.dbo.paintings where id='w05' select xmltxt.value('(/개체/속성/@틀)[1]', 'nvarchar(max)') from common.dbo.paintings where id='w01' select xmltxt.value('(/개체/표제/이름)[1]', 'nvarchar(max)') as 작품명, xmltxt.value('(/개체/속성/작가)[1]', 'nvarchar(max)') as 작가 from common.dbo.paintings
- 재귀적 내림 연산자
//
select xmltxt.query('//인명') from common.dbo.paintings where id='w05' select id, xmltxt.value('(/개체/표제/이름)[1]', 'nvarchar(max)') as 작품명, xmltxt.value('(/개체/속성/작가)[1]', 'nvarchar(max)') as 작가, xmltxt.query('//인명') as 출현인명, xmltxt.query('//지명') as 출현지명 from common.dbo.paintings
- 필터
[]
select xmltxt.query('/개체/설명/문단[./지명]') from common.dbo.paintings --문단 안의 지명 데이터 select xmltxt.query('/개체/설명/문단[./지명="황룡사"]') from common.dbo.paintings --문단 안의 지명이 황룡사인 데이터 select xmltxt.query('/개체/표제/이름[./@표기="한자"]') from common.dbo.paintings --표기는 attribute이므로 @를 사용 select id, xmltxt.value('(/개체/표제/이름)[1]', 'nvarchar(max)') as 작품명, xmltxt.value('(/개체/속성/작가)[1]', 'nvarchar(max)') as 작가, xmltxt.value('(/개체/표제/이름[./@표기="국문"])[1]', 'nvarchar(max)') as 국문, xmltxt.value('(/개체/표제/이름[./@표기="한자"])[1]', 'nvarchar(max)') as 한자 from common.dbo.paintings
- XPath 함수
---count : 개수 세기 select xmltxt.query('count(/개체/설명/문단/인명)') from common.dbo.paintings where id='w05' ---node() : 그 밑에 있는 임의의 노드 전체 select xmltxt.query('/개체/표제/node()') from common.dbo.paintings where id='w03' ---text() : 텍스트 데이터 select xmltxt.query('/개체/설명/문단/text()') from common.dbo.paintings where id='w03' ---position() : 위치 지정 select xmltxt.query('(//인명)[position()=1]') from common.dbo.paintings where id='w05' --id w05의 인명 3개 중 1번째 데이터 ---last() : 마지막 위치 설정 select xmltxt.query('(//인명)[last()]') from common.dbo.paintings where id='w05'
- 교육 목표
- XML 문서를 서버 데이터베이스에 올리는 방법을 교육
- 인문학자에게 필요한 것은 프로세스에 대한 코딩(C, Python 등)이 아닌 데이터에 대한 코딩(XML, SQL, Ontology)
- XML 문서를 서버 데이터베이스에 올리는 방법을 교육
-
디지털성남문화대전
- 개요
- 한국향토문화전자대전 사업의 일환으로 구축
- 성남시의 역사와 문화유산을 포함한 정치, 경제, 사회의 변화, 발전상 등에 관한 정보를 집대성한 온라인 지식백과사전
- XML로 구축
- 개요
- 실습 파일
- 권한 설정
- 개체 탐색기 - 보안 - 로그인 - 본인 계정(
s_id
) 우클릭 - 속성 - 서버 역할 - bulkadmin과 dbcreator 권한이 부여(체크)되어 있어야 함
- 개체 탐색기 - 보안 - 로그인 - 본인 계정(
- 데이터베이스 생성
- 데이터베이스 우클릭 - 새 데이터베이스(N) 클릭
- 데이터베이스 이름을 정하고(계정명과 동일하게 생성) 확인 버튼 클릭
- 데이터베이스 처음 크기를 5MB로 정하고, 5MB를 초과하면 1MB씩 늘리게 설정
- 동명의 데이터베이스가 이미 있다면 오류 메시지 반환
- 데이터베이스 사용 및 전체 테이블 보기
use 데이터베이스명 select * from sys.tables
- 실습 SQL 코드
/* upload XML file */ USE 데이터베이스명 -- DROP TABLE seongnam_bulk -- DROP TABLE seongnam_xml --seongnam_bulk 테이블 생성 (column 1개, 형식 xml) CREATE TABLE seongnam_bulk (xmltxt xml) --seongnam_bulk 보기 SELECT * FROM seongnam_bulk --SELECT 결과를 seongnam_bulk에 삽입 ---경로는 digerati 서버상의 위치 ---하나의 Binary Large Object(BLOB)로 처리 INSERT INTO seongnam_bulk ( xmltxt ) SELECT * FROM OPENROWSET( BULK 'e:\inetpub\wwwroot\DhLab\2022\201\workshop\성남문화대전\성남문화대전.xml', SINGLE_BLOB) AS x; --seongnam_bulk 보기 SELECT * FROM seongnam_bulk --이제 seongnam_bulk column의 내용물을 여러 column으로 나눠야 함 /* create XML DB table */ --seongnam_xml 테이블 생성 (column 2개, 형식 nvarchar, xml) CREATE TABLE seongnam_xml ( id nvarchar(40) NOT NULL, xmltxt xml NOT NULL, primary key(id) ) /* create trigger */ --TRIGGER는 table에 종속된 함수 ---INSERT를 실행하면 INSERT 대신 아래의 복잡한 INSERT를 실행하게 하는 설정 ---seongnam_bulk 테이블의 내용물을 seongnam_xml 테이블에 나눠 담기 위한 명령 CREATE TRIGGER seongnam_getid ON seongnam_xml INSTEAD OF INSERT AS INSERT INTO seongnam_xml(id, xmltxt) SELECT t.xmltxt.value('(/항목/@ID)[1]', 'nvarchar(40)') AS id, t.xmltxt AS xmltxt FROM inserted t /* insert xml record from bulk-uploaded file */ --항목을 찾아서 노드로 추출 ---node.query('.') : node 그 자신을 보기 ---CROSS APPLY : INNER JOIN과 동일 SELECT node.query('.') FROM seongnam_bulk CROSS APPLY xmltxt.nodes('/향토문화백과/항목') AS R(node) --추출한 노드를 seongnam_xml 테이블에 삽입 INSERT INTO seongnam_xml(xmltxt) SELECT node.query('.') FROM seongnam_bulk CROSS APPLY xmltxt.nodes('/향토문화백과/항목') AS R(node) --seongnam_xml 보기 SELECT * FROM seongnam_xml
-
C:\Inetpub\wwwroot
- '웹서버'가 '기본 저장소'로 지정해 놓은 약속된 장소
- 즉, 홈 디렉토리
- 트리거 설정 확인
-
- 컴퓨터에게 인문학을 가르치는 것이 디지털인문학
- 컴퓨터로부터 인문학을 배울 수는 없다.
- 컴퓨터는 가르쳐 주는 만큼만 한다.
- 코딩(Coding)
- Encoding of Process
- 일반적으로 생각하는 코딩
- 인문학자가 이에 대해 무지해서는 안 됨
- Encoding of Data(=Contents)
- 정말 인문학자에게 중요한 코딩
- 등한시되는 경향이 있음
- 인문정보학 작업에 대한 코더의 한마디
- “이 데이터를 손으로 만드셨어요?”
- 인문정보학 작업에 대한 코더의 한마디
- Encoding of Process
- 인문정보학 석사 과정의 핵심
- XML, DB, 시각화 관련 툴
- 디자인은 디지털인문학에 있어 중요하다.
- 결국 사람들과 소통할 수 있어야 하기 때문
- 실습 파일
- 실습 SQL 코드
USE s_haein /* browse xml data */ SELECT * FROM seongnam_xml --'대표항목명'의 첫 번째 것을 80자로 보기 select xmltxt.value('(/항목/항목명/대표항목명)[1]', 'nchar(80)') from seongnam_xml --위치 무관(//)하게 '인명'만 보기 select xmltxt.query('//인명') from seongnam_xml --대표명칭, 한자명칭, 분야, 유형, 소재지를 xml 형식으로, 각각의 열로 만들어 보기 select xmltxt.query('/항목/항목명/대표항목명'), xmltxt.query('/항목/항목명/한자항목명'), xmltxt.query('/항목/메타데이터/대표분야'), xmltxt.query('/항목/메타데이터/대표유형'), xmltxt.query('/항목/메타데이터/표준지역') from seongnam_xml --위의 쿼리문과 상동 (아래 view문의, value 메소드를 사용한 select와 비교해 보자.) select xmltxt.query('/항목/항목명/대표항목명') as 대표명칭, xmltxt.query('/항목/항목명/한자항목명') as 한자명칭, xmltxt.query('/항목/메타데이터/대표분야') as 분야, xmltxt.query('/항목/메타데이터/대표유형') as 유형, xmltxt.query('/항목/메타데이터/표준지역') as 소재지 from seongnam_xml /* create metadata view */ --drop view seongnam_meta --뷰(view) 만들기 create view seongnam_meta as ---대표명칭, 한자명칭, 분야, 유형, 소재지를 xml 형식이 아닌 텍스트 데이터로, 각각의 열로 만들어 보기 select id, xmltxt.value('(/항목/항목명/대표항목명)[1]', 'nchar(40)' ) as 대표명칭, xmltxt.value('(/항목/항목명/한자항목명)[1]', 'nchar(40)') as 한자명칭, xmltxt.value('(/항목/메타데이터/대표분야)[1]', 'nchar(80)') as 분야, xmltxt.value('(/항목/메타데이터/대표유형)[1]', 'nchar(40)') as 유형, xmltxt.value('(/항목/메타데이터/표준지역)[1]', 'nchar(80)') as 소재지 from seongnam_xml --뷰 전체 내용 보기 select * from seongnam_meta --뷰에서 유형이 '유적/건물'인 데이터만 보기 select * from seongnam_meta where 유형='유적/건물' --뷰에서 소재지가 '금토동'인 데이터만 보기 select * from seongnam_meta where 소재지 like '%금토동%' /* insert new xml data */ --seongnam_xml 테이블의 xmltxt 컬럼에 값을 삽입하는 템플릿 ---N은 유니코드 깨짐 방지를 위해 삽입 INSERT INTO seongnam_xml(xmltxt) VALUES( N' ') --seongnam_xml 테이블의 xmltxt 컬럼에 '낙생습지.xml' 전체를 삽입 ---트리거는 이전 세팅으로 인해 자동으로 적용됨 INSERT INTO seongnam_xml(xmltxt) VALUES( N' <항목 ID="GC00100528" 레벨="6" 유형="일반항목"> <항목명> <대표항목명> <지명 검색="1" 검색어="낙생습지">낙생습지</지명> </대표항목명> <한글항목명>낙생습지</한글항목명> <한자항목명>樂生濕地</한자항목명> <영문항목명> <공식명칭 /> </영문항목명> <중국어항목명></중국어항목명> <중문항목명></중문항목명> </항목명> <메타데이터> <이칭별칭 /> <키워드 /> <대표분야>지리/자연 지리</대표분야> <대표유형>지명/자연 지명</대표유형> <표준지역>경기도 성남시 분당구 대장동</표준지역> <표준시대>현대/현대</표준시대> <분야>지리/자연 지리</분야> <유형>지명/자연 지명</유형> <지역>경기도 성남시 분당구 대장동<공간 식별자="성남:낙생습지" 연관="직접" /></지역> <시대>현대/현대</시대> <집필자>김성환</집필자> <의견 작업="템플릿작업" 작업일시="20041025" 작업자="김윤희" /> <의견 작업="윤문교열" 작업일시="20041205" 작업자="유경희" /> <의견 작업="윤문교열검수" 작업자="이재열;20041215" /> <의견 작업="교정" 작업일시="20041217" 작업자="염지영" /> <의견 작업="태깅1.2" 작업일시="20041226" 작업자="김도형" /> <의견 작업="태깅3.4" 작업일시="20050111" 작업자="김도형" /> <상세정보 유형="성격">습지</상세정보> <상세정보 유형="면적">25,000㎡</상세정보> <상세정보 유형="깊이">1m</상세정보> </메타데이터> <본문> <소표제>[정의]</소표제> <문단> <지명 검색="1" 검색어="대장동">경기도 성남시 분당구 대장동</지명> <지명 검색="1" 검색어="낙생저수지">낙생저수지</지명> 상류부에 형성된 습지.</문단> <소표제>[개설]</소표제> <문단> <지명 검색="1" 검색어="낙생습지">낙생습지</지명>는 <지명 검색="1" 검색어="대장동">경기도 성남시 분당구 대장동</지명>과 <지명>용인시 고기동</지명> 사이에 위치하는 <지명 검색="1" 검색어="낙생저수지">낙생저수지</지명>의 상류부에 형성된 습지이다.</문단> <소표제>[명칭유래]</소표제> <문단> <지명 검색="1" 검색어="낙생저수지">낙생저수지</지명>의 상류부에 형성된 습지이므로 <지명 검색="1" 검색어="낙생습지">낙생습지</지명>라고 한다. ‘낙생’이란 명칭은 병자호란 때 충청감사 <인명 검색="1" UCI="G002+AKS-KHF_13C815C138ADDCB1583X0" 검색어="정세규">정세규</인명>가 <지명 검색="1" 검색어="남한산성">남한산성</지명>에 포위된 <인명 검색="1" UCI="G002+AKS-KHF_12C778C870FFFFB1595X0" 검색어="인조">인조</인명>를 구하기 위하여 북상하였다가 <지명>판교</지명> 남쪽 <지명 검색="1" 검색어="험천">험천</지명>[<지명>머내</지명>]에서 <지명>청</지명>나라 군사에게 크게 패하자, 임금이 성을 나와 <지명>청</지명> <인명 검색="0">태종</인명>에게 항복하였으므로 ‘성이 떨어졌다’는 뜻의 ‘낙성(落城)’이 ‘낙생(樂生)’으로 변했다고 한다.</문단> <소표제>[자연환경]</소표제> <문단> <지명 검색="1" 검색어="낙생습지">낙생습지</지명>는 해발 고도 약 90m 상에 형성되어 있으며 평균 수심은 1m, 면적은 25,000㎡ 정도이다. <지명 검색="1" 검색어="탄천">탄천</지명>으로 합류하는 <지명 검색="1" 검색어="동막천|험천">동막천</지명>의 유역에 형성된 인공 습지로서 <지명 검색="1" 검색어="낙생저수지">낙생저수지</지명>의 축조에 따라 저수지의 상류 호숫가를 따라 습지가 형성되었다.</문단> <소표제>[현황]</소표제> <문단>주요 식생으로 갈대군락을 비롯하여 줄, 고마리, 소리쟁이, 쇠뜨기, 애기부들이 서식하고 있다. 인공제방 축조로 인하여 식생의 인위적 교란을 겪고 있는 <지명 검색="1" 검색어="탄천">탄천</지명> 유역의 다른 습지들에 비하면 자연 상태의 보전이 비교적 양호한 편이다.</문단> <참고문헌> <문헌> <서명 검색어="성남시사">『성남시사』</서명>(<출판사항>성남시사편찬위원회, 1993</출판사항>)</문헌> <문헌> <저자>김기빈</저자> 외, <서명 검색어="분당의 땅이름 이야기">『분당의 땅이름 이야기』</서명>(<출판사항>한국토지공사 토지박물관, 1999</출판사항>)</문헌> <문헌> <서명 검색어="성남시의 역사와 문화유적">『성남시의 역사와 문화유적』</서명>(<출판사항>한국토지공사 토지박물관, 성남시, 2001</출판사항>)</문헌> <문헌> <서명 검색어="성남시의 역사와 문화유산">『성남의 역사와 문화유산』</서명>(<출판사항>성남문화원, 2001</출판사항>)</문헌> <문헌> <서명 검색어="2002 전국내륙습지 자연환경 조사보고서">『2002 전국내륙습지 자연환경조사 보고서』</서명>-한강유역(<출판사항>환경부, 2003</출판사항>)</문헌> </참고문헌> </본문> </항목> ') select * from seongnam_xml --낙생습지 삽입 여부 확인 select * from seongnam_meta --낙생습지 삽입 여부 확인 --seongnam_xml 테이블에서 대표항목명이 '정일당 강씨 사당'인 데이터의 id, 항목명, xmltxt 보기 select id, xmltxt.value('(/항목/항목명/대표항목명)[1]', 'nvarchar(80)' ), xmltxt from seongnam_xml where xmltxt.value('(/항목/항목명/대표항목명)[1]', 'nvarchar(80)' )='정일당 강씨 사당' --seongnam_meta 뷰에서 대표명칭이 '정일당 강씨 사당'인 데이터의 id, 대표명칭, xmltxt를 두 테이블의 id값이 같은 것만 병합하여 보기 ---join : on 이하의 조건에 맞춰 두 테이블을 합쳐 줌 select seongnam_meta.id, 대표명칭, xmltxt from seongnam_meta join seongnam_xml on seongnam_meta.id = seongnam_xml.id where 대표명칭='정일당 강씨 사당' --위의 조건에서 대표명칭이 낙생습지인 것 보기 select seongnam_meta.id, 대표명칭, xmltxt from seongnam_meta join seongnam_xml on seongnam_meta.id = seongnam_xml.id where 대표명칭='낙생습지' /* create keyword index view: 인명 */ --seongnam_person 뷰 만들기 ---id, 인명을 포괄 CREATE VIEW seongnam_person AS SELECT id, node.value('.', 'nchar(80)' ) AS 인명 FROM seongnam_xml CROSS APPLY xmltxt.nodes('//인명') AS R(node) --seongnam_person 뷰 보기 SELECT * FROM seongnam_person --인명으로 묶어 인물당 언급 횟수 세기 SELECT 인명, count(*) as 빈도 FROM seongnam_person GROUP BY 인명 --seongnam_meta 테이블과 seongnam_person 테이블의 id 값이 같은 것끼리 묶어서 인명이 '정일당 강씨'인 데이터를 보기 select * from seongnam_person as sp join seongnam_meta as sm on sp.id = sm.id where 인명='정일당 강씨' /* create keyword index view: 지명 */ --seongnam_place 뷰 만들기 ---id, node의 value 포괄 CREATE VIEW seongnam_place AS SELECT id, node.value('.', 'nchar(80)' ) AS 지명 FROM seongnam_xml CROSS APPLY xmltxt.nodes('//지명') AS R(node) --seongnam_place 뷰 보기 SELECT * FROM seongnam_place --지명으로 묶어 지명당 언급 횟수 세기 SELECT 지명, count(*) as 빈도 FROM seongnam_place GROUP BY 지명 --seongnam_meta 테이블과 seongnam_person 테이블의 id 값이 같은 것끼리 묶어서 지명이 '동막천', '청계산'인 것 중 '지명', seongnam_meta의 모든 데이터를 보기 select 지명, sm.* from seongnam_place as sp join seongnam_meta as sm on sp.id=sm.id where 지명 in ('동막천', '청계산')
- 디지털 전환이란?
- 전산화(Digitization) : 객체의 물리적인 형상이나 속성이 디지털 신호로 표현될 수 있도록 하는 것
- 디지털화(Digitalization) : 전산화의 결과를 활용하여 해 오던 일의 프로세스를 효율화하는 것
- 디지털 전환(Digital transformation) : 디지털 기술에 의해 확장된 지평 위에서 프로세스 자체를 변화시키는 것. 아울러 그 새로운 프로세스가 작동하도록 옛것에 매이는 고정관념을 깨뜨리고 조직과 문화를 개선하는 것
- 2주간 프로젝트 진행
- 스키마는 동기 간 상의를 통해 결정
<콘텐츠 id=""> <타이틀> <이름> </이름> </타이틀> <메타데이터> <유형>드라마</유형> <상영>2000년 01월 01일 <제작자><인물 역할="극본">김똘똘</인물><인물 역할="연출">김똘이</인물></제작자> <방송사>KBS</방송사> </메타데이터> <내용> </내용> <멀티미디어> </멀티미디어> </콘텐츠>
- 2022-201:사극:콘텐츠:개국.xml
- 스키마는 동기 간 상의를 통해 결정
- 실습 파일
- 실습 SQL 코드
/* <참고 사항> - uploadXml.sql, manipulateXml.sql 실습 이후 진행! - 업로드할 파일은 성남문화대전2.xml 파일! */ /* upload XML file */ USE 사용자명 DROP TABLE seongnam_bulk --기존에 만든 테이블 날리기 -- DROP TABLE seongnam_xml delete seongnam_xml --껍데기만 남기고 데이터 지우기 --seongnam_bulk 테이블 생성 (column 1개, 형식 xml) CREATE TABLE seongnam_bulk (xmltxt xml) --seongnam_bulk 보기 SELECT * FROM seongnam_bulk --SELECT 결과를 seongnam_bulk에 삽입 ---경로는 digerati 서버상의 위치 ---하나의 Binary Large Object(BLOB)로 처리 INSERT INTO seongnam_bulk ( xmltxt ) SELECT * FROM OPENROWSET( BULK 'e:\inetpub\wwwroot\DhLab\2022\201\workshop\성남문화대전\성남문화대전2.xml', SINGLE_BLOB) AS x; --seongnam_bulk 보기 SELECT * FROM seongnam_bulk --이제 seongnam_bulk column의 내용물을 여러 column으로 나눠야 함 /* create XML DB table */ --seongnam_xml 테이블 생성 (column 2개, 형식 nvarchar, xml) CREATE TABLE seongnam_xml ( id nvarchar(40) NOT NULL, xmltxt xml NOT NULL, primary key(id) ) /* create trigger */ --TRIGGER는 table에 종속된 함수 ---INSERT를 실행하면 INSERT 대신 아래의 복잡한 INSERT를 실행하게 하는 설정 ---seongnam_bulk 테이블의 내용물을 seongnam_xml 테이블에 나눠 담기 위한 명령 CREATE TRIGGER seongnam_getid ON seongnam_xml INSTEAD OF INSERT AS INSERT INTO seongnam_xml(id, xmltxt) SELECT t.xmltxt.value('(/항목/@ID)[1]', 'nvarchar(40)') AS id, t.xmltxt AS xmltxt FROM inserted t /* insert xml record from bulk-uploaded file */ --항목을 찾아서 노드로 추출 ---node.query('.') : node 그 자신을 보기 ---CROSS APPLY : INNER JOIN과 동일 SELECT node.query('.') FROM seongnam_bulk CROSS APPLY xmltxt.nodes('/향토문화백과/항목') AS R(node) --추출한 노드를 seongnam_xml 테이블에 삽입 INSERT INTO seongnam_xml(xmltxt) SELECT node.query('.') FROM seongnam_bulk CROSS APPLY xmltxt.nodes('/향토문화백과/항목') AS R(node) --seongnam_xml 보기 SELECT * FROM seongnam_xml /* create keyword index view: 인명 */ --이전에 생성해 둔 seongnam_person view 날리기 drop view seongnam_person --seongnam_person 뷰 만들기 CREATE VIEW seongnam_person AS SELECT distinct id, node.value('.', 'nchar(80)' ) AS 인명, node.value('./@유형', 'nchar(80)' ) AS 유형, node.value('./@식별자', 'nchar(80)' ) AS 식별자 FROM seongnam_xml CROSS APPLY xmltxt.nodes('//인명') AS R(node) --seongnam_person 뷰 보기 SELECT * FROM seongnam_person --seongnam_person 뷰에서 식별자별로 빈도 계산하여 조회 SELECT 식별자, count(*) as 빈도 FROM seongnam_person GROUP BY 식별자
- DROP, DELETE
-
DELETE
- 데이터는 지워지지만 테이블 용량은 줄어 들지 않는다.
- 원하는 데이터만 지울 수 있다.
- 삭제 후 잘못 삭제한 것을 되돌릴 수 있다.
-
TRUNCATE
- 용량이 줄어 들고, 인덱스 등도 모두 삭제 된다.
- 테이블은 삭제하지는 않고, 데이터만 삭제한다.
- 한꺼번에 다 지워야 한다.
- 삭제 후 절대 되돌릴 수 없다.
-
DROP
- 데이블 전체를 삭제, 공간, 객체를 삭제한다.
- 삭제 후 절대 되돌릴 수 없다.
- 출처 : 예제로 배우는 ORACLE 11g
-
- PM이
사극.xlsx
파일을 바탕으로 100개 문서에 대한 위키 문서를 제작해 줄 것- 각자 원하는 만큼 문서를 맡아 Oxygen을 활용, XML 데이터를 제작하고, PM에게 전달하여 하나의 전체 파일로 만들기
- 나는 xsl 파일을 제작해서 사람들에게 배포
- 예시 :
공주의_남자.xml
-
사극2.xsl
적용
-
-
사극2.xsl
- 직접 작성한
사극.xsl
파일을 보강해 주신 것 - choose, when-otherwise 문
<xsl:template match="인명|인물"> <xsl:choose> <xsl:when test="@id"> <a> <xsl:attribute name="href">http://encykorea.aks.ac.kr/Contents/Item/<xsl:value-of select="@id"/></xsl:attribute> <xsl:attribute name="target">_blank</xsl:attribute> <span style="color:green"><u><xsl:value-of select="."/></u></span> </a> </xsl:when> <xsl:otherwise> <span style="color:green"><xsl:value-of select="."/></span> </xsl:otherwise> </xsl:choose> </xsl:template>
- 직접 작성한
- 과제로 제작한 7개 xml 파일 합본 제작
-
사극3.xsl
적용- 상위 태그
<데이터>
의 attribute로 '편찬자' 추가
- 상위 태그
2022-201사극콘텐츠_7개_취합.xml
-
-
uploadHistoryContents.sql
- 7개 합본이 아닌, 전체 콘텐츠 합본을 일괄로 데이터베이스에 올리기 위해 작성한 SQL 문
-
upload사극xml.sql
/* upload XML file */ USE Class2022 -- DROP TABLE 사극_bulk -- DROP TABLE 사극_xml CREATE TABLE 사극_bulk (xmltxt xml) SELECT * FROM 사극_bulk INSERT INTO 사극_bulk ( xmltxt ) SELECT * FROM OPENROWSET( BULK 'e:\inetpub\wwwroot\DhLab\2022\201\workshop\사극\xml\잔싱롱.xml', SINGLE_BLOB) AS x; /* 위에서, 수강생 각자가 작성하여 보낸 7-8개 합본을 하나의 전체 파일로 취합하지 않고 각각 INSERT함 */ SELECT * FROM 사극_bulk /* create XML DB table */ CREATE TABLE 사극_xml ( id nvarchar(40) NOT NULL, xmltxt xml NOT NULL, primary key(id) ) /* create trigger */ CREATE TRIGGER 사극_getid ON 사극_xml INSTEAD OF INSERT AS INSERT INTO 사극_xml(id, xmltxt) SELECT t.xmltxt.value('(/콘텐츠/@id)[1]', 'nvarchar(40)') AS id, t.xmltxt AS xmltxt FROM inserted t /* insert xml record from bulk-uploaded file */ SELECT node.query('.') FROM 사극_bulk CROSS APPLY xmltxt.nodes('/데이터/콘텐츠') AS R(node) INSERT INTO 사극_xml(xmltxt) SELECT node.query('.') FROM 사극_bulk CROSS APPLY xmltxt.nodes('/데이터/콘텐츠') AS R(node) SELECT * FROM 사극_xml
- 참고문헌 작성법
-
The Chicago Manual of Style
- 미국 시카고 대학(University of Chicago)에서 지정한 양식
- 인문학, 예술, 자연과학, 사회과학 등 대부분의 학문 분야에서 가장 보편적으로 사용되는 인용 양식
- Chicago는 각주를 사용하여, 특정 문헌의 어떤 부분에서 인용했는지까지 기술 가능
-
APA style
- 미국심리학회(American Psychological Association)에서 지정한 양식
- 주로 사회과학 분야에서 사용되는 인용 양식
- APA는 각주 없이 행간에
(김현, 2012)
처럼 밝혀 상세한 정보까지 기술하기 힘듦
-
The Chicago Manual of Style
- 온라인 데이터의 인용?
- 학자들마저 온라인 데이터를 인용하는 방법을 잘 모르는 경우가 대부분임
- 디지털 자료를 학술 자료로 인용할 수 있도록 만드는 것이 디지털 인문학
- 디지털 인문학 전공자라면 본인 사이트를 구축하고, 논문을 위한 아카이브를 구축해서 이로써 논문에서 제시한 정보를 제공할 수 있어야 함
- 온라인 저작의 오프라인 출처를 보고서, 서지 사항을 오프라인으로 밝히는 건 부도덕할 뿐 아니라 부정확하기까지 함
- 온라인 데이터 인용 방법
- 검색 일자가 아닌, 게시 일자를 밝히는 게 훨씬 중요함
- 검색 일자는 수시로 변하는 (언제 없어질지 모르는) 자료인 경우, 게시 일자를 알 수 없는 경우에 기술
- 수시로 변하는 자료라면 화면 하드카피(Hardcopy)를 같이 제공하는 방법이 있음
- Chicago 스타일 웹사이트 인용법 (출처 : Chicago 출처 생성기)
저자의 성, 저자의 이름 저자의 가운데 이름. “페이지명.” 웹사이트명, 출판일자, URL.
- 예)
Kim, Andrew. “How I Became a Full-Time Freelance Editor (and How You Can, Too).” Medium, August 28, 2020. https://medium.com/wordviceediting/how-i-became-a-full-time-freelance-editor-and-how-you-can-too-7e694d1792bc.
-
저자의 성, 저자의 이름 저자의 가운데 이름. “페이지명.” DB명 웹사이트명, 출판일자, URL.
- DB명도 명시해 주면 좋음
- APA 웹 자원 인용 양식
- 검색 일자가 아닌, 게시 일자를 밝히는 게 훨씬 중요함
-
사극1.sql
- 데이터 업로드
-
사극2.sql
- 뷰 생성
- 활용 예시
/* 활용 예시 */ -- 1) 드라마나 영화에는 어떤 역사인물 캐릭터가 많이 등장했나? select 캐릭터, count(*) as 횟수 from 사극_character group by 캐릭터 order by count(*) desc -- 2) 드라마나 영화에서 조선시대 왕 영조의 역할을 했던 배우들 select * from 사극_character where 캐릭터 in ('조선_영조', '조선_영조(아역)' ) -- 3) 조선시대 왕 정조가 등장한 영화, 드라마 select a.캐릭터, a.연기자, b.* from 사극_character as a join 사극_meta as b on a.id=b.id where a.캐릭터='조선_정조'
-
사극3.sql
- 노드 리스트 생성
- 데이터 클리닝(data cleaning)
- 공백 문자의 정체 파악
select id, remark, unicode(substring(remark, 1, 1)), unicode(substring(remark, 2, 1)), unicode(substring(remark, 3, 1)) from 사극Data
- 문제의 문자 처리: char(10), char(9), char(32)
update 사극Data set label = replace(id,'_', ' '), remark = replace(replace(remark, char(10), ''), char(9), '') update 사극Data set remark = ltrim(rtrim(remark)) select * from 사극Data
- Single Quotation 문자 char(39) 존재 여부 확인/수정
select remark from 사극Data where remark like '%'+char(39)+'%' update 사극Data set remark = replace(remark, char(39), char(34)) where remark like '%'+char(39)+'%' select remark from 사극Data where remark like '%'+char(34)+'%' update 사극Data set note=NULL where note='NULL' select * from 사극Data
- 공백 문자의 정체 파악