2013-01-23 3 views
3

XML 파일의 유효성을 검사하기 위해 XSD를 작성하고 싶습니다. XML 파일의 예는 다음과 같이 보일 수 있습니다 : 요구 사항의작성자 XSD (확장 가능 요소)

<person> 
    <fullname>John Doe</fullname> 
    <age>25</age> 
    <gender>male</gender> 
</person> 

하나는 <person> 태그가 위의 3 개 필요한 자식 요소 외에, 그것은 어떤 이름을 가진 임의의 요소를 포함 할 수 있음을 의미 확장 할 수 있다는 점이다. 따라서이 문서는 XSD에서 유효성을 검사 할 때 유효합니다.

<person> 
    <fullname>John Doe</fullname> 
    <age>25</age> 
    <gender>male</gender> 
    <address>USA</address> 
    <profession>worker</profession> 
</person> 

은 내가 <xs:any /> 요소에 대해 읽을 수 있지만 XSD는 나를 <xs:all /> 요소 내부 <xs:any />를 넣을 수 없습니다. <fullname>, <gender><age> 요소가 필요하며 각 요소는 정확히 하나만 나타나야합니다. 그 외에는 0 또는 여러 개의 선택적 요소가있을 수 있습니다.

지원되는 XSD 규칙을 사용하여이를 수행 할 수 있습니까?

+0

는 난 단지''''을 포함 할 수 있으며'는'다른 그룹을 포함 할 수 있기 때문에,''로 가능하다고 생각하지 않습니다. 실제로 3 개의 필드 만있는 경우 각 주문을 명시 적으로 지정할 수 있습니다 (UPA로 인해 두 개의 선택 항목에 동일한 접두사가 없음을주의하십시오). 즉 :'a (bc | cb) | b (ac | ca) | c (ab | ba)'. – 13ren

답변

0

xs : all과 xs : any를 결합하면 모호한 콘텐츠가 만들어 질 수 있습니다. 그 이유는 허용되지 않습니다. 그러나 내용이 xs : 시퀀스에 포함되어 있으면이 작업을 수행 할 수 있습니다.

주 : xs : any의 namespace 및 processContent 속성이 사용자 요구 사항에 맞게 올바르게 설정되었는지 확인하십시오.

xs:openContent 태그를 사용하는 XSD 1.1에서 이러한 종류의 확장성에 대한 지원이 훨씬 우수하지만 XSD 1.1을 지원합니다. 여전히 제한적입니다.

enter image description here

<?xml version="1.0" encoding="utf-8" ?> 
<!--Created with Liquid XML 2016 Developer Bundle Edition 14.1.3.6618 (https://www.liquid-technologies.com)--> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="person"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="fullname" type="xs:string" /> 
       <xs:element name="age" type="xs:int" /> 
       <xs:element name="gender"> 
        <xs:simpleType> 
         <xs:restriction base="xs:string"> 
          <xs:enumeration value="male" /> 
          <xs:enumeration value="female" /> 
         </xs:restriction> 
        </xs:simpleType> 
       </xs:element> 
       <xs:any namespace="##any" processContents="skip" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema>