programing

'valid xml'과 'well formed xml'의 차이가 있습니까?

stoneblock 2023. 10. 1. 19:15

'valid xml'과 'well formed xml'의 차이가 있습니까?

저는 차이를 모르고 있었는데, 동료가 그렇다고 합니다만, 그 사실을 뒷받침할 수는 없습니다.만약 있다면 뭐가 달라요?

다른 점이 있습니다.

XML 표준을 준수하는 XML은 잘 형성된 것으로 간주되고 DTD를 준수하는 XML은 유효한 것으로 간주됩니다.

올바른 형식과 유효한 XML 비교

형성되었다는 것은 텍스트 개체가 XML이 되기 위한 W3C 요구 사항을 충족한다는 것을 의미합니다.

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


공식 정의

XML에 대한 W3C 권장 사항에 따라:

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


관측치:

  • 형식이 좋지 않은 문서는 XML이 아닙니다. (형식이 좋은 XML이 일반적으로 사용되지만 기술적으로는 중복됩니다.)
  • 유효하다는 것은 잘 형성되었다는 것을 의미합니다.
  • 모양이 잘 잡힌다는 것이 유효하다는 것을 의미하는 것은 아닙니다.
  • W3C Recommendation for XML은 DTD에 대한 유효성을 정의하지만, 일반적인 사용 방식에서는 XSD, REX NG, Schematron 또는 기타 방법을 통해 지정된 XML 스키마를 준수하기 위해 이 용어를 적용할 수 있습니다.

문서를 만드는 원인의 예는...

형식이 올바르지 않음:

  • 요소에 닫힘 태그가 없습니다(자체 닫힘이 아님.
  • 가 겹칩니다. .<a><b></a></b>
  • 속성 값에 시작 따옴표와 일치하는 종결 따옴표가 없습니다.
  • <아니면&됩니다 보다는 됩니다.&lt아니면&amp;.
  • 루트 요소가 여러 개 존재합니다.
  • XML 선언이 여러 개 존재하거나 문서 맨 위 이외에 XML 선언이 나타납니다.

무효한

  • 요소 또는 특성이 없지만 XML 스키마에 필요합니다.
  • 요소 또는 특성이 사용되지만 XML 스키마에 의해 정의되지 않습니다.
  • 요소의 내용이 XML 스키마에서 지정한 내용과 일치하지 않습니다.
  • 특성 값이 XML 스키마에서 지정한 유형과 일치하지 않습니다.

네임스페이스 - 잘 형성됨

기술적으로 XML의 구성 요소 이름에는 콜론 문자가 허용되지만 네임스페이스 목적으로 콜론을 이름에만 사용해야 합니다.

참고:

XML 추천 [XML Names]의 Namespaces는 콜론 문자를 포함하는 이름에 의미를 할당합니다.따라서 저자는 네임스페이스 목적을 제외하고 XML 이름에 콜론을 사용해서는 안 되지만 XML 프로세서는 콜론을 이름 문자로 받아들여야 합니다.

따라서 네임스페이스 형식의라는 또 다른 용어가 XML 1.0 W3C 권장 사항의 Namespaces에 정의되어 있으며, Namespace-formed에 대한 모든 XML 규칙과 네임스페이스 및 네임스페이스 접두사를 관리합니다.

구어체로는 네임스페이스가 잘 형성된 것이 더 정확한 경우에 잘 형성된 것이라는 용어가 자주 사용됩니다.그러나 이것은 이 답변에서 설명된 잘 구성된 XML과 유효한 XML의 구별보다 실용적이지 못한 사소한 기술적 방식입니다.

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

Well formed XML은 모든 태그가 올바른 순서로 닫혀있는 XML이며, 선언문을 가지고 있다면 파일에서 가장 먼저 적절한 속성을 가지고 있습니다.

다시 말해, 유효성은 의미론을 의미하고, 잘 형성된 것은 구문을 말합니다.

따라서 유효하지 않은 양호한 XML을 가질 수 있습니다.

다른 사람들이 말했듯이, 잘 형성된 XML은 XML 사양을 준수하며, 유효한 XML은 주어진 스키마를 준수합니다.

또 다른 방법은 잘 형성된 XML은 어휘적으로 정확하고(파싱할 수 있음), 유효한 XML은 문법적으로 정확하다는 것입니다(알려진 어휘 및 문법과 일치할 수 있음).

XML 문서는 형식이 양호해야 유효합니다.모든 XML 문서는 양호한 형식(W3에 의해 제시된 RFC)을 위해 동일한 표준으로 유지됩니다.하나의 XML 문서는 일부 스키마에 대해서는 유효하고 다른 스키마에는 유효하지 않을 수 있습니다.스키마 언어는 여러 가지가 있으며, 그 중 많은 언어는 XML 기반 언어입니다.

Well-Formed XML은 언어의 구문 요구 사항을 충족하는 XML입니다.도 놓치지 않고 톤 태그가합니다를 하도록 합니다.<whatever />d이 <whatever>.

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

유효한 XML은 모두 잘 구성되어 있지만, 잘 구성된 XML은 모두 유효하지 않습니다.

XML은 표준에 명시된 모든 XML 문서의 요구 사항을 충족하는 경우에 적합합니다. 예를 들어, 단일 루트 노드가 있거나 노드가 올바르게 중첩되어 있거나, 모든 노드에 클로징 태그가 있거나(또는 클로징 각도 괄호 앞에 슬래시의 빈 노드 축약어 사용), 인용되는 속성 등입니다.잘 구성되었다는 것은 XML의 규칙을 준수한다는 것을 의미하므로 적절하게 구문 분석할 수 있습니다.

XML이 DTD 또는 스키마에 대해 유효성을 확인하는 경우 유효합니다.이는 경우에 따라 분명히 다릅니다. 한 스키마에 대해 유효한 XML은 형식이 양호하더라도 다른 스키마에는 유효하지 않습니다.

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

XML 규격에서 W3C는 XML 문서를 작성할 때 지켜야 할 특정 규칙을 정의했습니다.이러한 규칙의 예로는 루트 요소가 하나만 있는 경우, 각 시작 태그에 대해 엔드 태그가 있는 경우, 속성 값에 대해 단일/큰따옴표를 사용하는 경우 등이 있습니다.XML 문서가 이러한 규칙을 모두 따르는 경우, 이 문서는 잘 형성된 문서라고 하며 XML 구문 분석 및 처리에 XML 구문 분석기를 사용할 수 있습니다.

DTD(Document Type Definitions) 또는 XML 스키마를 사용하여 특정 클래스의 XML 문서의 구조와 내용을 정의할 수 있습니다.여기에는 부모-자녀 관계 세부 정보, 속성 목록, 데이터 유형 정보, 값 제한 등이 포함됩니다.잘 형성된 규칙 외에도 XML 문서가 관련 DTD/Schema에 지정된 규칙을 따르는 경우 유효한 XML 문서라고 합니다.

유효한 XML 문서는 모두 형식이 양호하지만, 그 반대인 경우도 있습니다.잘 구성된 XML 문서가 반드시 유효할 필요는 없습니다.

또한 유효한 XML은 잘 형성되었음을 의미하지만 잘 형성된 XML이 반드시 유효한 것은 아니라는 점도 덧붙이겠습니다.

만약 XML이 DTD 규칙을 확인하는 것이라면, 그것은 유효한 XML입니다. 만약 XML 문서가 XML 규칙을 준수하고 있다면(시작된 모든 태그가 닫혀 있고 루트 요소가 있는 등), 그것은 잘 형성된 XML입니다.

Extensible Markup Language(XML) 1.0(Fifth Edition)에서 가져온 것 - W3C 2008년 11월 26일 권장 사항:

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


본문 문단보다 psuedo-code를 선호하시는 분들을 위해... :)

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

이론에 근거해서: "잘 형성되었다" vs. 유효한

DTD는 Document Type Definition의 약자입니다.XML 파일 패밀리의 내용에 대한 설명입니다.이것은 XML 1.0 사양의 일부이며, 주어진 문서 인스턴스가 그 구조와 내용을 상세히 설명하는 규칙 집합과 일치하는지를 설명하고 확인할 수 있습니다.

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

검증 프로세스와 빌딩 DTD는 XML 수명 주기에서 가장 어려운 두 부분입니다.간단히 DTD는 문서 내에서 찾을 수 있는 모든 가능한 요소를 정의하며, 문서 트리의 형식적인 모양은 무엇입니까?(요소의 허용된 내용을 텍스트, 허용된 하위 목록에 대한 정규식 또는 텍스트와 하위 모두의 혼합된 내용을 정의함).또한 DTD는 모든 요소와 해당 속성의 유형에 대해 유효한 속성을 정의합니다.

잘 형성되지 않은 XML은 정의상 XML이 아닙니다. 포플은 보통 유효한 XML을 특정 스키마(XSD 또는 DTD)를 고수하는 XML이라고 말합니다.

W3 학교의 XML DTD 참조:

구문이 정확한 XML 문서를 "웰 포밍"이라고 합니다.

DTD에 대해 유효성이 확인된 XML 문서는 "잘 형성됨"과 "유효함"입니다.

언급URL : https://stackoverflow.com/questions/134494/is-there-any-difference-between-valid-xml-and-well-formed-xml