GML (Geography Markup Language) dosyalarını dönüştürmek, okuyucu XML şemasını bulamadığında basit görünür. Bir GML dosyası, özellik türlerini ve özniteliklerini, schemaLocation özniteliği aracılığıyla referans verilen ayrı bir XSD’de tanımlar. Bu şema kaybolduğunda, taşındığında veya indirilemediğinde, öznitelik tanımları da kaybolur ve makinenizde çalışan bir dönüşüm işi, derleme sunucusunda başarısız olmaya başlar. Bu kılavuz, C# içinde Aspose.GIS for .NET kullanarak dönüşüm sırasında GML şema bilgisini nasıl koruyacağınızı ve özelliklerin ve özniteliklerin dönüşüm sürecinden sağ çıkıp çıkmadığını nasıl kanıtlayacağınızı gösterir.

GML Şemasını Korumak Neden Önemlidir

GML, geometri ve öznitelik verilerini birlikte taşıdığı için popüler bir değişim formatıdır. Bu verilerin yapısı, yani özellik türleri, öznitelik adları ve veri tipleri, bir uygulama şeması tarafından tanımlanır. Aspose.GIS bu şemayı okuyarak bir katmanın öznitelik koleksiyonunu oluşturur, böylece şema ham XML’i kodunuzda, QGIS’te veya ArcGIS’te kullanılabilir sütunlara dönüştürür.

Gerçek veri akışlarında şema genellikle en zayıf halkadır. Dosyalar XSD’siz kopyalanır, schemaLocation eski bir URL’ye işaret eder veya dönüşümü gerçekleştiren sunucunun internet erişimi yoktur. Bu durumlarda Aspose.GIS, özellik öznitelik koleksiyonunu oluşturamadığını açıklayan bir GisException ile durur. GmlOptions.RestoreSchema seçeneği, okuyucunun öznitelik şemasını doğrudan özellik verilerinden yeniden oluşturmasına izin vererek bu sorunu çözer; böylece dönüşümleriniz başarısız olmak yerine özniteliklerini korur ve eksik çıktı üretmez.

Aspose.GIS for .NET ile Başlarken

Aspose.GIS for .NET, GML, Shapefile, GeoJSON, KML ve File Geodatabase gibi GIS formatlarını okuma, yazma ve dönüştürme için yönetilen bir kütüphanedir; ArcGIS veya QGIS’in makinede yüklü olmasını gerektirmez. Projenize NuGet üzerinden ekleyin:

Install-Package Aspose.GIS

Veya .NET CLI ile:

dotnet add package Aspose.GIS

Daha fazla bilgi için Aspose.GIS for .NET ürün sayfasına ve Aspose.GIS .NET API Reference sayfasına göz atabilirsiniz. Bu öğreticide kullanılan iki ad alanı Aspose.Gis (içinde VectorLayer, Drivers ve ConversionOptions bulunur) ve Aspose.Gis.Formats.Gml (içinde GmlOptions bulunur) dir.

GML Şemasını Korumak İçin Adım Adım Eğitim

Aşağıdaki C# örneği, bir GML dosyasını yeni bir GML dosyasına dönüştürürken öznitelik şemasını geri yükler ve ardından sonucu doğrular. .NET 6 veya daha yeni bir sürümü hedef alır.

Örneğin yaptığı şey

  1. GmlOptions.RestoreSchema true olarak ayarlanmış okuyucu seçeneklerini oluşturur.
  2. Kaynak GML’yi açar ve özellik sayısını ve öznitelik adlarını kaydeder.
  3. Dosyayı VectorLayer.Convert ile dönüştürür, okuyucu seçeneklerini ConversionOptions.SourceDriverOptions aracılığıyla geçirir.
  4. Çıktıyı şema geri yükleme ile yeniden açar ve kaynağa karşı karşılaştırır.
using System;
using System.IO;
using System.Linq;
using Aspose.Gis;
using Aspose.Gis.Formats.Gml;

class PreserveGmlSchema
{
    static void Main()
    {
        // Input and output paths. Adjust them to your environment.
        string sourcePath = Path.Combine("data", "input.gml");
        string destinationPath = Path.Combine("data", "output.gml");

// Step 1: Capture the structure of the source layer.
        // RestoreSchema lets the reader infer attributes when the XSD is missing or unreachable.
        int sourceFeatureCount;
        string[] sourceAttributeNames;

using (VectorLayer source = VectorLayer.Open(sourcePath, Drivers.Gml, CreateReadOptions()))
        {
            sourceFeatureCount = source.Count;
            sourceAttributeNames = source.Attributes.Select(a => a.Name).ToArray();
        }

// Step 2: Convert GML to GML. RestoreSchema is a reader option,
        // so it is supplied through SourceDriverOptions.
        var conversionOptions = new ConversionOptions
        {
            SourceDriverOptions = CreateReadOptions()
        };

VectorLayer.Convert(sourcePath, Drivers.Gml, destinationPath, Drivers.Gml, conversionOptions);

// Step 3: Reopen the output and compare it with the source.
        using (VectorLayer output = VectorLayer.Open(destinationPath, Drivers.Gml, CreateReadOptions()))
        {
            if (output.Count != sourceFeatureCount)
            {
                throw new InvalidOperationException(
                    $"Feature count mismatch: source has {sourceFeatureCount}, output has {output.Count}.");
            }

string[] outputAttributeNames = output.Attributes.Select(a => a.Name).ToArray();
            string[] missingAttributes = sourceAttributeNames.Except(outputAttributeNames).ToArray();

if (missingAttributes.Length > 0)
            {
                throw new InvalidOperationException(
                    $"Attributes missing from output: {string.Join(", ", missingAttributes)}");
            }

Console.WriteLine($"Converted {output.Count} features with {output.Attributes.Count} attributes:");

foreach (FeatureAttribute attribute in output.Attributes)
            {
                Console.WriteLine($"  {attribute.Name} ({attribute.DataType})");
            }
        }
    }

// A fresh options instance for each read keeps the configuration explicit.
    static GmlOptions CreateReadOptions() => new GmlOptions { RestoreSchema = true };
}

Her Adımın Açıklaması

  • Okuyucu seçeneklerini oluşturma – GmlOptions GML’ye özgü sürücü ayarlarını tutar. GmlOptions.RestoreSchema referansına göre, bunu true olarak ayarlamak, okuyucunun artık bir XML şeması gerektirmediği anlamına gelir. Sürücü dosyayı bilinen GML yapıları için tarar ve özellik sınıflarını ve özelliklerini çıkarır. Varsayılan false‘tür.
  • Kaynak yapıyı yakalama – Kaynağı VectorLayer.Open ile açmak bir temel sağlar. layer.Count özellik sayısını döndürür ve layer.Attributes nitelik koleksiyonunu ortaya çıkarır; burada her FeatureAttribute bir Name ve bir DataType içerir.
  • VectorLayer.Convert çağrısı – Burada kullanılan aşırı yükleme, kaynak yolu, kaynak sürücüsü, hedef yolu, hedef sürücüsü ve bir ConversionOptions nesnesini kabul eder. SourceDriverOptions girdinin nasıl okunacağını, DestinationDriverOptions ise çıktının nasıl yazılacağını kontrol eder. RestoreSchema okuma işlemini etkilediği için kaynak tarafına uygulanır.
  • Çıktıyı doğrulama – Çıktı aynı okuyucu seçeneğiyle yeniden açılır, böylece doğrulama bir XSD varlığına bağlı olmaz. Sabit kodlanmış sayılar yerine örnek, çıktıyı kaynakla karşılaştırır. Özellikler veya nitelikler kaybolduğunda işlem başarısız olur ve gözden geçirmek için geri getirilen nitelik adları ve veri tipleri yazdırılır. gml_id gibi tanımlayıcılar dönüşüm sonrası farklı şekilde ortaya çıkabileceği için ekstra nitelikler hata olarak değerlendirilmez.

Orijinal XSD Mevcut Olduğunda GML Okuma

Şema geri yükleme bir geri dönüş yoludur. Orijinal şema dosyanız hâlâ varsa, okuyucuyu SchemaLocation ile ona yönlendirin, böylece öznitelik tanımları çıkarım yapılmak yerine XSD’den gelir:

using System;
using Aspose.Gis;
using Aspose.Gis.Formats.Gml;

var options = new GmlOptions
{
    // Space-separated pair: namespace URI, then the path to its XML schema.
    SchemaLocation = "http://www.example.com/myfeatures schema.xsd",
    LoadSchemasFromInternet = false
};

using (VectorLayer layer = VectorLayer.Open("input.gml", Drivers.Gml, options))
{
    Console.WriteLine($"Features: {layer.Count}, attributes: {layer.Attributes.Count}");
}

SchemaLocation null olduğunda (varsayılan), Aspose.GIS schemaLocation öğesini GML belgesinin kök öğesinden okur. LoadSchemasFromInternet varsayılan olarak false olduğundan, mutlak ve file:// olmayan URI’ler tarafından referans verilen şemalar, siz etkinleştirene kadar indirilmez.

Ücretsiz Lisans Al

Aspose.GIS, bir lisans uygulanana kadar sınırlamalarla değerlendirme modunda çalışır. Tam özellik setini test etmek için, bir Ücretsiz Geçici Lisans isteyin ve ilk GIS işleminizden önce uygulayın:

var license = new Aspose.Gis.License();
license.SetLicense("Aspose.GIS.NET.lic");

Ücretsiz Ek Kaynaklar

Sonuç

GML şema bilgisinin dönüştürme sırasında korunması, kaynağın nasıl okunduğunu kontrol etmeye bağlıdır. GmlOptions.RestoreSchema ConversionOptions.SourceDriverOptions aracılığıyla geçirildiğinde, Aspose.GIS for .NET, XSD eksik veya erişilemez olduğunda bile öznitelik tanımlarını yeniden oluşturabilir, böylece dönüşümler veri kaybı yaşamadan devam eder. Bu seçeneği kaynak-çıktı karşılaştırmasıyla birleştirmek, özelliklerin ve özniteliklerin başarıyla aktarıldığını kanıtlar; ve orijinal şema mevcut olduğunda SchemaLocation‘a geçmek en doğru sonucu verir. Bu uygulamalar birlikte GML dönüşümünü toplu işler, web hizmetleri ve CI boru hatlarında güvenilir kılar.

SSS

1. GmlOptions.RestoreSchema gerçekte ne yapar?
Dosya tarafından başvurulan XML şeması (XSD) eksik olduğunda veya yüklenemediğinde, Aspose.GIS GML okuyucusunun özellik niteliklerini ayrıştırmasına izin verir. Sürücü, belgede bilinen GML yapıları için tarama yapar ve veriden özellik sınıflarını ve bunların özelliklerini çıkarır. Varsayılan değer false‘dır.

2. Hem dönüşüm hem de çıktı dosyası için RestoreSchema ayarlamam gerekiyor mu? Yalnızca şeması yüklenemeyen dosyalar için. RestoreSchema bir okuyucu seçeneğidir, bu nedenle dönüşüm sırasında ConversionOptions.SourceDriverOptions içinde yer alır ve çıktıyı yeniden açtığınızda VectorLayer.Open‘a geçirirsiniz. Örnek, iş akışının bir XSD’ye bağlı olmaması için her iki yerde de ayarlar.

3. RestoreSchema false olduğunda ve şema eksik olduğunda ne olur? Aspose.GIS, özellik öznitelik koleksiyonunu oluşturamaz ve bir GisException fırlatır. İstisna mesajı, şema çevrimiçi barındırıldığında RestoreSchema değerini true olarak ayarlamayı veya LoadSchemasFromInternet değerini true olarak ayarlamayı önerir.

4. Geri yüklenen şema orijinal XSD ile aynı mı?
Gerekli olmayabilir. Aspose.GIS, şema geri yüklemenin hata eğilimli olduğunu, çünkü özniteliklerin dosya taranarak çıkarıldığını belirtir. Sonucu, örnek gibi doğrulayın ve orijinal XSD’ye sahip olduğunuzda GmlOptions.SchemaLocation kullanın.

5. GML’yi Shapefile, GeoJSON veya diğer formatlara dönüştürürken RestoreSchema’yı kullanabilir miyim? Evet. SourceDriverOptions GML kaynağının hedef sürücü ne olursa olsun nasıl okunacağını kontrol eder. Geri yüklenen öznitelikler daha sonra hedef formatın kendi öznitelik modeli kullanılarak yazılır.

6. Bu kodu çalıştırmak için lisansa ihtiyacım var mı? Hayır. Lisans olmadan, Aspose.GIS sınırlamalarla değerlendirme modunda çalışır. Ücretsiz geçici bir lisans, test için bu sınırlamaları kaldırır ve üretim kullanımı satın alınan bir lisans gerektirir.

Devamını Oku