2011-07-26 5 views
8

XSD에서 요소 유형을 정의하려고합니다. 선택적 특성이 필요합니다. 존재하는 경우 float를 포함하거나 비어있을 수 있습니다 (그러나 여전히 존재 함).).XSD : 속성을 xs : float 또는 ""로 제한합니다.

예 :

<xs:element name="MyElement"> 
    <xs:complexType> 
     <xs:attribute name="optionalFloatAttribute" type="xs:float" use="optional"/> 
    </xs:complexType> 
</xs:element> 

요구에 "고정"다음 XML을 모두 허용을 -

<MyElement/> 
or 
<MyElement optionalFloatAttribute=""/> 
or 
<MyElement optionalFloatAttribute="3.14159"/> 
내가이 일을 볼 수있는 유일한 방법은 xs:string으로 유형을 변경하는 것입니다

하고, xs:restriction에 정규 표현식을 사용하십시오. 그러나 이것은 나에게 이상적인 것 같지 않습니다. 더 좋은 방법이 있습니까?

그리고은 xml의 이러한 변형을 지원할 수 있습니다. 프로그램과 기존 XML은 유산이며, 나는 우리가 가지고있는 수많은 변형과 일치하는 스키마를 다시 만들려고합니다. 유효한 XML로 간주하십시오.

답변

1

나는 이것을 처리하고 xs:float을 사용하는 방법이 없다고 생각합니다. 기본적으로 빈 문자열은 유효한 숫자가 아닙니다. 일반적으로 0 값을 기대하거나 요소가 모두 누락 될 수 있습니다. 다음과 같은 질문에 대한 답으로 좋은 설명이있다 : 문자열과 정규 표현식 가장 좋은 계획이 될 수 있습니다

Empty elements for primitve datatypes forbidden in XSD

XS를 사용하는 옵션이 보인다.

4

속성이 아닌 요소를 사용하면 xs : float을 nillable로 설정할 수 있습니다. 당신이 XSI 사용할 수있는이 방법 :하지만 속성

<!-- definition --> 
<xs:element name="quantity" type="xs:float" nillable="true" /> 

<!-- instance --> 
<quantity xsi:nil="true" /> 

동등한 : 인스턴스 문서에 전무 = "진정한"는 요소에 값이 없음을 나타냅니다.

당신은 플로트와 빈 문자열을 결합하여 해당 사용자 정의 유형을 정의 할 수 있습니다
5

:

<xs:element name="MyElement"> 
<xs:complexType> 
    <xs:attribute name="optionalFloatAttribute" type="emptyFloat" use="optional"/> 
</xs:complexType> 
</xs:element> 
<xs:simpleType name="emptyFloat"> 
    <xs:union> 
     <xs:simpleType> 
      <xs:restriction base='xs:string'> 
       <xs:length value="0"/> 
      </xs:restriction> 
     </xs:simpleType> 
     <xs:simpleType> 
      <xs:restriction base='xs:float'> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:union> 
</xs:simpleType> 

또는 정규 표현식 사용 : 당신이`complexType`를 사용하여 속성과 같은 일을 할 수있는 가정

<xs:simpleType name="emptyFloat"> 
    <xs:restriction base="xs:string"> 
     <xs:pattern value="-?\d*\.?\d*"/> 
    </xs:restriction> 
</xs:simpleType> 
+0

을 에스? 이것은 훌륭한 대답이며 내 문제를 해결했습니다. –

관련 문제