2017-02-08 9 views
2

simpleType을 익명 simpleType으로 변환하려는 스키마가 있습니다. 기존 스키마는 다음과 같습니다.XML 스키마 : 단순 유형을 익명 유형으로 변환

base = "xxx";

확장명 뒤에 simpleType을 추가합니다.

기타 ...

은 그러나 잘못된 스키마로 끝났다.

질문 :

  1. 어떻게 정보를 잃지 않고 올바른 익명하는 SimpleType 스키마로 입력을 변환하는?
  2. 더 자세히 말하자면, 요소 이름, 유형 이름 등의 동적 입력과 함께이 작업을 자동으로 수행하는 xslt가 있습니까? 사전에

감사합니다,

입력 스키마 :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="test" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="test" elementFormDefault="qualified"> 
<xs:element name="elem1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension base="simpleType1"> 
       <xs:attribute name="att1" type="simpleType2" use="required"/> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
<xs:simpleType name="simpleType1"> 
    <xs:restriction base="xs:decimal"> 
     <xs:fractionDigits value="5"/> 
     <xs:totalDigits value="18"/> 
     <xs:minInclusive value="0"/> 
    </xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="simpleType2"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[A-Z]{3,3}"/> 
    </xs:restriction> 
</xs:simpleType> 
</xs:schema> 

내 시도 결과 :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns="test" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="test" elementFormDefault="qualified"> 
<xs:element name="elem1"> 
    <xs:complexType> 
     <xs:simpleContent> 
      <xs:extension> 
       <xs:simpleType> 
        <xs:restriction base="xs:decimal"> 
         <xs:fractionDigits value="5"/> 
         <xs:totalDigits value="18"/> 
         <xs:minInclusive value="0"/> 
        </xs:restriction> 
       </xs:simpleType> 
       <xs:attribute name="att1" use="required"/> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
         <xs:pattern value="[A-Z]{3,3}"/> 
        </xs:restriction> 
       </xs:simpleType> 
      </xs:extension> 
     </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

검증이 같은 오류가있는 잘못된 스키마는 것을 보여준다 :

요소에 'base'속성이 필요합니다.

요소는 요소 아래에 허용되지 않습니다.

'name'속성은 필수 요소입니다.

답변

1

제한된 내용과 특성을 모두 갖도록 요소를 선언 할 때 XSD에서 완전히 익명의 로컬 정의를 사용할 수 없습니다.

당신은 물론, 혼자 속성 (att1)의 유형에 대한 로컬 정의를 사용할 수 있지만 요소 (elem1)의 제한 단순 콘텐츠의 유형 (simpleType1) 당신은 또한 필요없는 경우 att1elem1에 신고하십시오.

은 참조 :How to restrict element content when element has attribute

+0

예, 사실, 내가 속성의 로컬 정의 된 유형을 사용하도록 나섰고 simpleType1에서 '증설베이스'와 함께 할 수없는 것 ... – dellair