用于验证的XML没有

时间:2013-04-16 14:19:52

标签: xml validation schema

大约3年前我在一个程序中使用了XML,简单的东西。我现在需要另一个任务,我只是提取旧文件并进行了一些微不足道的更改,现在我的文档没有验证。我很困惑,看起来很简单。这是我的架构:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

   <xs:complexType name="Task_t">
       <xs:sequence>
           <xs:element name="ShortTitle" type="xs:string"/>
           <xs:element name="Title" type="xs:string"/>
           <xs:element name="Content" type="xs:string"/> 
       </xs:sequence>
   </xs:complexType>

   <xs:element name="History" type="History_t"/>

   <xs:complexType name="History_t">
       <xs:sequence>
           <xs:element name="Task" type="Task_t"></xs:element>
       </xs:sequence>
   </xs:complexType>

</xs:schema>

这是我的文件:

<?xml version="1.0" encoding="UTF-8"?>
<History xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="file:/Users/pcezanne/Documents/work/stackoverflow/TestSchema.xsd">
   <Task>
       <ShortTitle>Market Needs</ShortTitle>
       <Title>Market Needs Sample Content</Title>
       <Content>MarketNeeds.html</Content>
   </Task>
   <Task>
       <ShortTitle>The Big Concept Answers Market Needs</ShortTitle>
       <Title>Market Needs Sample Content</Title>
       <Content>BigConcept.html</Content>
   </Task>
   <Task>
       <ShortTitle>Solutions</ShortTitle>
       <Title>Market Needs Sample Content</Title>
       <Content>Solutions.html</Content>
   </Task>
   <Task>
       <ShortTitle>Why Us?</ShortTitle>
       <Title>Market Needs Sample Content</Title>
       <Content>WhyUs.html</Content>
   </Task>
   <Task>
       <ShortTitle>Next Steps</ShortTitle>
       <Title>Market Needs Sample Content</Title>
       <Content>Next Steps.html</Content>
   </Task>
</History>

氧气无法验证这一点,抱怨第二个“此时预计没有子元素。”我认为那就是为了什么!

我知道当我3年前写这篇文章时,这是我的第一个模式,所以也许我做的事情很愚蠢。我不介意被告知。 : - )谢谢!

1 个答案:

答案 0 :(得分:1)

我应该问的第一件事是原始文件在没有修改的情况下工作吗?通常情况下,我认为的变化是无关紧要的,这些变化会给我带来最意想不到的问题!

我无法回答您已更改的内容以打破验证但我可以看到<xs:sequence>缺少maxOccurs="unbounded"maxOccurs的默认值为1,因此架构只需要1个任务。

以下类型允许在我的本地快速测试中使用多个Task元素。

<xs:complexType name="History_t">
    <xs:sequence maxOccurs="unbounded">
        <xs:element name="Task" type="Task_t"></xs:element>
    </xs:sequence>
</xs:complexType>