Makale Özeti

Office Open XML(diğer adları ile OOXML veya OpenXML) bilgisayar dünyası üzerinde kullanılan dosya formatlarının xml tabanlı bir standart haline gelmesidir. Yani tüm platformlarda(windows, linux, mac ...) ve yazılımlarda (.net, java, javascript ...) oluşturulan dosyaların ortak bir standart halinde oluşturulmasını ve oluşturulan bu formatın tüm platformlarda ve yazılımlarda kullanılabilmesi amaçlanmaktadır.Bilindiği gibi Open Document Format – ODF‘nin 2006 mayıs itibariyle ISO standardı olarak kabul edilmişti fakat bu standartta ortaya çıkan sıkıntılardan sonra Microsoft ve alanlarında uzman birkaç firma yeni bir standart üzerinde anlaştı, işte bu yeni standartı sizlere ayrıntılı olarak anlatacağım OOXML(Open Office XML ya da OpenXML)'dir. Bu yeni standart oluşturulduktan sonra tüm dünyada ISO ulusal birimleri Open Office XML’in standard olması konusunda incelemeler yapıp hatalarını bulup düzeltildikten sonra bu yeni standarta 'evet' ya da 'hayır' denilecek. Türkiye'de TSE tarafından yapılan incelemeler sonrasında şimdilik bu standarta evet denilmiştir.

Makale

OOXML (Open Office XML ya da OpenXML)'e İlk Bakış

        Office Open XML(diğer adları ile OOXML veya OpenXML) bilgisayar dünyası üzerinde kullanılan dosya formatlarının xml tabanlı bir standart haline gelmesidir. Yani tüm platformlarda(windows, linux, mac ...) ve yazılımlarda (.net, java, javascript ...) oluşturulan dosyaların ortak bir standart halinde oluşturulmasını ve oluşturulan bu formatın tüm platformlarda ve yazılımlarda kullanılabilmesi amaçlanmaktadır.Bilindiği gibi Open Document Format – ODF‘nin 2006 mayıs itibariyle ISO standardı olarak kabul edilmişti fakat bu standartta ortaya çıkan sıkıntılardan sonra Microsoft ve alanlarında uzman birkaç firma yeni bir standart üzerinde anlaştı, işte bu yeni standartı sizlere ayrıntılı olarak anlatacağım OOXML(Open Office XML ya da OpenXML)'dir. Bu yeni standart oluşturulduktan sonra tüm dünyada ISO ulusal birimleri Open Office XML’in standard olması konusunda incelemeler yapıp hatalarını bulup düzeltildikten sonra bu yeni standarta 'evet' ya da 'hayır' denilecek. Türkiye'de TSE tarafından yapılan incelemeler sonrasında şimdilik bu standarta evet denilmiştir. Tüm dünyada açık kaynak kodu destekçileri biraz bu standartı belirleyenlerin arasında Microsoft'un bulunmasından birazda standart hakkındaki düşüncelerinden dolayı standartı desteklememekte ve karşı çıkmaktadırlar. Desteklememe nedenlerini anlatan bir makaleyi http://www.noooxml.org/local--files/arguments/TheCaseAgainstOOXML.pdf adresinden ingilizce olarak ya da http://tr.pardus-wiki.org/OOXML'e_Dair_Kar%C5%9F%C4%B1_G%C3%B6r%C3%BC%C5%9F adresinden Türkçe çevirisini okuyabilirsiniz. Burada oylama sonuçlarından ya da standart haline gelip gelmemesinden bahsetmek yerine sizlere standart hakkında bilgi vereceğim.

        Öncelikle OOXML ile ilgili bilgi, haber ve kaynak dökümanları için http://openxmldeveloper.org/default.aspx , http://www.openxmlcommunity.org/ sitelerini incelemenizi hatta üye olmanızı öneririm. Bildiğiniz gibi Ms.Office 2007 çıkmadan önce ofis dökümanları binary tabanlı dosyalardı. Bu dosyaları sadece ofis programları ile anlamlı bir şekilde açabilirdik. Fakat OpenXml ile ofis dökümanları xml alt yapısına dayandırılmaktadır ve Ofis dökümanları ilgili markup(işaretleme) dili ile yazılmaktadır. OOXML içerisinde dökümanlar(word) için WordprocessingML(ML-markup language), çizelgeler(excel) için SpreadsheetML ve yansı(powerpoint) için PresentationML dilleri kullanılmaktadır. Bu dillerden ayrıca bu dillere destek olmak amacıyla resim çizmek ve resim işlemleri için DrawingML, Microsoft Office XML özel formatları için CustomXML, kaynak gösterimleri için Bibliography, vektörel çizimler için VML, metadata'lar için Metadata ve matematiksel işlemler için Equations yardımcı dilleri bulunmaktadır.Aşağıdaki şekil OOXML'e genel bir bakış sunmaktadır. Burada bulunan ZIP ve XML + Unicode temel OOXML parçası değil OOXML destekleyen teknolojilerdir.

WordprocessingML İle OpenOfficeXML'e Giriş


            Microsoft Office kullanarak hazırladığınız bir dökümanı sadece yukarıda anlatılan markup dilleri ile yazarak aynısını oluşturabilirsiniz. Word dökümanını örnek olarak aldığımızda bir Word dökümanında, Header, Footer, Footer notes,  End notes, Settings, Web Settings,  Font Table, Glossary, Themes, Styles gibi alanlar bulunur. Bu alanların her birine karşılık gelen bir language tag yapıları ya da genel bir yapı oluşturabilmeniz için gerekli xml dökümanı yapacağınız dosyalar içerisinde bulunacaktır. İlerleyen makalelerde adım adım bu ilgili yapıları açıp bu yapıları xml kullanarak nasıl yapılabileceğini uygulamalı olarak anlatacağım.

         Yukarıdaki tanımları okuduktan sonra benim de yukarıdaki bilgileri ilk bilgileri duyduğum zaman yaptığım gibi hemen bir ofis 2007 word(docx uzantılı) dosyası oluşturup. Sonra içerisine notepad ya da başka bir editörle baktıysanız büyük bir hayal kırıklığına uğramışsınızdır. Çünkü xml tabanlı olan docx dosyasını notepad'de açmaya çalıştığınızda notepad ya da kullandığınız editörde uyarı vererek dosyayı açacak ve dosya içerisinde byte olarak yazılmış ve sizin anlamadığımız bir sürü karakterin olduğunu göreceksiniz. Hemen paniğe kapılmayın ve üzülmeyin docx dosya uzantısı hala :)) xml alt yapısını kullanmaktadır. Fakat sizin gördüğünüz dosyada byte kodlarının olmasının nedeni dosyanın sıkıstırılmış olmasından kaynaklanmaktadır. İşte  yukarıdaki şekilde görülen  ZIP teknolojisi burada OOXML için kullanılmaktadır. Docx ile hazırlanmış dosyanın uzantısını .zip haline getirip zipli dosyayı açtığınızda ofis içerisinde kullanılan Xml teknolojisi karşınıza çıkacaktır. Açtığınız dosya üzerisinde birçok xml dosyası ve dosyalar göreceksiniz. Bu dosyaların ve klasörlerin herbirinin birer anlamı vardır. Bunlar az önce anlattığım gibi Word dökümanının birer yapısıdır. Sizlere bir word dosyasının oluşturulması için gereken üç dosya olan document.xml, [Content_Types].xml ve .rels dosyasını anlatacağım. İlerleyen makalelerde diğer dosyaların ne anlama geldiğini adım adım göreceğiz. Bu anlattığım işlemin tam tersini yani bu döküman üzerinde tüm dosyaları seçip sağ tuş ile Compressed (zipped) folder dediğinizde tekrar bu dosyalar .zip dosya haline gelecektir. Bu zip dosyasının uzantısını .docx yaparak hazırladığınız dökümanı .docx olarak kullanabilirsiniz. Şimdi bu açılan dosyaların anlamlarının ne olduğu ve minimum bir word dosyası yapabilmek için gereken xml dosyalarının hazırlanışını beraber oluşturacağız..
Bir word dosyası aşağıda şekilde gösterilen yapılardan oluşur.

document.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <w:document xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
        <w:body>
            <w:p w:rsidR="00000000" w:rsidRDefault="00A454EC">
                <w:r>
                        <w:t>Mehmet Ali ECER</w:t>
                </w:r>
            </w:p>
        <w:sectPr w:rsidR="00A454EC">
            <w:pgSz w:h="16838" w:w="11906"/>
            <w:pgMar w:bottom="1417" w:footer="708" w:gutter="0" w:header="708" w:left="1417" w:right="1417" w:top="1417"/>
            <w:cols w:space="708"/>
            <w:docGrid w:linePitch="360"/>
        </w:sectPr>
        </w:body>
    </w:document>

 

    Bu dosya word içerisine yazdığımız verileri tutacaktır. Mehmet Ali ECER yazılı bir word dökümanı için yukarıdaki  gibi gözükecektir. Dosyayı zip yapıp word haline getirdiğimizde ilgili WordprocessingML çözüleceği için ilk tarafa bu tagler eklenmelidir. Burada bizi ilgilendiren ve daha sonra ayrıntılı olarak da irdeleyeceğimiz bölüm Mehmet Ali ECER yazan bölümdür. İleride bu bölüm üzerinde değişiklikler yaparak word dökümanı üzerinde istediğimiz işlemleri yapacağız. Sonuç olarak sadece ilgili bu bölümü oynayarak tam anlamıyla bir word dökümanı elde edebiliriz.

<w:p w:rsidR="00000000" w:rsidRDefault="00A454EC">
                <w:r>
                        <w:t>Mehmet Ali ECER</w:t>
                </w:r>
</w:p>

        [Content_Types].xml dosyası OOXML ile gelen xml dosyalarının teker teker sahip olacağı paket isimlerini(XML Namespace) tutar. ZIP yapılırken kullanılan dosyadır. Basit olarak gösterimi aşağıdadır.

[Content_Types].xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
        <Default ContentType="application/vnd.openxmlformats-package.relationships+xml" Extension="rels"/>
        <Default ContentType="application/xml" Extension="xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml" PartName="/word/document.xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml" PartName="/word/styles.xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" PartName="/docProps/app.xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml" PartName="/word/settings.xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.theme+xml" PartName="/word/theme/theme1.xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml" PartName="/word/fontTable.xml"/>
        <Override ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml" PartName="/word/webSettings.xml"/>
        <Override ContentType="application/vnd.openxmlformats-package.core-properties+xml" PartName="/docProps/core.xml"/>
    </Types>

        _rels klasörü altında bulunan .rels dosyası tek tek döküman dosyalarının birbiri ile bağlantılarını tutar. Gösterimi aşağıdadır. Aşağıdaki örnek üzerinden gitmek gerekirse word klasörünün altındaki document.xml Type olarak belirtilen http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument ile ilişkilidir ve kullanılacak paketidir. Ayrıca klasör isimleri ve dosya isimleri isim duyarlıdır(case sensitive)'dir, bu isimlendirmede yapılacak bir hata docx dosyasının oluşmamasına neden olacaktır. Aşağıda gözüktüğü gibi Relation tag'ları vasıtası ile ilişki verilir. Id tekil bir ilişki ismi alır, Target ilgili dosyayı tam yol olarak alır. Type ise özel dosya tiplerini alır.
.rels

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Target="docProps/app.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"/>
<Relationship Id="rId2" Target="docProps/core.xml" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"/>
<Relationship Id="rId1" Target="word/document.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"/>
</Relationships>

Yukarıda anlatılan 3 dosya ile bir docx dosya oluşturulabilir. Fakat şekilde gösterildiği gibi alanlar kullanılacaksa bunlar için gerekli xml dosyaları ve klasörleri eklenir ve buna uygun olarak _rel dosyası değiştirilir. Bundan sonra anlatacağım işlemler document nesnesini nasıl yazabileceğimiz ve bu nesne üzerine işlemler yapan nesneler olacaktır.

Makalede ya da kodlarda bulunan hatalar ya da sorularınız için mehmetaliecer@gmail.com adresinden bana ulaşabilirsiniz. İyi çalışmalar.

Mehmet Ali ECER

www.mehmetaliecer.com