기본 XML 구성 - XML ​​요소, 태그, 속성, 처리 지침, CDATA 섹션, 주석. XML 요소. 비어 있거나 비어 있지 않은 XML 요소

  • 번역
  • 지도 시간

SQL 삽입, 사이트 간 요청 위조, 손상된 XML... 우리 모두가 보호받고 싶은 무섭고 무서운 일이지만, 우리는 이 모든 일이 왜 일어나는지 알고 싶을 뿐입니다. 이 문서에서는 문자열과 문자열 내 문자열 처리라는 기본 개념을 설명합니다.

가장 큰 문제는 단지 텍스트일 뿐입니다. 예, 텍스트만 있습니다. 그게 가장 큰 문제입니다. 거의 모든 것 컴퓨터 시스템텍스트로 표시됩니다(이는 바이트로 표시됩니다). 일부 텍스트는 컴퓨터용이고 다른 텍스트는 사람용일 가능성이 있습니까? 그러나 둘 다 여전히 텍스트로 남아 있습니다. 내가 말하는 내용을 이해하기 위해 여기에 작은 예가 있습니다.
호모 사피엔스 영어 텍스트가 있다고 가정해 봅시다. 나는 그것을 러시아어로 번역하고 싶지 않습니다.
당신은 그것을 믿지 못할 것입니다. 이것은 텍스트입니다. 어떤 사람들은 이를 XML이라고 부르지만 이는 단지 텍스트일 뿐입니다. 선생님께 보여드리기에는 적합하지 않을 수도 있습니다. 영어로, 하지만 여전히 텍스트일 뿐입니다. 포스터에 인쇄해서 들고 집회에 갈 수도 있고, 어머니에게 보내는 편지에 쓸 수도 있고... 텍스트예요.

그러나 우리는 이 텍스트의 특정 부분이 컴퓨터에 어떤 의미를 갖기를 원합니다. 우리는 컴퓨터가 텍스트의 저자와 텍스트 자체를 별도로 추출하여 우리가 그것으로 뭔가를 할 수 있기를 원합니다. 예를 들어, 위의 내용을 다음과 같이 변환합니다.
호모 사피엔스가 러시아어로 번역하고 싶지 않은 영어 텍스트가 있다고 가정해 보겠습니다.
컴퓨터는 이 작업을 수행하는 방법을 어떻게 알 수 있습니까? 글쎄, 우리는 텍스트의 특정 부분을 and와 같은 재미있는 괄호 안에 특수 단어로 매우 편리하게 포장했기 때문입니다. 이 작업을 수행했기 때문에 이러한 특정 부분을 찾고, 텍스트를 추출하고, 이를 우리 자신의 발명에 사용하는 프로그램을 작성할 수 있습니다.

즉, 우리는 동일한 규칙을 따르는 다른 사람이 사용할 수 있는 특별한 의미를 나타내기 위해 본문에서 특정 규칙을 사용했습니다.
좋아요, 이해하기 그렇게 어렵지는 않습니다. 본문에서 특별한 의미를 갖고 있지만 바로 그 의미를 사용하지 않고 재미있는 괄호를 사용하고 싶다면 어떻게 해야 할까요?.. 다음과 같습니다:
호모 사피엔스< n and y >
"" 문자는 특별한 것이 아닙니다. 위의 예와 같이 어느 텍스트에서나 합법적으로 사용할 수 있습니다. 하지만 특별한 단어에 대한 우리의 생각은 어떻습니까? 이것도 일종의 키워드라는 뜻인가요? XML에서는 아마도 그렇습니다. 아니면 아닐 수도 있습니다. 이것은 모호합니다. 컴퓨터는 모호함을 잘 처리하지 못하기 때문에 우리가 스스로 i에 점을 찍고 모호함을 해결하지 않으면 예상치 못한 결과가 나올 수 있습니다.
이 딜레마는 모호한 기호를 모호하지 않은 기호로 대체하여 해결할 수 있습니다.
호모 사피엔스 기본 수학은 만약 x가< n and y >n, x는 y보다 클 수 없습니다.
이제 텍스트가 완전히 명확해져야 합니다. "".
이에 대한 기술적 정의는 다음과 같습니다. 차폐, 특수 문자가 고유한 의미를 갖는 것을 원하지 않을 때 특수 문자를 이스케이프 처리합니다.
탈출 |iˈskāp| [obj가 없습니다. ] 휴식 [obj. ] 눈치채지 못하다 / 기억하지 못하다 [...] [ with obj. ] IT: 다르게 해석되어야 하는 이유 [...]
텍스트의 특정 문자 또는 문자 순서가 특별한 의미를 갖는 경우 해당 문자를 특별한 의미를 호출하지 않고 사용해야 하는 상황을 처리하는 방법을 지정하는 규칙이 있어야 합니다. 즉, 이스케이프는 다음 질문에 답합니다. “이러한 기호가 그렇게 특별하다면 내 텍스트에서 어떻게 사용할 수 있나요?”.
위의 예에서 볼 수 있듯이 앰퍼샌드(&)도 특수 문자입니다. 하지만 "라고 쓰고 싶다면 어떻게 해야 할까요?


사용자가 착하고 친절하다면 옛 철학자들의 인용문을 게시할 것이며 메시지는 다음과 같을 것입니다.

게시자: Plato, 날짜: 1월 2일, 15:31

나는 "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco Laboris nisi ut aliquip ex ea commodo consequat"라고 말했다고 합니다.


사용자가 똑똑하다면 아마도 수학에 관해 이야기할 것이고 메시지는 다음과 같을 것입니다.

게시자: Pascal, 날짜: 11월 23일, 04:12

기본 수학은 만약 x가< n and y >n, x는 y보다 클 수 없습니다.


흠... 또 우리 괄호를 모독하는 놈들이군. 글쎄, 기술적인 관점에서 볼 때 모호할 수 있지만 브라우저는 이를 용서할 것입니다. 그렇죠?


알았어, 그만해, 대체 뭐야? 어떤 장난꾸러기가 귀하의 포럼에 자바스크립트 태그를 도입했습니까? 귀하의 사이트에서 이 메시지를 보는 사람은 이제 누가 무엇을 할 수 있는지 귀하의 사이트 컨텍스트에서 스크립트를 다운로드하고 실행하고 있는 것입니다. 그리고 이것은 좋지 않습니다.

문자 그대로 받아들이지 마십시오. 위의 경우에 우리는 DB나 브라우저에 이것이 단지 텍스트일 뿐이므로 아무 것도 하지 말라고 알리고 싶습니다! 즉, 우리는 모든 특수문자의 특별한 의미를 "제거"하고 싶고, 키워드우리는 그를 신뢰하지 않기 때문에 사용자가 제공한 모든 정보에서 제외됩니다. 무엇을 해야 할까요?

무엇? 무슨 말을 하는 거야? 아, "차폐"라고 하던데요? 그리고 당신 말이 옳습니다. 쿠키를 먹어보세요!
쿼리와 병합하기 전에 사용자 데이터에 이스케이프를 적용하면 문제가 해결됩니다. 데이터베이스 쿼리의 경우 다음과 같습니다.
$이름 = $_POST["이름"]; $name = mysql_real_escape_string($name); $query = "이름 = "$name"인 사용자 중에서 전화번호를 선택하세요."; $결과 = mysql_query($query);
단 한 줄의 코드지만 이제는 누구도 더 이상 우리 데이터베이스를 "해킹"할 수 없습니다. 사용자 입력에 따라 SQL 쿼리가 어떻게 보이는지 다시 살펴보겠습니다.
알렉스
이름 = "Alex"인 사용자로부터 전화번호를 선택하세요.
맥도날드
이름 = "Mc\"Donalds"인 사용자로부터 전화번호를 선택하세요.
Joe"; DROP TABLE 사용자; --
이름 = "Joe\"인 사용자로부터 전화번호를 선택하세요. DROP TABLE 사용자; --"
mysql_real_escape_string은 특별한 의미가 있을 수 있는 모든 항목 앞에 슬래시를 무차별적으로 배치합니다.


출력하기 전에 모든 사용자 데이터에 htmlspecialchars 함수를 적용합니다. 이제 해충의 메시지는 다음과 같습니다.

게시자: JackTR, 날짜: 7월 18일, 12:56


사용자로부터 받은 값은 실제로 "손상"되지 않았습니다. 모든 브라우저는 이를 HTML로 구문 분석하고 화면에 모든 것을 올바른 형식으로 표시합니다.

다시 돌아와서... 위의 모든 내용은 많은 시스템에 공통적인 문제를 보여줍니다. 텍스트에 특수 문자가 없으면 텍스트를 이스케이프해야 합니다. 배치함으로써 텍스트 값 SQL에서는 SQL 규칙에 따라 이스케이프되어야 합니다. HTML에 텍스트 값을 배치할 때는 HTML 규칙에 따라 이스케이프 처리해야 합니다. (기술명)에 텍스트 값을 넣을 때에는 (기술명) 규칙에 따라 이스케이프 처리해야 합니다. 그게 전부입니다. 물론 완벽함을 위해 특수 문자를 포함하거나 포함하지 않을 수 있는 사용자 입력을 처리하는 다른 방법이 있습니다.
  • 확인
    사용자 입력이 특정 사양과 일치하는지 확인할 수 있습니다. 숫자를 입력해야 하는데 사용자가 다른 것을 입력하는 경우 프로그램은 사용자에게 이를 알리고 입력을 취소해야 합니다. 이 모든 것이 올바르게 구성되면 사용자가 "42"를 입력해야 하는 위치에서 "DROP TABLE 사용자"를 포착할 위험이 없습니다. 이는 HTML/SQL 주입을 피하는 데 그다지 실용적이지 않습니다. 왜냐하면... 트릭이 포함될 수 있는 자유 형식의 텍스트를 허용해야 하는 경우가 많습니다. 일반적으로 검증은 다른 측정값과 함께 사용됩니다.
  • 살균
    위험하다고 생각되는 기호를 "조용히" 제거할 수도 있습니다. 예를 들어, 포럼에 추가되지 않으려면 HTML 태그처럼 보이는 항목을 모두 제거하세요. 문제는 텍스트의 합법적인 부분을 완벽하게 제거할 수 있다는 것입니다.
    준비된 SQL 문
    우리가 원하는 것을 수행하는 특별한 기능이 있습니다. 즉, 데이터베이스가 SQL 쿼리 자체와 사용자가 제공한 정보 간의 차이점을 이해하도록 합니다. PHP에서는 다음과 같이 보입니다:
    $stmt = $pdo->prepare("이름 = ?"); $stmt->execute($_POST["이름"]);
    이 경우 전송은 요청과 변수를 명확하게 구분하는 두 단계로 이루어집니다. 데이터베이스에는 먼저 요청의 구조를 이해한 다음 이를 값으로 채울 수 있는 기능이 있습니다.

  • 실제 세계에서는 다양한 수준의 보호를 위해 이러한 기능이 모두 함께 사용됩니다. 사용자가 올바른 데이터를 입력하고 있는지 확인하려면 항상 유효성 검사를 사용해야 합니다. 그런 다음 입력한 데이터를 스캔할 수 있습니다(필수는 아님). 사용자가 분명히 스크립트를 판매하려는 경우 해당 스크립트를 삭제하면 됩니다. 그런 다음 항상 사용자 데이터를 SQL 쿼리에 넣기 전에 항상 이스케이프해야 합니다(HTML의 경우에도 마찬가지).

오랫동안 표준에서는 일반 따옴표를 삽입하도록 규정해 왔습니다. HTML 텍스트속성을 표시하기 위해 "내부 태그의 경우 따옴표" 구성을 사용합니다.

그러나 나는 아직까지 "모든 태그 외부"라는 간단한 기호를 따옴표로 표시하지 않는 브라우저를 본 적이 없습니다. 그러니 친애하는 동료 여러분, "외부 태그를 사용하는 것은 단순히 지루한 일이 아니겠습니까?"라고 말해주십시오. 더 이상 고민하지 않고 침착하게 "?"라고 쓸 수 있나요? 특히 따옴표가 많은 텍스트에서는 엄격한 디자인 규칙(국가별 따옴표의 올바른 사용과 관련)을 준수하는 것이 부적합합니다.

IMHO, 많은 사람들이 이렇게 합니다... 하지만 질문은 완전히 명확하지 않습니다. 표준에 따라 따옴표를 "로 작성해야 하지만 많은 사이트가 그렇게 작동한다는 사실에도 불구하고 게으르다는 것을 이해한다면 어떻게 될까요? 들을 것으로 예상하십니까? 제 생각에는 그것에 관한 것 같습니다. 새 버전의 브라우저에서 인용 표시가 지원되는지 여부는 아무도 모르므로 우리는 확실한 권장 사항을 제공할 수 있습니다. 향후에 문제를 원하지 않는다면, 100% - 표준 준수 :) 하지만 이미 알고 계시나요? 아니면 확인을 기다리고 계십니까? 예, 그게 다 지루합니다. 잊어버리세요. 10년 후에는 모든 것이 동일해질 것입니다. 나(Microsoft, Mozilla 등) ) 보장하다?

린 "커피맨"[서류]
예, 그런데... 이제 읽기가 유용할 것입니다. 따옴표를 " 형식으로 표시해야 한다는 내용은 어디에도 나와 있지 않습니다.
http://www2.stack.ru/~julia/HTML401/charset.html:

일부 작성자는 문자 엔터티 참조 """를 사용하여 큰따옴표(") 인스턴스를 인코딩합니다. 이 문자는 속성 값을 구분하는 데 사용될 수 있기 때문입니다.

&에 대해서만 언급된 엔터티를 사용해야 한다는 사실에 대해:

작성자가 텍스트에 문자 ""(ASCII 10진수 코드 62)를 배치하려는 경우.

문자 참조(문자 참조의 시작 표시)와의 혼동을 피하기 위해 "&" 문자 대신 "&" 참조(ASCII 10진수 코드 38)를 사용해야 합니다. 또한 CDATA 속성 값 내의 문자 참조가 허용되므로 속성 값에도 "&" 참조를 사용해야 합니다.

하지만 나는 단지 린의 대답과 같은 것을 기대하고 있을 뿐입니다. 즉 실제로 그러한 표준은 없다는 것입니다. 나에게는 그런 일이 일어나지도 않았습니다. 내 정보는 인기 있는 교과서에서 가져온 것이며 "모든 사람이 그렇게 합니다"라는 이유 때문입니다.

또는 다른 옵션: 그러나 xhtml(정확히는 xhtml을 확인했습니다)과 같이 제가 실습에서 접하지 못한 새로운 표준을 따르는 경우 이 트릭은 작동하지 않습니다. 따라서 작성된 HTML 코드의 이식성에 문제를 일으킬 필요가 없습니다.

아니면 마지막으로, 스스로 어떻게 하시나요?

& 그런데 비슷한 질문이 제기됩니다. 위의 문서에는 "혼란을 피하기 위해"라고 나와 있습니다. 그러나 & 뒤에 제공된 코드 중 하나가 오는 경우에만 혼동이 가능합니다. 예를 들어 "..../script?A=1&B=2" 와 같은 URL이라면 어떨까요? 이 URL을 href(물론 테스트 중에 올바르게 작동함)로 실수로 지정한 경우 위험이 있습니까? 10년 안에(사이트가 오래되었거나 이미 10번 다시 작성된 경우) 최종 이름 없이 &B라는 사치스러운 이름으로 개체가 나타날 가능성이 매우 낮은 상황을 제외한 모든 것. ? 즉, 이러한 모든 경우를 얼마나 주의 깊게 확인해야 합니까?

다니엘 씨, 기존 코드에 문제가 없다고 확신한다면 간단하게 &라고 쓰면 됩니다. 앞으로 새로운 코드가 등장한다면 명시적으로 선언하지 않을 것 같습니다. HTML 사양 4.01이므로 일반적으로 선언된 문서에는 영향을 주지 않습니다. 아니면 미래의 표준을 다음과 같이 지원할 것으로 예상하십니까? 간단한 변화문서 개요?

다니엘 알리예프스키[서류]
XML에서는 텍스트로서의 일반 따옴표도 아무런 문제를 일으키지 않습니다(물론 XHTML에서도 마찬가지입니다). IMHO 인용문은 일반적으로 단 한 가지 이유 때문에 "로 번역됩니다. XML/HTML/XHTML로 대체할 때 텍스트를 안전한 형식으로 변환하는 두 가지 함수를 작성하고 싶지 않습니다.

이 강의의 목적:

  • BI는 XML 기록 형식을 알아야 합니다.
  • BI는 XML 코드 형태로 문서를 작성할 수 있어야 합니다.
  • BI는 데이터 유형을 알고 이를 사용할 수 있어야 합니다.
  • 참고: XML은 이 튜토리얼에서 설명하는 것만큼 간결하지 않습니다. 우리는 ODA-TM 시스템에서 사용될 XML 언어의 기능만을 고려합니다.

    XML. 기본

    XML은 정보를 구조화, 저장 및 전송하기 위해 만들어졌습니다.

    다음 예인 "친구가 친구에게 보내는 메모"는 XML 형식을 갖습니다.

    Nikolay Ivan 알림 우리 만남을 잊지 않았 으면 좋겠습니다

    시각적으로 이 코드는 다음 형식으로 표현될 수 있습니다(그림 1).

    코드에는 정보의 발신자와 수신자가 있으며 메시지 헤더와 본문도 있습니다.

    누군가가 처리하고 전송하고 표시하도록 되어 있습니다.

    하지만 여전히 이 XML 문서는 아무 작업도 수행하지 않습니다. 그것은 단지 태그로 싸인 정보일 뿐입니다.

    XML - 트리

    XML에는 트리 구조가 있습니다. 문서에는 항상 루트 요소가 있습니다(명령은 트리와 아무 관련이 없습니다). 트리 요소에는 조상이 없는 루트 요소와 자손이 없는 막다른 요소(나무 잎)를 제외하고 항상 자손과 조상이 있습니다. 트리의 각 요소는 특정 중첩 수준(이하 "수준"이라고 함)에 위치합니다. 같은 수준의 요소에는 이전 요소와 다음 요소가 있습니다.

    XML을 사용하여 나만의 태그 만들기

    태그(설명자, 요소)를 생성하는 표준 형식은 없습니다.

    XML에는 미리 정의된 태그가 없습니다.

    • XML을 사용하면 작성자는 자신의 태그와 문서 구조를 정의할 수 있습니다.
    • XML은 데이터를 전송하는 데 사용됩니다.
    • XML은 정보를 전송하기 위한 소프트웨어 및 하드웨어 독립적인 도구입니다.
    • XML은 이제 HTML만큼 웹에 중요합니다.
    • XML은 서로 다른 응용 프로그램 간에 데이터를 전송하는 가장 일반적인 도구입니다.
    • XML은 웹 개발의 여러 측면에서 사용되며 종종 데이터 저장 및 교환을 단순화합니다.
    XML 구문

    XML 규칙의 구문은 매우 간단하고 논리적입니다.

    • 모든 XML 요소에는 닫는 태그가 있어야 합니다.
    • XML 요소는 올바르게 중첩되어야 합니다(한 요소가 다른 요소 안에 있어야 하며 어떠한 경우에도 교차하지 않음).
    • XML 문서에는 루트 요소가 있어야 합니다. XML 문서에는 다른 모든 요소의 상위 요소인 하나의 요소가 포함되어야 합니다. 이 요소를 루트 요소라고 합니다.
    • XML 속성 값은 따옴표로 묶어야 합니다.
    코멘트

    분석기 프로그램에서 XML 문서의 일부 조각을 완전히 "보이지 않게" 만들어야 하는 경우 앞에 문자를 써서 주석 형식으로 지정할 수 있습니다.< !-- , а после него - символы -->연속으로 두 개의 하이픈이 있습니다.

    예를 들어:

    < !-- Это комментарий -->

    분석기 프로그램은 이 전체 구조를 "조사"하지 않고 건너뜁니다.

    이 주석 구문에는 두 가지 제한 사항이 있습니다.

    • 댓글에는 두 개의 하이픈을 연속으로 쓸 수 없습니다.
    • 댓글은 하이픈으로 끝날 수 없습니다.
    XML 요소

    XML 요소는 요소의 시작 태그부터 종료 태그까지의 모든 것입니다.

    요소에는 다음이 포함될 수 있습니다.

    • 다른 요소
    • 텍스트
    • 속성
    • 아니면 위의 모든 것의 조합...
    XML 명명 규칙

    XML 요소는 다음 명명 규칙을 따라야 합니다.

    • 이름에는 문자, 숫자 및 기타 기호가 포함될 수 있습니다.
    • 이름은 숫자나 구두점으로 시작할 수 없습니다.
    • 이름에는 공백이 포함될 수 없습니다.
    속성

    속성은 다음을 제공합니다. 추가 정보데이터의 일부가 아닌 요소에 대해.

    아래 예에서 파일 형식은 데이터와 관련이 없지만 요소를 조작할 수 있는 소프트웨어에는 중요합니다.

    컴퓨터.gif

    XML 속성은 따옴표로 묶어야 합니다.

    속성 값은 항상 따옴표로 묶어야 합니다. 작은따옴표나 큰따옴표를 사용할 수 있습니다. 예: 사람의 성별을 결정하려면 요소를 다음과 같이 작성할 수 있습니다.

    속성 값 자체에 큰따옴표가 포함된 경우 사용할 수 있습니다. 작은따옴표, 이 예와 같이:

    또는 문자 객체를 사용할 수 있습니다: &&

    날짜 데이터 유형을 사용하는 몇 가지 예

    속성으로서의 날짜

    Tove Jani 알림 이번 주말에 저를 잊지 마세요!

    요소로서의 날짜

    2008년 10월 1일 Tove Jani 알림 이번 주말에 저를 잊지 마세요!

    확장된 요소로서의 날짜

    2008년 1월 10일 Tove Jani 알림 이번 주말에 저를 잊지 마세요!

    메타데이터 속성

    이러한 식별자는 XML 요소를 정의하는 데 사용할 수 있습니다.

    예:

    Tove Jani 알림 이번 주말에 저를 잊지 마세요! Jani Tove Re: 알림은 잊지 않을 거예요

    데이터에 관한 데이터는 속성으로 저장되어야 하고, 데이터 자체는 요소로 저장되어야 합니다.

    XML. 데이터 유형 기본 제공 단순 유형 날짜 및 시간
    • dateTime에는 다음 형식의 날짜와 시간이 포함됩니다. CCYY-MM-DThh:mm:ss
    • 기간 - 그레고리력의 일, 시, 분, 초로 표현되는 시간적 기간을 나타냅니다.

    예: 기록하다 P1Y2M3DT10H30M45S 1년(1Y), 2개월(2M), 3일(3DT), 10시간(10H), 30분(30M), 45초(45S)를 의미합니다.

    항목은 축약될 수 있습니다. P120M은 120개월을 의미하고 T120M은 120분을 의미합니다.

    • 시간은 일반 형식의 시간을 포함합니다. hh:mm:ss
    • 날짜에는 다음 형식의 날짜가 포함됩니다. CCYY-MM-DD
    • gYearMonth는 다음 형식으로 연도와 월을 할당합니다. CCYY-MM
    • gYear는 형식의 연도를 의미합니다. CCYY
    • gMonthDay에는 다음 형식의 월과 일이 포함됩니다. MM-DD
    • gDay 형식의 날짜 DD
    • gMonth 형식의 월 MM
    문자열

    string은 기본 문자 유형입니다.

    공백, 탭, 캐리지 리턴 및 줄 바꿈 문자를 포함하는 일련의 유니코드 문자로 구성된 문자열입니다.

    • NormalizedString - 유형의 하위 유형 - 줄 바꿈 "\n", 캐리지 리턴 "\r" 및 가로 탭 "\t"를 포함하지 않는 문자열입니다.
      • 토큰 - NormalizedString 유형의 하위 유형 - 아니요, 선행 및 후행 공백과 여러 개의 연속 공백을 제외하고.
        • 언어 - RFC 1766의 권장 사항에 따라 언어 이름을 기록하기 위해 정의된 토큰 하위 유형입니다(예: ru, en, de, fr).
        • NMTOKEN은 열거된 값을 기록하기 위해 속성에만 사용되는 토큰 하위 유형입니다.
        • 이름 - XML ​​이름으로 구성된 토큰의 하위 유형 - 문자로 시작하는 문자, 숫자, 하이픈, 마침표, 콜론, 밑줄의 시퀀스(예약된 문자 시퀀스 제외) 엑스, 엑스, 엠, 엠, 엘, 엘경우에 관계없이) 또는 밑줄을 그립니다. 문자열로 시작하는 이름 xml, XML 사양 자체에서 사용됩니다.
          • NCName은 콜론을 포함하지 않는 이름의 하위 유형입니다. ID, IDREF, ENTITY의 세 가지 하위 유형이 정의됩니다.
    바이너리 유형
    • bolen - 이진, 논리. 허용되는 값: True 또는 False(1 또는 0)
    • base64Binary - Base64로 인코딩된 이진 정수
    • hexBinary - 추가 문자가 없는 16진수 형식의 이진 정수
    실수
    • 십진수는 고정 소수점으로 작성된 실수입니다(123.45, -0.48747798 등).
    • double 및 float 유형은 고정 소수점 또는 부동 소수점으로 작성된 IEEE754-85 표준을 준수합니다.
    정수
    • 정수 - 순서가 0인 숫자를 포함하는 기본 정수 유형으로, 하위 유형으로 이해됩니다. 소수
    • number - 숫자를 정의합니다(자릿수에 제한이 없음). 부호, 분수, 지수가 포함될 수 있습니다. 가치관이 변한다

    1.7976931348623157E+308에서 2.2250738585072014E-308로

    우리는 XML에 대한 연구를 다시 계속하며 이 기사에서는 처리 지침, 주석, 속성 및 기타 XML 요소와 같은 XML 구성에 대해 알게 될 것입니다. 이러한 요소는 기본 요소이며 엄격한 표준에 따라 어떤 복잡한 문서라도 유연하게 표시할 수 있습니다.

    이전 기사 ""에서 XML 태그와 같은 몇 가지 사항을 이미 부분적으로 논의했습니다. 이제 이 주제를 다시 다루고 더 자세히 살펴보겠습니다. 이는 특히 XML 구성의 전체 그림을 더 쉽게 얻을 수 있도록 하기 위해 수행됩니다.

    XML 요소. 비어 있거나 비어 있지 않은 XML 요소

    이전 기사에서 언급했듯이 XML의 태그는 HTML의 경우처럼 단순히 텍스트를 마크업하는 것이 아니라 개별 요소(객체)를 강조 표시합니다. 결과적으로 요소는 문서의 정보를 계층적으로 구성하여 XML 언어의 주요 구조 단위가 되었습니다.

    XML에서 요소는 비어 있는 요소와 비어 있지 않은 요소의 두 가지 유형이 될 수 있습니다. 빈 요소에는 텍스트나 기타 구성과 같은 데이터가 포함되어 있지 않습니다. 빈 요소와 달리 비어 있지 않은 요소에는 텍스트나 기타 XML 요소 및 구문과 같은 모든 데이터가 포함될 수 있습니다. 위의 내용을 이해하기 위해 비어 있는 XML 요소와 비어 있지 않은 XML 요소의 예를 살펴보겠습니다.

    빈 XML 요소

    비어 있지 않은 XML 요소

    요소 내용...

    위의 예에서 볼 수 있듯이 빈 요소와 비어 있지 않은 요소의 주요 차이점은 태그가 하나만 구성된다는 것입니다. 또한 XML에서는 모든 이름이 대소문자를 구분한다는 점도 주목할 가치가 있습니다. 이는 myElement, MyElement, MYELEMENT 등의 이름을 의미합니다. 서로 다르기 때문에 이 순간미래의 실수를 피하기 위해 즉시 기억할 가치가 있습니다.
    그래서 우리는 요소를 알아 냈습니다. 이제 다음 단계인 XML 문서의 논리적 구성으로 넘어가겠습니다.

    XML 문서의 논리적 구성. XML 데이터의 트리 구조

    기억하시겠지만, XML 언어의 기본 구조는 요소입니다. 요소는 다른 중첩된 구조를 포함할 수 있으므로 계층적 구조트리뷰. 이 경우 상위 요소루트가 되고 다른 모든 하위 항목은 XML 트리의 가지와 잎이 됩니다.

    위의 내용을 더 쉽게 이해하기 위해 다음 이미지를 예시와 함께 살펴보겠습니다.

    보시다시피 XML 문서를 트리로 구성하는 것은 처리하기 매우 간단한 구조입니다. 동시에 나무 자체의 표현적 복잡성은 상당히 큽니다. 트리 표현은 XML에서 개체를 설명하는 가장 최적의 방법입니다.

    XML 속성. XML에 속성을 작성하는 규칙

    XML에서 요소에는 작은따옴표나 큰따옴표로 묶인 값이 할당된 속성이 포함될 수도 있습니다. 요소의 속성은 다음과 같이 설정됩니다.

    이 경우 이름이 "attribute"이고 값이 "value"인 속성이 사용되었습니다. XML 속성은 일부 값을 포함해야 하며 비워둘 수 없다는 점을 바로 주목할 가치가 있습니다. 그렇지 않으면 XML 관점에서 코드가 올바르지 않게 됩니다.

    따옴표 사용에도 주목할 필요가 있습니다. 속성 값은 작은따옴표나 큰따옴표로 묶을 수 있습니다. 또한 다른 따옴표 안에 일부 따옴표를 사용할 수도 있습니다. 설명하려면 다음 예를 고려하십시오.

    다른 XML 구성을 살펴보기 전에 속성을 생성할 때 앰퍼샌드 "&" 또는 꺾쇠 괄호 ""와 같은 특수 문자를 값으로 사용할 수 없다는 점도 주목할 가치가 있습니다. 이러한 문자는 제어 문자("&"는 엔터티이고 ""는 요소 태그를 열고 닫음)로 예약되어 있으며 "순수한 형식"으로 사용할 수 없습니다. 이를 사용하려면 특수 문자를 바꿔야 합니다.

    XML 처리 명령어(처리 명령어). XML 선언

    XML에는 특정 문서를 처리할 응용 프로그램에 대한 특정 정보를 전달하는 지침을 문서에 포함시키는 기능이 있습니다. XML의 처리 명령은 다음과 같이 생성됩니다.

    위의 예에서 볼 수 있듯이 XML에서는 처리 명령이 물음표와 함께 모서리 따옴표로 묶여 있습니다. 이것은 우리가 첫 번째 PHP 강의에서 보았던 일반적인 것과 약간 비슷합니다. 처리 명령의 첫 번째 부분은 이 명령의 두 번째 부분이나 그 내용이 의도된 응용 프로그램이나 시스템을 지정합니다. 그러나 처리 지침은 해당 지침이 처리된 애플리케이션에만 유효합니다. 처리 명령의 예는 다음 명령일 수 있습니다.

    XML에는 처리 명령과 매우 유사한 특수 구성이 있지만 그 자체는 하나가 아니라는 점은 주목할 가치가 있습니다. 이는 프로세서에 전달되는 XML 선언입니다. 소프트웨어인코딩, 이 문서가 작성된 언어 버전 등과 같은 XML 문서의 속성에 대한 일부 정보.

    위의 예에서 볼 수 있듯이 XML 선언에는 위에서 설명한 일반 속성과 매우 유사한 소위 의사 속성이 포함되어 있습니다. 사실 정의에 따르면 XML 선언 및 처리 명령은 속성을 포함할 수 없으므로 이러한 선언을 의사 속성이라고 합니다. 다양한 실수를 피하기 위해 미래를 기억할 가치가 있습니다.

    지금까지 의사 속성을 다루었으니, 그것이 무엇을 의미하는지 살펴보겠습니다.

    • 인코딩 – XML 문서 인코딩을 담당합니다. 일반적으로 UTF8 인코딩이 사용됩니다.
    • 버전 – 이 문서가 작성된 XML 언어의 버전입니다. 일반적으로 이는 XML 버전 1.0입니다.

    이제 기사의 결론 부분으로 이동하여 주석 및 CDATA 섹션과 같은 XML 구성을 고려해 보겠습니다.

    안녕하세요, 사이트 방문자 여러분! 계속해서 XML 마크업 언어에 대한 주제를 다루면서 속성의 사용을 살펴보겠습니다. 속성은 HTML과 마찬가지로 XML 요소에도 존재할 수 있습니다. 속성은 요소에 대한 추가 정보를 제공합니다.

    XML 속성

    안에 HTML 속성요소에 대한 추가 정보를 제공합니다.

    XML 속성은 따옴표로 묶어야 합니다.

    가치 XML의 속성항상 따옴표로 묶어야 합니다. 작은따옴표와 큰따옴표를 모두 사용할 수 있습니다. person 요소의 성별을 나타내려면 다음과 같이 작성할 수 있습니다.

    속성 값 자체에 큰따옴표가 포함된 경우 다음 예와 같이 작은따옴표를 사용할 수 있습니다.

    XML 요소와 속성

    다음 예를 살펴보십시오.

    빅토리아
    페트로바

    여성
    빅토리아
    페트로바

    첫 번째 예에서는 성별이 속성입니다. 후자에서는 섹스가 하나의 요소이다. 두 예제 모두 동일한 정보를 제공합니다.

    언제 속성을 사용해야 하는지, 언제 요소를 사용해야 하는지에 대한 규칙은 없습니다. 속성은 HTML에서 편리합니다. XML에서는 이를 피하는 것이 좋습니다. 대신 요소를 사용하세요.

    내가 가장 좋아하는 방식

    다음 세 개의 XML 문서에는 정확히 동일한 정보가 포함되어 있습니다.

    XML 날짜 속성은 첫 번째 예에서 사용됩니다.

    확장 날짜 요소는 세 번째 요소에서 사용됩니다. (이것이 제가 가장 좋아하는 방식입니다):



    10
    01
    2008

    베드로
    스베타
    알림

    XML 속성을 피하시나요?

    xml 속성을 사용할 때 발생하는 몇 가지 문제는 다음과 같습니다.

    • 속성은 여러 값을 포함할 수 없습니다(요소는 가능).
    • 속성은 트리 구조를 포함할 수 없습니다(요소는 가능).
    • 속성을 확장하기가 더 어렵습니다(향후 변경을 위해).

    다음과 같이 하지 마십시오:


    메타데이터의 XML 속성


    바샤
    스베타
    알림
    내일 나에게 전화하는 것을 잊지 마세요!


    스베타
    바샤
    답장: 알림
    좋아요

    위의 id 속성은 다양한 메모를 식별하는 데 사용됩니다. 이는 메모 자체의 일부가 아닙니다.

    여기서 내가 말하려는 것은 메타데이터(데이터에 관한 데이터)는 xml 속성으로 저장되어야 하고, 데이터 자체는 요소로 저장되어야 한다는 것이다.

    관심을 가져주셔서 감사합니다!.