我想创建一个只允许一个根节点的xml架构。
在根节点下面的结构中,有一个我想在不同位置重用的元素。
我的第一种方法是在模式中创建一个全局元素,但是如果我这样做,只有一个标记为root的xml文档对这个模式也有效。
如何创建仅允许在我的根结构中用作ref元素的全局元素?
这就是我想要的:
<root>
<branch>
<leaf/>
</branch>
<branch>
<fork>
<branch>
<leaf/>
</branch>
</leaf>
</fork>
</root>
但这也是有效的
<leaf/>
作为根节点
答案 0 :(得分:0)
XML始终只有一个根节点。它表示一个层次结构,并绑定到它的模式。因此,您无法使用相同的模式更改根元素并且无效。
起初它应该是这样的格式:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="your-scheme.xsd>
<branch>
<leaf/>
</branch>
<branch>
<fork>
<branch>
<leaf/>
</branch>
<leaf/>
</fork>
</branch>
</root>
我建议这样的计划:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="root">
<xs:sequence>
<xs:element ref="branch" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="branch">
<xs:choice>
<xs:element ref="fork" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="leaf" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="fork">
<xs:sequence>
<xs:element ref="branch" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="leaf" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="leaf"/>
<xs:element name="root" type="root"/>
<xs:element name="branch" type="branch"/>
<xs:element name="fork" type="fork"/>
<xs:element name="leaf" type="leaf"/>
</xs:schema>
我希望它可以帮到你。