2010-11-18 34 views
0

Umarım birileri bana yardımcı olabilir. Bu konuda çok yeniyim. XML verilerini çoklu SQL tablolarına (sql:relation attribute, vb. Kullanarak) dökmek için bir XSD Şeması almanın mümkün olup olmadığını merak ediyordum.XML verilerini SQL tablolarına koymak için bir XSD Şeması yazma

Bir tablo sorun olmadığını kanıtlıyor, bu yüzden iki veriyi döküp dökemeyeceğinizi merak ettim. Bunu bir XSD Şeması ile yapabilmek güzel olurdu, ama ikinci tablo için XML'de iki geçiş yapmak zorunda mıyım?

Yardımlarınız için teşekkür ederiz. Gördüğünüz gibi

<?xml version='1.0' encoding='utf-8'?> 
<feed version="2"> 
<numFound>7985</numFound> 
<products> 
    <product id="18639|216623247"> 
     <title>Trouser</title> 
     <url>http://www.products.com/trousers/trouser/</url> 
     <image_url>http://www.images.co.uk/images/big/4d624426.jpg</image_url> 
     <verified_image>True</verified_image> 
     <currency>GBP</currency> 
     <price>1000</price> 
     <prev_price>1000</prev_price> 
     <firstseen>2010-10-27T00:00:00Z</firstseen> 
     <lastseen>2010-10-27T00:00:00Z</lastseen> 
     <merchant id="20748">Yours Clothing</merchant> 
     <by>Yours Clothing</by> 
     <description></description> 
     <category> 
     <item id="9">Lounge &amp; nightwear</item> 
     <item id="3">Women</item> 
     <item id="2">Clothing</item> 
     <item id="1">Clothing, shoes &amp; accessories</item> 
     </category> 
    </product> 
</products> 
</feed> 

, bu iki tablo içine dökümü çalışır: Burada

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> 
<!-- Skimlinks/Everyfeed schema --> 

<!-- definition of simple elements --> 
<xs:element name="title" type="xs:string" sql:field="ProductName"/> 
<xs:element name="url" type="xs:string" sql:field="ProductURL"/> 
<xs:element name="image_url" type="xs:string" sql:field="ImageURL"/> 
<xs:element name="currency" type="xs:string" sql:field="currency"/> 
<xs:element name="price" type="xs:string" sql:field="Price"/> 
<xs:element name="merchant" type="xs:string" sql:field="Brand" default=" " /> 
<xs:element name="description" type="xs:string" sql:field="Description" default=" "/> 
<xs:element name="item" type="xs:string" sql:field="Category" /> 

<!-- definition of attributes --> 
<xs:attribute name="id" type="xs:string" sql:field="SKU" /> 

<!-- definition of complex elements --> 
<xs:element name="category" sql:relation="ProductDataCategory"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="item" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="product" sql:relation="ProductData"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="title"/> 
     <xs:element ref="url"/> 
     <xs:element ref="image_url"/> 
     <xs:element ref="currency"/> 
     <xs:element ref="price"/> 
     <xs:element ref="merchant"/> 
     <xs:element ref="description"/> 
     <xs:element ref="category"/> 
    </xs:sequence> 
    <xs:attribute ref="id" use="required"/> 
    </xs:complexType> 
</xs:element> 

<xs:element name="products" sql:is-constant="1"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="product" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="everyFeed" sql:is-constant="1"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element ref="products" maxOccurs="1" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

</xs:schema> 

biz ithal ediyoruz XML bir örnek: Burada

şema kendisi var: ProductData ve ProductDataCategory. Sadece <item> öğelerinde saklanan öğeler ikinci tabloya (alan kategorisinde) gitmelidir.

hata mesajı okur:! Bu işe yaraması herhangi yardım için :(

Teşekkür

+1

@Django - Bu, XML şemasına Microsoft'a özgü bir uzantı olduğundan yeniden etiketlendim – Anon

+0

Yapmaya çalıştığınız şey hakkında daha fazla ayrıntı vermek isteyeceksiniz. Verileri tek bir tabloya toplu yüklemek için bu şemayı nasıl kullanıyorsunuz? –

+0

Merhaba John, işte daha fazla ayrıntı: http://stackoverflow.com/questions/3373104/problem-during-sql-bulk-load –

cevap

1

Bir SQL tanımlamak gerekebilir neden

Error: Relationship expected on 'category'

Bilmiyorum Toplu bir ithalat yapmaya çalışıyorsanız XSD dosyasındaki ilişki.Aynı sorunla karşılaştım (bu sadece bir örnek, XSD'nize özgü değil):

<xs:annotation> 
    <xs:appinfo> 
     <sql:relationship name="Detail" 
         parent="Product" 
         parent-key="ProductID" 
         child="Details" 
         child-key="ProductID" 
         /> 
     <sql:relationship name="ProductFiles" 
         parent="Product" 
         parent-key="ProductID" 
         child="Files" 
         child-key="ProductID" 
         /> 
     <sql:relationship name="ProductToList" 
         parent="Product" 
         parent-key="ProductID" 
         child="ProductList" 
         child-key="ProductID" 
         /> 
     <sql:relationship name="ListToProduct" 
         parent="ProductList" 
         parent-key="ID" 
         child="ProductListProduct" 
         child-key="ProductListID" 
         /> 
    </xs:appinfo> 
    </xs:annotation> 
+0

Cevabınız için teşekkür ederiz. XSD şema dosyam zaten SQL ilişkilerini tanımlar ... ... görünüşe göre yeterince iyi değil. Nasıl düzeltilebileceği konusunda daha spesifik bilgilerin var mı? –

+0

Ah, yayınladığınız belgede görmedim. İlişkileri tanımladıktan sonra düzelttiğim sorun olarak başka neye neden olabileceğinden emin değilim. GL! –

1

Django,

Neden DBVis gibi bir şey deneyin - veritabanındaki tüm ilişkilerin görsel bir temsilini oluşturmak ve xsd oluşturulan diyagramı maç sahip yönünde çalışmaya - http://www.dbvis.com/. Bu, tüm bu ilişkileri almanızı sağlayacaktır.

çok basit bir veritabanı için bir örnek screeshot için buraya bakınız - Ben çok çok daha büyük veritabanları için iyi çalışıyor kefilim http://www.dbvis.com/products/dbvis/doc/main/doc/ug/databaseExplorer/images/genericschemaview.png

.

Umarım bu yardımcı olur.