2013-06-18 91 views
0

我想從ER模型創建一個新的XML Schema。 我有以下模型。XML Schema實體關係

[Type1]--(1:M)--->(doSomething)<---(0:N)--[Type2] 

屬性:

[類型1]:ID1,文字

[類型2]:ID2,文字

現在我想創建該模型中的XML Schema 。我已經創建了一個Schema,但我認爲我沒有正確的關係(1:M)和(0:N)。

任何人都可以解釋我如何實現正確的關係?

這是我目前的XML Schema。

<xs:element name="XMLModel"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="MyType1" type="type1" maxOccurs="unbounded"> 
       <xs:key name="MyType1_ID"> 
        <xs:selector xpath="MyType1"/> 
        <xs:field xpath="ID1"/> 
       </xs:key> 
      </xs:element> 
      <xs:element name="MyType2" type="type2" maxOccurs="unbounded"> 
       <xs:key name="MyType2_ID"> 
        <xs:selector xpath="MyType2"/> 
        <xs:field xpath="ID2"/> 
       </xs:key> 
      </xs:element> 
      <xs:element name="DoSomething" type="typeDo" maxOccurs="unbounded"> 
        <xs:keyref name="Ref1" refer="MyType1_ID"> 
         <xs:selector xpath="DoSomething"/> 
         <xs:field xpath="child::MyType1"/> 
        </xs:keyref> 
        <xs:keyref name="Ref2" refer="MyType2_ID"> 
         <xs:selector xpath="DoSomething"/> 
         <xs:field xpath="child::MyType2"/> 
        </xs:keyref> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:complexType name="type1"> 
<xs:sequence> 
    <xs:element name="Text" type="xs:string"/> 
    <xs:element name="ID1" type="xs:integer"/> 
</xs:sequence> 
</xs:complexType> 
<xs:complexType name="type2"> 
<xs:sequence> 
    <xs:element name="Text" type="xs:string"/> 
    <xs:element name="ID2" type="xs:integer"/> 
</xs:sequence> 
</xs:complexType> 
<xs:complexType name="typeDo"> 
<xs:all> 
    <xs:element name="MyType1" type="xs:integer"/> 
    <xs:element name="MyType2" type="xs:integer"/> 
</xs:all> 
</xs:complexType> 

回答

0

你的實體模型是許多一對多的關係,但XML文檔基本上是一個層次。您可以使用XML層次結構建立一對多關係之一,使用主鍵/外鍵建立一對一關係,或者使用主鍵和外鍵對兩個關係建模 - 這正是您顯然想要做的。

你做錯了什麼是在錯誤的級別定義鍵和keyrefs:他們都需要在容器級(XMLModel)。如果你想說T中的每一個R都有一個唯一的F值,那麼這個密鑰需要在R的等級上定義,選擇器應該從T中選擇R,並且該字段應該從R中選擇F.