1

长话短说:我想从 UML 生成 XSD,为此我需要一种方法来表示 XSD 中的 UML 聚合/关联。我找到了一个他们推荐的映射(用于聚合/关联):“具有 IDREF 属性的引用元素并引用关联的类和 keyref 以获取安全类型(key/keyref 引用)”。但我不知道该怎么做,因为我真的是 XSD 的新手(< 1 周)。

所以这就是我认为它应该看起来的样子,但我不确定^^ 如果我的代码有错误,是否有人有一些建议或可以纠正?

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>
4

1 回答 1

0

也许UML For W3C XML Schema Design将有助于回答您的问题。它已经很老了,但它所展示的基础知识仍然适用于今天,并且非常清晰地呈现出来。

于 2014-01-29T20:31:52.190 回答