2013-04-16 2 views
1

약 3 년 전에 간단한 XML로 프로그램에서 XML을 사용했습니다. 다른 작업을 위해 지금 필요하고 그냥 오래된 파일을 뽑아 내고 약간의 변경을가했지만 이제는 내 문서가 유효하지 않습니다. 나는 당황 스럽다. 아주 단순 해 보인다. 여기 내 스키마입니다 :유효성 검사에 사용 된 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> 

산소가 2에 대해 불평이를 확인할 수 없습니다 나는 그게 뭔지 생각 했어!

나는 이것을 3 년 전에 썼을 때 그것이 내 첫 번째 스키마 였으므로 어쩌면 내가 어리석은 짓을하고 있다는 것을 알고있다. 나는 그런 말을 꺼리지 않는다. :-) 감사!

답변

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> 
+1

슬프게도 원래 코드를 더 이상 테스트 할 수 없습니다. 그렇습니다. maxOccurs 태그가 올바르게 작동합니다. –

관련 문제