The 9 th Editor's Workshop: Application of information technology to scholarly open access journal publication Basic of DOI XML 허선 ( 한림대학교 )
Basic of DOI XML 허선 ( 한림대학교 ) 학습목표 DOI XML 구조를설명하고 XML 제작을할수있어야한다. 구체목표 1) DOI XML을정의내릴수있어야한다. 2) DOI XML을기탁하여편집인과발행인이얻는이익을 3가지이상나열할수있어야한다. 3) DOI XML의 tag를설명할수있어야한다. 4) DOI XML 기탁경비와절차를설명할수있어야한다. 머리말 Digital object identifier는이제학술지출판에서필수가되었다. 이런필수개념을우리나라과학분야학회지는 2007년부터받아들였다. 그전에는상업회사에서다루는학회지에서나다루던것이다. 2013년도에는국내과학학술지로 DOI를새기지않은것은거의찾기힘들정도로모두참여하고있다. 여러이유가있으나 2007년도부터대한의학학술지편집인협의회 ( 의편협 ) 에서 DOI XML을대한안과학회지를시작으로 CrossRef에기탁하기시작하였고, 이후한국과학기술정보연구원에서과학분야학술지를대상으로기탁을시작하였다. 가장최근에기폭제가된것은 2010년부터한국과학기술단체총연합회의학술지지원평가항목에 DOI 수록여부가들어가서부터이다. 이후대부분의학회지가 DOI를새기기시작하였다. 이미국내과학학술지는거의다다루고있는것을지금새삼주제로다루는이유는무엇일까? 2012년도 7월에는대한과학학술지편집인협의회주최국제학회에서도역시이 DOI를집중하여다루었다. 아직 DOI를새기지않은과학학술지가극히소수이나남아있고, DOI 가점점더확장하여 CrossMark, ORCID, FundRef 등다양한서비스를제공하기시작하고 2012년또는 2013년부터본격적으로서비스를시작하였다. 이런내용은우리가비록 DOI를약 7년뒤에따라가기시작하였지만나머지서비스는국제적인추세와발맞추어같이가야하기때문이다. 편집인이나발행인, 그리고학술지편집과출판을다루는여러관련회사역시이런내용을이해하고실무익히는것이필요하다. 기본내용을이해하는데오랜시간이걸리지않는다. 자료가모두영문이므로우리말로된교재만있다면더욱빠르게이해할것이다. 이번시간에는 DOI XML을이해하고, 자신학술지논문한편을가지고직접 XML 코딩 (coding) 작업을하여보아, 이런작업이결코어려운것이아니라는것을알수있다면다행이다. 물론이런작업을학회에서별도인력을고용하여수작업으로하기에는학회규모가상당히크지않으면불가능하다. 대개 1 2종을발행하고극히소수학회에서최대 6 종을발행하는우리나라학회의규모로볼때이일은이해한뒤에는전문회사에의뢰하는것이효율이높다. 더구나전문회사는 DOI XML만따로제작하는것이아니고 Journal article tag suite(jats) XML에서 DOI XML로변환하는것이므로크게시간걸리지않고경비도저렴하다. 무슨일이든지전문가가다루는것이훨씬정확하고효율적이기마 - 63 - - 65 -
련이다. 물론학회에서직접다루는것도가능하나인건비를고려하면외주가투입-산출효과가더낫다. 이번기회에 DOI XML 코딩을직접하면학술지가 DOI 새기는것이결코어렵지않다는것을알수있을것이다. 이런내용은 http://help.crossref.org/ 에있는데, 단지우리말로쉽게설명하려고노력하였다. DOI 정의 Digital Object Identifier (DOI) 란온라인상의디지털지적재산에부여하는알파벳-숫자기호체계이다. 디지털지적재산은책, 학술지, 그림, 음악등지적재산이되는것을말한다. DOI 기능은고유의기호를부여하여언제든지그대상을찾아갈수있도록하는것이다. 예를들면 HTML, XML, PDF, JPG와같은여러가지형태의내용이있어도하나의 DOI를통하여손쉽게자료에접근할수있다. URL 주소와다르게 DOI는시간이지나도변하지않는다. 단지자료가다른곳으로이동하더라도 DOI는변화가없고 DOI 통하여바뀐주소를적어주면된다. 이러면언제든지 DOI를통하여그자료를쉽게영구히웹에서접근할수있다. DOI 역사 1996년 Association of American Publishers에서이 DOI 개념을프로젝트로제안하였고, International Publishers Association 및 International Association of Scientific Technical and Medical Publishers와함께 International DOI Foundation을미국 Delaware에비영리기관으로 1997년 10월 10일등록하고,1998년부터 indexing 사업을시작하였다. 이제이런개념이세상에나온지 12년이지났다. DOI 등록대행기관은 10개가있는데그중에학술지와학술서적은 CrossRef에서다룬다. 대행기관중흥미로운것은중국이 China National Knowledge Infrastructure (CNKI). The Institute of Scientific and Technical Information of China (ISTIC) 2군데, 일본이 Japan Link Center (JaLC) 한군데라는점이다. 두나라는언어가로마자가아니므로별도로대행을맡는것이효율적이라고여기고워낙출판시장이크므로별도국가차원의대행기관이있다. 우리나라도출판시장규모로보면충분히국가차원대행기관을두어도충분하다. CrossRef는 2000년국제적인학술지발행출판사가주축이되어조직한 Publishers International Linking Association Inc. (PILA) 를비롯한여러학술지출판사가다이작업을위하여조직한기구이다. CrossRef 에서는 2000년도부터학술지와학술서적에 DOI를부여하고기탁받기시작하였다. DOI prefix에서낮은숫자인것이빠르게 DOI를부여한출판사또는발행학회이다. Prefix는 4자리아라비아숫자로구성되었으므로이론적으로 9999개의출판사나학회가등록할수있다. 9999개가넘으면어떻게할까? 2012년부터는 prefix를 5자리로부여하기시작하였다. 최근국내학술지에서는 10.12954 처럼 5자리 prefix가등장하였다. - 64 - - 66 -
DOI 구조 구조를보면 prefix+suffix 형태로되어있는데,prefix는국제 DOI 재단이부여하고 suffix는발행인이부여한다. Prefix는항상 10으로시작하고다음마침표를찍고, 다시 4자리의숫자로만구성한발행처고유번호를부여한다. 한발행처에서하나의 prefix를받아학술지별로다른 suffix를부여할수있으므로한학회에서여러종의학술지를발행하더라도 prefix는다동일하다. Elsevier 같은대형상업회사가많은학술지를발행하지만 prefix는하나이다. Suffix는발행처에서부여하고한발행처에서무한대의학술지에부여할수있다. 또한마침표를찍어가면서계속확장가능하고, 알파벳및숫자를모두사용할수있다. 인쇄본없는웹잡지인 Journal of Educational Evaluation for Health Professions를예로들면,prefix 가 10.3352이고 suffix는 jeehp.2013.10.4 형식으로 2013년도제 10권, 넷째논문을의미한다. 웹잡지인경우에는호를별도로표시하지않는경우가대부분이다. 같은내용으로출판한인쇄본, PDF, HTML 판은모두같은 DOI를갖는다. DOI는보통은한곳으로가게되어있으나둘이상여러곳으로갈수있게도지정할수있다 (multiple resolution). CrossRef DOI link DOI link는두부분으로나누어져있다우선 DOI directory URL (http://dx.doi.org/) 와 DOI 자체이다. 이렇게두부분이합쳐지면 DOI가연결고리 (link) 를구성한다. 이 DOI link를누르면바로 DOI URL 로향하게된다. 이 DOI link는 2011년 8월부터시작하여전세계적으로우리나라의편협학술지에서가장먼저적용하기시작하였다. 예를들면 http:/dx.doi.org/10.1006/jmbi.1995.0238 은다음과같은부분으로구성한다. 이링크를누르면바로해당논문의랜딩페이지 (landing page) 로간다. - 65 - - 67 -
학술지발행인은 DOI 를통하여어떤이득이있을까? (1) URL 주소와다르게 DOI link는비록내용위치가바뀌어도바뀌지않고영구히존재한다. (2) 내용을보고접근하는데연결을쉽게하여더욱더많이노출시키고방문을많이할수있도록한다. (3) CrossRef 와한번계약만하면모든참여하는출판사와연결에대한계약을하는셈이다. (4) CrossRef 회원의출판물은은자동으로 DOI 통하여 Open-URL 이가능하다. (5) 연결을통하여학문연구와출판물의유용성을풍부하게하여준다. (6) 출판사가 CrossRef 에내용을모두등록하면 DOI 통하여외부로나가는것뿐아니라 (outbound linking, outbound hyperlink) 내부로들어오는 (inbound linking, cited-by linking) 연결이가능하다. (7) 연회비한번내어모든유형의자료를다룰수있다. DOI/CrossRef 에참여하려면어떻게하여야하나? 우리나라학술지가이 CrossRef를통하여 DOI에참여하는방법으로지금까지알려진것은다음과같다. (1) 우선각학술지가개별로 CrossRef에참여하는경우가있다. 예 ) Journal of Educational Evaluation for Health Professions (2) 과학분야학술지는한국과학기술정보연구원 (http://doicenter.kisti.re.kr/), 의학학술지인경우의편협 (http://kamje.kr) 에요청하여참여할수있다. 두기관은 sponsoring publisher 로등록되어개별학회는별도의연회비 (2013년도 275 미국달러 ) 를낼필요가없다. 우리나라에서많은학회가이렇게참여하고있다. (3) 상업회사에서 DOI를등록하여주는경우가있다. 예를들면국내에서는 M2COMM, Inforang과같은과편협회원회사가우리나여러학술지를다루면서등록을대행한다. 이런회사는 JATS XML을통하여 DOI XML을자동생성할수있어서어렵지않게서비스하고있다. 또한국제상업회사인 Elsevier, Wiley-Blackwell, Springer, Nature Publishing Group 등에서학회지를출판하여 DOI를기탁하는경우이다. 이렇게국내외상업회사와같이하는경우상업회사가역시 sponsoring publisher 역할을하므로학회는별도의연회비를낼필요가없다. 외국상업출판사와같이할때는그출판사 DOI prefix를사용하나국내상업회사는대개다학회고유의 DOI prefix를사용한다. 가입신청이후의절차는? 1 CrossRef 가입신청 2 DOI prefix 받음 3 doi.crossref.org에접근하여기탁할수있는 ID, passwd를받음 - 66 - - 68 -
4 학술지에 suffix를추가하여 DOI 부여방식정함 5 정한 DOI를학술지의논문첫페이지의 heading에적음 (Fig. 1) 6 XML 형식의 DOI XML을 CrossRef에학술지발간뒤늦어도 1년 6개월이내에기탁. 기탁경비는 Table 1 에표기. 7 학술지의 landing page ( 전문이있는곳 ) 만들어놓음 Table 1. CrossRef Depsoit fee available from http://www.crossref.org/02publishers/20pub_fees.html#deposit [cited 2013 Jun 16] Content Type All Current records (2011-2013) unless specified below. Book titles. Journals/working papers: volume, issue and article. Conference proceedings, conference papers, databases, standards, technical reports, theses and dissertations. Deposit Fees Per DOI $ 1.00 Backfile (all content types) $ 0.15 Components, Data Sets and Data Elements (current and backfile) $ 0.06 Book Chapters (exclusive of conference proceedings) Chapters/entries in books with up to 250 chapters (each). $ 0.25 Chapters/entries in books with more than 250 chapters (each).* $ 0.15 Journal Titles free DOI XML 을어떻게만드나? 아래와같은최신 schema4.3.2를기반으로 DOI XML tag을붙여만든다. 이 schema는학술지뿐아니라단행본, 학위논문등다양한자료에서사용할수있는데이자료에서는학술지에해당하는내용만갖추었다. 이 schema를자세히읽어보면어떻게 DOI XML을작성하여야하는데설명이나오지만조금더간단히예제를보고이해하고자신의논문한편을직접 DOI XML로작성하고점검 (validation) 하여보자. CrossRef W3C Deposit Schema Version 4.3.2 <xsd:schema xmlns="http://www.crossref.org/schema/4.3.2" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:fr="http://www.crossref.org/fundref.xsd" xmlns:ai="http://www.crossref.org/accessindicators.xsd" targetnamespace="http://www.crossref.org/schema/4.3.2"> - 67 - - 69 -
XML tag 코딩예 < 논문서지정보와참고문헌예 > J Educ Eval Health Prof. 2013; 10: 4. Published online 2013 May 27. doi: 10.3352/jeehp.2013.10.4 United States medical students knowledge of Alzheimer disease Brian J. Nagle,1 Paula M. Usita,1 and Steven D. Edland2,* References 1. Brookmeyer R, Evans DA, Hebert L, Langa KM, Heeringa SG, Plassman BL, Kukull WA. National estimates of the prevalence of Alzheimer s disease in the United States. Alzheimers Dement. 2011;7:61-73 2. Pucci E, Angeleri F, Borsetti G, Brizioli E, Cartechini E, Giuliani G, Solari A. General practitioners facing dementia: are they fully prepared?. Neurol Sci. 2004;24:384-389 3. Chodosh J, Mittman BS, Connor KI, Vassar SD, Lee ML, DeMonte RW, Ganiats TG, Heikoff LE, Rubenstein LZ, Della Penna RD, Vickrey BG. Caring for patients with dementia: how good is the quality of care? Results from three health systems. J Am Geriatr Soc. 2007;55:1260-1268 4. Gifford DR, Holloway RG, Frankel MR, Albright CL, Meyerson R, Griggs RC, Vickrey BG. Improving adherence to dementia guidelines through education and opinion leaders: a randomized, controlled trial. Ann Intern Med. 1999;131:237-246 5. Boise L, Neal MB, Kaye J. Dementia assessment in primary care: results from a study in three managed care systems. J Gerontol A Biol Sci Med Sci. 2004;59:M621-M626 6. Barrett JJ, Haley WE, Harrell LE, Powers RE. Knowledge about Alzheimer disease among primary care physicians, psychologists, nurses, and social workers. Alzheimer Dis Assoc Disord. 1997;11:99-106 7. Dementias, including alzheimer s disease. Washington, DC: US Department of Health and Human Services;2013. - 68 - - 70 -
8. Goldstein MZ, MaLossi RA, Kim K, Young B. A course in demetia for third-year medical students. Acad Psychiatry. 1999;23:142-150 9. Struck BD, Bernard MA, Teasdale TA. Effect of a mandatory geriatric medicine clerkship on third-year students. J Am Geriatr Soc. 2005;53:2007-2011 10. Morhardt D. Educating medical students on Alzheimer s disease and related disorders: an overview of the Northwestern University Buddy Program. Dementia. 2006;5:448-56 위논문 <DOI XML 파일예 > 예제파일 * 명 : jeehp_10_4_update.xml ( * 이예제파일은실제 CrossRef 에기탁한것이다 ) <!-- 선언문 ============= <?xml version="1.0" encoding="utf-8"?> <doi_batch xmlns="http://www.crossref.org/schema/4.3.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" version="4.3.0" xsi:schemalocation="http://www.crossref.org/schema/4.3.0 http://www.crossref.org/schema/deposit/crossref4.3.0.xsd"> <!-- 여기부터해딩부분 ============= <head> <doi_batch_id>1370584556</doi_batch_id> <-- doi batch는학술지에서임의로순서를매겨서제공한다. 지금이경우는유닉스타임을생성하여넣은것이다. <timestamp>20130607025557</timestamp> <--이 timestamp 는입력한시간이다. 2013년 6월 7일 02시 55분 57초에입력하였다는것으로자동생성하여도좋고아니면수작업으로입력하여도무방하다. 단같은논문 DOI를업데이트할때이 timestamp 값은최종값보다더작으면입력을할수없음로더큰값을쓰면된다 <depositor> <name>jeehp</name> <!-- 기탁한사람이름으로실명을쓰거나학회명이나학술지명이외어느이름을써도무방하다 <email_address>editor@jeehp.org</email_address> <!-- 입력한사람의이메일주소로반드시써야한다. 오류가있는경우메시지가가기때문이다 </depositor> <registrant>xmla</registrant> <!-- 등록 ID이다, 개별학술지 ID일수도있고 sposoring publisehr ID 일수있다 </head> - 69 - - 71 -
<!-- 여기부터 body 부분 ============= <body> <!-- 여기서부터학술지와논문서지정보 ============== <journal> <journal_metadata language="en"> <!-- 메타자료언어가영문이라는뜻이다. 국문이면 ko로표기한다. 학술지명을국문으로도기술할수있는데가능하다면하나를기술하면영문기술하는것이표준이다 <full_title> Journal of Educational Evaluation for Health Professions </full_title> <abbrev_title>j Educ Eval Health Prof</abbrev_title> <issn media_type="electronic">1975-5937</issn> </journal_metadata> <journal_issue> <publication_date media_type="online"> <year>2013</year> </publication_date> <journal_volume> <volume>10</volume> </journal_volume> </journal_issue> <!-- 여기서부터논문제목과출판유형 ============== <journal_article publication_type="full_text"> <!-- publication_type은 abstract_only, full_text, bibliographic_record 가운데하나기술 <titles> <title> United States medical students knowledge of Alzheimer disease </title> </titles> <!-- 여기서부터저자명과소속정보 ============== <contributors> <person_name sequence="first" contributor_role="author"> <given_name>brian J.</given_name> <surname>nagle</surname> </person_name> <person_name sequence="additional" contributor_role="author"> <given_name>paula M.</given_name> <surname>usita</surname> - 70 - - 72 -
</person_name> <person_name sequence="additional" contributor_role="author"> <given_name>steven D.</given_name> <surname>edland</surname> </person_name> </contributors> <!-- 여기서부터논문발행일과서지정보 ============== <publication_date media_type="online"> <month>05</month> <day>13</day> <year>2012</year> </publication_date> <pages> <first_page>4</first_page> </pages> <!-- 여기서부터 DOI, landing page 정보 ============== <doi_data> <doi>10.3352/jeehp.2013.10.4</doi> <resource> http://www.jeehp.org/doix.php?id=10.3352/jeehp.2013.10.4 </resource> </doi_data> <!-- = 여기서부터논문에서인용한 references 10 편정보로 DOI 가있으며 DOI 하나로충분하고 없은경우저자, 학술지명, 권, 페이지, 연도정보제공 ( 참고문헌 8), 저자없는단행본인경우단 행본명과연도 ( 참고문헌 7) ====== -> <citation_list> <citation key="ref1"> <doi>10.1016/j.jalz.2010.11.007</doi> <citation key="ref2"> <doi>10.1007/s10072-003-0193-0</doi> <citation key="ref3"> <doi>10.1111/j.1532-5415.2007.01249.x</doi> <citation key="ref4"> <doi>10.7326/0003-4819-131-4-199908170-00002</doi> <citation key="ref5"> <doi>10.1093/gerona/59.6.m621</doi> - 71 - - 73 -
<citation key="ref6"> <doi>10.1097/00002093-199706000-00006</doi> <citation key="ref7"> <series_title>dementias, including alzheimer s disease</series_title> <cyear>2013</cyear> <citation key="ref8"> <journal_title>alzheimer Dis Assoc Disord</journal_title> <author>goldstein</author> <volume>23</volume> <first_page>142</first_page> <cyear>1999</cyear> <citation key="ref9"> <doi>10.1111/j.1532-5415.2005.00473.x</doi> <citation key="ref10"> <doi>10.1177/147130120600500311</doi> </citation_list> </journal_article> </journal> </body> </doi_batch> <!-- 마지막은 </doi_batch> 로마친다 - 72 - - 74 -
DOI XML 은제대로만든것일까? 점검 (validation) 하는데두가지방법이있다. 우선 XML parser를이용하여적은양의 XML 파일을점검할수있다. http://www.crossref.org/02publishers/parser.html 에서파일을선택하고 upload를누른다. 만약오류가있으며 Fig. 1 에서와같이오류를알려준다. 이 parser 는 ID, password 없이누구나점검할수있다. Fig. 1. Error message that indicated the specific errors in DOI XML file tested from http://www.crossref.org/02publishers/parser.html [cited 2013 June 16]. 두번째방법은 http://test.crossref.org에서점검하는것이다. 이것은 deposit 하는화면과같이구성하였지만단지점검을위한것으로새학술지다루거나다량의논문을점검할때사용한다 (Fig 2). 이두번째방법은반드시 crossref ID, password 가있어야점검가능하므로 DOI XML 파일올리기전에반드시점검한다. 대부분의참석자는 ID, password를알수없을것이므로첫번째방법을주로사용한다. Fig. 2. Test page for DOI XML available from http://test.crossref.org/ [cited 2013 Jun 16]. - 73 - - 75 -
DOI 점검후어떻게기탁하는가? http://doi.crossref.org 에방문하면 Fig. 3 이나온다. 여기서 ID, password 를치고들어간다. Fig. 3. The first page for depositing validatd DOI XML. Available from http://doi.crossref.org/ [cited 2013 Jun 16]. 이후 DOI XML을 test.crossref.org 에서와같이올린다. 올린 DOI XML 파일을점검하려면 Administration에서볼수있다 (Fig. 4). 만약정보에오류가있다면나중에다시 update file 을올려서수정한다. 이때는앞에기술한것과같이 timestamp가앞에숫자보다큰숫자로설정하여야한다. Fig. 4. DOI XML contents available from administration site. Available from http://doi.crossref.org/ [cited 2013 Jun 16]. - 74 - - 76 -
맺는말 DOI XML을제작하는것은복잡하여보이지만표본 DOI XML을보고 cut and paste 로쉽게가능하다. 그런데최근에는이런작업도수작업으로하지않고 JATS XML에서바로 DOI XML로변환하는도구가있으므로더쉬워졌다. 이작업은별도로다룬다. DOI XML 을제작할수있으면이후 CrossMark, FundRef XML이가능하다. 이런작업을위하여편집인이 XML에친숙할필요가있다비록직접입력하지는않더라도한번이해하면회사와작업을할때오류를발견하기쉽고또한이런기술적인내용을알아야앞으로새도구나표준이나왔을때바로이해하고적용할수있을것이다. 이런일을국제상업출판사는다알아서하여주지만우리는발행인이출판사가아니라대부분학회가비영리기관이라는특수한상황이므로편집인이이런정보기술발전을잘이해하여야한다. - 75 - - 77 -
- 78 -
The 9 th Editor's Workshop: Application of information technology to scholarly open access journal publication Basic of DOI XML 실습 이윤환 ( 한림대학교 ), 허선 ( 한림대학교 )
Basic of DOI XML 실습 이윤환 ( 한림대학교 ), 허선 ( 한림대학교 ) 학습목표 DOI XML 제작할수있어야한다. 구체목표 1) 자신의학술지논문한편을 DOI XML을만들수있어야한다. 2) 만든파일으로유효성검증을할수있어야한다. 머리말 이번시간에는자신학술지논문한편을가지고직접 XML 코딩 (coding) 작업을하여보아, 이런작업이결코어려운것이아니라는것을알수있다면충분하다. 실습 첨부한 doi_sample.xml 파일에자신이맡는학술지논문한편의 DOI XML을 cut and paste 형식으로넣어본다. 이때제작후점검은 http://www.crossref.org/02publishers/parser.html 에서한다. 실습에서어떤오류가나왔는지아래에적는다. 맺는말 DOI XML을쉽게만들수있지만앞으로역시 JATS XML에서시작하는것이필요하다. 즉, 이 DOI XML은 JATS XML만있다면매우쉽고빠르게제작가능하므로 DOI XML을우선제작할수있다는것을알고다음시간에 JATS XML에서 DOI XML로변환을다룰것이다. - 79 - - 81 -
- 82 -
The 9 th Editor's Workshop: Application of information technology to scholarly open access journal publication Conversion of JATS 1.0 XML to DOI XML 허선 ( 한림대학교 ) - 81 -
Conversion of JATS 1.0 XML to DOI XML 허선 ( 한림대학교 ) 학습목표 JATS 1.0 XML에서 DOI XML 생성하는다양한방법을설명할수있어야한다. 구체목표 1) CrossRef ID, passwd 가있을대웹화면 http://www.crossref.org/webdeposit/ 에서 JATS XML 파일을기탁하여 DOI XML 생성하는방법을설명할수있어야한다. 2) NLM.JATS2CrossRef.v1.0.xsl XSL transformer 구조를설명할수있어야한다. 머리말 앞시간에 DOI XMl 파일을만들어서유효성검증을하여보았다. 이렇게 DOI XML을만드는것도어렵지않지만 JATS XML로 Full tex XML을확보하였다면더욱쉽게 DOI XML을생성할수있다. XML 파일을 transformer를사용하여다른 XML이나 PDF, Graph, VRML 등다양한형태로변환이가능하기에 XML로변환하는것은매우쉽다. NLM.JATS2CrossRef.v1.0.xsl 을사용한변환 http://support.crossref.org/entries/22577813-niso-jats-nlm-dtd-to-crossref-schema-conve rsion-xslt- 에파일이있어서사용할수있다. 이것은 CrossRef에서만들어올린것으로 Aptara, Technology Group (http://www.aptaracorp.com/) 에서만든것이다. 이미이런 transformer는국내여러회사에서도만들어서활용하고있어서, 제작이그렇게어려운작업은아니고누구든지변환전후 XML DTD를이해하면만들수있다. CrossRef에서만들어공개한것이라매우잘만들어서누구나쉽게활용할수있다. 소스는다음과같다. <?xml version="1.0"?> <!-- Originally created by Aptara, Technology Group <!-- Revised by CrossRef to accomodate NISO JATS 1.0 <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:xs="http://www.w3.org/2001/xmlschema" xmlns="http://www.crossref.org/schema/4.3.1" xmlns:xsldoc="http://www.bacman.net/xsldoc" xmlns:xlink="http://www.w3.org/1999/xlink" exclude-result-prefixes="xsldoc"> - 83 - - 85 -
<xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:variable name="date" select="adjust-date-to-timezone(current-date(), ())"/> <xsl:variable name="time" select="adjust-time-to-timezone(current-time(), ())"/> <xsl:variable name="tempdatetime" select="concat($date,'',$time)"/> <xsl:variable name="datetime" select="translate($tempdatetime,':-.','')"/> <!-- Root Element <xsl:template match="/"> <xsl:choose> <xsl:when test="article"> <doi_batch version="4.3.1"> <xsl:attribute name="xsi:schemalocation">http://www.crossref.org/schema/4.3.1 http://www.crossref.org/schema/deposit/crossref4.3.1.xsd</xsl:attribute> <head> <xsl:apply-templates select="//front"/> </head> <body> <journal> <xsl:apply-templates select="//journal-meta"/> <xsl:if test="//pub-date //article-meta/volume //article-meta/issue"> <journal_issue> <xsl:apply-templates select="//pub-date"/> <xsl:apply-templates select="//article-meta/volume"/> <xsl:apply-templates select="//article-meta/issue"/> </journal_issue> <xsl:apply-templates select="//article-meta/title-group"/> </journal> </body> </doi_batch> <xsl:otherwise> <xsl:message terminate="yes"/> </xsl:otherwise> </xsl:choose> <!-- Front Matter Element <xsl:template match="front"> <doi_batch_id> <xsl:choose> <xsl:when test="article-meta/article-id[@pub-id-type='art-access-id']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='art-access-id']"/> <xsl:when test="article-meta/article-id[@pub-id-type='publisher-id']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='publisher-id']"/> <xsl:when test="article-meta/article-id[@pub-id-type='doi']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='doi']"/> <xsl:when test="article-meta/article-id[@pub-id-type='medline']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='medline']"/> <xsl:when test="article-meta/article-id[@pub-id-type='pii']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='pii']"/> <xsl:when test="article-meta/article-id[@pub-id-type='sici']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='sici']"/> - 84 - - 86 -
<xsl:when test="article-meta/article-id[@pub-id-type='pmid']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='pmid']"/> <xsl:when test="article-meta/article-id[@pub-id-type='other']"> <xsl:apply-templates select="article-meta/article-id[@pub-id-type='other']"/> <xsl:otherwise> <xsl:comment>no article-id has been entered by user</xsl:comment> </xsl:otherwise> </xsl:choose> </doi_batch_id> <timestamp> <xsl:value-of select="$datetime"/> </timestamp> <depositor> <name> <xsl:choose> <xsl:when test="//journal-meta/publisher"> <xsl:apply-templates select="//journal-meta/publisher/publisher-name"/> <xsl:otherwise> <xsl:comment>publisher's Name not found in the input file</xsl:comment> </xsl:otherwise> </xsl:choose> </name> <!--there is no appropriate place in NLM/JATS XML for a CrossRef deposit email, this will be added during processing (method TBD) <email_address>tbd</email_address> </depositor> <registrant> <xsl:choose> <xsl:when test="//journal-meta/publisher"> <xsl:apply-templates select="//journal-meta/publisher/publisher-name"/> <xsl:otherwise> <xsl:comment>publisher's name not found in the input file</xsl:comment> </xsl:otherwise> </xsl:choose> </registrant> <!-- Journal Metadata Element <xsl:template match="journal-meta"> <journal_metadata language="en"> <xsl:choose> <xsl:when test="journal-title-group/journal-title"> <full_title> <xsl:value-of select="journal-title-group/journal-title"/> </full_title> <xsl:when test="journal-title"> <full_title> <xsl:value-of select="journal-title"/> </full_title> <xsl:otherwise> <full_title> <xsl:message terminate="yes">journal full title is not available in the Input file</xsl:message> </full_title> </xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="abbrev-journal-title"> <abbrev_title> <xsl:value-of select="abbrev-journal-title"/> </abbrev_title> - 85 - - 87 -
</xsl:choose> <xsl:choose> <xsl:when test="issn"> <xsl:apply-templates select="issn"/> <xsl:otherwise> <xsl:message terminate="yes">issn is not available in the Input file</xsl:message> </xsl:otherwise> </xsl:choose> <xsl:if test="../article-meta/article-id[@pub-id-type='coden']"> <coden> <xsl:value-of select="../article-meta/article-id[@pub-id-type='coden']"/> </coden> </journal_metadata> <!-- ISSN <xsl:template match="issn"> <xsl:if test="@pub-type='ppub'"> <issn media_type="print"> <xsl:apply-templates/> </issn> <xsl:if test="@pub-type='epub' or @pub-type='epub-ppub'"> <issn media_type="electronic"> <xsl:apply-templates/> </issn> <xsl:if test="not(@pub-type)"> <issn media_type="print"> <xsl:apply-templates/> </issn> <!-- Publication Date <xsl:template match="pub-date"> <xsl:if test="@pub-type='ppub'"> <publication_date media_type="print"> <xsl:if test="month"> <month> <xsl:apply-templates select="month"/> </month> <xsl:if test="day"> <day> <xsl:apply-templates select="day"/> </day> <year> <xsl:apply-templates select="year"/> </year> </publication_date> <xsl:if test="@pub-type='epub' or @pub-type='epub-ppub'"> <publication_date media_type="online"> <xsl:if test="month"> <month> <xsl:apply-templates select="month"/> </month> <xsl:if test="day"> - 86 - - 88 -
<year> <day> </day> <xsl:apply-templates select="day"/> <xsl:apply-templates select="year"/> </year> </publication_date> <xsl:if test="not(@pub-type)"> <publication_date media_type="print"> <xsl:if test="month"> <month> <xsl:apply-templates select="month"/> </month> <xsl:if test="day"> <day> <xsl:apply-templates select="day"/> </day> <year> </year> </publication_date> <xsl:apply-templates select="year"/> <!-- Volume/Issue <xsl:template match="//article-meta/volume"> <journal_volume> <volume> <xsl:apply-templates/> </volume> </journal_volume> <xsl:template match="//article-meta/issue"> <issue> <xsl:apply-templates/> </issue> <!-- Title Group <xsl:template match="//article-meta/title-group"> <journal_article publication_type="full_text"> <titles> <title> <xsl:apply-templates select="article-title"/> </title> </titles> <xsl:if test="//article-meta/contrib-group"> <xsl:apply-templates select="../contrib-group"/> <xsl:apply-templates select="//pub-date"/> <xsl:if test="//article-meta/fpage //article-meta/lpage"> <xsl:apply-templates select="//article-meta/fpage //article-meta/lpage"/> <xsl:if test="//article-id[@pub-id-type='doi'] //article-id[@pub-id-type='pii'] //article-id[@pub-id-type='sici']"> <xsl:call-template name="publisher-item"/> <doi_data> <doi> - 87 - - 89 -
<xsl:choose> <xsl:when test="//article-meta/article-id[@pub-id-type='doi']"> <xsl:apply-templates select="//article-meta/article-id[@pub-id-type='doi']"/> <xsl:otherwise> <xsl:message terminate="yes">doi entry is not available in the Input/Meta file(s)</xsl:message> </xsl:otherwise> </xsl:choose> </doi> <timestamp> <xsl:value-of select="$datetime"/> </timestamp> <resource> <xsl:choose> <xsl:when test="//article-meta/self-uri/@xlink:href"> <xsl:apply-templates select="//article-meta/self-uri/@xlink:href"/> <xsl:otherwise> <xsl:comment>no Resource entry has been entered by the user</xsl:comment> </xsl:otherwise> </xsl:choose> </resource> </doi_data> <xsl:apply-templates select="//back/ref-list"/> </journal_article> <!-- Article Contributors <xsl:template match="//article-meta/contrib-group"> <contributors> <xsl:apply-templates select="contrib"/> </contributors> <xsl:template match="contrib"> <xsl:if test="position()=1"> <person_name sequence="first" contributor_role="author"> <xsl:apply-templates select="name"/> <xsl:if test="xref[@ref-type='aff' and @rid]"> <xsl:call-template name="multi-ref"> <xsl:with-param name="tokens" select="xref[@ref-type='aff']/@rid"/> </xsl:call-template> </person_name> <xsl:if test="position()>1"> <person_name sequence="additional" contributor_role="author"> <xsl:apply-templates select="name"/> <xsl:if test="xref[@ref-type='aff' and @rid]"> <xsl:call-template name="multi-ref"> <xsl:with-param name="tokens" select="xref[@ref-type='aff']/@rid"/> </xsl:call-template> </person_name> <xsl:template match="contrib-group/contrib/name"> <xsl:if test="given-names"> <given_name> <xsl:apply-templates select="given-names"/> </given_name> <surname> <xsl:apply-templates select="surname"/> </surname> - 88 - - 90 -
<xsl:if test="suffix"> <suffix> <xsl:apply-templates select="suffix"/> </suffix> <xsl:template name="multi-ref"> <xsl:param name="tokens"/> <xsl:if test="$tokens"> <xsl:choose> <xsl:when test="contains($tokens,' ')"> <xsl:call-template name="one-ref"> <xsl:with-param name="token" select="substring-before($tokens,' ')"/> </xsl:call-template> <xsl:call-template name="multi-ref"> <xsl:with-param name="tokens" select="substring-after($tokens,' ')"/> </xsl:call-template> <xsl:otherwise> <xsl:call-template name="one-ref"> <xsl:with-param name="token" select="$tokens"/> </xsl:call-template> </xsl:otherwise> </xsl:choose> <xsl:template name="one-ref"> <xsl:param name="token"/> <affiliation> <xsl:value-of select="//aff[@id=$token]"/> </affiliation> <xsl:template match="aff"> <xsl:template match="aff/label"> <!-- Article Page Information <xsl:template match="article-meta/fpage"> <pages> <first_page> <xsl:apply-templates/> </first_page> <xsl:if test="../lpage"> <last_page> <xsl:value-of select="../lpage"/> </last_page> </pages> <xsl:template match="lpage"> <!-- Publication Identifier <xsl:template name="publisher-item"> <publisher_item> <xsl:if test="//article-id[@pub-id-type='doi']"> - 89 - - 91 -
<identifier id_type="doi"> <xsl:value-of select="//article-id[@pub-id-type='doi']"/> </identifier> <xsl:if test="//article-id[@pub-id-type='pii']"> <identifier id_type="pii"> <xsl:value-of select="//article-id[@pub-id-type='pii']"/> </identifier> <xsl:if test="//article-id[@pub-id-type='sici']"> <identifier id_type="sici"> <xsl:value-of select="//article-id[@pub-id-type='sici']"/> </identifier> </publisher_item> <!-- Citations <xsl:template match="ref-list"> <citation_list> <xsl:apply-templates select="ref"/> </citation_list> <xsl:template match="ref"> <xsl:variable name="key" select="concat($datetime,'_',@id)"/> <citation> <xsl:attribute name="key">key<xsl:value-of select="$key"/></xsl:attribute> <xsl:apply-templates select="element-citation"/> <xsl:apply-templates select="citation"/> <xsl:template match="element-citation citation"> <xsl:choose> <xsl:when test="@publication-type='journal' or @citation-type='journal'"> <xsl:if test="issn"> <issn> <xsl:apply-templates select="issn"/> </issn> <xsl:if test="source"> <journal_title> <xsl:apply-templates select="source"/> </journal_title> <xsl:if test="collab"> <xsl:apply-templates select="collab"/> <xsl:if test="person-group"> <xsl:apply-templates select="person-group/name person-group/collab"/> <xsl:if test="volume"> <volume> <xsl:apply-templates select="volume"/> </volume> <xsl:if test="issue"> <issue> <xsl:apply-templates select="issue"/> </issue> <xsl:if test="fpage"> <first_page> <xsl:apply-templates select="fpage"/> </first_page> <xsl:if test="year"> - 90 - - 92 -
<cyear> <xsl:value-of select="replace(year, '[a-za-z]', '')" /> </cyear> <xsl:if test="article-title"> <article_title> <xsl:apply-templates select="article-title"/> </article_title> <xsl:when test="@citation-type='book' or @citation-type='conf-proceedings' or @citation-type='confproc' or @citation-type='other' or @publication-type='book' or @publication-type='conf-proceedings' or @publication-type='confproc' or @publication-type='other'"> <xsl:if test="source"> <volume_title> <xsl:apply-templates select="source"/> </volume_title> <xsl:if test="collab"> <xsl:apply-templates select="collab"/> <xsl:if test="person-group"> <xsl:apply-templates select="person-group/name person-group/collab"/> <xsl:if test="edition"> <edition_number> <xsl:apply-templates select="edition"/> </edition_number> <xsl:if test="fpage"> <first_page> <xsl:apply-templates select="fpage"/> </first_page> <xsl:if test="year"> <cyear> <xsl:value-of select="replace(year, '[a-za-z]', '')" /> </cyear> <xsl:if test="article-title"> <article_title> <xsl:apply-templates select="article-title"/> </article_title> <xsl:otherwise> <unstructured_citation> <xsl:value-of select="."/> </unstructured_citation> </xsl:otherwise> </xsl:choose> <xsl:template match="back//name"> <xsl:if test="position()=1"> <author> <xsl:apply-templates select="surname"/> </author> <xsl:template match="back//collab"> <xsl:if test="position()=1"> <author> <xsl:apply-templates/> </author> </xsl:stylesheet> - 91 - - 93 -
이 xsl 사용할때 JATS XML 작성에서주의할점은다음과같다. 1. 학술지명은 <journal-title element> 에기술한다. 2. DOI 입력은 <article-id> 에서속성 (attribute) 을 pub-id-type='doi' 로하여야한다. 3. DOI URL은 <self-uri> 에입력하여야한다. 4. JATS DTD에서는 CrossRef deposit을수행자의 email 주소는가지고있지않으므로 DOI XML로변환한뒤수작업으로입력하여야한다. 물론이주소를프로그램에서자동으로넣게만들수있으나기본 XSL 사용에서는수작업을입력한다. 웹화면에서 DOI XML 생성 1. http://www.crossref.org/webdeposit/ 에접속한다. 2. Step 1: Select Data Type Data Type Selection Select Data Type: Journal Book Conference Proceedings Report NLM File BETA Data Type으로 NLM file Beta 를선택한다. 이런화면이나온다. 그러면 Step 2에서파일선택을눌러 JATS XML 파일을선택하고 CrossRef ID, passwd를입력하고파일올리는사람 email 주소를쓰고 Upload NLM data를누르면그대로 DOI가기탁되는것이다. - 94 -
기탁을하면다음과같은이메일이날아온다. From: CrossRef Query System [mailto:admin@crossref.org] Sent: Thursday, June 20, 2013 7:49 AM <!-- 보낸사람이메일주소 To: shuh@hallym.ac.kr Subject: CrossRef submission ID: 1359730833 <?xml version="1.0" encoding="utf-8"?> <doi_batch_diagnostic status="completed" sp="ds4.crossref.org"> <submission_id>1359730833</submission_id> <batch_id>jeehp-10-04</batch_id> <record_diagnostic status="success"> <doi>10.3352/jeehp.2013.10.4</doi> <msg>successfully updated</msg> <citations_diagnostic> <citation key="key20130619184821825_b1-jeehp-10-04" status="resolved_reference">10.1016/j.jalz.2010.11.007 <citation key="key20130619184821825_b2-jeehp-10-04" status="resolved_reference">10.1007/s10072-003-0193-0 <citation key="key20130619184821825_b3-jeehp-10-04" status="resolved_reference">10.1111/j.1532-5415.2007.01249.x <citation key="key20130619184821825_b4-jeehp-10-04" status="resolved_reference">10.7326/0003-4819-131-4-199908170-00002 <citation key="key20130619184821825_b5-jeehp-10-04" status="resolved_reference">10.1093/gerona/59.6.m621 <citation key="key20130619184821825_b6-jeehp-10-04" status="resolved_reference">10.1097/00002093-199706000-00006 <citation key="key20130619184821825_b7-jeehp-10-04" status="stored_query"> <citation key="key20130619184821825_b8-jeehp-10-04" status="stored_query"> <citation key="key20130619184821825_b9-jeehp-10-04" status="resolved_reference">10.1111/j.1532-5415.2005.00473.x <citation key="key20130619184821825_b10-jeehp-10-04" status="resolved_reference">10.1177/147130120600500311 </citations_diagnostic> </record_diagnostic> <batch_data> <record_count>1</record_count> <success_count>1</success_count> <warning_count>0</warning_count> <failure_count>0</failure_count> </batch_data> </doi_batch_diagnostic> JATS XML 에있는참고문헌자료를 DOI 를찾아서넣어준다. DOI 가없는참고문헌은입력자료에서내용을추출하여입력한다. 즉실제입력은아래파일처럼된다고 DOI XML 파일을자동으로보내준다. <?xml version="1.0" encoding="utf-8"?> <doi_batch xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://www.crossref.org/schema/4.3.1" version="4.3.1" xsi:schemalocation="http://www.crossref.org/schema/4.3.1 http://www.crossref.org/schema/deposit/crossref4.3.1.xsd"> <head> - 93 - - 95 -
<doi_batch_id>jeehp-10-04</doi_batch_id> <timestamp>20130619184821825</timestamp> <depositor> <name>national Health Personnel Licensing Examination Board of the Republic of Korea</name> <email_address>younsang@m2comm.co.kr</email_address> </depositor> <registrant>xmla</registrant> </head> <body> <journal> <journal_metadata language="en"> <full_title>journal of Educational Evaluation for Health Professions</full_title> <issn media_type="electronic">1975-5937</issn> </journal_metadata> <journal_issue> <publication_date media_type="online"> <month>05</month> <day>27</day> <year>2013</year> </publication_date> <journal_volume> <volume>10</volume> </journal_volume> </journal_issue> <journal_article publication_type="full_text"> <titles> <title>united States medical students knowledge of Alzheimer disease</title> </titles> <contributors> <person_name sequence="first" contributor_role="author"> <given_name>brian J.</given_name> <surname>nagle</surname> </person_name> <person_name sequence="additional" contributor_role="author"> <given_name>paula M.</given_name> <surname>usita</surname> </person_name> <person_name sequence="additional" contributor_role="author"> <given_name>steven D.</given_name> <surname>edland</surname> </person_name> </contributors> <publication_date media_type="online"> <month>05</month> <day>27</day> <year>2013</year> </publication_date> <publisher_item> <identifier id_type="doi">10.3352/jeehp.2013.10.4</identifier> </publisher_item> <doi_data> <doi>10.3352/jeehp.2013.10.4</doi> <timestamp>20130619184821825</timestamp> <resource>http://www.jeehp.org/doix.php?id=10.3352/jeehp.2013.10.4</resource> </doi_data> <citation_list> <citation key="key20130619184821825_b1-jeehp-10-04"> <journal_title>alzheimers Dement</journal_title> <author>brookmeyer</author> - 94 - - 96 -
<volume>7</volume> <first_page>61</first_page> <cyear>2011</cyear> <article_title>national estimates of the prevalence of Alzheimer s disease in the United States</article_title> <citation key="key20130619184821825_b2-jeehp-10-04"> <journal_title>neurol Sci</journal_title> <author>pucci</author> <volume>24</volume> <first_page>384</first_page> <cyear>2004</cyear> <article_title>general practitioners facing dementia: are they fully prepared?</article_title> <citation key="key20130619184821825_b3-jeehp-10-04"> <journal_title>j Am Geriatr Soc</journal_title> <author>chodosh</author> <volume>55</volume> <first_page>1260</first_page> <cyear>2007</cyear> <article_title>caring for patients with dementia: how good is the quality of care? Results from three health systems</article_title> <citation key="key20130619184821825_b4-jeehp-10-04"> <journal_title>ann Intern Med</journal_title> <author>gifford</author> <volume>131</volume> <first_page>237</first_page> <cyear>1999</cyear> <article_title>improving adherence to dementia guidelines through education and opinion leaders: a randomized, controlled trial</article_title> <citation key="key20130619184821825_b5-jeehp-10-04"> <journal_title>j Gerontol A Biol Sci Med Sci</journal_title> <author>boise</author> <volume>59</volume> <first_page>m621</first_page> <cyear>2004</cyear> <article_title>dementia assessment in primary care: results from a study in three managed care systems</article_title> <citation key="key20130619184821825_b6-jeehp-10-04"> <journal_title>alzheimer Dis Assoc Disord</journal_title> <author>barrett</author> <volume>11</volume> <first_page>99</first_page> <cyear>1997</cyear> <article_title>knowledge about Alzheimer disease among primary care physicians, psychologists, nurses, and social workers</article_title> <citation key="key20130619184821825_b7-jeehp-10-04"> <volume_title>dementias, including alzheimer s disease</volume_title> <author>us Department of Health and Human Services</author> <cyear>2013</cyear> <citation key="key20130619184821825_b8-jeehp-10-04"> <journal_title>acad Psychiatry</journal_title> <author>goldstein</author> <volume>23</volume> - 95 - - 97 -
<first_page>142</first_page> <cyear>1999</cyear> <article_title>a course in demetia for third-year medical students</article_title> <citation key="key20130619184821825_b9-jeehp-10-04"> <journal_title>j Am Geriatr Soc</journal_title> <author>struck</author> <volume>53</volume> <first_page>2007</first_page> <cyear>2005</cyear> <article_title>effect of a mandatory geriatric medicine clerkship on third-year students</article_title> <citation key="key20130619184821825_b10-jeehp-10-04"> <journal_title>dementia</journal_title> <author>morhardt</author> <volume>5</volume> <first_page>448</first_page> <cyear>2006</cyear> <article_title>educating medical students on Alzheimer s disease and related disorders: an overview of the Northwestern University Buddy Program</article_title> </citation_list> </journal_article> </journal> </body> </doi_batch> 이렇게웹에서 JATS XML 파일을올려서 DOI XML 기탁이가장간단하다. 이번실습에서 는 CrossRef ID, password 와완성한 JATS XML 파일이없으므로이워크숍이후자료를 가지고다시시도할수있다. 맺는말 JATS XML만있으면 DOI XML 은큰수고없이간단히기탁가능함을알수있다. 다음실습시간에는로컬 ( 컴퓨터 ) 에서 JATS XML을 DOI XML 로변환하는과정을직접시행하여보고어렵지않음을이해하면충분하다. 서버에서작업하면조금더빠르게할수있다. 이번실습에서는네트워크가안되므로로컬에서시행한다. 이번시간에는 XML 파일은다른형태의 XML 파일로쉽게변환가능하다는사실을이해하면충분하다. - 98 -