【问题标题】:XML that used to validate doesn't用于验证的 XML 没有
【发布时间】:2013-04-16 22:39:10
【问题描述】:

大约 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>

Oxygen 无法验证这一点,抱怨第二个“此时不应有子元素”。我以为这就是目的!

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

【问题讨论】:

    标签: xml validation schema


    【解决方案1】:

    我首先要问的是原始文件是否可以在没有修改的情况下工作?通常,我认为微不足道的变化会给我带来最意想不到的问题!

    我无法回答您为破坏验证所做的更改,但我可以看到 &lt;xs:sequence&gt; 缺少 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>
    

    【讨论】:

    • 很遗憾,我不能再测试原始代码了。但是,maxOccurs 标签听起来很对!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    相关资源
    最近更新 更多