본문 바로가기
미디어위키

Help Export

by 다움위키 2024. 12. 7.

원문 보기: https://dawoum.duckdns.org/wiki/Help:Export

 

위키 페이지는 또 다른 미디어위키 설치로 (목표 위키에서 이 기능이 활성화되어 있고, 사용자가 해당 위키의 시스템 관리자이면) 업로드하여 가져오기 위해 특수 XML 형식으로 내보낼 수 있거나 예를 들어 컨텐츠를 분석하는 데 사용할 수 있습니다. 페이지가 아닌 다른 정보를 내보내는 Syndication feeds와 페이지 가져오기에 대한 가져오기를 참조하십시오.

How to export

페이지를 내보내는 방법은 적어도 4가지가 있습니다:

  • Special:Export 상자에 문서 이름을 붙여넣거나 https://dawoum.duckdns.org/wiki/Special:Export/FULLPAGENAME을 사용하십시오.
  • 백업 스크립트 dumpBackup.php는 모든 위키 페이지를 XML 파일에 덤프합니다. dumpBackup.php는 미디어위키 1.5 이상에서만 작동합니다. 이 스크립트를 실행하기 위해 서버에 직접 접근해야 합니다. 위키미디어 프로젝트의 덤프는 https://dumps.wikimedia.org/에서 정기적으로 제공됩니다.
  • 특정 시간 이후에 수정된 페이지를 정기적으로 가져오는 OAI-PMH라는 인터페이스가 있습니다. 위키미디어 프로젝트에 대해 이 인터페이스는 공개적으로 사용할 수 없습니다; 위키미디어 업로드 피드 서비스를 참조하십시오. OAI-PMH에는 실제로 내보낸 문서 주위에 래퍼 형식이 포함되어 있습니다.
  • Pywikibot framework를 사용하십시오. 이것은 여기서 설명하지 않습니다.

기본적으로, 페이지의 현재 버전만 포함됩니다. 선택적으로 날짜, 시간, 사용자 이름. 및 편집 요약을 갖는 모든 버전을 가져올 수 있습니다. 선택적으로 직접 또는 간접적으로 호출된 모든 템플릿의 최신 버전도 내보내집니다. 템플릿을 포함하지 않는 덤프를 가져오면, 결과 페이지는 대상 위키에 필요한 템플릿이 없으면 잘못 렌더링될 수 있습니다.

추가적으로, SQL 데이터베이스를 복사할 수 있습니다. 이것이 미디어위키 1.5 이전에 데이터베이스 덤프가 사용 가능했던 방식이고 여기서는 더 이상 설명하지 않습니다.

Using 'Special:Export'

예를 들어 이름공간의 모든 페이지를 내보내기 위해.

Get the names of pages to export

아래 설명이 다소 불분명하므로 예를 들어 설명하는 것이 더 나을 것 같습니다.

  1. Special:Allpages로 가서 원하는 기사/파일을 선택하십시오.
  2. 페이지 이름 목록을 텍스트 편집기로 복사하십시오.
  3. 모든 페이지 이름을 개별 줄에 넣으십시오.
    1. 원하는 이름을 갖는 렌더링된 페이지의 일부를 복사하여 말하자면 MS Word에 붙여넣고 - 서식 없는 텍스트로 붙여넣기 특수 기능 붙여넣기를 사용 - 바꾸기 함수 (Ctrl+H)을 열고, 찾을 내용에 ^t를 입력하고, 바꿀 내용에 ^p를 입력한 다음 모두 바꾸기 버튼을 누르면 비교적 빨리 이 작업을 수행할 수 있습니다. (이것은 페이지 이름 사이에 탭이 있어야 합니다; 이것들은 전형적으로 페이지 이름이 HTML-소스의 td-태그 안에 있기 때문에 발생합니다.)
    2. 텍스트 편집기 Vim을 사용하면 줄 바꿈을 빠르게 수정할 수도 있습니다: 전체 목록을 붙여넣은 후, 명령 :1,$s/\t/\r/g를 실행하여 모든 탭을 캐리지 리턴으로 바꾼 다음 :1,$s/^\n//g를 실행하여 줄 바꿈 문자만 포함된 모든 줄을 제거합니다.
    3. 또 다른 방법은 HTML을 내보내는 임의의 편집기에 서식-지정된 텍스트를 복사하는 것입니다. 모든 <tr> 및 </tr> 태그를 제거하고 모든 <td> 태그를 <tr><td>로, <td> 태그를 </td></tr>로 바꾸면 HTML이 필요한 형식으로 구문 분석됩니다.
    4. 서버에 셸과 MySQL 접근 권한이 있으면, 이 스크립트를 사용할 수 있습니다:

mysql -umike -pmikespassword -hlocalhost wikidbname select page_title from wiki_page where page_namespace=0 EOF

주의, mike 및 mikespassword를 자신의 것으로 바꾸십시오. 역시, 이 예제는 접두사 wiki_를 갖는 테이블을 보여줍니다.

  1. 선택한 이름공간이 기본 이름공간인 경우를 제외하고, 페이지 이름에 이름공간을 접두사로 붙입니다 (예를 들어, 'Help:Contents').
  2. 다른 이름공간에 대해 위의 과정을 반복하십시오 (예를 들어, 카테고리:, 템플릿:, 등.)

PostgreSQL 데이터베이스에 대해 유사한 스크립트는 다음과 같습니다:

psql -At -U wikiuser -h localhost wikidb -c "select page_title from mediawiki.page"

주의, wikiuser를 자신의 것으로 바꾸십시오, 데이터베이스는 비밀번호를 입력받기 위해 대기합니다. 이 예제는 접두사 wiki_ 없고 테이블 이름의 부분으로 지정된 이름공간을 갖는 테이블을 보여줍니다.

Perform the export

  • Special:Export로 가서 모든 페이지 이름을 텍스트 상자에 붙여넣으십시오. 빈 줄이 없는지 확인하십시오.
  • 'Submit query'를 클릭하십시오.
  • 브라우저의 저장 기능을 이용해 결과 XML을 파일에 저장합니다.

그리고 마지막으로...

  • 텍스트 편집기에서 XML 파일을 엽니다. 아래로 스크롤하여 오류 메시지를 확인하십시오.

이제 이 XML 파일을 사용하여 가져오기를 수행할 수 있습니다.

Exporting the full history

저자 정보와 기여를 유지하기 위해 개정 역사를 내보내는 것이 바람직할 수 있습니다. Special:Export 인터페이스의 체크박스는 전체 역사 (기사의 모든 버전)을 내보낼지 아니면 최신 버전의 기사를 내보낼지 선택합니다. 최대 100개의 개정이 반환됩니다; 다른 개정은 Special:Export에 대한 매개변수에서 자세히 설명한 대로 요청할 수 있습니다.

Export format

수신한 XML 파일의 형식은 모든 면에서 같합니다. 그것은 https://www.mediawiki.org/xml/export-0.11.xsd에서 XML Schema에 체계화되어 있습니다. 이 형식은 웹 브라우저에서 보기 위한 것이 아닙니다. 일부 브라우저는 선택한 부분을 보거나 숨기기 위한 + 및 - 링크가 있는 예쁘게 인쇄된 XML을 표시합니다. 대안적으로, 브라우저의 "view source" 기능을 사용하거나 선택한 프로그램으로 XML 파일을 지역에서 저장한 후 XML 소스를 볼 수 있습니다. XML 소스를 직접 읽으면, 실제 위키 텍스트를 찾는 것이 어렵지 않습니다. 특수 XML 편집기를 사용하지 않으면, XML 태그와의 충돌을 피하기 위해 < and >가 &lt; 및 &gt;로 표시됩니다; 모호성을 피하기 위해, &는 &amp;로 코딩됩니다.

현재 버전에서 내보내기 형식에는 위키 마크업의 XML 대체물이 포함되지 않습니다 (이전 제안은 Wikipedia DTD 참조). 기사를 편집할 때 얻는 것과 같은 위키 텍스트만 얻습니다.

Example

  <mediawiki xml:lang="en">
    <page>
      <title>Page title</title>
      <restrictions>edit=sysop:move=sysop</restrictions>
      <revision>
        <timestamp>2001-01-15T13:15:00Z</timestamp>
        <contributor><username>Foobar</username></contributor>
        <comment>I have just one thing to say!</comment>
        <text>A bunch of [[text|text]] here.</text>
        <minor />
      </revision>
      <revision>
        <timestamp>2001-01-15T13:10:27Z</timestamp>
        <contributor><ip>10.0.0.2</ip></contributor>
        <comment>new!</comment>
        <text>An earlier [[revision|revision]].</text>
      </revision>
    </page>
    
    <page>
      <title>Talk:Page title</title>
      <revision>
        <timestamp>2001-01-15T14:03:00Z</timestamp>
        <contributor><ip>10.0.0.2</ip></contributor>
        <comment>hey</comment>
        <text>WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
      </revision>
    </page>
  </mediawiki>

DTD

다음은 이 형식의 비공식적이고 짧은 Document Type Definition 버전입니다. DTD가 무엇인지 모른다면 그냥 무시하십시오.



https://www.mediawiki.org/xml/export-0.3/"
  xmlns:xsi CDATA #FIXED "http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation CDATA #FIXED
    "https://www.mediawiki.org/xml/export-0.3/ https://www.mediawiki.org/xml/export-0.3.xsd"
  xml:lang  CDATA #IMPLIED
>
<!ELEMENT siteinfo (sitename,base,generator,case,namespaces)>
<!ELEMENT sitename (#PCDATA)>      <!-- Name of the wiki -->
<!ELEMENT base (#PCDATA)>          <!-- URL of the main page -->
<!ELEMENT generator (#PCDATA)>     <!-- MediaWiki version string -->
<!ELEMENT case (#PCDATA)>          <!-- How cases in page names are handled -->
   <!-- possible values: 'first-letter' | 'case-sensitive'
        'Case-insensitive' option is reserved for future -->
<!ELEMENT namespaces (namespace+)> <!-- List of namespaces and prefixes -->
  <!ELEMENT namespace (#PCDATA)>     <!-- Contains namespace prefix -->
  <!ATTLIST namespace key CDATA #REQUIRED> <!-- Internal namespace number -->
<!ELEMENT page (title,id?,restrictions?,(revision|upload)*)>
  <!ELEMENT title (#PCDATA)>         <!-- Title with namespace prefix -->
  <!ELEMENT id (#PCDATA)> 
  <!ELEMENT restrictions (#PCDATA)>  <!-- Optional page restrictions -->
<!ELEMENT revision (id?,timestamp,contributor,minor?,comment?,text)>
  <!ELEMENT timestamp (#PCDATA)>     <!-- According to ISO8601 -->
  <!ELEMENT minor EMPTY>             <!-- Minor flag -->
  <!ELEMENT comment (#PCDATA)> 
  <!ELEMENT text (#PCDATA)>          <!-- Wikisyntax -->
  <!ATTLIST text xml:space CDATA  #FIXED "preserve">
<!ELEMENT contributor ((username,id) | ip)>
  <!ELEMENT username (#PCDATA)>
  <!ELEMENT ip (#PCDATA)>
<!ELEMENT upload (timestamp,contributor,comment?,filename,src,size)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT src (#PCDATA)>
  <!ELEMENT size (#PCDATA)>

Processing XML export

많은 도구가 내보낸 XML을 처리할 수 있습니다. 많은 수의 페이지 (예를 들어, 전체 덤프)를 처리하면, 문서를 주 메모리에 가져올 수 없으므로 SAX 또는 기타 이벤트-기반 방법을 기반으로 하는 파서가 필요합니다.

정규 표현식을 사용하여 XML 코드의 일부를 직접 처리할 수도 있습니다. 이것은 다른 방법보다 빠를 수 있지만 유지 관리가 어렵기 때문에 권장되지 않습니다.

XML 내보내기 처리 방법과 도구를 여기에 나열해 주십시오:

Details and practical advice

  • 페이지의 이름공간을 결정하기 위해, 해당 페이지의 제목을 /mediawiki/siteinfo/namespaces/namespace에 정의된 접두사와 일치시켜야 합니다.
  • 가능한 제한 사항은 다음과 같습니다:
    • sysop - Protected pages

Why to export

왜 동적 데이터베이스 다운로드를 사용하지 않는 걸까요?

위키피디아에서 온 정보를 특정 지점에서 표시하는 소프트웨어를 빌드한다고 가정해 보십시오. 라이브 버전에서 볼 수 있는 것과 다른 방식으로 정보를 표시하기를 원하면, 완성된 HTML 대신 입력하는 데 사용되는 위키코드가 필요할 것입니다.

역시 모든 데이터를 얻고 싶다면, 가능한 가장 효율적인 방법으로 전송하고 싶을 것입니다. 위키미디어 서버는 위키코드를 HTML로 변환하기 위해 상당한 작업을 해야 합니다. 이는 여러분과 위키미디어 서버 모두에게 시간이 많이 걸리므로 모든 페이지를 단순히 스파이더링하는 것은 방법이 아닙니다.

한 번에 하나씩 XML 형식의 임의의 기사에 접근하기 위해, Special:Export/Title_of_the_article로 이동하십시오.

See also