• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

E-Fatura Schematron Doğrulaması

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılım
  • Date 1 Şubat 2014

Bilindiği üzere belirli durumlara sahip iştiraklerin E-Fatura sistemine geçme zorunlulukları var. Hazırlanan faturalar XML biçiminde hazırlanmaktalar, fakat hazırlanan dökümanların Gelir İdaresi Başkanlığı tarafından sunulan dökümanlardaki kesin kıstaslara uyma zorunluluğu bulunuyor. Bu kıstaslar ise, ISO/IEC FDIS 19757-3 ile standart haline getirilen Schematron validasyon diliyle oluşturulmuştur.

Büyük bir parekende şirketinde .Net Developer olarak çalışan yakın bir arkadaşım, .Net ortamında Schematron validasyonu yapmak için uygun bir API bulunmadığını, Java ortamında bir çözüm bulup bulamayacağımızı söyledikten sonra, Java ile yazılmış birkaç kütüphane üzerinde denemeler yaptım. Bunun sonucunda UgliSch (Ugli Schematron Validator) ile Java ortamında sonuca vardım. Fakat .Net ortamıyla bir ilişik kurulması gerektiği için de, standalone olarak çalışan bir RESTful servis uygulaması geliştirdim. Şimdi sizlerle vardığım bu sonucu paylaşmak istemekteyim.

Schematron daha evvel belirttiğim üzere XML dökümanlarını validasyon/geçerleme işlemine tutuyor. Eğer XML dökümanı Schematron ile belirlenen kıstaslara uyuyorsa, XML geçerli, uymuyorsa da geçersiz oluyor. Yazılım ekosistemine bakıldığında XML validasyonu için yaygın biçimde XSD (XML Schema) teknolojisi kullanılsa da, Schematron’un XML Schema’ya göre artılarının bulunduğunu görmek zor değil.

Basit bir Schematron örneği

Aşağıdaki XML biçiminde tanımlanan Schematron içeriği, bir “end” isimli XML elemanının bir üstteki kardeşi ve adı start olana göre değer kıstası (büyüklük ) yapmakta, ve kıstas sağlanmadığında “The end page cannot be less than the start page” deyimini bildirmektedir.

<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns="http://purl.oclc.org/dsdl/schematron"
            xmlns:sch="http://purl.oclc.org/dsdl/schematron">
    <sch:pattern>
        <sch:rule context="end">
            <assert test=". &gt; preceding-sibling::start">
                The end page cannot be less than the start page
            </assert>
        </sch:rule>
    </sch:pattern>
</sch:schema>

Geçerli bir XML dökümanı

Yukarıda tek bir kıstasa sahip Schematron dosyasına göre validasyona tabi tutulacak geçerli bir XML dökümanı aşağıdaki gibidir. (37 > 36 olduğu için döküman geçerlidir.)

<?xml version="1.0" encoding="UTF-8"?>
<text-pages-r>
    <start>36</start>
    <end>37</end>
</text-pages-r>

Geçersiz bir XML dökümanı

Bu kısımda ise end <= start olduğu durumda döküman geçersiz (invalid) olacaktır.

<?xml version="1.0" encoding="UTF-8"?>
<text-pages-r>
    <start>36</start>
    <end>30</end>
</text-pages-r>

Gelir İdaresi Başkanlığının sunduğu Schematron ve örnek E-Fatura dökümanları için de aslında yukarıdaki senaryo bire bir aynıdır. Döküman http://www.efatura.gov.tr/dosyalar/kilavuzlar/e-FaturaPaket.zip adresinden indirilebilmektedir. Bu dökümanın içerisindeki schematron dizini altındaki UBL-TR_Main_Schematron.xml isimli döküman Schematron kısıtlarının kök dosyası iken, xml dizini altındaki XML kütükleri ise, örnel fatura dökümanlarıdır.

Örnek uygulama aşağıdaki bağlantıdan Kodcu.com’a giriş yaparak erişebilirsiniz.

https://github.com/rahmanusta/Schematron-Validation

Tekrar görüşmek dileğiyle..

Tag:backend, e-fatura, schematron, Xml

  • Share:
author avatar
Kodedu

Previous post

(Video) Java 8 Nashorn ile Javascript Webineri
1 Şubat 2014

Next post

Handlebars Template Çözümü
6 Şubat 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    6 Comments

  1. A.Alphan Arslan
    10 Eylül 2015
    Cevapla

    Elinize sağlık çok yararlı bir çalışma olmuş

  2. Murat
    5 Ocak 2016
    Cevapla

    merhaba. Bu formata uygun olmayan bir xml dosyasını GİB e uygun formata dönüştürme işlemi yapılabilir bir işlem mi? Yardımcı olabilirseniz çok sevinirim.

  3. ismet
    25 Haziran 2018
    Cevapla

    bu işlem 300 mb kadar ram bellek kullanıyor. Aynı anda 100 kişi bu işlemi yaparsa sunucu patlar. bunla alakalı nasıl bir çözüme gidebiliriz?

    • Rahman Usta
      5 Temmuz 2018
      Cevapla

      Nasıl ölçümlediniz?

  4. Ismet
    23 Kasım 2018
    Cevapla

    Bir faturanının xml dosyasını alıp şematrondan geçirdik o sırada Bellek Performansından inceledik.
    Ayrıca gelir idaresinin efatura.gov.tr adresindeki efatura görüntüleyici uygulaması da aynı şeklide çalışıyor.
    Bu herkesin kendi bilgisayarında kullanıldığı için sorun yok ama sunucuda kullanılırken aynı anda 100 faturayı kontrol ederken ram bellek kullanımını aşırı artacak ve sunucu donmaya başlayacaktır.

    • Rahman Usta
      4 Aralık 2018
      Cevapla

      Tek fatura ile elde ettiğiniz sonuç yanıltıcı olabilir. 100 faturalık bir stres testi yazarak gerçek etkiyi gözlemleyebilirsiniz.

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Dağıtık Versiyon Kontrol Sistemleri
13Ağu2012
JaxRS 2 – HTML 5 SSE (Server Sent Events)
04Tem2013
Slayt hazırlarken nelere dikkat etmeliyiz?
18May2015
Apache Tika : Dosya tipi nasıl tespit edilir?
18Ara2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.