Xml 如何添加父“包装器”元素并在现有模式中验证它们

Xml 如何添加父“包装器”元素并在现有模式中验证它们,xml,xsd,Xml,Xsd,我创建了一个验证xml实例的xml模式。因为我已经研究了一段时间,所以我当时一直在注释一些xml代码,以简化我对xml模式的学习。我当前有一个具有以下结构的有效架构: <xsd:element name="singer" type="singerType"/> <xsd:complexType name="singerType"> <xsd:sequence> <xsd:element name="singer_id">

我创建了一个验证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合并到我现有的模式中。这两个元素都是复杂类型,我尝试了几种不同的方法,但都出现了错误。有人能给我指出如何将这两个元素添加到我的模式中的正确方向吗?

我不得不在这里做一些假设,因为您没有包含足够的代码示例。如果这不能回答您的问题,请编辑您的问题并添加更多详细信息

您有这样一个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。

element2中允许多少singer元素?元素1呢?里面允许有多少元素2?另外,您是否可以显示完整有效的XSD,以及一个或多个应该由它验证的XML实例?element2中可以有零个或多个Singer