2011-08-01 5 views
0

xsd 스키마가 있지만 다음과 같이 직렬화에 사용할 수없는 xml이 있습니다.다음 xml에 대한 xsd 스키마 만들기

<rulestruct> 
    <rule> 
     <type name="vector" /> 
     <ruleident ruleidentifier="" /> 
     <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="expression" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="vector" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="statement" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
    <rule> 
      <type name="statement" /> 
      <ruleident ruleidentifier="" /> 
      <pattern type="" /> 
    </rule> 
</rulestruct> 

각 rulestruct는 1.N 규칙을 가질 수 있습니다. 각 규칙을 반복 할 수 있습니다. 주문을해야합니다. 각 규칙에는 1.N 요소가 있고, 일부 요소에는 9 개의 요소가 있고, 다른 요소에는 10, 13이 있습니다. 9 가지 규칙 유형이 있습니다.

요소 그룹을 사용하여 각 규칙 유형을 나타내려고했지만 맵핑 방법을 잘 모르겠습니다.

+0

여기서 무엇을 요구하고 있는지 분명하지 않습니다. 클래스를 XML로 직렬화하는 데 도움이 필요하거나 클래스를위한 더 나은 스키마를 만들고 싶습니다. –

답변

2

기본 속성이 추상 유형 이름과 동일한 xs:ComplextContent>xs:extension이됩니다. XML에서 각 규칙 요소는 요소 구체 유형을 구별하기 위해 xsi:type attrite가 있어야합니다. 설명 및 예는 here입니다.

각 규칙 유형에 다른 요소 이름을 사용하거나 사용하려면 대체 그룹을 사용할 수 있습니다. 공통 조상은 속성 추상으로 다시 정의됩니다. 구체적 유형은 공통 조상의 이름과 동일한 속성 substitutionGroup을 갖는 xs : element로 정의됩니다. 설명 및 예는 here입니다.

+0

예를 들어 주시겠습니까? –

+0

은 당신이 묘사 한 것을 반영하는 http://www.xfront.com/VariableContentContainers.html을 발견했습니다. 나는 방법 3이 내가 찾던 것에 가장 가깝다고 생각하는데, 그것은 당신의 첫 번째 방법입니다. 감사. Bob –

+0

잘 했어. 감사. 단발 –

0

jaxb를 사용 하시나요? xsd를 사용하면 상속을 사용할 수 있으며 요소가 필요하거나없는 경우 minOccurs/maxOccurs로 재생할 수 있습니다. 여기에 예를

, 난 아마 오류가 그것을 테스트하지 않고 처음부터 쓰기가 :

당신은 당신의 문제에 대한 자주 많은 솔루션이 본
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0"xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      jaxb:extensionBindingPrefixes="xjc"> 
  
      <xsd:annotation> 
            <xsd:appinfo> 
                  <jaxb:globalBindings> 
                        <xjc:simple /> 
                  </jaxb:globalBindings> 
            </xsd:appinfo> 
      </xsd:annotation> 
  
      <xsd:element name="rulestruct" type="PRuleStruct" /> 
      <xsd:complexType name="PRuleStruct"> 
            <xsd:sequence> 
                  <xsd:element name="rule" type="PRule" minOccurs="1" maxOccurs="unbounded" /> 
            </xsd:sequence> 
       </xsd:complexType> 
  
      <xsd:complexType name="PRule"> 
            <xsd:sequence> 
                  <xsd:element name="vector" type="PVector" minOccurs="1" maxOccurs="unbounded" /> 
            </xsd:sequence> 
       </xsd:complexType> 

. 나의 선택은 흔히 상속과 가능한 적은 마커를 사용하고 이름을 가지고 노는 것이다. 여기 내 목적 : 다양한 규칙 유형에 대 한 요소 (규칙)의 같은 이름을 유지하려면, 당신은 추상적 인 요소 (속성 abstract="true") 및 모든 자식을 정의

<rules> 
<ruleVector ruleidentifier="sample" patternType="sample"> 
</ruleVector> 

+0

죄송합니다. .net, C# monikers 태그를 넣지 않았습니다. –

관련 문제