XML XSD 递归和命名空间 [英] XML XSD recursion and namespaces
问题描述
我正在尝试围绕 XSD 中的命名空间和递归进行思考,但我感到迷茫.
I'm trying to wrap my head around namespaces and recursion in XSD and I feel lost.
Error: The QName value 'topic' does not resolve to a(n) element declaration
最重要的部分是用白线划分的,只是学习xsd,但我的一项作业需要它,所以请放轻松...
代码(我尝试点击此链接:XML 中的递归元素,不幸的是没有结果):
Code (I tried to follow this link: Recursive element in XML , unluckily no results):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='xmap-content'>
<xs:complexType>
<xs:sequence>
<xs:element name='sheet'>
<xs:complexType>
<xs:sequence>
<xs:element name='topic'>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name='title' type='xs:string'/>
<xs:element name='children' minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name='topics'>
<xs:complexType>
<xs:sequence>
<xs:element ref='topic' minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
最重要的部分是用白线划分的,只是在学习 xsd,但我的一项作业需要它,所以请放轻松...
Most important part is divided with whitelines, just learning xsd but I need it for one of my assignments, so please, take it easy...
推荐答案
XSD 递归引用元素(无命名空间)
为了递归引用topic
,它必须被全局定义.您的尝试失败,因为 topic
是在本地定义的.
XSD recursive reference to an element (without namespaces)
In order to reference topic
recursively, it must be defined globally. Your attempt is failing because topic
is defined locally.
这会起作用:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='xmap-content'>
<xs:complexType>
<xs:sequence>
<xs:element name='sheet'>
<xs:complexType>
<xs:sequence>
<xs:element ref='topic' minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='topic'>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name='title' type='xs:string'/>
<xs:element name='children' minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name='topics'>
<xs:complexType>
<xs:sequence>
<xs:element ref='topic' minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<小时>
XSD 递归引用元素(带命名空间)
您在问题中提到了名称空间,但您包含的 XSD 并未尝试定义名称空间.(如上所示,您的问题本身也与名称空间无关.)但是,上面的 XSD 适合与名称空间一起使用,以防您确实需要它们.请注意,您必须定义一个命名空间前缀以引用由 xs:schema/targetNamespace
:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:e="http://www.example.com"
targetNamespace="http://www.example.com">
<xs:element name='xmap-content'>
<xs:complexType>
<xs:sequence>
<xs:element name='sheet'>
<xs:complexType>
<xs:sequence>
<xs:element ref='e:topic' minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name='topic'>
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
<xs:element name='title' type='xs:string'/>
<xs:element name='children' minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name='topics'>
<xs:complexType>
<xs:sequence>
<xs:element ref='e:topic' minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这篇关于XML XSD 递归和命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!