Aracılığıyla paylaş


XQuery içindeki Namespaces işleme

Bu konuda, ad sorgularının işlenmesi için örnekler sağlar.

Örnekler

A.Bir ad alaný bildirmek

Belirli bir ürün modeline üretim adımları aşağıdaki sorgu 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

Bu kısmi bir sonucudur:

<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>
…

Dikkat ad yeni bir ad alaný önekini tanımlamak için kullanılan anahtar sözcük "AWMI:".Bu öneki sonra sorgu içinde kalan tüm öğeler için kullanılması gereken kapsam , o ad alanı.

B.Varsayýlan bir ad alaný bildirmek

Önceki sorgu, yeni bir ad alaný öneki tanımlanmıştır.Önekin ardından sorguda istenen xml yapılarını seçmek için kullanılması gerekiyordu.Alternatif olarak, değiştirilmiş aşağıdaki sorgu gösterildiği gibi varsayılan bir ad alanı olarak bir ad alaný bildirebilirsiniz:

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="https://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>
…

Not Bu örnekte tanımlanan ad alanı, "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions", yapılır, varsayılan geçersiz kılma veya boş, ad alanı.Bu nedenle, artık bir ad alaný öneki yol ifade yani sorgu için kullanılan.Ayrıca artık bir ad alaný öneki görünür öğe adlarında yok sonuçlar.Ayrıca, varsayılan ad alanını tüm öğeleri, ancak bunların nitelikleri uygulanır.

C.xml yapım ad alanlarını kullanma

Yeni ad tanımladığınızda, yalnızca sorgu için ancak Yapım için kapsam içine getirilirler.Örneğin, xml oluştururken, yeni bir ad kullanarak tanımlayabilirsiniz "declare namespace ..."" bildirim ve tüm öğeleri ve sorgu sonuçlar içinde görüntülenmesini oluşturma öznitelikleri ile o ad alanı kullanın.

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

Bu sonucu verir:

<myNS:Result xmlns:myNS="uri:SomeNamespace">
  <Summary xmlns="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>
  </Summary>
</myNS:Result>

Alternatif olarak, ayrıca açıkça xml yapım bir parçası olarak kullanıldığı her noktada ad alanı aşağıdaki sorgu gösterildiği gibi tanımlayabilirsiniz:

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.Yapım varsayılan ad alanlarını kullanma

Varsayılan bir ad alanı kullanmak için oluşturulmuş xml biçiminde de tanımlayabilirsiniz.Örneğin, aşağıdaki sorgu, varsayýlan bir ad alaný, "uri:SomeNamespace" nasıl belirtebilirsiniz gösterir \, gibi oluşturulur yerel olarak adlandırılmış öğeler için varsayılan olarak kullanmak için <Result> öğesi.

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

Bu sonucu verir:

<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 öğe ad alanı veya boş ad alanı geçersiz kılma tarafından oluşturulmuş XML yerel olarak adlandırılmış öğeleri sonradan geçersiz kılma varsayılan ad alanına bağlı olan unutmayın.Boş ad alanı yararlanmak için xml oluşturarak esneklik gerektirir, bu nedenle, varsayılan öğe ad alanı kılmaz.