2010-06-03 2 views
1

전자 메일을 처리하고 일부 헤더를 XML 문서에 저장합니다. 또한 xml 스키마에 대해 문서의 유효성을 검사해야합니다.xsd에 대한 XML 유효성 검사에서 요소 순서 무시

제목이 제안했듯이 요소 순서를 무시하고 유효성을 검사해야하지만,이 기사를 읽는 한 불가능한 것 같습니다. 나 맞아?

헤더를 <xsd:sequence>에 넣으면 순서가 분명합니다. 만약 우리가 <xsd:all>이라면 순서는 무시되지만 이상한 어떤 이유 때문에 적어도 한 번 이상 요소가 발생해야 함을 암시합니다.

내 XML은 다음과 같이이다 :

<headers> 
    <subject>bla bla bla</subject> 
    <recipient>[email protected]</recipient> 
    <recipient>rcp02domain.com</recipient> 
    <recipient>[email protected]</recipient> 
</headers> 

하지만 최종 문서 제목과받는 요소를 교체하는 경우에도 유효합니다 생각합니다.

정말로 할 일이 없나요?

답변

4

예, 가능합니다. 그냥 무제한으로 설정된 maxOccurs를 사용하여 선택 사항을 작성하십시오 (물론 일부 유형 또는 요소 컨텐츠 모델에서).

<xs:element name="headers"> 
    <xs:complexType> 
     <xs:choice maxOccurs="unbounded"> 
      <xs:element name="subject" type="xs:string"/> 
      <xs:element name="recipient" type="xs:string"/> 
     </xs:choice> 
    </xs:complexType> 
</xs:element> 
+0

@segolas,이 솔루션이 요구 사항을 충족한다는 것을 알 수 있습니다. 해결책을 수락하도록 예의를 보여주십시오. –

+0

Netbeans에서 작업 중이며,이 솔루션을 사용하면 알아 내려고하는 오류가 발생합니다. 그래서, 지금까지 나는이 대답이 작동하는지 아닌지를 모른다! – Segolas

+1

흠 ... 나는 그것이 효과가 있다고 생각하지만, 지금 jaxb는 getSubject()와 getRecipient() 대신에 getSubjectOrRecipient() 메소드를 생성한다. http://www.w3schools.com/Schema/el_choice.asp에 따르면 "XML 스키마 선택 요소를 사용하면 포함 된 요소 내에 선언에 포함 된 요소 중 하나만 존재할 수 있습니다." 그래서 헤더 요소 안에 제목이나 수신자 만있을 수 있습니다 ... 맞습니까? – Segolas

0

첫째, 몇 가지 요구 사항은 추측 :

  • "주제는"
  • 그것은 당신이 두 가지 요소를 가지고 있기 때문에
  • 적어도 하나가 "받는 사람"필수

되는 필수입니다 매우 쉽게 달성 할 수 있습니다 :

<xs:element name="headers"> 
<xs:complexType> 
<xs:choice> 
    <xs:sequence><!-- The recipient MUST be after the subject -->   
    <xs:element name="subject" type="xs:string" /> 
    <xs:element name="recipient" minOccurs="1" maxOccurs="unbound" type="xs:string" /> 
    </xs:sequence> 
    <xs:sequence><!-- The recipient is before the subject -->   
    <xs:element name="recipient" minOccurs="1" maxOccurs="unbound" type="xs:string" /> 
    <xs:element name="subject" type="xs:string" /> 
    <xs:element name="recipient" minOccurs="0" maxOccurs="unbound" type="xs:string" /> 
    </xs:sequence> 
</xs:choice> 
</xs:complexType> 
</xs:element> 
+0

Unfortunaly 나는 내 XML이 무엇인지에 대한 예제를 게시했으며 실제로 많은 요소가 있습니다. 귀하의 솔루션을 이해하지만 내 스키마를 덜 읽을 수 있고 유지하기가 너무 힘들 것이라고 생각합니다 ... – Segolas

관련 문제