Java

Java XML - XML 파일에서 enumeration 형식

승모근뭉치 2023. 1. 12. 22:18

프로젝트 내 attr3.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!-- 

<!ELEMENT 도서리스트 (책*) >
    <!ELEMENT 책 EMPTY >
        <!ATTLIST 책
          분류 CDATA #REQUIRED
          제목 CDATA #REQUIRED
        >
-->
<!--
<!ELEMENT 도서리스트 (책*) >
    <!ELEMENT 책 (제목, 저자) >
        <!ELEMENT 제목 (#PCDATA) >
        <!ELEMENT 저자 (#PCDATA) >
-->
<!-- enumeration 형식
엘리먼트명적고 속성명적고 분류세개를 선택연산자 파이프를이용해서 선언하고 그담에 디폴트
값 선언해주는 형식으로 사용한다 분류속성은 여러개가있어도 된다.-->
<!--
<!ATTLIST 책
    id ID #REQUIRED
    분류 (컴퓨터|소설|역사) "컴퓨터">
-->
<!--위는 책이라는 속성을 지정하는것
ATTLIST 속성을 책에다 부여하는데 기본값은 책에대한분류기본값은 컴퓨터다.
ENUMERATION은 위의 세 분류 중에 하나를 선택해야 한다는거죠.-->
<!--자식엘레멘트로 kinds라는 내용이들어가야한다-->
<!-- ID, IDREF/IDREFS 형식 -->
<!--
<!ELEMENT 도서리스트 (kinds, 책*) >
    <!ELEMENT kinds (kind*) >
        <!ELEMENT kind (#PCDATA) >
    <!ELEMENT 책 (제목, 저자) >
        <!ELEMENT 제목 (#PCDATA) >
        <!ELEMENT 저자 (#PCDATA) >

<!ATTLIST kind
    id ID #REQUIRED>
<!ATTLIST 책 
    id ID #REQUIRED
    kind IDREF #REQUIRED
    관련책 IDREFS #IMPLIED
>
-->
<!-- 아이디레퍼런스는 이미 선언된 속성의 유형인 ID라는 유형값을 가지고 이미
선언이 되어있어야해요.그래야지 KIND아이디값을 참조해서사용할수있어요 이제 
.xml로 간다 관련책 IMPLIED는 관련책이없으면 없음으로해주면된다.-->
<!-- NMTOKEN 속성 형식 -->
<!ELEMENT 도서리스트 (책*) >
    <!ELEMENT 책 (제목, 저자) >
        <!ELEMENT 제목 (#PCDATA) >
        <!ELEMENT 저자 (#PCDATA) >
<!--
<!ATTLIST 저자
    이름 NMTOKEN #REQUIRED
>
-->
<!ATTLIST 저자
    이름 NMTOKENS #REQUIRED
>

<!--이름작성규칙문자사이공백안들어오게하는형식
엔티티개념물리적인 저장단위STORAGE UNIT XML문서를 구성하는
물리적인 저장단위.실제 하드디스크에 저장되는 단위의미
XML 문서 : 도큐먼트 엔티티(XML문서의 물리적인저장단위).xml로 저장한다는건
실제로 도큐먼트엔티티 단위로 저장된다는의미
외부 DTD서브넷 문서는 외부 DTD 서브셋 엔티티다. DTD를 우리는 외부파일로 참고를
하는데.이 DTD 외부 파일또한 외부 엔티티가 된다.
엔티티의 용도
XML문서를 엔티티의 저장단위로 나누는이유는
엔티티의 재사용성을 높이기 위해서 이다.A라는 XML문서는 B,C,D라는 XML문서에 다포함
이된다고해보겠습니다. 이처럼 A.XML로 파일단위로저장해놓게되면 이A를 B,C,D에서
활용할수있겠죠. B,C,D에서 A.XML을 활용한다면 훨씬더 재사용성을 높인다.유지보수
차원에서도훨씬더간편하고효율적으로관리가된다.A를 고치고싶을때 엔티티를사용안한다면
B,C,D각각 전부수정해야하는데 엔티티사용시 A만고치면 된다.-->

========================================================

What is Nmtoken?

The lexical and value spaces of xs:NMTOKEN are the set of XML 1.0 “name tokens,” i.e., tokens composed of characters, digits, “.”, “:”, “-”, and the characters defined by Unicode, such as “combining” or “extender”.

xs:NMTOKEN 으 구성은 XML 1.0 "이름 토큰들"의 세트로 되어있는데, 즉 글자, 숫자, ".", ":", "-", 그리고 유니코드로 정의되는 글자로 이루어진 토큰들로써, "combining(조합한것)" 이나 "extender(확장된것)"과 같다.

 

In a Document Type Definition (DTD) an attributes type can be set to be NMTOKEN (name token). It must conform to the EBNF for "Nmtoken". In simple terms it can contain numbers letters, and ':', '_', '-', or '. ' it can not contain spaces or whitespace.

문서 형식 정의(DTD)에서 속성 타입은 NMTOKEN(이름 토큰)으로 정해질 수 있다. NMTOKEN은 반드시 EBNF에 따라야 한다. 간단히 말해서 NMTOKEN은 숫자, 글자, 그리고 ':', '_', '-', 또는 '.' 을 포함할 수 있다. NMTOKEN은 스페이스를 한번 이상 사용하거나 공백을 포함할 수 없다.==========================================================

 

프로젝트 내 attr3_test.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 도서리스트 SYSTEM "attr3.dtd">
<!--
<도서리스트>
    <책 분류="소설" 제목="삼국지"/>
    <책 분류="컴퓨터" 제목="xml &amp; 자바"/>
</도서리스트>
-->

<!-- id 유형과 enumeration 유형 사용 예
<도서리스트>
    <책 id="book1" 분류="소설">
        <제목>삼국지</제목>
        <저자>이문열</저자>
    </책>
    <책 id="book2" 분류="역사">
        <제목>조선왕조실록</제목>
        <저자>황석영</저자>
    </책>
    <책 id="book3">
        <제목> XML</제목>
        <저자>김말똥</저자>
    </책>
</도서리스트>
-->
<!-- IDREF 유형 사용 예 -->
<!--
<도서리스트>
    <kinds>
        <kind id="kind1">컴퓨터</kind>
        <kind id="kind2">역사</kind>
        <kind id="kind3">소설</kind>
    </kinds>-->
    <!--
    <책 id="book1" kind="kind1">
        <제목>XML</제목>
        <저자>김말똥</저자>
    </책>
    <책 id="book2" kind="kind2">
        <제목></제목>
        <저자></저자>
    </책>
    <책 id="book3" kind="kind3">
        <제목></제목>
        <저자></저자>
    </책>
    --><!--
    <책 id="book1" kind="kind1" 관련책="book3 book2">
        <제목>XML</제목>
        <저자>김말똥</저자>
    </책>
    <책 id="book2" kind="kind1" 관련책="book1 book3">
        <제목>java</제목>
        <저자>홍길동</저자>
    </책>
    <책 id="book3" kind="kind1" 관련책="book1 book2">
        <제목>C언어</제목>
        <저자>강길동</저자>
    </책>
    <책 id="book4" kind="kind2">
        <제목>조선왕조실록</제목>
        <저자>홍문수</저자>
    </책>
</도서리스트>
-->
<!--도서리스트에는 책이라는인스턴스3개서로인스턴스가구분되어야하는데ID로구분해서
    나중에다른기타프로그램에서사용하는것.데이타베이스에서의 참조키는 기본키로설정된
    칼럼의값을 참조하는 참조키고 외래키같은 역할을하는게 ID REFERENCE
    ID 레퍼런시스는 복수개로사용할때...만약에 kind1이 컴퓨터이고 그런 kind1
    이 여러개의 책이 있을수있기때문에 그책이 book1,book2,book3가 있을
    수있다. 관련책에서처럼 관련ID를 복수개 적을 수 있다.-->

<도서리스트>
    <책>
        <제목>삼국지</제목>
        <저자 이름="이문열"/>
    </책>
    <책>
        <제목>조선왕조실록</제목>
        <저자 이름="황석영 김말똥"/>
    </책>
</도서리스트>

<!--저자가 여러명인경우에는 공백을 넣어 분리하겠죠.그런경우에는 NMTOKENS
복수에관련된 S가 붙는다.-->

NMTOKEN 과 NMTOKENS는 다르다