我希望有人可以帮助我。我对此非常陌生。我想知道是否有可能让XSD Schema将XML数据转储到多个 SQL表中(使用sql:relation attribute
等)。
一个表没有问题,所以我只是想知道是否可以将数据转储成两个。能够使用一个XSD Schema执行此操作会很高兴,但是我是否必须对第二个表的XML进行两次传递?
感谢您的帮助。
这是架构本身:
<?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>
以下是我们导入的XML示例:
<?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 & nightwear</item>
<item id="3">Women</item>
<item id="2">Clothing</item>
<item id="1">Clothing, shoes & accessories</item>
</category>
</product>
</products>
</feed>
如您所见,它会尝试转储到两个表中: ProductData 和 ProductDataCategory 。只有存储在<item>
元素中的内容应该放在后一个表格中(在字段类别中)。
错误消息显示为:
错误:“类别”的预期关系
我不知道为什么:(
感谢您为此工作提供的任何帮助!
答案 0 :(得分:1)
如果您尝试进行批量导入,则可能需要在XSD文件中定义SQL关系。我遇到了类似的问题(这只是一个例子,不是特定于你的XSD):
<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>
答案 1 :(得分:1)
Django,
为什么不尝试像DBVis这样的东西 - http://www.dbvis.com/ - 来创建数据库中所有关系的可视化表示,并努力使xsd与生成的图匹配。这将确保您获得所有这些关系。
在这里查看一个非常简单的数据库的示例screeshot - http://www.dbvis.com/products/dbvis/doc/main/doc/ug/databaseExplorer/images/genericschemaview.png
我也可以保证它适用于更大的数据库。
希望这会有所帮助。