当前位置: 首页 > 知识库问答 >
问题:

xsd的验证错误

公西星文
2023-03-14

我有以下xml:

<?xml version="1.0"?>
<BookStore xmlns="http://www.books.org"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=
                      "http://www.books.org
                       BookStore.xsd">
<Book category="Life style">
    <Status>Available</Status>
    <Title lang="en">Hour before dawn</Title>
    <Author>
        <Name>Paul McCartney</Name>
        <Genre>M</Genre>
    </Author>
    <Date>
        <Day>23</Day>
        <Month>03</Month>
        <Year>1999</Year>
    </Date>
    <Price type="euro">29.99</Price>
    <ISBN>1-56592-245-2</ISBN>
    <Publisher>McMilli Publishing</Publisher>
</Book>
<Book category="Philosophy">
    <Status>Not available</Status>
    <Title lang="de">Thus spoke Zarathustra</Title>
    <Author>
        <Name>Friedrich Nietzsche</Name>
        <Genre>M</Genre>
    </Author>
    <Date>
        <Day>21</Day>
        <Month>11</Month>
        <Year>1877</Year>
    </Date>
    <Price type="euro">39.15</Price>
    <ISBN>0-440-34319-4</ISBN>
    <Publisher>Sell Publishing Co.</Publisher>
</Book>
<Book category="Fiction">
    <Status>Available</Status>
    <Title lang="en">To kill a mockingbird</Title>
    <Author>
        <Name>Harper Lee</Name>
        <Genre>M</Genre>
    </Author>
    <Date>
        <Day>15</Day>
        <Month>03</Month>
        <Year>1982</Year>
    </Date>
    <Price type="euro">35.15</Price>
    <ISBN>0-454-25215-8</ISBN>
    <Publisher>Harper Row</Publisher>
</Book>
<Book category="Fantasy">
    <Status>Available</Status>
    <Title lang="en">Hexed</Title>
    <Author>
        <Name>Ilona Andrews</Name>
        <Genre>F</Genre>
    </Author>
    <Author>
        <Name>Yasmine Galenorn</Name>
        <Genre>F</Genre>
    </Author>
    <Author>
        <Name>Allyson James</Name>
        <Genre>F</Genre>
    </Author>
    <Author>
        <Name>Jeanne Stein</Name> 
        <Genre>F</Genre>
    </Author>
    <Date>
        <Day>01</Day>
        <Month>01</Month>
        <Year>2011</Year>
    </Date>
    <Price type="euro">19.8</Price>
    <ISBN>3-521-77423-9</ISBN>
    <Publisher>Harper &amp; Row</Publisher>
</Book>
<Book category="Web">
    <Status>Not available</Status>
    <Title lang="en">SCJP Sun certified programmer for Java 6</Title>
    <Author>
        <Name>Kathy Sierra</Name>
        <Genre>F</Genre>
    </Author>
    <Author>
        <Name>Bert Bates</Name>
        <Genre>M</Genre>
    </Author>
    <Date>
        <Day>06</Day>
        <Month>09</Month>
        <Year>2011</Year>
    </Date>
    <Price type="euro">55</Price>
    <ISBN>2-421-52214-1</ISBN>
    <Publisher>Learnkey</Publisher>
</Book>
<Book category="Horror">
    <Status>Available</Status>
    <Title lang="en">Out of the depths</Title>
    <Author>
        <Name>Cathy MacPhail</Name>
        <Genre>F</Genre>
    </Author>
    <Date>
        <Day>08</Day>
        <Month>12</Month>
        <Year>2013</Year>
    </Date>
    <Price type="euro">41</Price>
    <ISBN>7-666-21242-7</ISBN>
    <Publisher>Greenock</Publisher>
</Book>
<Book category="Art and design">
    <Status>Available</Status>
    <Title lang="en">The design of everyday things</Title>
    <Author>
        <Name>Donald Norman</Name>
        <Genre>M</Genre>
    </Author>
    <Date>
        <Day>27</Day>
        <Month>02</Month>
        <Year>2002</Year>
    </Date>
    <Price type="euro">26</Price>
    <ISBN>8-4322-62332-6</ISBN>
    <Publisher>Basic books</Publisher>
</Book>

我在网上验证了xml,它的格式很好。接下来我做了架构:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.books.org"
        xmlns="http://www.books.org"
        elementFormDefault="qualified">
<xsd:element name="BookStore">
    <xsd:complexType>
        <xsd:sequence>
        <xsd:element name="Book" maxOccurs="unbounded">
            <xsd:complexType>
                <xsd:sequence>
                    <xsd:element name="Status">
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:string">
                                <xsd:pattern value="Available|Not available">
                                </xsd:pattern>
                            </xsd:restriction>
                        </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="Title">
                        <xsd:complexType>
                            <xsd:attribute name="en" type="xsd:string" use="required"/> 
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="Author" minOccurs="1" maxOccurs="unbounded">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="Name">
                                    <xsd:simpleType>
                                        <xsd:restriction base="xsd:string">
                                            <xsd:pattern value="[a-zA-Z]+\\s[a-zA-Z]+">
                                            </xsd:pattern>
                                        </xsd:restriction>
                                    </xsd:simpleType>
                                </xsd:element>
                                <xsd:element name="Genre">
                                    <xsd:simpleType>
                                        <xsd:restriction base="xsd:string">
                                            <xsd:enumeration value="M"/>
                                            <xsd:enumeration value="F"/>
                                        </xsd:restriction>
                                    </xsd:simpleType>
                                </xsd:element>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="Date">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="Day">
                                    <xsd:simpleType>
                                        <xsd:restriction base="xsd:positiveInteger">
                                            <xsd:minInclusive value="1"/>
                                            <xsd:maxInclusive value="31"/>
                                        </xsd:restriction>
                                    </xsd:simpleType>
                                </xsd:element>
                                <xsd:element name="Month">
                                    <xsd:simpleType>
                                        <xsd:restriction base="xsd:positiveInteger">
                                            <xsd:minInclusive value="1"/>
                                            <xsd:maxInclusive value="12"/>
                                        </xsd:restriction>
                                    </xsd:simpleType>
                                </xsd:element>
                                <xsd:element name="Year">
                                    <xsd:simpleType>
                                        <xsd:restriction base="xsd:positiveInteger">
                                        </xsd:restriction>
                                    </xsd:simpleType>
                                </xsd:element>
                            </xsd:sequence>
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="Price" type="xsd:decimal">                       
                    </xsd:element>
                    <xsd:element name="ISBN">
                        <xsd:simpleType>
                            <xsd:restriction base="xsd:string">
                                <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}|\d{1}-\d{3}-\d{5}-\d{1}|\d{1}-\d{2}-\d{6}-\d{1}">
                                </xsd:pattern>
                            </xsd:restriction>
                        </xsd:simpleType>                   
                    </xsd:element>
                    <xsd:element name="Publisher" type="xsd:string">
                    </xsd:element>
                </xsd:sequence>
                <xsd:attribute name="category" type="xsd:string" use="required"/>
            </xsd:complexType>
        </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

当我尝试在线验证时,会出现以下错误:http://www.utilities-online.info/xsdvalidation/?save=72595340-b1e9-4061-a655-c6cfb9cdac44-XSD验证#。USIxpqw1pi点击按钮根据xsd验证xml并查看所有错误。有人知道如何毫无差错地解决这个问题吗?

共有1个答案

师博
2023-03-14

现在对问题的更改似乎已经停止,下面是您的XSD更新,以消除验证给定XML文档实例时收到的验证错误。

固定XSD:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.books.org"
            xmlns="http://www.books.org"
            elementFormDefault="qualified">
  <xsd:element name="BookStore">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Book" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Status">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                    <xsd:pattern value="Available|Not available">
                    </xsd:pattern>
                  </xsd:restriction>
                </xsd:simpleType>
              </xsd:element>
              <xsd:element name="Title">
                <xsd:complexType>
                  <xsd:simpleContent>
                    <xsd:extension base="xsd:string">
                      <xsd:attribute name="lang" type="xsd:string"/> 
                    </xsd:extension>
                  </xsd:simpleContent>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="Author" minOccurs="1" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Name">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                          <xsd:pattern value="[a-zA-Z]+\s[a-zA-Z]+">
                          </xsd:pattern>
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="Genre">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:string">
                          <xsd:enumeration value="M"/>
                          <xsd:enumeration value="F"/>
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="Date">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Day">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:positiveInteger">
                          <xsd:minInclusive value="1"/>
                          <xsd:maxInclusive value="31"/>
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="Month">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:positiveInteger">
                          <xsd:minInclusive value="1"/>
                          <xsd:maxInclusive value="12"/>
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="Year">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:positiveInteger">
                        </xsd:restriction>
                      </xsd:simpleType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="Price">                       
                <xsd:complexType>
                  <xsd:simpleContent>
                    <xsd:extension base="xsd:decimal">
                      <xsd:attribute name="type" type="xsd:string"/> 
                    </xsd:extension>
                  </xsd:simpleContent>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="ISBN">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                    <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}|\d{1}-\d{3}-\d{5}-\d{1}|\d{1}-\d{2}-\d{6}-\d{1}|\d{1}-\d{4}-\d{5}-\d{1}">
                    </xsd:pattern>
                  </xsd:restriction>
                </xsd:simpleType>                   
              </xsd:element>
              <xsd:element name="Publisher" type="xsd:string">
              </xsd:element>
            </xsd:sequence>
            <xsd:attribute name="category" type="xsd:string" use="required"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

小注:我在ISBN模式中添加了另一个表单,以支持上一本书的ISBN:8-4322-62332-6。如果这不是有效的ISBN格式,那么应该在我添加的模式中删除最后一个|-子句(\d{1}-\d{4}-\d{5}-\d{1}),并在XML文档实例中修复ISBN。

 类似资料:
  • 我没有编写C++代码,因为我的首要任务是创建有效的xml和XSD。 xml: XSD: 为了验证,我转到:https://www.freeformatter.com/xml-validator-xsd.html 错误:s4s-att-invalid-value:元素“Element”中“type”的属性值无效。记录原因:cvc-datatype-valid.1.2.1:“xs:”不是“QName”

  • 使用krasa-jaxb-tools jaxb-plugin,我生成了以下内容: 来自XSD架构: 我得到了注释元素: 使用JAXB,我成功地生成了有效的XML(它通过了XSD验证--包括上面提到的字符串的格式)。 但是,如果我尝试使用Bean验证验证上面提到的字符串,它会抛出错误--如果它被写为“small123”,它会说它应该大写(失败small.123[a-za-z0-9.]{0,27}re

  • 我是XML验证的新手,我遇到了一个我不明白的问题。我使用Python库根据我使用MS XSD工具生成的XSD文件验证XML文件。在创建了许多工作正常的XSD模式后,我在最新的XSD中遇到了以下问题 原因:位置1处标记为“app1:displayname”的意外子级。需要标记mstns:displayname。 架构: 实例: premiere 路径:/manifest:mediaManifest/

  • 我在验证xml和xsd时遇到问题。我从xsd模式中得到这个错误。 src解决方案。4.2:解析组件“urn:id”时出错。检测到“urn:id”位于命名空间“urn:schemas microsoft com:xml-diffgram-v1”中,但此命名空间中的组件无法从架构文档中引用virtual://server/schema.xsd。如果名称空间不正确,可能需要更改“urn:id”的前缀。如

  • 对于任何熟悉xml模式的人来说,这可能是一个基本错误,它可能只是Eclipse Indigo中的一个小的配置更改,但它耗尽了我的google搜索能力,所有实验都未能解决它。 它是现有项目中的一个xsd文件,运行良好。我将该项目设置为Eclipse中的maven/dynamic web项目,在为dynamic web Project2.4打开Eclipse的project facet之后,Eclip

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):