Mengonversi file GML (Geography Markup Language) tampak sederhana sampai pembaca tidak dapat menemukan skema XML. Sebuah file GML menjelaskan tipe fitur dan atributnya dalam XSD terpisah yang direferensikan melalui atribut schemaLocation. Ketika skema tersebut hilang, dipindahkan, atau tidak dapat diunduh, definisi atribut ikut hilang, dan pekerjaan konversi yang berhasil di mesin Anda mulai gagal di server build. Panduan ini menunjukkan cara mempertahankan informasi skema GML selama konversi di C# menggunakan Aspose.GIS for .NET, serta cara membuktikan bahwa fitur dan atribut berhasil melewati proses bolak‑balik.
Mengapa Mempertahankan Skema GML Penting
GML adalah format pertukaran yang populer karena membawa data geometri dan atribut bersama‑sama. Struktur data tersebut, yaitu tipe fitur, nama atribut, dan tipe data, didefinisikan oleh skema aplikasi. Aspose.GIS membaca skema ini untuk membangun koleksi atribut lapisan, sehingga skema tersebut yang mengubah XML mentah menjadi kolom yang dapat digunakan dalam kode Anda, di QGIS, atau di ArcGIS.
Dalam pipeline nyata, skema sering menjadi tautan terlemah. File disalin tanpa XSD‑nya, schemaLocation mengarah ke URL yang sudah usang, atau server yang menjalankan konversi tidak memiliki akses internet. Dalam kasus ini Aspose.GIS berhenti dengan GisException yang menjelaskan bahwa ia gagal membangun koleksi atribut fitur. Opsi GmlOptions.RestoreSchema menyelesaikan masalah ini dengan memungkinkan pembaca merekonstruksi skema atribut dari data fitur itu sendiri, sehingga konversi Anda mempertahankan atributnya alih‑alih gagal atau menghasilkan output yang tidak lengkap.
Memulai dengan Aspose.GIS for .NET
Aspose.GIS for .NET adalah pustaka terkelola untuk membaca, menulis, dan mengonversi format GIS seperti GML, Shapefile, GeoJSON, KML, dan File Geodatabase, tanpa memerlukan ArcGIS atau QGIS di mesin. Tambahkan ke proyek Anda dari NuGet:
Install-Package Aspose.GIS
Atau dengan .NET CLI:
dotnet add package Aspose.GIS
Anda dapat mempelajari lebih lanjut di halaman produk Aspose.GIS for .NET dan di Aspose.GIS .NET API Reference. Dua namespace yang digunakan dalam tutorial ini adalah Aspose.Gis, yang berisi VectorLayer, Drivers, dan ConversionOptions, serta Aspose.Gis.Formats.Gml, yang berisi GmlOptions.
Tutorial Langkah-demi-Langkah untuk Mempertahankan Skema GML
Contoh C# berikut mengonversi file GML ke file GML baru sambil memulihkan skema atribut, kemudian memverifikasi hasilnya. Ini menargetkan .NET 6 atau yang lebih baru.
Apa yang dilakukan contoh ini
- Membuat opsi pembaca dengan
GmlOptions.RestoreSchemadiatur ketrue. - Membuka GML sumber dan mencatat jumlah fitur serta nama atributnya.
- Mengonversi file dengan
VectorLayer.Convert, mengirimkan opsi pembaca melaluiConversionOptions.SourceDriverOptions. - Membuka kembali output dengan pemulihan skema dan membandingkannya dengan sumber.
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 };
}
Penjelasan Setiap Langkah
Membuat opsi pembaca –
GmlOptionsmenyimpan pengaturan driver khusus GML. Menurut referensi GmlOptions.RestoreSchema , mengatur ketrueberarti pembaca tidak lagi memerlukan skema XML. Driver memindai file untuk struktur GML yang dikenal dan menyimpulkan kelas fitur serta propertinya. Nilai default adalahfalse.Menangkap struktur sumber – Membuka sumber dengan
VectorLayer.Openmemberi Anda dasar.layer.Countmengembalikan jumlah fitur, danlayer.Attributesmenampilkan koleksi atribut, di mana setiapFeatureAttributememilikiNamedanDataType.Memanggil
VectorLayer.Convert– Overload yang digunakan di sini menerima jalur sumber, driver sumber, jalur tujuan, driver tujuan, dan objekConversionOptions.SourceDriverOptionsmengontrol cara input dibaca, sementaraDestinationDriverOptionsmengontrol cara output ditulis. KarenaRestoreSchemamemengaruhi pembacaan, opsi ini ditempatkan pada sisi sumber.Memverifikasi output – Output dibuka kembali dengan opsi pembaca yang sama sehingga verifikasi tidak bergantung pada keberadaan XSD. Alih-alih angka yang ditetapkan secara keras, contoh ini membandingkan output dengan sumber. Ia gagal ketika fitur atau atribut hilang dan mencetak nama atribut yang dipulihkan serta tipe data untuk ditinjau. Atribut tambahan tidak dianggap sebagai kesalahan, karena pengidentifikasi seperti
gml_iddapat ditampilkan secara berbeda setelah konversi.
Membaca GML Saat XSD Asli Tersedia
Pemulihan skema adalah solusi cadangan. Jika Anda masih memiliki file skema asli, arahkan pembaca ke file tersebut dengan SchemaLocation sehingga definisi atribut berasal dari XSD alih‑alih diinferrensikan:
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}");
}
Ketika SchemaLocation bernilai null (default), Aspose.GIS membaca schemaLocation dari elemen root dokumen GML. LoadSchemasFromInternet secara default bernilai false, sehingga skema yang direferensikan oleh URI absolut non-file:// tidak diunduh kecuali Anda mengaktifkannya.
Dapatkan Lisensi Gratis
Aspose.GIS berjalan dalam mode evaluasi dengan batasan hingga lisensi diterapkan. Untuk menguji seluruh set fitur, minta Lisensi Sementara Gratis dan terapkan sebelum operasi GIS pertama Anda:
var license = new Aspose.Gis.License();
license.SetLicense("Aspose.GIS.NET.lic");
Sumber Daya Tambahan Gratis
- Aspose.GIS Dokumentasi
- Referensi API untuk Aspose.GIS
- Referensi Kelas GmlOptions
- Aplikasi GIS Gratis Online
Kesimpulan
Mempertahankan informasi skema GML selama konversi bergantung pada mengontrol cara sumber dibaca. Dengan GmlOptions.RestoreSchema yang diteruskan melalui ConversionOptions.SourceDriverOptions, Aspose.GIS for .NET dapat membangun kembali definisi atribut bahkan ketika XSD tidak ada atau tidak dapat dijangkau, sehingga konversi mempertahankan data mereka alih-alih gagal. Menggabungkan opsi tersebut dengan perbandingan sumber-ke-output memberi Anda bukti bahwa fitur dan atribut berhasil melewati proses, dan beralih ke SchemaLocation ketika skema asli tersedia memberikan hasil yang paling akurat. Bersama-sama, praktik ini membuat konversi GML dapat diandalkan dalam pekerjaan batch, layanan web, dan pipeline CI.
FAQs
1. Apa yang sebenarnya dilakukan oleh GmlOptions.RestoreSchema?
Ini memungkinkan pembaca GML Aspose.GIS untuk mengurai atribut fitur ketika skema XML (XSD) yang dirujuk oleh file tidak ada atau tidak dapat dimuat. Driver memindai dokumen untuk struktur GML yang dikenal dan menyimpulkan kelas fitur serta properti mereka dari data. Nilai default adalah false.
2. Apakah saya perlu mengatur RestoreSchema untuk konversi dan file output?
Hanya untuk file yang skemanya tidak dapat dimuat. RestoreSchema adalah opsi pembaca, jadi selama konversi ia berada di ConversionOptions.SourceDriverOptions, dan ketika Anda membuka kembali output Anda melewatkannya ke VectorLayer.Open. Contoh mengaturnya di kedua tempat sehingga alur kerja tidak bergantung pada XSD yang tersedia.
3. Apa yang terjadi jika RestoreSchema bernilai false dan skema tidak ada?
Aspose.GIS tidak dapat membangun koleksi atribut fitur dan melempar GisException. Pesan pengecualian menyarankan untuk mengatur RestoreSchema ke true, atau LoadSchemasFromInternet ke true ketika skema dihosting secara online.
4. Apakah skema yang dipulihkan identik dengan XSD asli?
Tidak selalu. Aspose.GIS menggambarkan pemulihan skema sebagai rawan kesalahan karena atribut disimpulkan dengan memindai file. Verifikasi hasilnya, seperti yang dilakukan contoh, dan gunakan GmlOptions.SchemaLocation ketika Anda memiliki XSD asli.
5. Bisakah saya menggunakan RestoreSchema saat mengonversi GML ke Shapefile, GeoJSON, atau format lain?
Ya. SourceDriverOptions mengontrol cara sumber GML dibaca terlepas dari driver tujuan. Atribut yang dipulihkan kemudian ditulis menggunakan model atribut milik format tujuan.
6. Apakah saya memerlukan lisensi untuk menjalankan kode ini? Tidak. Tanpa lisensi, Aspose.GIS berjalan dalam mode evaluasi dengan batasan. Lisensi sementara gratis menghapus batasan tersebut untuk pengujian, dan penggunaan produksi memerlukan lisensi yang dibeli.
