【问题标题】:Why my test xml is failing with very simple XSD Schema?为什么我的测试 xml 使用非常简单的 XSD Schema 失败?
【发布时间】:2011-02-19 03:45:52
【问题描述】:

我在 xml 架构方面有点新手。如果有人帮助我理解为什么我的 xml 没有通过架构验证,我将不胜感激:

这是我的架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/testSchema" xmlns="http://www.example.org/testSchema">
  <xs:element name="Employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Name">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="FirstName" />
              <xs:element name="LastName" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

这是我的测试 xml:

<?xml version="1.0" encoding="UTF-8"?>
<Employee xmlns="http://www.example.org/testSchema">
 <Name>
  <FirstName>John</FirstName>
  <LastName>Smith</LastName>
 </Name>
</Employee>

Eclipse xml 编辑器/验证器出现以下错误:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'Name'. One of '{Name}' is expected.

我不明白这个架构或我的 xml 有什么问题。

【问题讨论】:

  • 您能发布您尝试验证的架构吗?
  • 架构现在在原始帖子中可见。很抱歉使用“答案”而不是编辑

标签: schema xsd xsd-validation


【解决方案1】:

你所要做的就是添加 elementFormDefault="qualified" 并且你会没事的。要了解这种行为,请阅读“你有资格吗?”栏目@http://msdn.microsoft.com/en-us/library/ms950796.aspx

【讨论】:

  • 感谢 Pangea。这是我的问题的解决方案。
【解决方案2】:

只需将 elementFormDefault="qualified" 添加到架构属性即可。

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"         
       targetNamespace="http://www.example.org/testSchema"
       elementFormDefault="qualified"
       xmlns="http://www.example.org/testSchema">

您的原件也可以使用

 <?xml version="1.0" encoding="utf-8"?>
   <Employee xmlns="http://www.example.org/testSchema">
     <Name>
      <FirstName>John</FirstName>
      <LastName>Smith</LastName>
   </Name>
 </Employee>

【讨论】:

  • 通过添加 xmlns="" 我在 xml 中收到此错误:cvc-complex-type.2.4.a:发现以元素“FirstName”开头的无效内容。应为 '{"example.orgtestSchema":FirstName}' 之一。
【解决方案3】:

您似乎没有指定如何验证 FirstNameLastName 元素;给出type="xsd:string" 的元素规格(当然,xsd 需要映射到 XML Schema Datatypes 命名空间),一切都应该很好。

但最好不要将这些元素嵌套得这么深。将它们全部放在同一级别并使用ref="Name" 将它们链接在一起;它使您的架构更加灵活和可用。

【讨论】:

  • 不,我在“姓名”标签上失败了,而不是在名字或姓氏上。这就是(也许)类型不起作用的原因。我的“名称”元素属于复杂类型,因此我无法设置其类型。顺便说一句,这个例子是我相对复杂的模式的简化版本。通过不使用嵌套元素,我的架构会让我的生活更加困难
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
相关资源
最近更新 更多