JavaRush /Java Blog /Random-KO /Java 프로그래머를 위한 XML 기본 - 3부 중 1부
Ярослав
레벨 40
Днепр

Java 프로그래머를 위한 XML 기본 - 3부 중 1부

Random-KO 그룹에 게시되었습니다
XML은 요즘 매우 인기 있고 유연한 형식입니다. 모든 프로그래머는 그것을 이해해야 하며, 이는 단순히 필수 사항입니다. 오늘날 많은 기술이 이를 적극적으로 사용하고 있으며 최신 기술도 그중 하나입니다.
Java 프로그래머를 위한 XML 기본 - 3부 중 1부 - 1

소개

안녕하세요, 내 기사의 독자 여러분. 나는 이것이 세 편의 기사 시리즈 중 첫 번째 기사일 뿐이라는 것을 즉시 말하고 싶습니다. 전체 시리즈의 주요 목표는 각 독자를 XML로 시작하고 완전한 설명과 이해는 아니더라도 최소한 주요 요점과 내용을 설명하면서 XML에 대한 좋은 추진력을 제공하는 것입니다. 전체 주기는 "세부 사항에 주의"라는 하나의 후보로 구성되며 , 게시물의 글자 수 제한에 맞추기 위해 3개의 기사로 나누고, 많은 양의 자료를 더 작은 부분으로 나누어 이해를 돕습니다. 첫 번째 기사에서는 XML 자체와 그것이 무엇인지, 그리고 XML 파일용 스키마를 생성하는 방법 중 하나인 DTD에 대해 다룰 것입니다. 먼저 XML에 아직 익숙하지 않은 분들을 위해 간단한 서문을 만들고 싶습니다. 겁먹을 필요는 없습니다. XML은 원하는 다양한 정보를 저장하는 데 매우 유연하고 효율적이며 널리 사용되는 파일 형식이므로 그다지 복잡하지 않으며 모든 프로그래머가 이해해야 합니다. XML은 Ant, Maven, Spring에서 사용됩니다. 모든 프로그래머는 XML에 대한 지식이 필요합니다. 이제 힘과 의욕을 모았으니 공부를 시작해보자. 나는 모든 자료를 가능한 한 간단하게 배치하고 가장 중요한 것만 수집하고 잡초에 빠지지 않도록 노력할 것입니다.

XML

보다 명확한 설명을 위해서는 XML을 예시로 시각화하는 것이 좋습니다.
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee>
                    <name>Maksim</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Ivan</name>
                    <job>Junior Software Developer</job>
                </employee>
                <employee>
                    <name>Franklin</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee>
                    <name>Herald</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Adam</name>
                    <job>Middle Software Developer</job>
                </employee>
                <employee>
                    <name>Leroy</name>
                    <job>Junior Software Developer</job>
                </employee>
            </employees>
        </office>
    </offices>
</company>
HTML과 XML은 공통 상위 요소인 SGML을 갖고 있기 때문에 구문이 유사합니다. 그러나 HTML에는 특정 표준의 고정된 태그만 있는 반면, XML에서는 자신만의 태그와 속성을 생성할 수 있으며 일반적으로 자신에게 맞는 방식으로 데이터를 저장하려는 모든 작업을 수행할 수 있습니다. 실제로 XML 파일은 영어를 아는 사람이라면 누구나 읽을 수 있습니다. 이 예는 트리를 사용하여 설명할 수 있습니다. Java 프로그래머를 위한 XML 기본 - 3부 중 1부 - 2트리의 루트는 Company입니다. 또한 다른 모든 요소가 나오는 루트(루트) 요소이기도 합니다. 각 XML 파일에는 루트 요소가 하나만 있을 수 있습니다. 이는 xml 파일 선언 (예제의 첫 번째 줄) 다음에 선언되어야 하며 다른 모든 요소를 ​​포함해야 합니다. 선언에 대해 조금: 이는 필수 이며 문서를 XML로 식별하는 데 필요합니다. 버전(1.0 표준에 따름), 인코딩(인코딩) 및 독립형(자율성: 예이고 외부 구성표가 문서에 연결된 경우 오류가 발생합니다. 기본값) 아니오). 요소는 다른 요소와 속성을 사용하여 데이터를 저장하는 엔터티입니다. 속성은 요소를 추가할 때 지정하는 요소에 대한 추가 정보입니다. 설명을 OOP 필드로 번역하면 다음과 같은 예를 들 수 있습니다. 자동차가 있고 각 자동차에는 특성(색상, 용량, 브랜드 등)이 있습니다. 이는 속성이며 자동차 내부에 엔터티가 있습니다. : 문, 창문, 엔진, 스티어링 휠은 다른 요소입니다. 원하는 대로 속성을 개별 요소나 속성으로 저장할 수 있습니다. 결국 XML은 모든 정보를 저장하는 데 매우 유연한 형식입니다. 설명이 끝나면 위의 예를 보면 모든 것이 제대로 이해됩니다. 이 예에서는 간단한 회사 구조를 설명했습니다. 이름과 사무실이 있는 회사가 있고 사무실에는 직원이 있습니다. 직원 및 사무실 요소는 래퍼 요소입니다. 동일한 유형의 요소를 수집하는 데 사용되며 기본적으로 처리가 쉽도록 하나의 세트로 결합됩니다. 바닥과 방은 특별한 주의를 기울여야 합니다. 이는 사무실의 속성(층 및 번호), 즉 해당 사무실의 속성입니다. "이미지" 요소가 있다면 그 크기를 전송할 수 있습니다. 회사에는 이름 속성이 없지만 이름 요소가 있다는 것을 알 수 있습니다. 원하는 방식으로 구조를 간단히 설명할 수 있습니다. 어느 누구도 속성에만 요소의 모든 속성을 쓰도록 강요하지 않습니다. 요소만 사용하고 그 안에 일부 데이터를 쓸 수 있습니다. 예를 들어 직원의 이름과 직위를 속성으로 기록할 수 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer">

                </employee>
                <employee name="Ivan" job="Junior Software Developer">

                </employee>
                <employee name="Franklin" job="Junior Software Developer">

                </employee>
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer">

                </employee>
                <employee name="Adam" job="Middle Software Developer">

                </employee>
                <employee name="Leroy" job="Junior Software Developer">

                </employee>
            </employees>
        </office>
    </offices>
</company>
보시다시피 이제 각 직원의 이름과 직위가 그의 속성입니다. 그리고 직원 엔터티(태그) 내부에는 아무것도 없고 모든 직원 요소가 비어 있음을 알 수 있습니다. 그런 다음 직원을 빈 요소로 만들 수 있습니다. 속성을 선언한 후 즉시 닫습니다. 이 작업은 아주 간단하게 수행됩니다. 슬래시만 추가하면 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<company>
    <name>IT-Heaven</name>
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="Maksim" job="Middle Software Developer" />
                <employee name="Ivan" job="Junior Software Developer" />
                <employee name="Franklin" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
보시다시피, 빈 요소를 닫음으로써 정보의 전체 무결성을 유지하고 기록을 대폭 단축하여 정보를 더욱 간결하고 읽기 쉽게 만들었습니다. XML에 주석 (파일을 구문 분석할 때 건너뛸 텍스트)을 추가하려면 다음 구문을 사용하세요.
<!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
그리고 마지막 구성은 "문자 데이터"를 의미하는 CDATA 입니다. 이 디자인 덕분에 XML 마크업으로 해석되지 않는 텍스트를 작성할 수 있습니다. 이는 정보에 XML 마크업을 저장하는 XML 파일 내부에 엔터티가 있는 경우 유용합니다. 예:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
    <information>
        <![CDATA[<name>Ivan</name><age>26</age>]]>
    </information>
</bean>
XML의 장점은 원하는 대로 확장할 수 있다는 것입니다. 즉, 자신만의 요소와 속성을 사용하고 원하는 대로 구조화할 수 있습니다. 속성과 요소를 모두 사용하여 데이터를 저장할 수 있습니다(앞의 예에 표시된 대로). 그러나 원하는 대로 자신만의 요소와 속성을 즉석에서 생각해낼 수 있다는 점을 이해해야 합니다. 그러나 다른 프로그래머가 이름 요소를 속성으로 이동하고 전체 프로그램 논리를 원하는 프로젝트에서 작업하는 경우에는 어떻게 될까요? 그 이름이 요소라고 쓰여졌나요? XML 파일의 유효성을 검사하고 규칙이 프로젝트의 표준이 되고 누구도 이를 위반하지 않도록 하기 위해 어떤 요소가 있어야 하는지, 어떤 속성이 있는지 등에 대한 자신만의 규칙을 어떻게 만들 수 있습니까? 자신만의 XML 마크업의 모든 규칙을 작성하려면 특별한 도구가 필요합니다. 가장 유명한 것은 DTD와 XML 스키마입니다. 이 기사에서는 첫 번째에 대해서만 설명합니다.

DTD

DTD는 문서 유형을 설명하기 위해 만들어졌습니다. DTD는 이미 쓸모가 없어졌고 이제는 XML에서 적극적으로 폐기되고 있지만 여전히 DTD를 사용하는 XML 파일이 많이 있으므로 일반적으로 이해하는 것이 유용합니다. DTD는 XML 문서의 유효성을 검사하는 기술입니다 . DTD는 문서 유형에 대한 특정 규칙, 즉 해당 요소, 요소 내에 포함될 수 있는 요소, 속성, 필수 여부, 반복 횟수 및 엔터티를 선언합니다. XML과 유사하게 DTD는 더 명확한 설명을 위해 예제를 사용하여 시각화할 수 있습니다.
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>

<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
        name CDATA #REQUIRED
        job  CDATA #REQUIRED
>

<!ATTLIST office
        floor CDATA #REQUIRED
        room  CDATA #REQUIRED
>

<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
여기에 간단한 예가 있습니다. 이 예에서는 XML 예에서 직원, 직원, 사무실, 사무실, 이름, 회사 등 전체 계층 구조를 선언했습니다. DTD 파일을 생성하려면 XML 파일을 설명하는 데 사용되는 3가지 주요 구성이 있습니다: ELEMENT(요소 설명), ATTLIST(요소 속성 설명) 및 ENTITY(텍스트를 축약된 형식으로 대체). ELEMENT 요소를 설명하는 데 사용됩니다. 설명된 요소 내에서 사용할 수 있는 요소는 목록 형식으로 괄호 안에 나열됩니다. 수량을 표시하기 위해 수량자를 사용할 수 있습니다(정규 표현식의 수량자와 유사): +의미는 의미를 1+ *의미합니다 . 또는 수량자가 추가되지 않은 경우에는 요소가 1개만 있어야 한다고 가정됩니다. 요소 그룹 중 하나가 필요한 경우 다음과 같이 작성할 수 있습니다. 0+ ?01
<!ELEMENT company ((name | offices))>
그런 다음 요소 중 하나(이름 또는 사무실)가 선택되지만 회사 내부에 두 개가 있는 경우 유효성 검사가 통과되지 않습니다. 또한 직원에는 EMPTY라는 단어가 있음을 알 수 있습니다. 이는 요소가 비어 있어야 함을 의미합니다. ANY(모든 요소)도 있습니다. #PCDATA – 텍스트 데이터. ATTLIST 요소에 속성을 추가하는 데 사용됩니다. ATTLIST 뒤에는 원하는 요소의 이름이 나오고 그 뒤에는 "속성 이름 - 속성 유형" 형식의 사전이 오고 끝에 #IMPLIED(선택 사항) 또는 #REQUIRED(필수)를 추가할 수 있습니다. CDATA – 텍스트 데이터. 다른 유형도 있지만 모두 소문자입니다. ENTITY ENTITY는 약어와 그 위에 배치될 텍스트를 선언하는 데 사용됩니다. 실제로 전체 텍스트 대신 XML에서 앞에 & 기호가 있는 엔터티 이름만 사용할 수 있습니다. 후에. 예를 들어 HTML 마크업과 문자만 구별하기 위해 왼쪽 꺾쇠 괄호는 종종 lt로 이스케이프됩니다. , lt 앞에 &만 넣으면 됩니다. 그런 다음 마크업을 사용하지 않고 단순히 < 기호만 사용합니다. 보시다시피 모든 것이 매우 간단합니다. 요소를 선언하고, 선언된 요소가 포함할 수 있는 요소를 설명하고, 이러한 요소에 속성을 추가하고, 원하는 경우 엔터티를 추가하여 일부 항목을 줄일 수 있습니다. 그리고 여기에서 질문해야 할 것입니다: XML 파일에서 규칙을 어떻게 사용합니까? 결국 우리는 단순히 규칙을 선언했을 뿐 XML에서는 사용하지 않았습니다. XML에서 이를 사용하는 방법에는 두 가지가 있습니다. 1. 삽입 - XML ​​파일 자체 내에 DTD 규칙을 작성합니다. DOCTYPE 키워드 뒤에 루트 요소를 쓰고 DTD 파일을 대괄호로 묶습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company [
        <!-- Объявление возможных элементов -->
        <!ELEMENT employee EMPTY>
        <!ELEMENT employees (employee+)>
        <!ELEMENT office (employees)>
        <!ELEMENT offices (office+)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT company (name, offices)>

        <!-- Добавление атрибутов для элементов employee и office -->
        <!ATTLIST employee
        name CDATA #REQUIRED
        job  CDATA #REQUIRED
        >

        <!ATTLIST office
        floor CDATA #REQUIRED
        room  CDATA #REQUIRED
        >

        <!-- Добавление сущностей -->
        <!ENTITY M "Maksim">
        <!ENTITY I "Ivan">
        <!ENTITY F "Franklin">
]>

<company>
    <name>IT-Heaven</name>
    <!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="&M;" job="Middle Software Developer" />
                <employee name="&I;" job="Junior Software Developer" />
                <employee name="&F;" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
2. 가져오기 - 모든 규칙을 별도의 DTD 파일에 작성한 후 XML 파일에서 첫 번째 방법의 DOCTYPE 구성을 사용합니다. 대괄호 대신 SYSTEM을 작성하고 절대 또는 상대 경로를 지정하면 됩니다. 파일의 현재 위치.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">

<company>
    <name>IT-Heaven</name>
    <!-- Ivan недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
    <offices>
        <office floor="1" room="1">
            <employees>
                <employee name="&M;" job="Middle Software Developer" />
                <employee name="&I;" job="Junior Software Developer" />
                <employee name="&F;" job="Junior Software Developer" />
            </employees>
        </office>
        <office floor="1" room="2">
            <employees>
                <employee name="Herald" job="Middle Software Developer" />
                <employee name="Adam" job="Middle Software Developer" />
                <employee name="Leroy" job="Junior Software Developer" />
            </employees>
        </office>
    </offices>
</company>
SYSTEM 대신 PUBLIC 키워드를 사용할 수도 있지만 유용하지는 않습니다. 관심이 있으시면 여기( 링크) 에서 해당 내용(및 SYSTEM에 대한 내용)을 자세히 읽어보실 수 있습니다 . 이제 DTD에서 선언하지 않고는 다른 요소를 사용할 수 없으며 모든 XML에는 우리 규칙이 적용됩니다. IntelliJ IDEA에서 .xml 확장자를 가진 별도의 파일에 이 코드를 작성하고 DTD에서 몇 가지 새 요소를 추가하거나 제거해 보면 IDE가 오류를 어떻게 표시하는지 확인할 수 있습니다. 그러나 DTD에는 단점이 있습니다.
  • xml 구문과 다른 자체 구문이 있습니다.
  • DTD에는 데이터 유형 검사가 없으며 문자열만 포함할 수 있습니다.
  • DTD에는 네임스페이스가 없습니다.
자신의 구문 문제에 대해: XML과 DTD 구문이라는 두 가지 구문을 동시에 이해해야 합니다. 그것들은 다르기 때문에 혼란스러울 수 있습니다. 또한 이로 인해 동일한 DTD 스키마와 함께 대용량 XML 파일의 오류를 추적하기가 더 어렵습니다. 문제가 해결되지 않으면 다양한 구문을 사용하여 엄청난 양의 텍스트를 확인해야 합니다. 러시아어와 영어로 된 두 권의 책을 동시에 읽는 것과 같습니다. 그리고 한 언어에 대한 지식이 더 나쁘다면 텍스트를 이해하는 것도 마찬가지로 어려울 것입니다. 데이터 유형 검사 문제에 대해: DTD의 속성은 다양한 유형을 가지고 있지만 핵심은 모두 목록 또는 링크의 문자열 표현입니다. 그러나 숫자만 요구할 수는 없으며 특히 양수나 음수는 요구할 수 없습니다. 그리고 객체 유형을 완전히 잊어버릴 수도 있습니다. 마지막 문제는 네임스페이스와 XML 스키마를 다루는 다음 기사에서 논의될 것입니다. 여기서 논의하는 것은 무의미하기 때문입니다. 관심을 가져주신 모든 분들께 감사드립니다. 저는 많은 작업을 해왔고 제 시간에 전체 기사 시리즈를 마치기 위해 계속해서 노력하고 있습니다. 기본적으로 XML 스키마를 파악하고 이에 대한 더 명확한 단어로 설명을 제시하면 두 번째 기사를 마무리할 수 있습니다. 이미 절반 정도 진행됐으니 곧 기대하셔도 좋습니다. 마지막 기사에서는 Java를 사용한 XML 파일 작업에 전적으로 집중할 것입니다. 모두에게 행운과 프로그래밍 성공을 기원합니다 :) 다음 기사: [대회] Java 프로그래머를 위한 XML 기초 - 2부/3부
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION