Aracılığıyla paylaş


XPath veri türleri (SQLxml 4.0)

Microsoft SQL Server, XPath, and XML Schema (XSD) have very different data types.Örneğin, XPath veri türleri, tamsayı veya tarih yok ama SQL Server ve xsd çok.xsd saat değerleri için nanosecond duyarlığını kullanır ve SQL Server kullandığı en fazla 1/300 saniye duyarlık.Sonuç olarak, bir veri eşleme türü diğerine her zaman mümkün değildir.Eşleme hakkında daha fazla bilgi için SQL Server xsd veri türlerini veri türleri Bkz: Veri türü Coercions ve SQL:datatype ek açıklama (SQLxml 4.0).

XPath veri türleri üç vardır: string, number, and boolean.The number data type is always an IEEE 754 double-precision floating-point.The SQL Server float(53) data type is the closest to XPath number.Ancak, float(53) tam olarak IEEE 754 olan.Örneğin, ne NaN (Not-a-Number), ne de sonsuz kullanılır.Sayısal bir dize dönüştürmek denemesi number ve sıfıra bölme yapmaya sonuçlar bir hata.

XPath dönüşümlerini

Kullandığınızda bir XPath sorgusu gibi OrderDetail[@UnitPrice > "10.0"], açık ve örtülü veri türü dönüştürmeleri, sorguda anlamını değiştirebilirsinizince yolu. Bu nedenle, XPath veri türleri nasıl uygulandığını anlamanız önemlidir.xml Path Language (XPath) sürüm 1.0 W3C XPath dil belirtimi, önerilen öneri 8 Ekim 1999, W3C bulunabilir Web sitesi en http://www.w3.org/TR/1999/PR-xpath-19991008.html.

XPath işleçlerinin dört kategoriye ayrılır:

  • Boole işleçleri (ve, veya)

  • Relational operators (<, >, <=, >=)

  • Eşitlik operatörleri (=,! =)

  • Aritmetik işleç (+, -, *, div mod)

Her işleç kategorisini İşlenenlerini farklı şekilde dönüştürür.XPath işleçlerinin dolaylı olarak kendi işlenenleri gerekli dönüştürün.Aritmetik işleçler dönüştürmek için kendi işlenenleri numberve sonuç sayı değeri.Boole işleçleri dönüştürmek için kendi işlenenleri booleanve sonuç olarak Boole bir değer.İlişkisel işleçleri ve eşitlik operatörleri Boole neden.Ancak, farklı bir dönüştürme kuralları kendi işlenenleri özgün veri türlerini bağlı bu konuda gösterilen sahip oldukları tablo.

İşlenen

İlişkisel işleç

Eşitlik işleç

Her iki işlenen, düğüm-kümeleridir.

Bir kümedeki bir düğüm yoktur ve böyle ikinci bir düğüm küme ise ve yalnızca, gerçek o karşılaştırmasını kendi string değerler ise true.

Aynı.

Bir düğüm küme, diğer biridir bir string.

true ise ve yalnızca varsa bir düğüm düğüm -küme gibi için dönüştürüldüğünde number, kendisiyle karşılaştırmasını string dönüştürülür number ise true.

true ise ve yalnızca varsa bir düğüm düğüm -küme gibi için dönüştürüldüğünde string, kendisiyle karşılaştırmasını string ise true.

Bir düğüm küme, diğer biridir bir number.

true ise ve yalnızca varsa bir düğüm düğüm -küme gibi için dönüştürüldüğünde number, kendisiyle karşılaştırmasını number ise true.

Aynı.

Bir düğüm küme, diğer biridir bir boolean.

true ise ve yalnızca varsa bir düğüm düğüm -küme gibi için dönüştürüldüğünde boolean ve sonra number, kendisiyle karşılaştırmasını boolean dönüştürülür number ise true.

true ise ve yalnızca varsa bir düğüm düğüm -küme gibi için dönüştürüldüğünde boolean, kendisiyle karşılaştırmasını boolean ise true.

Her ikisi de bir düğüm küme olur.

Her iki işlenen için Dönüştür'ü number ve sonra karşılaştırın.

Her iki işlenen ortak bir türe dönüştürmek ve sonra karşılaştırın.Dönüştürmek boolean ise ya da boolean, number ise ya da number; Aksi halde dönüştürmek string.

Not

XPath operatörler her zaman için kendi işlenenleri dönüştürdüğünden number, string karşılaştırmalardır mümkün.tarih karşılaştırmaları dahil etmek için sql Server 2000 için XPath belirtimi bu Varyasyon sunar: Ne zaman bir ilişkisel işleç karşılaştıran bir string için bir string, bir düğüm kümesine bir string, veya bir dize değerli düğüm kümesine bir dize değerli düğüm küme, bir string karşılaştırma (değil bir number karşılaştırma) gerçekleştirilir.

Düğüm-kümesi dönüşümleri

Düğüm-küme dönüşümleri her zaman kolay değildir.Bir düğüm kümesine dönüştürülür bir string tarafından ayırdığınız dize değeri yalnızca ilk düğüm küme.Düğüm -küme dönüştürülür number dönüştürerek kendisine stringve sonra dönüştürme string için number.Düğüm -küme dönüştürülür boolean tarafından test etmek için kendi varlığı.

Not

SQL Serverkonumsal seçim düðüm kümeleri üzerinde gerçekleştirin: Örneğin, XPath sorgusu Customer[3] ; üçüncü müşteri anlamına gelir Bu tür bir konumsal seçim desteklenmez SQL Server.Therefore, the node-set-to-string or node-set-to-number conversions as described by the XPath specification are not implemented.SQL Server uses "any" semantics wherever the XPath specification specifies "first" semantics.Örneğin, W3C XPath, XPath sorgusu şartnamesine Order[OrderDetail/@UnitPrice > 10.0] seçer bu siparişleri ile ilk OrderDetail olan bir BirimFiyat 10.0 büyüktür.De SQL Server, bu XPath sorgusu seçer bu siparişleri herhangi OrderDetail olan bir BirimFiyat 10.0 büyüktür.

Dönüştürme için boolean oluşturduğu bir varlığı test; Bu nedenle, XPath sorgusu Products[@Discontinued=true()] eşdeğerdir SQL ifadesi "Products.Discontinued değil null", değil SQL ifadesi "Products.Discontinued = 1".Bu sonuncusu için eşdeğer sorgu yapmak için SQL ifadesi, ilk düğüm küme olmayan bir dönüştürme-boolean yazın, gibi number.Örneğin, Products[number(@Discontinued) = true()].

Düğüm-küme için false ise herhangi bir veya düğümler düğüm-küme, her zaman bu işlemlerden birini değerlendirmek için doğru ise, true boş çünkü çoğu işleçte olarak tanımlanır.Böylece, a boş ise, her ikisi de A = B ve A != B , yanlış ve not(A=B) ve not(A!=B) olan true.

Veritabanında, sütun değeri ise genellikle, bir öznitelik veya bir sütuna eşleştirir öğesi var null.Bunların altındaki varsa eşlemek için satır öğeleri mevcut.Daha fazla bilgi Bkz: SQL:Relation (xdr şeması) kullanma ve SQL:alan (xdr şeması) kullanma.

Not

Öğe açıklama ile is-constant her zaman yok.Sonuç olarak, XPath yüklemler üzerinde kullanılamaz is-constant öğeleri.Daha fazla bilgi için bkz: Sabit öğeleri kullanma SQL oluşturma: is-constant (xdr şeması).

Düğüm - zamanküme dönüştürülür string veya number, notlu şema xdr türü (varsa) kontrol edilebilir ve bu tür gerekli dönüşümü belirlemek için kullanılır.

XPath veri türleri xdr veri türlerini eşleştirme

XPath veri türü bir düğümün, şema xdr veri türü aşağıdaki gösterildiği gibi türetilir tablo (düğüm BusinessEntityID görsel bir amaç için kullanılır).

xdr veri türü

Eşdeğer

XPath veri türü

Kullanılan sql Server dönüştürme

Nonebin.base64bin.hex

Yok

YokBusinessEntityID

Boole değeri

Boole değeri

convert (bit, BusinessEntityID)

numarası, int, float, I1, I2, I4, I8, r4, r8ui1, ui2, ui4, ui8

sayı

Convert(float(53), BusinessEntityID)

ID, IDREF, idrefsentity, varlıklar, enumerationnotation, nmtoken, nmtokens, chardate, Timedate, Time.tz, dize, URI, UUID

dize

Convert(nvarchar(4000), BusinessEntityID, 126)

fixed14.4

Yok (bulunmaktadır hiçbir veri türü fixed14.4 xdr veri türü için eşdeğeri olan XPath)

convert (para, BusinessEntityID)

tarih

dize

LEFT(Convert(nvarchar(4000), BusinessEntityID, 126), 10)

saat

saat.TZ

dize

SUBSTRING(Convert(nvarchar(4000), BusinessEntityID, 126), 1 + CHARINDEX (n't', CONVERT(nvarchar(4000), BusinessEntityID, 126)), 24)

The date and time conversions are designed to work whether the value is stored in the database using the SQL Server datetime data type or a string.Note that the SQL Server datetime data type does not use timezone and has a smaller precision than the XML time data type.Eklemek için timezone veri deposu veri türü veya ek duyarlık, SQL Server kullanarak bir string türü.

Bir düğüm xdr veri türü XPath veri türüne dönüştürülür, ek dönüştürme bazen (gelen başka bir XPath veri türü için bir XPath veri türü) gereklidir.Örneğin, bu XPath sorgusu göz önünde bulundurun:

(@m + 3) = 4

@ M ise fixed14.4 xdr veri türü, XPath veri türü değiştirilerek kullanarak xdr veri türü arasında dönüştürme:

CONVERT(money, m)

Bu dönüştürmede düğüm m Dönüştürülen fixed14.4 için money.Ancak, değeri 3 eklemek, ek dönüştürme gerekir:

CONVERT(float(CONVERT(money, m))

XPath ifade olarak değerlendirilir:

CONVERT(float(CONVERT(money, m)) + CONVERT(float(53), 3) = CONVERT(float(53), 3)

Aşağıdaki gösterildiği gibi tablo, (rakamları veya bileşik ifadeler gibi) diğer XPath deyimleri için uygulanan aynı dönüştürme budur.

 

X bilinmiyor

X string

X number

X boolean

dize(X)

convert (126 x nvarchar(4000))

-

convert (126 x nvarchar(4000))

Ne zaman case x sonra N'true' else N'false' SON

Number(X)

convert (float(53), x)

convert (float(53), x)

-

CASE ELSE 0 END SONRA 1, X

Boolean(X)

-

LEN(X) > 0

X! = 0

-

Örnekler

A.Bir XPath sorgusu veri türü dönüştürme

Açıklama eklenmiş bir xsd şeması karşı belirtilen aşağıdaki XPath sorgusu sorgu tümünü seçer Personel düðümleri ile BusinessEntityID öznitelik değeri e-1, burada, "e-" kullanılarak belirtilen öneki olan sql:id-prefix ek açıklama.

Employee[@BusinessEntityID="E-1"]

Sorgu yüklemi eşdeğeri olan SQL ifadesi:

N'E-' + CONVERT(nvarchar(4000), Employees.BusinessEntityID, 126) = N'E-1'

Çünkü BusinessEntityID biri olan id ()idref, idrefs, nmtoken, nmtokens, vb.) veri türü değerleri xsd şeması'nda, BusinessEntityID dönüştürülür string daha önce açıklanan dönüştürme kurallarını kullanma XPath veri türü.

CONVERT(nvarchar(4000), Employees.BusinessEntityID, 126)

"e-" önek eklenir dize, sonucun ardından karşılaştırılır ve N'E-1'.

B.XPath sorgusu birkaç veri türü dönüştürmeleri gerçekleştirmek

Açıklama eklenmiş bir xsd şeması karşı belirtilen bu XPath sorgusu göz önünde bulundurun: OrderDetail[@UnitPrice * @OrderQty > 98]

Bu XPath sorgusu tümünü verir <OrderDetail> öğeleri yüklemi karşılanması @UnitPrice * @OrderQty > 98.If the UnitPrice is annotated with a fixed14.4 data type in the annotated schema, this predicate is equivalent to the SQL expression:

CONVERT(float(53), CONVERT(money, OrderDetail.UnitPrice)) * CONVERT(float(53), OrderDetail.OrderQty) > CONVERT(float(53), 98)

İlk dönüştürme XPath sorgusu değerleri dönüştürme xdr veri türü XPath veri türüne dönüştürür.Çünkü, xsd veri türü BirimFiyat olan fixed14.4altında açıklandığı gibi tablo, kullanılan ilk dönüştürme budur:

CONVERT(money, OrderDetail.UnitPrice)) 

Aritmetik işleçleri kendi dönüştürdüğünden number XPath veri türü, ikinci dönüştürme işlemi (başka bir XPath veri türü için bir XPath veri türü) uygulanır, değeri dönüştürülür için float(53) ()float(53) için XPath yakın olan number veri türü):

CONVERT(float(53), CONVERT(money, OrderDetail.UnitPrice)) 

Varsayarak OrderQty öznitelik xsd veri türüne sahip OrderQty dönüştürülmesi için bir number tek dönüştürme XPath veri türü:

CONVERT(float(53), OrderDetail.OrderQty)

Benzer şekilde, değer 98 dönüştürdükten number XPath veri türü:

CONVERT(float(53), 98)

Not

Şema xsd veri türü temel ile uyumlu değilse SQL Server yazın veritabanındaki verilerde, imkansız bir XPath veri türü dönüştürme işlemi gerçekleştirildiğinde, SQL Server döndürebilir bir hata.Örneğin, BusinessEntityID öznitelik açıklama ile id-prefix ek açıklama, XPath Employee[@BusinessEntityID=1] çünkü bir hata üretir BusinessEntityID sahip id-prefix ek açıklama ve dönüştürülemez number.