2010-11-18 1 views
0

Я надеюсь, что кто-то может мне помочь. Я очень новичок в этом. Мне было интересно, можно ли получить схему XSD для вывода данных XML в несколько таблиц SQL (с использованием sql:relation attribute и т. Д.).Написание схемы XSD для размещения данных XML в таблицах SQL

В одной таблице нет проблем, поэтому я просто задался вопросом, можно ли сбрасывать данные пополам. Было бы неплохо иметь возможность сделать это с помощью одной схемы XSD, но мне нужно сделать два прохода по 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 &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> 

Как вы можете видеть, он пытается свалить на две таблицы: ProductData и ProductDataCategory. Только элементы, хранящиеся в элементах <item>, должны отображаться в последней таблице (в категории полей).

Сообщение ошибки гласит:

Error: Relationship expected on 'category'

Я не знаю, почему :(

Спасибо за любую помощь в получении этой работы

+1

@ Django - Я исправил, потому что это расширение для Microsoft, связанное с Microsoft, для схемы XML. – Anon

+0

. Вы хотите более подробно рассказать о том, что вы пытаетесь сделать. Как вы используете эту схему для массовой загрузки данных в одну таблицу? –

+0

Привет, Джон, более подробно: http://stackoverflow.com/questions/3373104/problem-during-sql-bulk-load –

ответ

1

Вам может понадобиться определить 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> 
+0

Спасибо за ваш ответ. Мой файл схемы XSD уже определяет отношения SQL ... хотя явно недостаточно. У вас есть какая-то дополнительная информация о том, как это можно исправить? –

+0

А, я не видел этого в документе, который вы разместили. Не уверен, что еще может вызвать его как проблему, которую я исправил после того, как я определил отношения. GL! –

1

Джанго,

Почему бы не попробовать что-то вроде DBVis - http://www.dbvis.com/ - создать визуальное представление всех отношений в вашей базе данных и работать в направлении имея XSD соответствовать сгенерированной схеме. Это обеспечит вам получение всех этих отношений.

Смотрите здесь для примера Screeshot для очень простой базы данных - http://www.dbvis.com/products/dbvis/doc/main/doc/ug/databaseExplorer/images/genericschemaview.png

Я могу поручиться за это работает хорошо для гораздо больших баз данных тоже.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^