2012-10-18 3 views
1

XML 스키마에 어려움을 겪고 있으며 화면을 응시하는 것이 도움이되지 않습니다. 매개 변수 태그에있을요소 이름없이 XSD 선택을 만드는 방법

<root> 
    <command>FOO|BAR|BLOOP</command> 
    <parameters> 
     <param1>val</param1> 
     <param2>val</param2> 
    </parameters> 
<root> 

명령 값 = FOO, BAR 또는 매개 변수의 다른 세트를 BLOOP 여부에 따라 요구와 그것을 : XML은이 같은 외모에 대한 스키마를 만들려고 해요 비어있을 수 있습니다. 특정 명령에 대해 표시해야하는 매개 변수 집합이 정의되고 일부 명령 이름에는 동일한 매개 변수 집합이 있습니다.

내가 한 일은 모든 명령에 대한 유형을 작성하는 것입니다. 하나는 FOO, BAR은 하나, BLOOP는 하나, 그리고 이들 유형은 사용하는 매개 변수를 넣을 수 있습니다. 그러나

, 내가 좋아하는 뭔가를 할 때 : 사실 난 그냥 루트 요소 사이의 부분이 무엇이든 그하여 충원하고자 할 때 모든 명령은 형의 이름으로 특별한 요소를 생성

<xs:element name="root"> 
    <xs:complexType> 
    <xs:element name="myCommand" type="myCommandType"/> 
    </xs:complexType> 
</xs:element> 

을 명령이 필요합니다.

이 문제를 해결하는 가장 좋은 방법에 대한 단서가 있습니까?

모든 명령에 대해 스키마를 만드는 것이 더 좋을까요? 아니면 모두 같은 스키마에 넣을 수 있습니까?

답변

2

우선, 다른 태그 (<command> 태그)의 내용에 따라 일반적으로 한 태그 (<parameters> 태그)의 유형을 변경할 수 없습니다. 추악하고 복잡한 방법이있을 수 있지만 간단한 해결책을 권합니다.

당신은, 당신은 이런 일에 XML을 구조 조정해야 할 수있는 경우 :

<root> 
    <foo-command> 
    <param1>val</param1> 
    <param2>val</param2> 
    <param3>val</param3> 
    </foo-command> 
</root> 

이 스키마와 함께 할 쉽게 : 당신의 명령의 선택이 될 <root>의 내용을 정의하고 복잡한 유형을 생성 각각에 대해 매개 변수 정의가 들어 있습니다.

다음은이의 모습 내용은 다음과 같습니다

<element name="root"> 
    <complexType> 
     <choice> 
      <element name="foo-command" type="tns:foo-command-type"/> 
      <element name="bar-command" type="tns:bar-command-type"/> 
      ... 
     </choice> 
    </complexType> 
</element> 

<complexType name="foo-command-type"> 
    <sequence> 
     <element name="param1" type="boolean"/> 
     <element name="param2" type="int"/> 
     ... 
    </sequence> 
</complexType> 
<complexType name="bar-command-type"> 
    ... 
</complexType> 
... 
+1

이메일을 상대방에게 보냈습니다. 프로토콜 단순화에 동의 해 주시기 바랍니다. 이것은 실제로 더 나을 것입니다. – Davio

+0

좋은 소식은 동료가 프로토콜을 간소화하는 데 동의했습니다! – Davio

2

문제는 종종 "동시 발생 제약"이름 아래에 간다 그것은 쉬운 해결책이 없다는 것을 XSD 1.0의 잘 알려진 제한 사항입니다.

XSD 1.1에는 "조건부 유형 지정"이라는 새로운 기능이있어 원하는대로 정확하게 수행 할 수 있습니다. 현재 XSD 1.1은 Xerces and Saxon에서 구현되고 있습니다.

관련 문제