1

我对 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 有什么问题。

4

3 回答 3

1

Just add the elementFormDefault="qualified" to the schema attribues.

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

And your original will work

 <?xml version="1.0" encoding="utf-8"?>
   <Employee xmlns="http://www.example.org/testSchema">
     <Name>
      <FirstName>John</FirstName>
      <LastName>Smith</LastName>
   </Name>
 </Employee>
于 2010-05-13T15:47:51.017 回答
1

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

于 2010-05-13T16:08:22.493 回答
0

看起来您没有指定如何验证FirstNameandLastName元素;给出这些元素的规范type="xsd:string"xsd当然,需要映射到 XML Schema Datatypes 命名空间),一切都应该很好。

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

于 2010-05-13T15:41:06.283 回答