Aracılığıyla paylaş


Yazılan XML'yi yazılmamış XML ile karşılaştırma

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

xml türünün değişkenlerini, parametrelerini ve sütunlarını oluşturabilirsiniz. İsteğe bağlı olarak xml şemaları koleksiyonunu xml türünde bir değişken, parametre veya sütunla ilişkilendirebilirsiniz. Bu durumda xml veri türü örneği, tipisıfatıyla adlandırılır. Aksi takdirde, XML örneği tipi belirlenmemişolarak adlandırılır.

İyi biçimlendirilmiş XML ve XML veri türü

xml veri türü, ISO standart xml veri türünü uygular. Bu nedenle, iyi biçimlendirilmiş XML sürüm 1.0 belgelerini ve aynı zamanda metin düğümleri ve rastgele sayıda üst düzey öğe içeren xml içerik parçalarını yazılmamış bir XML sütununda depolayabilir. Sistem, verilerin iyi biçimlendirilmiş olup olmadığını denetler, sütunun XML şemalarına bağlı olmasını gerektirmez ve genişletilmiş anlamda iyi biçimlendirilmemiş verileri reddeder. Bu, yazılmamış XML değişkenleri ve parametreleri için de geçerlidir.

XML şemaları

XML şeması aşağıdakileri sağlar:

  • Doğrulama kısıtlamaları. Yazılan bir xml örneği her atandığında veya değiştirildiğinde, SQL Server örneği doğrular.

  • Veri türü bilgileri. Şemalar, xml veri türü örneğindeki öznitelik ve öğe türleri hakkında bilgi sağlar. Tür bilgileri, örneğinde yer alan değerlere tipi belirtilmemiş xmlile mümkün olandan daha kesin işlem semantiği sağlar. Örneğin, ondalık aritmetik işlemler bir ondalık değer üzerinde gerçekleştirilebilir, ancak bir dize değeri üzerinde gerçekleştirilemez. Bu nedenle, yazılan XML depolaması, yazılmamış XML'den çok daha küçük hale getirilebilir.

Yazılan veya yazılmamış XML'i seçme

Aşağıdaki durumlarda yazılmamış xml veri türünü kullanın:

  • XML verileriniz için bir şemanız yok.

  • Şemalarınız var, ancak sunucunun verileri doğrulamasını istemiyorsunuz. Bazen bir uygulama verileri sunucuda depolamadan önce istemci tarafı doğrulama gerçekleştirdiğinde veya şemaya göre geçersiz olan XML verilerini geçici olarak depoladığında veya sunucuda desteklenmeyen şema bileşenlerini kullandığında bu durum geçerlidir.

Aşağıdaki durumlarda, yazılan xml veri türünü kullanın:

  • XML verileriniz için şemalarınız var ve sunucunun XML verilerinizi XML şemalarına göre doğrulamasını istiyorsunuz.

  • Tür bilgilerine göre depolama ve sorgu iyileştirmelerinden yararlanmak istiyorsunuz.

  • Sorgularınızın derlenmesi sırasında tür bilgilerinden daha iyi yararlanmak istiyorsunuz.

Yazılan XML sütunları, parametreleri ve değişkenleri XML belgelerini veya içeriğini depolayabilir. Ancak, bildirim sırasında bir belgeyi veya içeriği depolamak isteyip istemediğinizi bayrakla belirtmeniz gerekir. Ayrıca, XML şemaları koleksiyonunu sağlamanız gerekir. XML örneğinde yalnızca bir tane üst düzey unsur varsa DOCUMENT belirtin. Aksi takdirde, içerik'i kullanın. Sorgu derleyicisi, tekil üst düzey öğeleri çıkarsamak için sorgu derleme işlemi sırasında tür denetimlerinde DOCUMENT bayrağını kullanır.

Yazılan XML oluşturma

Xml değişkenleri, parametreleri veya sütunları yazabilmeniz için önce CREATE XML SCHEMA COLLECTION (Transact-SQL) kullanarak XML şema koleksiyonunu kaydetmeniz gerekir. Daha sonra XML şema koleksiyonunu xml veri türünün değişkenleri, parametreleri veya sütunlarıyla ilişkilendirebilirsiniz.

Aşağıdaki örneklerde, XML şema koleksiyonu adını belirtmek için iki parçalı bir adlandırma kuralı kullanılır. İlk bölüm şema adı, ikinci bölüm ise XML şema koleksiyonu adıdır.

Örnek: Şema koleksiyonunu XML türü değişkeniyle ilişkilendirme

Aşağıdaki örnek bir xml türü değişkeni oluşturur ve bir şema koleksiyonunu onunla ilişkilendirir. Örnekte belirtilen şema koleksiyonu AdventureWorks veritabanında zaten içeri aktarıldı.

DECLARE @x xml (Production.ProductDescriptionSchemaCollection);

Örnek: Xml türü sütunu için şema belirtme

Aşağıdaki örnek, xml türü sütunu olan bir tablo oluşturur ve sütun için bir şema belirtir:

CREATE TABLE T1(
Col1 int,
Col2 xml (Production.ProductDescriptionSchemaCollection));

Örnek: Xml türü parametresini saklı yordama geçirme

Aşağıdaki örnek, saklı yordama bir xml türü parametresi geçirir ve değişkeni için bir şema belirtir:

CREATE PROCEDURE SampleProc
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection)
AS
...

XML şema koleksiyonu hakkında aşağıdakilere dikkat edin:

  • XML şema koleksiyonu yalnızca xml şema koleksiyonu oluşturmakullanılarak kaydedildiği veritabanında kullanılabilir.

  • Dizeden yazılan xml veri türüne yayınlarsanız, ayrıştırma, belirtilen koleksiyondaki XML şeması ad alanlarına göre doğrulama ve yazma da gerçekleştirir.

  • Yazılan xml veri türünden yazılmamış xml veri türüne (veya tam tersi) dönüştürebilirsiniz.

SQL Server'da XML oluşturmanın diğer yolları hakkında daha fazla bilgi için bkz. XML Veri örnekleri oluşturma. XML oluşturulduktan sonra, xml veri türü değişkenine atanabilir veya ek işlem için xml türü sütunlarında depolanabilir.

Veri türü hiyerarşisinde, xml veri türü sql_variant ve kullanıcı tanımlı türlerin altında, ancak yerleşik türlerden herhangi birinin üzerinde görünür.

Örnek: Tiplenmiş XML sütununu kısıtlamak için özellik belirtme

Yazılan xml sütunları için sütunu, içinde depolanan her örnek için yalnızca tek, en üst düzey öğelere izin verecek şekilde kısıtlayabilirsiniz. Bunu, isteğe bağlı DOCUMENT özelliğini belirterek bir tablo oluşturduğunuzda, aşağıdaki örnekte gösterildiği gibi yaparsınız.

CREATE TABLE T(Col1 xml
   (DOCUMENT Production.ProductDescriptionSchemaCollection));
GO
DROP TABLE T;
GO

Varsayılan olarak, yazılan xml sütununda depolanan örnekler XML belgesi olarak değil XML içeriği olarak depolanır. Bu, aşağıdakileri sağlar:

  • Sıfır veya çok sayıda üst düzey öğe

  • Üst düzey öğelerdeki metin düğümleri

Aşağıdaki örnekte gösterildiği gibi CONTENT fasetini ekleyerek bu davranışı açıkça belirtebilirsiniz.

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection));
GO -- Default

xml türünü tanımladığınız her yerde isteğe bağlı DOCUMENT/CONTENT özelliklerini belirtebilirsiniz. Örneğin, türü belirtilmiş bir xml değişkeni oluşturduğunuzda, aşağıdaki şekilde DOCUMENT/CONTENT fasetini ekleyebilirsiniz.

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection);

Belge Türü Tanımı (DTD)

xml veri türü sütunları, değişkenleri ve parametreleri XML şeması kullanılarak yazılabilir, ancak DTD kullanılarak yazılamaz. Ancak satır içi DTD, varsayılan değerleri sağlamak ve varlık başvurularını genişletilmiş formlarıyla değiştirmek için hem yazılmamış hem de yazılan XML için kullanılabilir.

Üçüncü taraf araçlarını kullanarak DTD'leri XML şeması belgelerine dönüştürebilir ve XML şemalarını veritabanına yükleyebilirsiniz.

YAZıLAN XML'i SQL Server 2005'ten yükseltme

SQL Server 2008 (10.0.x), XML Şeması desteğinde lax doğrulama adı verilen esnek doğrulama desteği, xs:date, xs:time ve xs:dateTime örnek verileri gibi çeşitli uzantılar sundu ve liste ile birleşim türlerine destek ekledi. Çoğu durumda değişiklikler yükseltme deneyimini etkilemez. Ancak, SQL Server 2005'te (9.x) xs:date, xs:timeveya xs:dateTime (veya herhangi bir alt tür) türünde değerlere izin veren bir XML Şeması koleksiyonu kullandıysanız, SQL Server 2005 (9.x) veritabanınızı SQL Server'ın sonraki bir sürümüne eklediğinizde aşağıdaki yükseltme adımları gerçekleşir:

  1. xs:anyType, xs:anySimpleType, xs:date veya alt türlerinden herhangi biri olarak yazılan öğeler veya öznitelikler içeren bir XML Şema Koleksiyonu ile yazılmış her XML sütunu için; xs:time veya herhangi bir alt türü, xs:dateTime veya alt türlerinden herhangi biri veya bunlardan herhangi birini içeren birleşim veya liste türleri vardır, şu durumlar gerçekleşir:

    1. Sütun üzerindeki tüm XML dizinleri devre dışı bırakılacak.

    2. Tüm SQL Server 2005 (9.x) değerleri Z saat diliminde normalleştirildiğinden Z saat diliminde temsil edilmeye devam eder.

    3. xs:date veya xs:dateTime değerleri M.S. 1 yılının 1 Ocak tarihinden küçükse, dizin yeniden oluşturulduğunda veya XQuery ya da XML-DML deyimleri bu değeri içeren xml veri türünde yürütüldüğünde çalışma zamanı hatasına neden olur.

  2. xs:date veya xs:dateTime özelliklerindeki veya XML Şeması koleksiyonundaki varsayılan değerlerdeki negatif yıllar, temel xs:date veya xs:dateTime türünün izin verdiği en küçük değere otomatik olarak güncelleştirilir (örneğin, 0001-01-01T00:00:00.0000000Z xs:dateTimeiçin).

Negatif yıllar içerse bile xml veri türünün tamamını almak için Transact-SQL SELECT deyimini kullanmaya devam edebilirsiniz. Negatif yılları yeni desteklenen aralıktaki bir yılla değiştirmeniz veya öğenin veya özniteliğin türünü xs:stringolarak değiştirmeniz önerilir.

Ayrıca bkz.