Help:Dışa aktar
Not: Bu sayfayı düzenlerken katkınızı CC0 altında yayınlamayı kabul edersiniz. Daha fazla bilgi için Kamu Malı Yardım Sayfalarına bakın. Bu sayfa için yapılan bazı eski değişiklikler CC BY-SA lisansı altına kaydırılmıştır. Yalnızca yeni katkılar PM'dir. |
Viki sayfaları özel bir XML biçiminde içe aktarma yüklemesi başka bir MediaWiki kurulumuna aktarılabilir (bu işlev hedef vikide etkinleştirildiyse ve kullanıcı orada bir hizmetli ise) veya içeriği içeriği analiz etmek için başka şekilde kullanın. Ayrıca sayfalar dışında başka bilgileri dışa aktarma ve içe aktarmalarda Help:Import aktarma için m:Sendikasyon beslemelerine bakın.
Nasıl dışa aktarılır
Sayfaları dışa aktarmanın en az dört yolu vardır:
- * Special:Export sayfasındaki kutuya maddelerin adını yapıştırın veya $page kullanın.
- * Yedek betiği
dumpBackup.php
tüm viki sayfalarını bir XML dosyasına döker.dumpBackup.php
yalnızca MediaWiki 1.5 veya daha yeni sürümlerinde çalışır. Bu betiğini çalıştırmak için sunucuya doğrudan erişiminizin olması gerekir. Wikimedia projelerinin dökümü düzenli olarak https://dumps.wikimedia.org/ sağlanıyor. - * Python çerçevesini kullanın. Bu burada açıklanmayacak.
Varsayılan olarak bir sayfanın yalnızca geçerli sürümü eklenir. İsteğe bağlı olarak tarih, saat, kullanıcı adı ve düzenleme özeti içeren tüm sürümleri alabilirsiniz. İsteğe bağlı olarak, doğrudan veya dolaylı olarak adlandırılan tüm şablonların en son sürümü de dışa aktarılır. If you import a dump that doesn't include templates, then the resulting pages will probably render incorrectly if the templates they need do not exist on the destination wiki.
Ayrıca SQL veritabanını kopyalayabilirsiniz. Veritabanının dökümleri MediaWiki 1.5'ten önce bu şekilde kullanıma sunuldu ve burada daha fazla açıklanmayacak.
'Special:Export' kullanımı
Örneğin, bir ad alanının tüm sayfalarını dışa aktarmak için.
Dışa aktarılacak sayfaların adlarını alın
Bir örnek daha iyi hissediyorum, çünkü aşağıdaki açıklama oldukça net değil.
- # Special:Allpages sayfasına gidin ve istediğiniz maddeyi/dosyayı seçin.
- # Sayfa adları listesini bir metin düzenleyicisine kopyalayın
- # Tüm sayfa adlarını ayrı satırlara yerleştirin
- ## Oluşturulan sayfanın bir kısmını istenen adlarla kopyalayıp bunu MS Word'e yapıştırırsanız bunu nispeten hızlı bir şekilde elde edebilirsiniz - biçimlendirilmemiş metin olarak özel macunu kullan - sonra değiştirme işlevini (CTRL+h) açın, ^t bul, Değiştir ile ^p girip Tümünü Değiştir düğmesine basın. (Bu, sayfa adları arasındaki sekmelere dayanır; bunlar genellikle sayfa adlarının html kaynağındaki td etiketlerinin içinde olmasının sonucudur.)
- ## Metin düzenleyicisi Vim ayrıca satır sonlarını düzeltmenin hızlı bir yolunu da sağlar: tüm listeyi yapıştırdıktan sonra, tüm sekmeleri satır başlarıyla değiştirmek için :1,$s/\t/\r/g komutunu ve ardından :1,$s/^\n//g komutunu çalıştırın. Yalnızca bir satırsonu karakteri içeren her satırı kaldırın.
- ## Diğer bir yaklaşım, biçimlendirilmiş metni HTML'yi açığa çıkaran herhangi bir düzenleyiciye kopyalamaktır. Tüm
<tr>
ve</tr>
etiketlerini kaldırın ve tüm<td>
etiketlerini<tr><td>
ve<td>
etiketlerini</td></tr>
ile değiştirin, HTML daha sonra gerekli biçime ayrıştırılacaktır. - ## Sunucunuza kabuk ve MySQL erişiminiz varsa, bu betiğini kullanabilirsiniz:
mysql -umike -pmikespassword -hlocalhost wikidbname
select page_title from wiki_page where page_namespace=0
EOF
Not, mikrofon ve mikrofon parolası kendinizinkiyle değiştirin. Ayrıca, bu örnek wiki_ önekine sahip tabloları gösterir.
- # Seçili ad alanı ana ad alanı değilse ad alanını sayfa adlarının önüne ekleyin (ör. 'Help:İçindekiler').
- # Diğer ad alanları için yukarıdaki adımları tekrarlayın (ör. Category:, Template:, vb.)
PostgreSQL veritabanları için benzer bir betik şuna benzer:
psql -At -U wikiuser -h localhost wikidb -c "select page_title from mediawiki.page"
Dikkat edin, viki kullanıcı iken kendinizinkiyle değiştirin, veritabanı sizden bir parola isteyecektir. Bu örnek, wiki_ öneki olmadan ve tablo adının bir parçası olarak belirtilen ad alanına sahip tabloları gösterir.
Dışa aktarımı gerçekleştirin
- * Special:Export sayfasına gidin ve tüm sayfa adlarınızı boş satır olmadığından emin olarak metin kutusuna yapıştırın.
- * "Sorguyu gönder" düğmesine tıklayın
- * Elde edilen XML'yi tarayıcınızın kaydetme özelliğini kullanarak bir dosyaya kaydedin.
ve son olarak...
- XML dosyasını bir metin düzenleyicide açın. Hata mesajlarını kontrol etmek için en alta kaydırın.
Artık bu XML dosyasını bir içe aktarma gerçekleştirmek için kullanabilirsiniz.
Tam geçmişi dışa aktarma
Exporting the revision history may be desirable to retain authorship information and attribution. Special:Export arayüzündeki bir onay kutusu, maddelerin tam geçmişinin mi (bir maddenin tüm sürümleri) yoksa en son sürümünün mi dışa aktarılacağını seçer. En fazla 100 revizyon iade edilir; Parameters to Special:Export içinde ayrıntılı verdiği gibi diğer revizyonlar talep edilebilir.
Dışa aktarma biçimi
Aldığınız XML dosyasının biçimi her yönden aynıdır. https://www.mediawiki.org/xml/export-0.11.xsd adresinde XML Şeması'nda kodlanmıştır. Bu biçim, bir web tarayıcısında görüntülemek için tasarlanmamıştır. Bazı tarayıcılar, seçili parçaları görüntülemek veya gizlemek için size "+" ve "-" bağlantılarıyla güzel yazdırılmış XML gösterir. Alternatif olarak, XML kaynağı, tarayıcının "kaynağı gör" özelliği kullanılarak veya XML dosyasını yerel olarak kaydettikten sonra, bir programla görüntülenebilir. Doğrudan XML kaynağını okursanız, gerçek vikimetin dosyasını bulmak zor olmayacaktır. Özel bir XML düzenleyici kullanmıyorsanız "<" ve ">" < ve >, XML etiketleriyle çakışmayı önlemek için; belirsizliği önlemek için "&", "&" olarak kodlanır.
Mevcut sürümde dışa aktarma formatı, viki işaretlemesinin XML değişimini içermiyor (daha eski bir teklif için Vikipedi DTD sayfasına bakın). Maddeyi düzenlerken yalnızca vikimetin alırsınız.
Örnek
<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 [[Special:MyLanguage/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 [[Special:MyLanguage/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
Biçimin resmi olmayan, kısa Document Type Definition sürümü. Bir DTD'nin ne olduğunu bilmiyorsanız, onu görmezden gelin.
<!ELEMENT mediawiki (siteinfo,page*)>
<!-- sürüm, biçimin sürüm numarasını içerir (şu anda 0.3) -->
<!ATTLIST mediawiki
version CDATA #REQUIRED
xmlns CDATA #FIXED "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)> <!-- vikinin adı -->
<!ELEMENT base (#PCDATA)> <!-- ana sayfanın url'si -->
<!ELEMENT generator (#PCDATA)> <!-- MediaWiki sürüm dizesi -->
<!ELEMENT case (#PCDATA)> <!-- sayfa adlarındaki vakalar nasıl işlenir -->
<!-- olası değerler: 'first-letter' | 'case-sensitive'
'Case-insensitive' seçeneği gelecek için ayrılmıştır -->
<!ELEMENT namespaces (namespace+)> <!-- ad alanlarının ve öneklerin listesi -->
<!ELEMENT namespace (#PCDATA)> <!-- ad alanı öneki içerir -->
<!ATTLIST namespace key CDATA #REQUIRED> <!-- dahili ad alanı sayısı -->
<!ELEMENT page (title,id?,restrictions?,(revision|upload)*)>
<!ELEMENT title (#PCDATA)> <!-- Ad alanı önekine sahip başlık -->
<!ELEMENT id (#PCDATA)>
<!ELEMENT restrictions (#PCDATA)> <!-- isteğe bağlı sayfa kısıtlamaları -->
<!ELEMENT revision (id?,timestamp,contributor,minor?,comment?,text)>
<!ELEMENT timestamp (#PCDATA)> <!-- ISO8601'e göre -->
<!ELEMENT minor EMPTY> <!-- küçük işareti -->
<!ELEMENT comment (#PCDATA)>
<!ELEMENT text (#PCDATA)> <!-- Vikisözdizim -->
<!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)>
XML dışa aktarımı işleme
Birçok araç dışa aktarılan XML'i işleyebilir. Çok sayıda sayfayı işlerseniz (örneğin tam bir döküm) büyük olasılıkla belgeyi ana bellekte alamayacaksınız, bu nedenle SAX ile dayalı bir ayrıştırıcıya ihtiyacınız olacak veya diğer olay odaklı yöntemlenir.
XML kodunun bölümlerini doğrudan işlemek için normal ifadeleri de kullanabilirsiniz. Bu, diğer yöntemlerden daha hızlı olabilir, ancak bakımı zor olduğu için önerilmez.
Lütfen XML dışa aktarımını işlemek için yöntemleri ve araçları burada listeleyin:
- * [Parse MediaWiki Dump Parse MediaWiki Dump] ([crates.io crates.io]), XML dökümlerini ayrıştırmak için bir Rust sandığıdır.
Ayrıntılar ve pratik tavsiyeler
- * Bir sayfanın ad alanını belirlemek için başlığını şurada tanımlanan öneklerle eşleştirmeniz gerekir:
/mediawiki/siteinfo/namespaces/namespace
- * Olası kısıtlamalar:
sysop
- korunan sayfalar
Neden dışa aktarılmalı
Neden dinamik bir veritabanı indirmesi kullanmıyorsunuz?
Vikipedi'den gelen bilgileri belirli noktalarda görüntüleyen bir yazılım oluşturduğunuzu varsayalım. Programınızın bilgileri canlı sürümde görünenden farklı bir şekilde görüntülemesini istiyorsanız, muhtemelen bitmiş html yerine onu girmek için kullanılan vikikoda ihtiyacınız olacaktır.
Ayrıca, tüm verileri almak istiyorsanız, muhtemelen mümkün olan en verimli şekilde aktarmak isteyeceksiniz. Wikimedia sunucularının, vikikodu HTML'ye dönüştürmek için epeyce çalışması gerekir. Bu hem sizin için hem de Wikimedia sunucuları için zaman alıcıdır, bu nedenle tüm sayfalarda gezinmek, yapılacak yol değildir.
XML'deki herhangi bir maddeye teker teker erişmek için şunlara bağlantı verin: