2010-05-11 41 views
1

我有一個xsd文件,它描述了一個DataSet模式,用於將我的DataSet作爲xml文件讀寫到磁盤。我沒有手動編寫模式,相反,我手工編寫了xml文件,從xml文件中推斷出模式,然後寫出了xsd模式。 (我很新的這...)從xsd解釋DataSet模式的問題

反正這裏是模式(有些amazon.com的東西會在這裏):

<?xml version="1.0" standalone="yes"?> 
<xs:schema id="Items" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="Items" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
<xs:complexType> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="Item"> 
     <xs:complexType> 
     <xs:sequence> 
      <xs:element name="ASIN" type="xs:string" /> 
      <xs:element name="Title" type="xs:string" /> 
      <xs:element name="Offer" minOccurs="0" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
       <xs:element name="MerchantName" type="xs:string" /> 
       <xs:element name="Price" type="xs:string" /> 
       </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    </xs:choice> 
</xs:complexType> 
</xs:element> 
</xs:schema> 

當讀取數據集的架構,它會創建一個鏈接兩個表通過它創建的臨時密鑰調用Item_Id,該Item_Id對每個Item都是唯一的,並映射到Offer。因此,我得到一個帶有列(ASIN,Title,Item_Id)的Item表和一個帶有列的商品表(MerchantName,Price,Item_Id)。

的這裏的問題是,ASIN已經是該項目的唯一標識,所以架構導入過程中出臺了一些冗餘,使得代碼更尷尬的比它需要。我怎樣才能改變這個模式,最終得到2個表格(ASIN,Title)和(ASIN,MerchantName,Price)?

謝謝!

+0

有沒有這樣的事情C#.NET。只有C#。 – 2010-05-11 15:10:51

回答

2

除非您聲明主鍵,否則XSD架構會自動爲身份單位創建一個隨機Item_Id。

分配在你的XSD架構的主鍵丟失。

<xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//Item" />    
     <xs:field xpath="ASIN"/> 
</xs:unique> 

這樣一來,就會有你的數據集中沒有ITEM_ID和你的架構必須像下面這樣:

<?xml version="1.0" standalone="yes"?> 
    <xs:schema id="Items" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"  xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="Items" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="Item"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="ASIN" type="xs:string" /> 
       <xs:element name="Title" type="xs:string" /> 
       <xs:element name="Offer" minOccurs="0" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
        <xs:element name="MerchantName" type="xs:string" /> 
        <xs:element name="Price" type="xs:string" /> 
        </xs:sequence> 
       </xs:complexType> 
       <xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
        <xs:selector xpath=".//Item" />    
        <xs:field xpath="ASIN"/> 
       </xs:unique> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    <xs:unique name="Constraint2" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//Item" /> 
     <xs:field xpath="ASIN" /> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 
+0

謝謝邁拉!我正在那裏的路上,但只是沒有它。 – Rich 2010-05-11 15:27:21