【问题标题】:Element inside Element in XSD file is not generated未生成 XSD 文件中 Element 内的元素
【发布时间】:2015-08-31 21:10:44
【问题描述】:

我正在尝试在 XSD 文件的元素中添加元素。
当我尝试这样做时,我收到了错误:
[ERROR] s4s-elt-invalid-content.1: '#AnonType_nodeosm' 的内容无效。元素“元素”无效、放错位置或出现太频繁。 文件第 32 行:/D:/.../src/conf/xml-resources/jaxb/generated/scheme.xsd

我添加<xs:element name="edge".... </xs:element>时开始出现错误
没有这个它工作正常。

我想做的事:
类 Edge 将成为 Node 类中的内部类。
我也希望类节点有成员List<Edge> m_Edges,我不知道该怎么做。
我尝试将其与有效但没有成功的 XSD 元素类似。

我的 XSD 文件:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:element name="osm">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="bounds">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute type="xs:float" name="minlat" />
                                <xs:attribute type="xs:float" name="minlon" />
                                <xs:attribute type="xs:float" name="maxlat" />
                                <xs:attribute type="xs:float" name="maxlon" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
                <xs:element name="node" maxOccurs="unbounded" minOccurs="0">
                    <xs:complexType mixed="true">
                        <xs:sequence>
                            <xs:element name="tag" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:string" name="k" use="optional" />
                                            <xs:attribute type="xs:string" name="v" use="optional" />
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>          
                        </xs:sequence>
                    <xs:element name="edge" maxOccurs="unbounded" minOccurs="0">
                        <xs:complexType mixed="true">
                            <xs:attribute type="xs:node" name="source" use="optional" />
                            <xs:attribute type="xs:node" name="destination" use="optional" />
                            <xs:attribute type="xs:double" name="weight" use="optional" />
                        </xs:complexType>
                    </xs:element>

                        <xs:attribute type="xs:long" name="id" use="optional" />
                        <xs:attribute type="xs:string" name="visible" use="optional" />
                        <xs:attribute type="xs:byte" name="version" use="optional" />
                        <xs:attribute type="xs:int" name="changeset" use="optional" />
                        <xs:attribute type="xs:dateTime" name="timestamp" use="optional" />
                        <xs:attribute type="xs:string" name="user" use="optional" />
                        <xs:attribute type="xs:int" name="uid" use="optional" />
                        <xs:attribute type="xs:float" name="lat" use="optional" />
                        <xs:attribute type="xs:float" name="lon" use="optional" />

                    </xs:complexType>

                </xs:element>


                <xs:element name="way" maxOccurs="unbounded" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="nd" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:long" name="ref" use="optional" />
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="tag" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:string" name="k" use="optional" />
                                            <xs:attribute type="xs:string" name="v" use="optional" />
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:int" name="id" use="optional" />
                        <xs:attribute type="xs:string" name="visible" use="optional" />
                        <xs:attribute type="xs:byte" name="version" use="optional" />
                        <xs:attribute type="xs:int" name="changeset" use="optional" />
                        <xs:attribute type="xs:dateTime" name="timestamp" use="optional" />
                        <xs:attribute type="xs:string" name="user" use="optional" />
                        <xs:attribute type="xs:int" name="uid" use="optional" />
                    </xs:complexType>
                </xs:element>
                <xs:element name="relation" maxOccurs="unbounded" minOccurs="0">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="member" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:string" name="type" use="optional" />
                                            <xs:attribute type="xs:long" name="ref" use="optional" />
                                            <xs:attribute type="xs:string" name="role" use="optional" />
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="tag" maxOccurs="unbounded" minOccurs="0">
                                <xs:complexType>
                                    <xs:simpleContent>
                                        <xs:extension base="xs:string">
                                            <xs:attribute type="xs:string" name="k" use="optional" />
                                            <xs:attribute type="xs:string" name="v" use="optional" />
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute type="xs:int" name="id" use="optional" />
                        <xs:attribute type="xs:string" name="visible" use="optional" />
                        <xs:attribute type="xs:short" name="version" use="optional" />
                        <xs:attribute type="xs:int" name="changeset" use="optional" />
                        <xs:attribute type="xs:dateTime" name="timestamp" use="optional" />
                        <xs:attribute type="xs:string" name="user" use="optional" />
                        <xs:attribute type="xs:int" name="uid" use="optional" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute type="xs:float" name="version" />
            <xs:attribute type="xs:string" name="generator" />
            <xs:attribute type="xs:string" name="copyright" />
            <xs:attribute type="xs:anyURI" name="attribution" />
            <xs:attribute type="xs:anyURI" name="license" />
        </xs:complexType>
    </xs:element>
</xs:schema>

我想生成将包含类 Edge 的类节点,如下所示:

public class Edge {

    Node m_Source;
    Node m_Destination;

    double m_Weight;

    public Edge(Node i_Source, Node i_Destination, double i_Weight) {
        m_Source = i_Source;
        m_Destination = i_Destination;
        m_Weight = i_Weight;
    }

    public Node getSource() {
        return m_Source;
    }

    public Node getDestination() {
        return m_Destination;
    }

    public double getWeight() {
        return m_Weight;
    }


    public void setSource(Node i_SourceNode)
    {
        m_Source = i_SourceNode;
    }

    public void setDestination(Node i_DestinationNode)
    {
        m_Destination = i_DestinationNode;
    }
}

没有错误的 XSD 解决方案(在遵循 Andreas 的回答之后):

【问题讨论】:

    标签: java xml xsd jaxb


    【解决方案1】:

    您的错误“在 [you] 添加 &lt;xs:element name="edge".... &lt;/xs:element&gt; 时开始”,如错误消息所述,即第 32 行。

    您在&lt;xs:sequence&gt; 标记之外添加了元素。将插入的元素向上移动一行。

    这假设您希望 &lt;node&gt; 包含两个元素:&lt;tag&gt;&lt;edge&gt;(按此顺序)。

    【讨论】:

    • 当我尝试时收到错误:[ERROR] src-resolve.4.2: Error resolve component 'xs:node'。检测到“xs:node”位于命名空间“w3.org/2001/XMLSchema”中,但此命名空间中的组件无法从架构文档“file:/D:/.../scheme.xsd”中引用。如果这是不正确的命名空间,则可能需要更改“xs:node”的前缀。如果这是正确的命名空间,则应将适当的“import”标记添加到“file:/D:/.../scheme.xsd”。文件第 33 行:/D:/.../scheme.xsd
    • 没有xs:node 数据类型。见XML Schema Datatypes。您的属性sourcedestination 尝试使用该类型。错误消息显示行号和有问题的名称。你还需要什么?
    • 我有 ,它不是 xs:node 数据类型?
    • 它定义了一个“元素”,而不是一个“类型”,并且不在xs命名空间中。
    • 好的,我现在将它定义为字符串类型并且它可以工作。我会检查自定义类型,但这是另一个问题。
    猜你喜欢
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多