从XSD生成类

时间:2013-04-10 16:59:55

标签: java xml xsd

我有这样的简单xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <xmi:XMI xmi:version="2.1" xmlns:xmi="http://schema.omg.org/spec/XMI/2.1" xmlns:mdmi="http://schema.omg.org/spec/MDMI/1.0">
      <xmi:Documentation 
xmi:exporter="Firestar MDMI Tool" xmi:exporterVersion="1.0">
      </xmi:Documentation>
    </xmi:XMI>

我创建了xsd:

<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://schema.omg.org/spec/XMI/2.1">
    <xs:element name="XMI">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Documentation">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute type="xs:string" name="exporter"/>
                                <xs:attribute type="xs:string" name="xmi:exporterVersion"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:float" name="version"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

然后生成了使用JAXB的java类。并使用unmarshal。

几乎一切正常,但{x}没有提取exporterVersion字段。

我尝试使用import来命名空间。但没有任何反应 如果设置attributeFormDefault="qualified" attribut exporter未被提升

2 个答案:

答案 0 :(得分:0)

在架构更改中(注意xmi:前缀作为名称的一部分)

 <xs:attribute type="xs:string" name="xmi:exporterVersion"/>

<xs:attribute type="xs:string" name="exporterVersion"/>

答案 1 :(得分:0)

您不应在xmi:的名称中使用exporterVersion限定符。该命名空间在XML文档中定义,但未在架构中定义。

更重要的是,据我所知,你根本不需要XSD。您似乎正在尝试直接使用XMI Mapping Specification的架构并构建符合该架构的XML文档。如果是这种情况,则不需要您自己的架构。

无论如何,您的XML文档不会以任何方式引用您自己的架构,因此它根本不会影响处理该XML文档。