2013-08-07 318 views
1

长篇故事短片: 我想从UML基因生成XSD,因此我需要一种方法来表示USD聚合/关联在XSD中。我发现他们推荐的一个映射(用于聚合/关联):“引用具有IDREF属性的元素,并引用类型saftey(键/ keyref引用)的关联类和keyref”。但我不知道如何做到这一点,因为我真的是XSD新手(< 1周)。UML聚合/关联到XML Schema

所以这是我认为它应该看起来像但我不知道^^有没有人有一些建议,或者如果我的代码有错误可以纠正?

UML:http://i39.tinypic.com/15x8ufp.png

<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns="namespace" targetNamespace="namespaceURI"> 
    <xsd:import namespace="namespace" /> 
    <xsd:element name="root"> 
     <xsd:complexType> 
      <xsd:sequence> 

     <xsd:element name="classA">   
     <xsd:complexType> 
     <xsd:all> 
     <xsd:element name="attributeElement" /> 
     </xsd:all> 
     <xsd:attribute name="aId" type="xsd:ID" use="required" /> 
     </xsd:complexType>  
     <xsd:key name="classAKey"> 
     <xsd:selector xpath="ns:root/ns:classA" /> 
     <xsd:field xpath="@aId" /> 
     </xsd:key>       
    </xsd:element> 

    <xsd:element name="classB">   
     <xsd:complexType> 
     <xsd:all> 
     <xsd:element name="refClassA" minOccurs="0" maxOccurs="unbounded"/> 
     </xsd:all> 
     <xsd:attribute name="bId" type="xsd:ID" use="required" /> 
     </xsd:complexType>  
     <xsd:key name="classBKey"> 
     <xsd:selector xpath="ns:root/ns:classB" /> 
     <xsd:field xpath="@bId" /> 
     </xsd:key> 
     <xsd:keyref name="classARef" refer="ns:classAKey"> 
      <xsd:selector xpath="ns:classB" /> 
      <xsd:field xpath="./refClassA" /> 
     </xsd:keyref>      
    </xsd:element> 

      </xsd:sequence> 
     </xsd:complexType>  
    </xsd:element> 
</xsd:schema> 

回答

0

也许UML For W3C XML Schema Design将帮助回答你的问题。这是古老的,但它显示的基础仍然适用于今天,并且非常清晰地呈现出来。