Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu konu, sorgularda isim alanlarının işlenmesi için örnekler sunar.
Examples
A. Bir isim alanı ilan etmek
Aşağıdaki sorgu, belirli bir ürün modelinin üretim adımlarını alır.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/AWMI:root/AWMI:Location[1]/AWMI:step
') as x
FROM Production.ProductModel
WHERE ProductModelID=7
Kısmi sonuç şu şekildedir:
<AWMI:step xmlns:AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions">Insert <AWMI:material>aluminum sheet MS-2341</AWMI:material> into the <AWMI:tool>T-85A framing tool</AWMI:tool>. </AWMI:step>
...
İsim alanı anahtar kelimesinin yeni bir namespace öneki olan "AWMI:" tanımlamak için kullanıldığını unutmayın. Bu önek, o isim alanının kapsamına giren tüm elemanlar için sorguda kullanılmalıdır.
B. Varsayılan isim alanı ilan etmek
Önceki sorguda yeni bir isim alanı öneki tanımlanmıştı. Bu önek, sorguda amaçlanan XML yapılarını seçmek için kullanılmak zorundaydı. Alternatif olarak, aşağıdaki değiştirilmiş sorguda gösterildiği gibi, varsayılan isim alanı olarak bir isim alanı ilan edebilirsiniz:
SELECT Instructions.query('
declare default element namespace "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/root/Location[1]/step
') as x
FROM Production.ProductModel
where ProductModelID=7
Sonuç budur
<step xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions">Insert <material>aluminum sheet MS-2341</material> into the <tool>T-85A framing tool</tool>. </step>
...
Bu örnekte, tanımlanan isim uzayının "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"varsayılan veya boş isim alanını geçersiz kılmak için yapıldığını unutmayın. Bu nedenle, sorgulama için kullanılan yol ifadesinde artık bir namespace önekiniz yoktur. Ayrıca sonuçlarda görünen eleman isimlerinde artık bir namespace önekiniz yok. Ayrıca, varsayılan isim alanı tüm elemanlara uygulanır, ancak özniteliklerine uygulanmaz.
C. XML yapısında isim alanlarının kullanımı
Yeni isim alanları tanımladığınızda, bunlar sadece sorgu için değil, aynı zamanda yapı kapsamına dahil edilir. Örneğin, XML oluştururken, "declare namespace ..." bildirgesini kullanarak yeni bir isim alanı tanımlayabilir ve ardından bu namespace'i sorgu sonuçlarında görünecek şekilde oluşturduğunuz herhangi bir öğe ve öznitelikle birlikte kullanabilirsiniz.
SELECT CatalogDescription.query('
declare default element namespace "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare namespace myNS="uri:SomeNamespace";<myNS:Result>
{ /ProductDescription/Summary }
</myNS:Result>
') as Result
FROM Production.ProductModel
where ProductModelID=19
Sonuç şu şekildedir:
<myNS:Result xmlns:myNS="uri:SomeNamespace">
<Summary xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<p1:p xmlns:p1="http://www.w3.org/1999/xhtml">
Our top-of-the-line competition mountain bike. Performance-enhancing
options include the innovative HL Frame, super-smooth front
suspension, and traction for all terrain.</p1:p>
</Summary>
</myNS:Result>
Alternatif olarak, XML yapısının bir parçası olarak kullanılan her noktada isim alanını açıkça tanımlayabilirsiniz; aşağıdaki sorguda gösterildiği gibi:
SELECT CatalogDescription.query('
declare default element namespace "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<myNS:Result xmlns:myNS="uri:SomeNamespace">
{ /ProductDescription/Summary }
</myNS:Result>
') as Result
FROM Production.ProductModel
where ProductModelID=19
D. Varsayılan isim alanları kullanılarak yapı
Ayrıca oluşturulmuş XML'de kullanılmak üzere varsayılan bir isim alanı da tanımlayabilirsiniz. Örneğin, aşağıdaki sorgu, yerel olarak adlandırılmış öğeler için varsayılan olarak kullanılacak varsayılan bir ad alanı olan "uri:SomeNamespace"\'yi nasıl belirtebileceğinizi gösterir; örneğin eleman <Result> gibi.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
declare default element namespace "uri:SomeNamespace";<Result>
{ /PD:ProductDescription/PD:Summary }
</Result>
') as Result
FROM Production.ProductModel
where ProductModelID=19
Sonuç şu şekildedir:
<Result xmlns="uri:SomeNamespace">
<PD:Summary xmlns:PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription">
<p1:p xmlns:p1="http://www.w3.org/1999/xhtml">
Our top-of-the-line competition mountain bike. Performance-
enhancing options include the innovative HL Frame, super-smooth
front suspension, and traction for all terrain.</p1:p>
</PD:Summary>
</Result>
Varsayılan eleman isim alanı veya boş isim alanı geçersiz kılınarak, oluşturulan XML'deki tüm yerel adlandırılmış öğeler daha sonra varsayılan isim alanına bağlanır. Bu nedenle, boş isim uzayından faydalanmak için XML oluşturma esnekliği gerekiyorsa, varsayılan eleman isim alanını geçersiz kılmayın.