'유효한 XML'과 '잘 형성된 XML'간에 차이점이 있습니까?


80

나는 차이점을 인식하지 못했지만 동료가 그것을 뒷받침 할 수는 없지만 있다고 말합니다. 차이점이 있다면 무엇입니까?

답변:


82

네, 차이가 있습니다.

XML 표준 을 준수하는 XML 은 올바른 형식으로 간주 되고 DTD 를 준수하는 xml 은 유효한 것으로 간주됩니다.


11
또는 XML Schema, RelaxNG 또는 Schematron이 있습니다.
Torsten Marek

24
타당성을위한 전제 조건은 잘 구성되어 있다는 점을 지적 할 가치가있을 것입니다.
Quentin

1
@Quentin : 그것은 중요한 점이며, 인정 된 XML 전문가들이 동의하는 점입니다 ( lists.w3.org/Archives/Public/www-xml-linking-comments/… "사양에 명시 적으로 ..."); 그러나 XML 사양에서는 완전히 명확하지 않습니다. 그것에 대한 인용이 있습니까? w3.org/TR/REC-xml/#dt-valid 를 기반으로하고 있습니까?
LarsH 2013 년

@LarsH 정의에 따르면 XML 문서의 형식이 올바르지 않으면 DTD 또는 스키마에 대해 확인할 수 없습니다.

@LegoStormtroopr : 동의합니다.하지만 제 질문은 사양이 어디로 표시되어 있습니까? 당신이 언급하는 정의는 어디에 있습니까? w3.org/TR/REC-xml/#dt-valid 는 문서가 "유효"하기 위해 필요한 것이 아니라 무엇이 충분한 알려줍니다. 예를 들어 XML 스키마에 대해 확인 된 XML 문서는 DTD 없이도 유효 할 수 있습니다. 따라서이 정의는 문서가 유효한 다른 방법의 가능성을 배제하지 않습니다.
LarsH 2014 년

29

올바른 형식과 유효한 XML

올바른 형식 이란 텍스트 개체가 XML이되기 위한 W3C 요구 사항 을충족 함을 의미합니다.

유효 함은 올바른 형식의 XML이 지정된 스키마에서 제공하는 추가 요구 사항을 충족 함을 의미합니다.


공식 정의

XML에 대한 W3C 권장 사항 :

[정의 : 데이터 객체는 이 사양에 정의 된대로 잘 구성된 경우 XML 문서 입니다. 또한 XML 문서는 특정 추가 제약 조건을 충족하는 경우 유효 합니다.]


관찰 :

  • 형식이 올바르지 않은 문서는 XML이 아닙니다. ( 잘 구성된 XML 이 일반적으로 사용되지만 기술적으로 중복됩니다.)
  • 유효하다는 것은 잘 구성된 것을 의미합니다.
  • 잘 구성되어 있다고해서 타당 함을 의미하지는 않습니다.
  • XML에 대한 W3C 권장 사항 은 DTD에 대한 유효성 을 정의 하지만 , 일반적인 사용을 통해 XSD , RELAX NG , Schematron 또는 기타 방법을 통해 지정된 XML 스키마에 대한 적합성을 위해 용어를 적용 할 수 있습니다 .

문서가되는 원인의 예 ...

잘 구성되지 않음 :

  • 요소에 닫는 태그가 없습니다 (자동 닫힘이 아님).
  • 적절한 중첩없이 요소가 겹칩니다. <a><b></a></b>
  • 속성 값에 여는 따옴표와 일치하는 닫는 따옴표가 없습니다.
  • <또는 &내용보다는 사용된다 &lt&amp;.
  • 여러 루트 요소가 있습니다.
  • XML 선언이 여러 개 있거나 XML 선언이 문서 맨 위에 표시되지 않습니다.

유효하지 않음 :

  • 요소 또는 속성이 누락되었지만 XML 스키마에 필요합니다.
  • 요소 또는 속성이 사용되지만 XML 스키마에 의해 정의되지 않습니다.
  • 요소의 내용이 XML 스키마에 지정된 내용과 일치하지 않습니다.
  • 속성 값이 XML 스키마에 지정된 유형과 일치하지 않습니다.

잘 구성된 네임 스페이스

기술적으로 XML의 구성 요소 이름에는 콜론 문자가 허용됩니다. 그러나 콜론 네임 스페이스 용도로만 이름에 사용해야합니다.

노트 :

XML 권장 사항 [ XML 이름 ] 의 네임 스페이스는 콜론 문자를 포함하는 이름에 의미를 지정합니다. 따라서 작성자는 네임 스페이스 용도를 제외하고 XML 이름에 콜론을 사용하지 않아야하지만 XML 프로세서는 콜론을 이름 문자로 허용해야합니다.

따라서 다른 용어 인 namespace- well-formed는 올바른 형식에 대한 모든 XML 규칙 해당 네임 스페이스 및 네임 스페이스 접두사를 관리하는 XML 1.0 W3C 권장 사항네임 스페이스에 정의되어 있습니다.

구어 적으로 잘 구성된 용어 는 종종 잘 구성된 네임 스페이스 가 더 정확한 경우에 사용됩니다. 그러나 이것은이 답변에 설명 된 올바른 형식과 유효한 XML을 구별하는 것보다 덜 실용적인 결과의 사소한 기술적 방식입니다 .


1
이것은 이미 훌륭한 대답이지만 아마도 네임 스페이스에 대한 메모를 추가하는 데 도움이 될 것입니다. 즉, 네임 스페이스가 잘 구성된 속성에 대한 것 입니까? 아시다시피, 네임 스페이스는 초보자에게 일반적인 함정이며 많은 사람들이 네임 스페이스 문제가있는 문서를 "잘 구성되지 않음"으로 설명합니다.
Mathias Müller

감사합니다, @ MathiasMüller. 귀하의 요청에 따라 잘 구성된 네임 스페이스 에 대한 설명을 추가했습니다 .
kjhughes

28

유효한 XML은 DTD에 대한 유효성 검사에 성공한 XML입니다.

잘 구성된 XML은 모든 태그가 적절한 순서로 닫혀있는 XML이며 선언이있는 경우 파일에 적절한 속성이있는 첫 번째 항목이 있습니다.

즉, 유효성은 의미론을 의미하고 올바른 형식은 구문을 의미합니다.

따라서 잘못된 형식의 XML이있을 수 있습니다.


9
나는 세 번째 단락에 동의하지 않습니다. 두 용어 모두 의미론 (무언가의 의미)에 대해 아무것도 말하지 않습니다. DTD는 특정 요소 나 속성의 의미 를 나타낼 방법이 없습니다 . 이것이 웹 온톨로지 언어와 같은 노력의 목표입니다. 오히려 올바른 형식은 낮은 수준의 구문 (어휘 정확성이라고도 함)을 의미하는 반면 유효성은 높은 수준의 구문을 의미합니다 (원하는 경우 "구조적"이라고 함).
LarsH

16

다른 사람들이 말했듯이 올바른 형식의 XML은 XML 사양을 따르고 유효한 XML은 주어진 스키마를 따릅니다.

또 다른 표현은 올바른 형식의 XML은 어휘 적으로 정확하고 (파싱 할 수 있음) 유효한 XML은 문법적으로 정확합니다 (알려진 어휘 및 문법과 일치시킬 수 있음).

XML 문서는 올바른 형식이 될 때까지 유효하지 않습니다. 모든 XML 문서는 올바른 형식을 위해 동일한 표준 (W3에서 제시 한 RFC)을 따릅니다. 하나의 XML 문서는 일부 스키마에 대해 유효하고 다른 스키마에 대해서는 유효하지 않을 수 있습니다. 스키마 언어에는 여러 가지가 있으며 그 중 대부분은 XML 기반입니다.


6

Well-Formed XML은 언어의 구문 요구 사항을 충족하는 XML입니다. 닫는 태그가 누락되지 않고 모든 싱글 톤 태그가 <whatever />대신 사용 <whatever>하고 올바른 순서로 닫는 태그가 있습니다.

유효한 XML은 DTD를 사용하고 모든 요구 사항을 준수하는 XML입니다. 따라서 속성을 부적절하게 사용하면 DTD를 위반하고 유효하지 않습니다.

모든 유효한 XML은 올바른 형식이지만 올바른 형식의 모든 XML이 유효한 것은 아닙니다.


4

XML은 표준에 의해 설정된 모든 XML 문서에 대한 요구 사항을 충족하는 경우 잘 구성된 것입니다. 즉, 단일 루트 노드가 있고, 노드가 올바르게 중첩되고, 모든 노드에 닫는 태그가 있습니다 (또는 슬래시의 빈 노드 속기 사용). 닫는 꺾쇠 괄호), 따옴표로 묶인 속성 등. 올바른 형식은 XML 규칙을 준수한다는 의미이므로 제대로 구문 분석 할 수 있습니다.

XML은 DTD 또는 스키마에 대해 유효성을 검사하는 경우 유효합니다. 이것은 케이스마다 분명히 다릅니다. 한 스키마에 대해 유효한 XML은 여전히 ​​올바른 형식이지만 다른 스키마에 대해서는 유효하지 않습니다.

XML의 형식이 올바르지 않으면 제대로 구문 분석 할 수 없습니다. 파서는 단순히 예외를 던지거나 오류를보고합니다. 이것은 일반적이며 XML에 포함 된 내용은 중요하지 않습니다. 파싱 ​​된 후에 만 ​​유효성을 확인할 수 있습니다. 이 도메인 또는 컨텍스트에 따라 다르며 유효성을 검사 할 DTD 또는 스키마가 필요합니다. 간단한 XML 문서의 경우 DTD 또는 스키마가 없을 수 있습니다.이 경우 XML이 유효한지 알 수 없습니다.이 경우 개념이나 유효성이 적용되지 않습니다. 물론 이것은 당신이 그것을 사용할 수 없다는 것을 의미하는 것이 아니라 그것이 유효한지 아닌지를 말할 수 없다는 것을 의미합니다.


3

XML 사양에서 W3C는 XML 문서를 만드는 동안 따라야하는 특정 규칙을 정의했습니다. 이러한 규칙의 예에는 정확히 하나의 루트 요소 포함, 각 시작 태그에 대한 종료 태그 포함, 속성 값에 작은 따옴표 / 큰 따옴표 사용 등이 포함됩니다. XML 문서가 이러한 모든 규칙을 따르는 경우 올바른 형식의 문서라고하며 XML 구문 분석기를 사용하여 이러한 문서를 구문 분석하고 처리 할 수 ​​있습니다.

DTD (문서 유형 정의) 또는 XML 스키마를 사용하여 특정 XML 문서 클래스의 구조와 내용을 정의 할 수 있습니다. 여기에는 상위-하위 관계 세부 정보, 속성 목록, 데이터 유형 정보, 값 제한 등이 포함됩니다. 올바른 형식 규칙 외에도 XML 문서가 관련 DTD / 스키마에 지정된 규칙을 따르는 경우 다음과 같이 말합니다. 유효한 XML 문서 여야합니다.

모든 유효한 XML 문서는 올바른 형식이지만 그 반대가 항상 사실은 아닙니다. 올바른 형식의 XML 문서가 반드시 유효 할 필요는 없습니다.


1

유효한 XML은 올바른 형식이라는 것을 의미하기도하지만 올바른 형식의 XML이 반드시 유효한 것은 아닙니다.


1

앞서 언급 한 DTD 외에도 XML 문서를 설명하고 유효성을 검사하는 다른 두 가지 방법은 XMLSchemaRelaxNG입니다 . 둘 다 DTD보다 사용하기 쉽고 더 많은 기능을 지원할 수 있습니다.


1

XML이 DTD 규칙을 확인하는 경우 유효한 XML입니다. XML 문서가 XML 규칙을 준수하는 경우 (시작된 모든 태그가 닫히고 루트 요소 등이 있음) 올바른 형식의 XML입니다.


1

에서 촬영 확장 마크 업 언어 (XML) 1.0 (제 5 판) - W3C 권고안 2008 11월 26일 :

[정의 : 데이터 객체는이 사양에 정의 된대로 올바른 형식이면 XML 문서입니다. 또한 XML 문서는 특정 추가 제약 조건을 충족하는 경우 유효합니다.]


텍스트 단락의 단락보다 의사 코드를 선호하는 사람들을 위해 ... :)

IF is_well_formed(<XML_doc>) THEN
    # It is well-formed, and can be parsed
    IF is_valid(<XML_doc>) THEN
        # Well-formed and ALSO valid. Hurray! 
        # **A valid XML doc, is a well-formed doc!**
    ELSE
        # Only well-formed, NOT valid
    END IF
ELSE
    # Not well-formed, or valid!
END IF

FUNCTION is_well_formed
    IF <does_not_contain_syntax,_spelling,_punctuation,_grammar_errors,_etc._errors> THEN
        RETURN TRUE
    ELSE 
        RETURN FALSE
    END IF
END FUNCTION 

FUNCTION is_valid
    IF <markup_of_the_XML_document_matches_"some"_defined_standard> THEN
        # Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document
        RETURN TRUE
    ELSE 
        RETURN FALSE
    END IF
END FUNCTION

이론 기반 : "잘 형성됨"대 유효


0

DTD는 문서 유형 정의의 약어입니다. XML 파일 패밀리에 대한 내용에 대한 설명입니다. 이것은 XML 1.0 사양의 일부이며 주어진 문서 인스턴스가 구조와 내용을 자세히 설명하는 일련의 규칙을 준수하는지 설명하고 확인할 수 있습니다.

유효성 검사는 DTD (보다 일반적으로 일련의 구성 규칙에 대해)에 대해 문서를 확인하는 프로세스입니다.

유효성 검사 프로세스와 DTD 구축은 XML 수명주기에서 가장 어려운 두 부분입니다. 간단히 DTD는 문서 내에서 찾을 수있는 모든 요소, 문서 트리의 형식적인 모양을 정의합니다 (요소의 허용 된 콘텐츠, 텍스트, 허용 된 하위 목록에 대한 정규식 또는 혼합 콘텐츠를 정의하여) 즉 텍스트와 어린이 모두). DTD는 또한 모든 요소에 대한 유효한 속성과 해당 속성의 유형을 정의합니다.


안녕하세요 @Rachna. 이 ... 아주 잘 검증 부분을 설명하지만, 우리는 XML 파일 "잘 형성"을 호출 할 때 설명하지 않습니다
켄트 Pawar에게

0

글쎄요, 정의에 따라 잘 형성되지 않은 XML은 XML이 아닙니다. Poeple은 일반적으로 유효한 XML을 특정 스키마 (XSD 또는 DTD)를 준수하는 XML로 참조합니다.


0

W3 학교에서 XML DTD를 참조하십시오 .

올바른 구문을 가진 XML 문서를 "Well Formed"라고합니다.

DTD에 대해 유효성이 검증 된 XML 문서는 "올바른 형식"과 "유효"입니다.

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