2012-06-28 2 views
2

나는 XML 파일을 XML 스키마를 작성하려면 :다음 XML에 XML 스키마를 쓰는 방법은 무엇입니까?

<root> 
    <rate>10</rate> 
    <rate></rate> 
    <rate>15</rate> 
    ... 
</root> 

< 속도 >는 minOccurs는 1, maxOccurs에이 억제 할 수 있습니다. < 비율 >에는 xs : 정수 유형이 있어야하지만 < 비율 > </비율 >과 함께 할 일은 무엇입니까? < rate xsi : nil = "true"/ >을 쓰고 싶지 않습니다.

답변

4

xs:integer 콘텐츠를 포함하는 하나의 <rate> 요소와 콘텐츠가없는 또 다른 요소 하나만 입력하면됩니다. <rate> 요소는 정수 값을 허용하거나 아무 것도 내용을 허용하지 않습니다.

실제로이는 <xs:union> 요소와 수행 할 수 있습니다

<xs:simpleType name="emptyString"> 
    <xs:restriction base="xs:string"> 
    <xs:maxLength value="0"/> 
    </xs:restriction> 
</xs:simpleType> 

<xs:element name="rate"> 
    <xs:simpleType> 
     <xs:union memberTypes="xs:integer emptyString"/> 
    </xs:simpleType> 
</xs:element> 

<rate/>, <rate></rate>, <rate>42</rate> (또는 다른 xs:integer 값),하지만 <rate>Hello, World!</rate>을 받아 들일 것입니다.

이 작업을 수행하려면 스키마의 접두사없는 네임 스페이스를 대상 네임 스페이스와 같게 설정해야합니다. 그렇지 않으면 memberTypes 특성이 발견되지 않습니다. (물론, 대신에 대상 네임 스페이스의 접두어를 정의하여 사용할 수도 있습니다.

maxOccurs 등의 전체 스키마를 작성하는 방법에 대한 설명이 생략되었으므로 당신은 이미 그것을하는 방법을 알고 있습니다. 더 자세한 정보가 필요하면 알려주십시오.

+0

감사합니다. 내가 그것에 대해 생각했지만 더 아름다운 해결책을 찾고 싶다. 스키마로 C++ 코드를 생성 할 것이기 때문이다. – dizel3d

+0

@ dizel3d : 아, 알겠습니다.그렇다면 C++ 코드 생성기가 스키마/유니온을 만드는 데 많이 의존합니다. 이 부분을 직접 작성하면 nullable int와 같은 것으로 표현할 수 있습니다. –

1

O.R.Mapper의 접근 방식 대신 요소의 유형을 maxLength = 1 인 정수 목록으로 선언 할 수 있습니다.

<xs:element name="rate"> 
    <xs:simpleType> 
     <xs:restriction base="listOfInteger"> 
      <xs:maxLength value="1"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

<xs:simpleType name="listOfInteger"> 
    <xs:list itemType="xs:integer"/> 
</xs:simpleType> 

나는이 스키마 인식 XQuery와 XSLT 응용 프로그램에서 쉽게 처리 할 수이기로 (정수, 길이 제로의 문자열)의 조합을 사용하여이 방법을 선호하는 경향이있다. JAXB를 사용하여 데이터 바인딩을 사용하는 경우 더 잘 작동 할 수도 있습니다.

0

사용하려는 XML 스키마를 작성합니다. C++ 코드 생성기를 사용하게되면이 작업이 훨씬 쉬워 질 것입니다 (저는 EclipseLink JAXB (MOXy)입니다. 그래서 Java 측에서이 경험을 쌓았습니다). 당신이 잘못된 데이터를 수신 예상 때문에

<xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="rate" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

, 당신은 다음과 같은 옵션이 있습니다

  1. 개체 - 투 - XML ​​솔루션을 원하는 방식으로 자동으로이 유효하지 않은 데이터를 처리합니다. 예를 들어, JAXB는 불량 데이터에 견딜 수 있도록 설계되었습니다.
  2. 오브젝트 - XML ​​솔루션은 문제를 해결하기 위해 활용할 수있는 불량 데이터를 처리하는 메커니즘을 제공합니다. 예를 들어 JAXB는 ValidationEventHandler 메커니즘을 제공합니다.
관련 문제