SQL’i sol tarafa yapıştır ve "Dönüştür"’e tıkla — XML’e çeviririzSQL yapıştır

Bu araç ne işe yarar

Bir sürü veritabanı satırını bir satıcıya, eski bir SOAP uç noktasına ya da hâlâ XML bekleyen antika bir ETL işine XML olarak aktarmak zorunda kaldıysan, nasıl olduğunu bilirsin — sorgu aracını açarsın, SELECT’i çalıştırırsın, dışa aktarırsın, çıktıyı elle düzeltirsin, tarih formatlarıyla boğuşursun. Bunun yerine SQL’i buraya yapıştır, tek seferde düzgün biçimli XML al. Çok satırlı INSERT ifadeleri, sadece şema içeren CREATE TABLE’lar ya da ikisinin karışımı — sonuç aynı.

Dönüştürücü SQL’i bir veritabanının okuduğu gibi okur. Çok satırlı bir INSERT’in her satırı bir öğeye, her sütun da sütun adını taşıyan bir alt öğeye dönüşür. NULL değerler boş öğe olur (böylece her satırın şekli aynı kalır). Tarih benzeri sabitler — '2024-01-15 10:30:00', DATE '2024-01-15' ya da ham timestamp’lar — ISO-8601 dizeleri olarak çıkar, böylece Java, .NET, Python ya da başka neredeyse her yerdeki parser’lar sorunsuz okur. Sayısal tipler hassasiyetini korur; booleanlar true/false olarak gelir.

public.orders veya dbo.Orders gibi şema ön ekli isimler, XML öğe adlarında nokta bulunamayacağı için öğe adında sadece orders ya da Orders olarak kırpılır. Tırnaklı tanımlayıcılar, MySQL’in backtick’leri ve PostgreSQL’in çift tırnaklı adları da aynı şekilde işlenir. Bir CREATE TABLE bıraktığında, o şema için bir XML iskeleti alırsın — her sütun için boş bir öğe, bir XSD taslağı veya örnek bir payload için oldukça pratiktir. Aynı sorguda birden fazla tablo mu var? Her biri çıktıda kendi bölümü olarak, yazdığın sırayla yer alır.

Nasıl kullanılır

Üç adım. Bir satır yapıştırsan da bin satır yapıştırsan da aynı şekilde çalışır.

1

SQL’ini yapıştır (ya da örneği dene)

SQL’i soldaki editöre olduğu gibi bırak. Bir veya birçok satırlı INSERT ifadeleri, CREATE TABLE tanımları ya da karışık — hepsi uygun. Gerçekçi, çok tablolu bir sipariş dump’ının nasıl göründüğünü görmek istersen Örnek Yükle’ye tıkla.

Yorumlar (-- ve /* ... */), şema önekleri, lehçeye özgü tırnaklamalar (MySQL backtick’leri, SQLite çift tırnakları, SQL Server köşeli parantezleri) ve sondaki noktalı virgüller hepsi sorunsuz geçer — öncesinde hiçbir şeyi temizlemene gerek yok.

2

Dönüştür’e bas

Yeşil Dönüştür düğmesine tıkla. Araç SQL’i parse eder, çok satırlı insert’in her satırını açar, tarihleri ve booleanları normalleştirir ve XML’i tek seferde kurar. Çalışırken kısa bir yükleme göstergesi görünür.

3

XML’i kopyala

Sağ panel, standartlara uyan herhangi bir XML parser’ı’nın kabul edeceği, girintili ve düzgün biçimli XML ile dolar. Doğrudan bir SOAP gövdesine, bir test fixture’ına, bir ETL drop klasörüne ya da nereye gerekiyorsa oraya kopyala.

Gerçekten işe yaradığı yerler

Veritabanı seed fixture’ları

Bir seed script’inden bir yığın <code>INSERT</code>’in var ve aynı veriye bir entegrasyon testi veya mock server için XML olarak ihtiyacın var. Insert’leri yapıştır, XML’i al, tamam — satır satır elle düzeltmek yok.

SOAP ve eski kurumsal entegrasyon

Eski bir iş ortağı sistemi, bir dizi veritabanı satırını yansıtan bir XML gövdesi bekliyor. Satırları tek tek stringleyen ara katman kodunu es geç; INSERT’i doğrudan yapıştır ve XML’i SOAP isteğine kopyala.

Denetim ve uyumluluk dışa aktarımları

Düzenleyiciler ve denetçiler hâlâ XML’e bayılıyor. Bir dışa aktarım hattı kurmadan, yeni INSERT ettiğin satırları (ya da bir log sorgusundan yakaladıklarını) imzalanabilir, arşivlenebilir bir XML belgesine dönüştür.

XML tabanlı ETL boru hatları

SSIS, Informatica ya da kendin yazdığın bir XSLT boru hattı gibi bir ETL aracını besliyor musun? Gerçek batch job bağlanmadan önce dönüşümü prototiplemek için yukarıdaki SQL örneğini XML’e çevir.

Sık sorulan sorular

Çok satırlı INSERT ifadeleri nasıl ele alınıyor?

Çok satırlı bir INSERT INTO orders (...) VALUES (...), (...), (...);, tablo için tek bir kapsayıcı öğeye, her satır için bir alt öğeye dönüşür — her alt öğe tablo adının tekil halini alır (yani orders satırları bir <orders> sarmalayıcısı içinde <order> öğelerine dönüşür). Tüm satırlar, sütun listesiyle aynı sırada aynı sütun alt öğelerine sahip olur, böylece yüzlerce satırın olsa bile çıktı tahmin edilebilir kalır.

NULL değerlere ne oluyor?

VALUES listesindeki bir NULL, atılmak yerine boş bir öğeye dönüşür (örn. <middle_name/>). Bu, her satırın şeklini aynı tutar; bu da sütunları sıraya göre dolaşan veya örnekten bir XSD üreten alt tüketiciler için önemlidir. Bunun yerine xsi:nil="true" istiyorsan çıktıyı ufak bir XSLT’ye sar ya da sonradan işle — dönüştürücü taşınabilirlik için sade, boş öğelerde kalır.

Tarihler ve timestamp’lar ISO-8601 olarak mı biçimleniyor?

Evet. '2024-01-15 10:30:00', DATE '2024-01-15', TIMESTAMP '2024-01-15 10:30:00+00' ve MySQL tadındaki '2024-01-15T10:30:00' gibi SQL sabitleri hepsi ISO-8601 dizeleri olarak çıkar (saat dilimi varsa 2024-01-15T10:30:00Z, yoksa sade 2024-01-15T10:30:00). Bu, her büyük dilin XML yığınının tek seferde temizce parse ettiği biçimdir.

Sadece bir CREATE TABLE yapıştırabilir miyim — satırsız?

Evet. Yalnızca şema içeren bir CREATE TABLE, bir XML iskeleti üretir: her sütun için, sütunların bildirildiği sırada, boş birer öğe. Örnek bir payload, XSD taslağı ya da elle dolduracağın bir test fixture’ı için güzel bir başlangıç noktası. CREATE TABLE’daki veri tipleri ipucu olarak okunur (tarihler tarih, sayısallar sayısal kalır) ama çıktıdaki boş öğeler tip bilgisi taşımaz.

Sorgumda birkaç tablo varsa?

Her INSERT ya da CREATE TABLE ifadesi, yazdığın sırayla çıktıda kendi üst seviye bölümünü üretir. orders oluşturup üç sipariş ekleyen, sonra altı order_items ekleyen karışık bir script, her biri bir kapsayıcı öğeye sarılmış üç tablo bölümü içeren bir belgeye dönüşür. Parser tabloları birleştirmeye ya da ilişkilendirmeye çalışmaz — sadece yapıştırdığın yapıyı korur.

public.orders veya dbo.Orders gibi şema öneklerini kaldırıyor mu?

Evet. XML öğe adlarında nokta bulunamaz, bu yüzden public.orders <orders>’e, dbo.Orders <Orders>’a ve my_schema."User Table" <User_Table>’a dönüşür (boşluklar alt çizgiye çevrilir çünkü XML adlarında boşluk da olamaz). MySQL backtick’leri, PostgreSQL çift tırnakları ve SQL Server köşeli parantezleri aynı şekilde temizlenir.

İşine yarayabilecek diğer araçlar

SQL’den XML’e dönüştürme yapbozun tek bir parçası. Bunlar iyi eşlik eder: