2014-04-08 3 views
0

필자는 검증해야 할 이상한 XML 구조를 가지고 있습니다. 동시에 정치적 이유로 그 구조와 관련된 어떠한 것도 수정할 수 없다는 사실을 받아 들여야합니다.이상한 XML 구조의 유효성 확인

저는 idiotically overcomplex 스키마를 정의하여 대부분을 검증했습니다. 그러나 XML의 특정 부분은 XSD로 유효성을 검사하는 것이 거의 불가능한 것처럼 보입니다. -

<booktitles> 
    <author>Some Author</author> 
    <title>Title 1</title> 
    <year>1666</year> 
    <title>Title 2</title> 
    <year>1919</year> 
</booktitles> 

그래서 모든 booktitles 항목이 정확히 1 저자 포함하고 제목의 변수 양 : 여기에 문제가있는 조각이다.

그래서 XML 구조를 수정하지 않고 (예,이게 얼마나 바보 스럽다는 것을 깨닫습니다.) 유효성 검사/시행 할 XSD를 정의 할 수 있습니까?

추신 : 나는 또한 유효성 검사를 위해 JaxB를 사용할 가능성이 있습니다.

+0

에서, trang의 "그것은 유효한 XML되지 않습니다." 왜? 이게 나에게 맞는 것 같아. 요소를 혼합하는 것은 합법적입니다. –

+1

@LutzHorn 당신 말이 맞습니다. 내 잘못 된 진술을 삭제했습니다. – dribnif

+0

그것에 대해 이상한 점이나 무효 한 점은 없습니다. 빈약 한 XML 스타일 일뿐입니다. 반복되는 요소 나 그룹은 "container"요소 안에 넣어야합니다. 그리고이를 검증하는 WXS 스키마는 DTD 나 RNG만큼이나 쉽습니다. – arayq2

답변

3

이 시도 :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> 
    <xs:element name="booktitles"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element ref="author"/> 
     <xs:sequence maxOccurs="unbounded"> 
      <xs:element ref="title"/> 
      <xs:element ref="year"/> 
     </xs:sequence> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="author" type="xs:string"/> 
    <xs:element name="title" type="xs:string"/> 
    <xs:element name="year" type="xs:string"/> 
</xs:schema> 

씨의이

<!ELEMENT booktitles 
      (author, (title, year)+) 
      > 

<!ELEMENT author 
      (#PCDATA) 
      > 

<!ELEMENT title 
      (#PCDATA) 
      > 

<!ELEMENT year 
      (#PCDATA) 
      > 
+0

감사합니다, 작품! – dribnif