스키마 정의에서 <xsd : all>과 <xsd : sequence>의 차이점은 무엇입니까?


82

xsd:all복잡한 유형으로 사용 하고 있습니다. 유효성을 검사하는 동안 필수 요소를 놓친 경우 모든 요소가 표시됩니다. 누락 된 정확한 요소는 표시되지 않습니다.

그러나 내가 사용한다면 xsd:sequence정확히 놓친 요소를 얻을 수 있습니다.

이 둘 사이에 차이점이 있습니까?

xsd:sequence: XML 요소는 동일한 순서 여야합니다.

그러나 xsd:all: XML 요소는 임의의 순서 일 수 있습니다.


근본적으로이 둘의 차이점은 질문에 이미 표시 한 내용입니다. 그러나이 두 컴포 지터의 사용과 관련된 제약 사항과 XSD 저작에 미치는 영향은 참조하는 사양에 따라 다릅니다. XSD 1.0 또는 XSD 1.1?
Petru Gardea 2013

3
ur 질문은 누락 된 요소를 찾을 때 시퀀스와 모든 오류가 다른 방식으로 작성되는 이유에 관한 것 같습니다. 나는 그것이 파서 로직에 대한 생각
나시

이 질문에 대한 답이 이미 있습니까? 정확히 놓친 객체를 얻기 위해 항상 <sequence>를 사용해야하는지 알고 싶습니다.
GertV

1
제목이 오해를 불러 일으키기 때문에 만족스럽지 못한 답변을 받고 있습니다. 답변은 제목의 질문에 "모든"대 "시퀀스" 의 의미 에 대한 정확한 답변 입니다. 귀하의 의견에서 귀하의 실제 문제는 유효성 검사기 가 두 가지에 대한 유효성 검사 오류 를 보고하는 방식의 차이 인 것 같습니다 . 이것은 똑같은 것이 아니며 어떤 유효성 검사기를 사용하고 있는지 모른 채 대답하는 것은 불가능합니다.
Joachim Lous

답변:


134

<xsd:all> 하위 요소가 임의의 순서로 나타날 수 있음을 지정합니다.

<xsd:sequence> 하위 요소가 언급 된 순서로만 나타날 수 있음을 지정합니다.

시퀀스 예 :

<xs:element name="compElement">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="ele1" type="xs:string"/>
      <xs:element name="ele2" type="xs:string"/>
      <xs:element name="ele3" type="xs:string"/>
      <xs:element name="ele4" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

이 xsd에서 XML을 생성하면 다음과 같이 보일 것입니다.

<compElement>
  <ele1>First</ele1>
  <ele2>Second</ele2>
  <ele3>Third</ele3>
  <ele4>Fourth</ele4>
</compElement>

모두를위한 예 :

<xs:element name="compElement">
  <xs:complexType>
    <xs:all>
      <xs:element name="ele1" type="xs:string"/>
      <xs:element name="ele2" type="xs:string"/>
      <xs:element name="ele3" type="xs:string"/>
      <xs:element name="ele4" type="xs:string"/>
    </xs:all>
  </xs:complexType>
</xs:element>

이 xsd에서 XML 파일을 생성하면 다음과 같이 보일 수 있습니다.

<compElement>
  <ele2>Second</ele2>
  <ele1>First</ele1>
  <ele4>Fourth</ele4>
  <ele3>Third</ele3>
</compElement>

더 많은 정보 XSD에 대한 모든
추가 정보 XSD에 : 순서

질문에 답했으면 좋겠습니다.


안녕하세요 Joshi .. ur 의견에 감사드립니다.하지만 내 질문은 xsd를 사용하는 동안 xsd에 대해 xml의 유효성을 검사 할 때입니다 : all 정확히 놓친 요소를 표시하지 않을 것입니다. element3는 예상하지만 element2에 대한에 minOccurs에게 = 0을주고 element3
user1679378

2
"all"요소의 "minOccurs"속성을 0으로 지정할 수 있습니다. 자세한 내용은하시기 바랍니다 것은 참조 w3schools.com/schema/el_all.asp
Madhusudan 조시에게

22

차:

  • xsd : all "자식 요소는 임의의 순서로 나타날 수 있으며 각 하위 요소는 0 또는 한 번 발생할 수 있습니다."(즉, maxOccurs는 0 또는 1 일 수 있음)
  • xsd : sequence- "하위 요소는 시퀀스에 나타나야합니다. 각 하위 요소는 0에서 여러 번 발생할 수 있습니다."(즉, maxOccurs는 0 또는 임의의 숫자이거나 '제한되지 않음'일 수 있음)

여기여기에 있는 W3Schools 자습서 에서 .


4
입자의 카디널리티에 대한 제약 조건을 XSD 1.0에 한정해야합니다. 그렇지 않으면 XSD 1.1에 대해 올바르지 않습니다.
Petru Gardea 2013

8
w3schools는 W3C와 관련이 없으므로 웹 페이지는 W3C 문서가 아닙니다.
Ben Companjen 2014 년

@kamituel <xs:all>자식 요소가 발생할 수있는 횟수를 제한하는 곳을 인용 할 수 있습니까? W3C 사양에서 이에 대한 증거를 찾을 수 없습니다.
Luke Puplett 2014-08-21

2
@kamituel 실제로는 스키마의 컨테이너 내의 모든 요소 자체에 적용됩니다. 인용 한 문서는 제약이없는 1.1입니다. 어쨌든, 나는 당신이 대답에 붙여 넣은 것처럼 "인간 영어"에서 금기를 찾았습니다. 1.0 문서에서 위의 몇 줄입니다.
Luke Puplett 2014-08-22

1
"하위 요소는 0 또는 한 번 발생할 수 있습니다"는 실제로 올바르지 않습니다! minOccurs에 대한 기본값은 1이며 이는 반드시 있어야 함을 의미하며 all과 sequence 모두에 적용됩니다.
PKCS12

2

모든 표시기

<all>자식 요소는 어떤 순서로 표시 할 수있는, 각각의 하위 요소가 한 번만 발생해야 함을 표시 지정 :

시퀀스 표시기

<sequence>자식 요소가 특정 순서에 표시해야 함을 표시 지정 :

참조 링크


2
입자의 카디널리티에 대한 제약 조건을 XSD 1.0에 한정해야합니다. 그렇지 않으면 XSD 1.1에 대해 올바르지 않습니다.
Petru Gardea 2013

2

스키마는 준수 문서를 구성하는 항목을 정의 할뿐입니다.

비준수보고 방법은 전적으로 검증 인에게 달려 있습니다. 유효성 검사기가 누락 된 필드를 정확히보고하는 것을 막을 수는 없지만 사용하는 필드는이 경우에 그렇지 않습니다.

그것이 버그이든 의도적 으로든 유효성 검사기 공급자와 논의해야합니다.


질문에 대한 답은 무엇입니까?
세바스찬 호프만

2
이 질문은 시퀀스와 모든 것의 차이에 대해 묻는 것처럼 보이지만 더 철저한 읽기를 통해 저자는 이미 이것을 알고 있지만 유효성 검사기의 출력에 의아해합니다. 그게 방법입니다.
Joachim Lous

2

간단한 XML 예 :

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XML 위의 XSD (설명) :

<xs:element name="school">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

여기:

xs : 요소 정의합니다.

xs : all : 자식 요소가 임의의 순서로 나타날 수 있음을 나타냅니다.

xs : 시퀀스 : 언급 된 순서 대로만 자식 요소가 표시됨을 나타냅니다.

xs : complexType : 다른 요소가 포함되어 있음을 나타냅니다.

xs : simpleType : 다른 요소를 포함하지 않음을 나타냅니다.

유형 : 문자열, 십진수, 정수, 부울, 날짜, 시간,

  • 간단히 말해서 xsd는 특정 유형으로 XML 데이터를 표현하고 유효성을 검사하는 또 다른 방법입니다.
  • 추가 속성의 도움으로 여러 작업을 수행 할 수 있습니다.

  • xsd에서 모든 작업을 수행하는 것은 xml보다 간단합니다.


0

under tag를 사용하면 해당 complexType에서 선언 된 모든 요소가 XML 문서에서 동일한 순서로 나타나야 함을 나타냅니다. 그렇지 않으면 오류가 발생합니다. 적절한 순서로 요소를 지정할 필요가 없기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.