2016-06-10 4 views
2

나는 등의 XSD 함께 일하고 있어요 :XSD의 속성을 사용하여 complexType을 제한 하시겠습니까?

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 
    <xs:element name="algo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="nota" type="t_algo" minOccurs="0" 
        maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="t_algo"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[1][0]|[0-9]" /> 
    </xs:restriction> 
    <xs:attribute name="modul" type="t_modul"/> 
    </xs:complexType> 

    <xs:simpleType name="t_modul"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="[m][0][0-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

이 같은 테스트 XML 사용 :

<?xml version="1.0" encoding="UTF-8"?> 
<algo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="file:///D:/DAM/RECUF1/Mispruebas/telf.xsd"> 
    <nota modul="m01">0</nota> 
    <nota modul="m01">7</nota> 
    <nota modul="m01">3</nota> 
    <nota modul="m01">1</nota> 
</algo> 

내가 0 ~ 10 사이 속성 아이들에게 값 nota을 갖고 싶어를 값이 m0Xmodul은 (0-9) 사이에 x입니다. 이전 XSD가 작동한다고 생각했지만 그렇지 않습니다. 누군가 내가 잘못하고있는 것을 설명 할 수 있습니까?

+0

't_modul' 단순 유형에 대해 지정한 패턴이 속성 이름이 아닌 태그 안에 포함 된 값에 적용됩니다. 나는 속성의 이름이 고정되어 있고 당신이 기대하고있는 다양한 유형의 속성 이름에 대한 태그를 정의해야한다고 생각한다. –

+0

뭔가 작동하지 않는다고 말하지 마십시오. 그것이 어떻게 실패했는지 말해주십시오. –

답변

2

제한된 콘텐츠와 요소에 속성을하기 위해, 새로운 xs:simpleType을 정의하고 다음 속성을 확장 할 xs:extension를 사용 : 나는 당신의 정규식 패턴을 단순화 한 것이

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified"> 

    <xs:element name="algo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="nota" type="t_algo" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:complexType name="t_algo"> 
    <xs:simpleContent> 
     <xs:extension base="t_algo_content"> 
     <xs:attribute name="modul" type="t_modul"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 

    <xs:simpleType name="t_modul"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="m0[0-9]"/> 
    </xs:restriction> 
    </xs:simpleType> 

    <xs:simpleType name="t_algo_content"> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="0"/> 
     <xs:maxInclusive value="10"/> 
    </xs:restriction> 
    </xs:simpleType> 

</xs:schema> 

주 첫 번째 경우이고 minInclusive/maxInclusive을 사용하면 두 번째 경우에서 더 자연스럽게 정수 범위를 표현할 수 있습니다.