2009-07-23 2 views
2

<xs:group><xs:all> 내부에 표시되지 않고 내부에만 <xs:sequence> 인 이유가 있습니까?"xs : group은 xs : all 내부에 배치 될 수 없습니다"라는 제약을 없애는 방법은 무엇입니까?

예를 들어 보겠습니다. 태그의 목록 (<a> ~ <d><e> ~ <f> - 아래 예 참조)은 특정 순서로 나타나지 않지만 항상 다른 객체 (<foo> 또는 <bar>)로 래핑됩니다. <foo> = {<a>, <b>, <c>, <d>}}; <bar> = {<e>, <b>, <c>, <f>} :

복합 타입 <foo>과 XSD에서 <bar>를 정의 할 때 나는 xs:group에 태그 <b><c>를 추출하고 <xs:group ref="...">를 사용하려면
<foo> 
    <a>a1</a> 
    <b>b1</b> 
    <c>c1</c> 
    <d>d1</d> 
</foo> 

<foo> 
    <d>d2</d> 
    <b>b2</b> 
    <c>c2</c> 
    <a>a2</a> 
</foo> 

<bar> 
    <e>e3</e> 
    <b>b3</b> 
    <c>c3</c> 
    <f>f3</f> 
</bar> 

. 그러나 위에서 언급 한 제한으로 인해 이것은 불가능합니다.

주어진 문제에 대한 해결 방법으로 무엇을 제안 하시겠습니까? 기회는, 나는 바보 같은 짓을하고있다. 그러나 다시 왜 이것이 틀린가? 이러한 제한이 존재하는 이유는 볼 수 있지만

+1

이제 w3c가 싫어. – Will

+1

이러한 간단한 요구 사항은 w3c에서 제공되지 않습니다 ?? 나쁜!! – Archana

답변

0

결정적인 내용 규칙이 제한의 이유입니다. 완전한 이해를 원하면 van der Vlist의 책 the standard을 읽으십시오.

1

나는 말할 수없는 (개발자에게 혼란을 조금 수 있습니다 다른 <all> 내부 <group> (<all><choice> 중첩와) 완벽한 기능을 갖춘 아니라, 나의 가능한 조합 어쨌든) 그리고 특히 사용자에게. 난 당신이 아마 이미 가지고 올 한 내용을 제안 할 것입니다 해결 방법으로

: 즉, <b><c> 또 다른 <complexType>을 선언하고 내부 것을 를 사용하도록 <foo><bar> :

<xs:complexType name="bcType"> 
    <xs:all> 
     <xs:element name="b" type="xs:string" /> 
     <xs:element name="c" type="xs:string" /> 
    </xs:all> 
    </xs:complexType> 

    <xs:complexType name="foo"> 
    <xs:all> 
     <xs:element name="d" type="xs:string" /> 
     <xs:element name="a" type="xs:string" /> 
     <xs:element name="bc" type="bcType" /> 
    </xs:all> 
    </xs:complexType> 

    <xs:complexType name="bar"> 
    <xs:all> 
     <xs:element name="f" type="xs:string" /> 
     <xs:element name="e" type="xs:string" /> 
     <xs:element name="bc" type="bcType" /> 
    </xs:all> 
    </xs:complexType> 
+0

필자는이 접근법을 확실히 사용할 것입니다. 그러나 "b"및 "c"요소의 이름을 "bc"로 변경해야합니다. 이는 "legacy"이유로 적절한 해결책이 아닙니다. 나는 그것들을 "b"와 "c"라고 지명 할 필요가있다. 그래서 나는 xs : group을 사용한다. – mindas

+1

그러면 불행히도 을 사용하지 않으셔도됩니다. –