XML 유형이 안전한 이유는 무엇입니까?


30

그들은 왜 XML이 형식 안전성을 제공한다고 말합니까? 그리고 XML 자체에서 어떻게 표현됩니까?

유형 안전하지 않은 JSON과 (예를 들어) 다른 점은 무엇입니까?

답변:


36

XML 스키마 정의 (XSD)로 인해 .

XML을 사용하면 스키마를 설명하는 추가 파일이있을 수 있습니다. 예를 들어, 요소 /a/b가 배열이고 1-10 개의 요소를 포함하거나 요소 /a/c가 정수임을 나타냅니다. XSD의 예는 여기에서 찾을 수 있습니다 .

XSD를 통한 지정된 XML 파일의 유효성 검사는 여러 언어에서 지원됩니다 . 예를 들어, .NET 애플리케이션은 신뢰할 수없는 소스에서 XML 파일을 요청 하고 XSD와 일치 하는지 확인할 수 있습니다 . 다음은 차례로 수있는 Microsoft SQL Server 데이터베이스에 저장할 수 있습니다 XSD에 포함되어 다시 확인을 (보장하기 위해 어떤 클라이언트가있는 데이터베이스의 준수에 액세스 할 수 있습니다).

XSD만이 유일한 언어는 아닙니다.

  • 웹 개발을 수행 한 경우 XML 구조를 정의하고 특히 HTML 관련 컨텐츠의 유효성 검증에 사용되는 마크 업 언어 인 DTD ( Document Type Definition) 에 대해 확실히 들었습니다 . 요소 또는 속성에 정수가 포함되도록하는 등 XSD가 수행 할 수있는 모든 작업을 수행 할 수는 없지만 여전히 많은 구조 검사를 수행 할 수 있습니다.

  • RELAX NG 는 다른 언어에 비해 비교적 단순하다는 이점이 있으며 XML보다 더 간단한 형식으로 작성할 수 있습니다.

  • Schematron 은 "XML 트리의 패턴 유무에 대한 주장을 만들기위한 규칙 기반 유효성 검사 언어"( Wikipedia )이며 XPath 주장에 따라 약간 다른 접근 방식을 제시합니다.

JSON에 대한 유사한 이니셔티브 는 그다지 인기가 없습니다 (특히 Microsoft 중심 기업 세계에서는 믿습니다). 그 이유 중 하나는 JSON이 데이터 구조가 다소 기본적인 상황 (예 : 속성이 필요없는 트리로 표현 될 수 있음)에 적합해야하며 유효성을 반드시 검사 할 필요가 없기 때문입니다. 가장 좋은 예는 동적 형식 언어에서 사용되는 REST API입니다.

  • 클라이언트는 구현하기가 매우 쉽고 빠릅니다.
  • API는 변경되지 않아야합니다.
  • 클라이언트는 유효성 검사가 필요한 특정 리프를 쉽게 처리 할 수 ​​있습니다 (예 /something/percentage: 실제 숫자이고 0..100 범위에있는 검사).

20

XSD 스키마를 사용하면 요소의 데이터 유형을 선언 할 수 있으므로 XML 유형에 안전합니다. XSD 스키마에 대해 유효성이 검증 된 문서는 예상 유형을 준수합니다. 그러나 XML 형식에는 스키마가 필요하지 않으므로 XML만으로 문서를 자동으로 안전하게 입력 할 수 없습니다.

실제로 JSON에 대한 스키마 언어 도 있으므로 유형이 안전한 JSON이 가능합니다. 그러나 거의 사용되지 않으므로 일반적으로 JSON은 형식이 안전하지 않습니다.


2
XSD에 해당하는 JSON의 이름이나 링크를 사용하면 대답이 더 좋습니다.
DougM

1
BTW : XML 스키마는 XML에 대한 유일한 스키마 정의 언어는 아닙니다. Schematron, RelaxNG 및 물론 좋은 SGML DTD도 있습니다.
Jörg W Mittag

또한 스키마를 사용하더라도 XML은 형식이 안전하지 않을 수 있습니다. "모든"유형의 내용을 갖도록 요소를 지정할 수 있습니다. 유형 안전의 형태라고 주장 할 수는 있지만 (나는 상관 없지만, 모든 것이 유효하다) 어떤 검증도 수행 할 수 없다 : 본질적으로 "변형"유형이다.

3

컴퓨터 과학에서 유형 안전성 은 프로그래밍 언어가 유형 오류를 방지하거나 예방하는 정도입니다.

유형 안전은 절대적인 속성이 아닙니다. 부울이 아닙니다. 언어 (XML 및 JSON 언어)는 다양한 종류의 오류와 실수를 허용하고 방지합니다. 예를 들어 요소 이름을 잘못 지정할 수 있습니다. 그러나 닫기 태그 및 중괄호와 같은 필수 구문 요소를 건너 뛸 수 없습니다.

일반 XML과 JSON은 형식이 안전하거나 형식이 안전하지 않습니다. 유효한 XML / JSON 문자열에는 특정 구문 및 의미 구조가 있지만 응용 프로그램에서 작동하기에는 충분하지 않습니다. 응용 프로그램은 단지 하나를 수행 구조 그러나 특정의 하나.

XML은 스키마에 대해 지정된 XML 문서의 유효성을 검사하는 유연하고 강력한 방법 인 XML 스키마 정의 (XSD)로 빛납니다. 이것은 위에서 주어진 정의에 따라 많은 유형의 안전성을 제공합니다.

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