我创建了一个验证我的xml实例的xml架构。因为我已经研究了一段时间,所以我一直在评论一小段xml代码,以简化我对xml架构的学习。我目前有一个有效的架构,具有以下结构:
<xsd:element name="singer" type="singerType"/>
<xsd:complexType name="singerType">
<xsd:sequence>
<xsd:element name="singer_id">
....
....
....
但现在我的xml文件具有这种结构
<element1>
<element2 id="1">
<singer>
<singer_id>
我想要做的是将element1
和element2
合并到我现有的架构中。这两个元素都是复杂的类型,我尝试用几种不同的方式来做,但一直都有错误。有人能指出我正确的方向,如何将这2个元素添加到我的架构中吗?
答案 0 :(得分:0)
我必须在这里做一些假设,因为你没有包含足够的代码示例。如果这不能解答您的问题,请修改您的问题,添加更多详细信息。
你有一个像这样的XML:
<?xml version="1.0" encoding="UTF-8"?>
<element1 xmlns="http://your.target.namespace/singer"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://your.target.namespace/singer schema.xsd">
<element2 id="1">
<singer>
<singer_id>123</singer_id>
</singer>
<singer>
<singer_id>456</singer_id>
</singer>
</element2>
<element2></element2>
<element2>
<singer>
<singer_id>789</singer_id>
</singer>
</element2>
</element1>
您可以使用此架构验证它:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://your.target.namespace/singer"
xmlns="http://your.target.namespace/singer"
elementFormDefault="qualified">
<xs:element name="singer" type="singerType"/>
<xs:complexType name="singerType">
<xs:sequence>
<xs:element name="singer_id" type="xs:token" />
</xs:sequence>
</xs:complexType>
<xs:element name="element1">
<xs:complexType>
<xs:sequence>
<xs:element name="element2" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="singer" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="id" type="xs:token" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
您可能希望以不同的方式组织它,当然,如果您打算使用它们,则按名称公开复杂类型,或者如果您希望在其他地方使用它,则在顶层定义element2
。