찾다
백엔드 개발XML/RSS 튜토리얼XML로 완전히 구문 분석된 DTD 문서 유형 정의를 위한 샘플 코드(그림)

XML 태그의 사용자 정의 기능은 매우 강력합니다. 예를 들어, 이 기사에서 설명할 DTD(Document 유형 정의)는 사람들에게 일종의 객체지향같은 느낌인데, XML

DTD란 무엇인가
에서 DTD 파일 형식 정의를 전체적으로 분석해 보겠습니다.
DTD의 전체 이름은 Document Type Definition입니다. XML 파일 구조를 지정하고 XML 파일에 대한 구문과 규칙을 제공하는 파일 정의 형식입니다. DTD에서 XML 파일의 구조를 정의한 다음 DTD 선언에 따라 XML 파일을 작성합니다. 프로그래밍 언어함수 정의와 같습니다. 함수를 사용할 때는 함수 선언 형식에 따라 인용해야 합니다.
XML로 완전히 구문 분석된 DTD 문서 유형 정의를 위한 샘플 코드(그림)

2. DTD 상세 설명
1. 예시 상세 설명

rree

1.1 DTD 선언 시작문

(1) 내부 선언: 특정 DTD 문]>
(2) 외부 선언: 조되는 DTD의 루트 요소 키워드를 나타냅니다(SYSTEM/ PUBLIC) "dtd 파일 dtd 파일의 이름/네트워크 주소">
외부 선언에는 다양한 형식이 있으며 주로 SYSTEM 유형과 PUBLIC 유형 파일로 구분됩니다.
SYSTEM: 작성자나 조직이 작성한 많은 XML 문서 중 일반적인 DTD입니다.
PUBLIC: 권위 있는 조직에서 개발하고 특정 산업 또는 공공 용도로 제공되는 DTD입니다.
1.2 기타선언
(1) 요소:

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>     
<!-- 声明内部DTD -->     
<!DOCTYPE 影片目录[     
       <!ELEMENT 影片目录 (影片)+>   <!-- 声明XML顶层元素的子元素“影片”,“+”表示有一个或多个影片子元素 -->     
       <!ELEMENT 影片 (片名,主演,导演,简介)>     <!-- 声明“影片”元素的子元素 -->     
       <!ATTLIST 影片 类别 CDATA "动作" 年份 CDATA #REQUIRED> <!-- 声明“影片”元素的属性,两属性分别为“类别”和“年份”,CDATA说明属性的类型为字符型 -->     
       <!ENTITY 十面埋伏 "漫天大雪,三人在雪中决斗">   <!-- 实体的声明,类型为字符型,在下面使用“&实体名称;”直接引用 -->     
       <!ENTITY 霍元甲 "民族英雄,与西方帝国主义抗争">     
       <!ELEMENT 片名 (#PCDATA)>     
       <!ELEMENT 主演 (#PCDATA)>     
       <!ELEMENT 导演 (#PCDATA)>     
       <!ELEMENT 简介 (#PCDATA)>     
]>     
<!-- 由DTD获得的XML -->     
<影片目录>     
   <影片 类别="武侠" 年份="2008">     
         <片名>十面埋伏</片名>     
         <主演>刘德华、金城武、章子怡</主演>     
         <导演>张艺谋</导演>     
         <简介>&十面埋伏;</简介>     
   </影片>     
   <影片 类别="武侠" 年份="2006">     
       <片名>霍元甲</片名>     
       <主演>李连杰</主演>     
       <导演>于仁泰</导演>     
       <简介>&霍元甲;</简介>     
   </影片>     
</影片目录>

(2) 속성 목록:

<!ELEMENT element_name element_definition>

(3) 엔터티
내부
일반:
매개변수:
외부
일반:
매개변수:

2. 내용에 대한 자세한 설명
2.1 요소 선언
XML로 완전히 구문 분석된 DTD 문서 유형 정의를 위한 샘플 코드(그림)

몇 가지 특별한 사항이 있습니다. 요소 선언에서 요소 선언과 하위 요소의 발생 횟수, 선택성 및 혼합 유형은 프로그래밍 언어의 산술 및 논리 연산자 와 유사합니다. 다음은 여러 요소가 있는 DTD의 예입니다.

<!ATTLIST Element_Name   
   Attribute_Name Type [added_declare]   
   Attribute_Name Type [added_declare]   
   ......   
>

요소 선언의 기본 구문을 더 깊이 이해하려면 이 맵을 다운로드하세요.
2.2 이름 충돌

때때로 복잡한 XML 문서에 동일한 이름을 가진 요소가 나타나는 경우가 있습니다. 이러한 현상을 방지하기 위해 네임스페이스 와 접두사 식별자를 사용합니다.
2.2.1 네임스페이스
xmlns를 사용하여 네임스페이스를 소개하고 해당 공간에 어떤 부분이 속하는지 사용자에게 알려줍니다. 기능 면에서 다른 프로그래밍 언어의 네임스페이스와 다소 유사하여 요소의 고유성을 보장하고 충돌을 방지합니다.

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>     
<!DOCTYPE 影片目录 [     
    <!ELEMENT 影片目录 (影片,其它,说明)+>   <!-- 使用“+”号表明影片目录中的子元素出现至少一次 -->     
    <!ELEMENT 其它 EMPTY>   <!-- 使用EMPTY关键字声明空元素 -->     
    <!ELEMENT 说明 ANY>     <!-- 使用ANY关键字声明任何内容的元素 -->     
    <!ELEMENT 影片(片名,主演,导演,简介)>    <!-- 含有子元素的元素声明格式 -->      
    <!ATTLIST 影片      
                    名称 ID #FIXED "十面埋伏"     
                    类别 CDATA "动作"      
                    年份 CDATA #REQUIRED     
                    票房 CDATA #IMPLIED     
     
    >    <!-- 属性声明 -->     
    <!ENTITY introduction "漫天大雪,三人在雪中决斗">     
    <!ELEMENT 片名(#PCDATA)>     
    <!ELEMENT 主演(#PCDATA)>     
    <!ELEMENT 导演(#PCDATA)>     
    <!ELEMENT 简介(#PCDATA)>     
]>

역할: 요소와 속성을 표준화하고 고유 식별자를 부여하여 요소 이름에 충돌이 없는지 확인하고 해당 출처를 명확히 합니다.
2.2.2 접두사 식별자
현재 요소나 속성이 어떤 DTD에서 유래하는지 고유하게 구분하려면 요소 이름과 속성 이름 앞에 식별자를 추가합니다. 이는 네임스페이스와 함께 사용되는 경우가 많습니다. 위의 예에서는

3. 엔터티 상세 설명

요소가 있는데 왜 엔터티를 소개해야 하나요? 둘을 구별하려면 먼저 엔터티 도입의 목적을 살펴봐야 합니다. 엔터티 메커니즘은 다양한 유형의 데이터를 XML 문서에 통합하기 위한 엄청난 시간 절약 도구입니다. 객체지향 추상 클래스와 같이 자주 사용되는 객체를 하나의 엔터티로 추상화하고, 중복을 피하면서 어디서 사용하든 직접 참조할 수 있습니다.
자세히
(1)은 입력할 수 없는 문자를 대체합니다. 키보드에는 26개의 문자와 간단한 구두점만 있고, 문자 집합 에는 입력할 수 없는 다양한 기호가 많이 있습니다. 입력했습니다. 키보드로 입력했습니다.
(2) (3) 반복되는 텍스트의 큰 단락을 교체합니다.
엔티티 참조는 참조 위치에 따라 내부 참조와 외부 참조, 참조 내용에 따라 일반 참조와 매개변수 참조의 두 가지 유형으로 구분됩니다. 외부 엔터티 참조의 예를 살펴보겠습니다.

목록 1: "2.dtd" 선언

<?xml version="1.0" encoding=&#39;utf-8&#39;?>     
<影片 xmlns:h=&#39;http://www.abc.edu&#39; xmlns:c=&#39;http://www.123.edu&#39;><!-- 使用xmlns:来引用命名空间 -->     
  <db>     
    <h:table>werer</h:table>    <!-- 告诉用户,此table是在http://www.abc.edu中定义的 -->     
    <c:table>fdfdsfsdf</c:table>    <!-- 告诉用户,此table是在http://www.123.edu中定义的 -->     
  </db>     
</影片>

목록 2: 영화 리뷰 내용 .xml

<!-- 声明外部DTD,并保存为2.dtd -->     
      
<!ELEMENT 影片目录 (影片)+>     
<!ELEMENT 影片 (片名,主演,导演,简介)>     
<!ATTLIST 影片 类别 CDATA "动作" 年份 CDATA #REQUIRED>     
<!ENTITY 十面埋伏 "漫天大雪,三人在雪中决斗">     
<!ENTITY 霍元甲 "民族英雄,与西方帝国主义抗争">     
<!ELEMENT 片名 (#PCDATA)>     
<!ELEMENT 主演 (#PCDATA)>     
<!ELEMENT 导演 (#PCDATA)>     
<!ELEMENT 简介 (#PCDATA)>     
<!ENTITY filmcomment SYSTEM "影评.xml">       <!-- 引用外部通用实体,文件名称为“影评.xml” -->

목록 3: dtd를 사용하는 xml 파일의 콘텐츠.

<?xml version="1.0" encoding=&#39;utf-8&#39;?>     
<影评>     
 这些影评都是由XXX公司出品,值得观看!     
</影评>


목록 3: dtd를 사용하는 xml 파일의 콘텐츠.

<?xml version="1.0" encoding=&#39;utf-8&#39;?>     
<影评>     
 这些影评都是由XXX公司出品,值得观看!     
</影评>


목록 4: IE8에서 목록 3을 연 후의 내용

<?xml version="1.0" encoding="utf-8" ?>     
  <!DOCTYPE 影片目录 (View Source for full doctype...)>     
- <影片目录>     
-   <影片 类别="武侠" 年份="2008">     
       <片名>十面埋伏</片名>     
       <主演>刘德华、金城武、章子怡</主演>     
       <导演>张艺谋</导演>     
       <简介>漫天大雪,三人在雪中决斗</简介>     
    </影片>     
-   <影片 类别="武侠" 年份="2006">     
       <片名>霍元甲</片名>     
       <主演>李连杰</主演>     
       <导演>于仁泰</导演>     
       <简介>民族英雄,与西方帝国主义抗争</简介>     
    </影片>     
    <影评>这些影评都是由XXX公司出品,值得观看!</影评>     
  </影片目录>

内部和外部很容易理解,主要看一般和参数两种引用的区别。

1.参数实体

清单1:test.dtd,在此该内容单独存在了一个dtd文件中是因为在内部DTD子集中。
参数实体引用不能在标记声明内部出现,可以在标记声明允许出现的地方出现。然而,对于外部DTD子集,则没有这个限制。

<!-- 声明外部DTD,并保存为test.dtd -->     
<!-- 个人信息实体声明的是参数类型的,可以再各个元素中共同使用该参数 -->     
<!ENTITY % 个人信息 "(姓名,性别,出生日期)">     
<!ELEMENT 学生信息 %个人信息;>     
<!ELEMENT 教师信息 %个人信息;>     
<!ELEMENT 员工信息 %个人信息;>


清单2:学校信息.xml文件,引用了外部的test.dtd文件

<?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>     
<!-- 学校信息.xml文件 -->      
<!-- 引用外部DTD -->     
<!DOCTYPE 学校信息 SYSTEM &#39;./test.dtd&#39;>     
<!-- 由DTD获得的XML -->     
<学校信息>     
 <学生信息>     
  <姓名>张三</姓名>     
  <性别>男</性别>     
  <出生日期>2013-10-12</出生日期>     
 </学生信息>     
 <教师信息>     
  <姓名>张三</姓名>     
  <性别>男</性别>     
  <出生日期>2013-10-12</出生日期>     
 </教师信息>     
 <员工信息>     
  <姓名>张三</姓名>     
  <性别>男</性别>     
  <出生日期>2013-10-12</出生日期>     
 </员工信息>     
</学校信息>

       
清单3:使用IE8打开清单2的内容后

<?xml version="1.0" encoding="utf-8" ?>     
- <!--   
 声明内部DTD    
  -->     
  <!DOCTYPE 学校信息 (View Source for full doctype...)>     
- <!--   
 由DTD获得的XML    
  -->     
- <学校信息>     
-    <学生信息>     
       <姓名>张三</姓名>     
       <性别>男</性别>     
       <出生日期>2013-10-12</出生日期>     
     </学生信息>     
-    <教师信息>     
        <姓名>张三</姓名>     
        <性别>男</性别>     
        <出生日期>2013-10-12</出生日期>     
     </教师信息>     
-    <员工信息>     
        <姓名>张三</姓名>     
        <性别>男</性别>     
        <出生日期>2013-10-12</出生日期>     
     </员工信息>     
  </学校信息>

 
2. 一般实体

可在XML元素中加以引用,也可以在DTD中引用,但参数实体只能在DTD中引用,并且通常情况下只能在外部DTD文档中引用。

3. 对比升华

参数实体与一般实体的区别如下:

     (l)在定义参数实体时,实体名前必须加一个“%”号。

     (2)参数实体引用以“%”开始,而不是一般实体引用的“&”。

     (3)参数实体的内容不仅可以包含文本,还可以包含标记。

     (4)参数实体只能应用于DTD,而不能在文档本体中引用。即参数实体只能用来构成DTD的内容,而不能构成文档内容。

     (5)参数实体只能在外部DTD文档中使用,无法应用于内部DTD。


外部参数实体与外部一般实体的区别如下:

     (1)外部参数实体应用于独立的DTD文档,外部一般实体应用于XML文档。

     (2)外部参数实体应用于将多个独立的DTD文档组合为一个大的DTD文档,外部一般实体用于将多个独立的XML文档组合成一个大的XML文档。


四、验证XML文件的合法性

DTD定义了XML文件的使用格式,它从结构和形式上限制了XML文档,通过引用DTD可以形成统一的规范化的XML文档,另外通过使用实体简化了DTD和XML文档的内容。使用DTD验证的XML文档才能称为规范化文档,那如何验证所写的XML文档是否符合DTD的规范呢。通过如下的代码串:

import javax.xml.parsers.DocumentBuilder;     
import javax.xml.parsers.DocumentBuilderFactory;     
     
import org.xml.sax.InputSource;     
     
public class ValidateDTD     
{     
    public static void main(String[] args){     
             
        //在验证前需要把需要验证的XML和规范DTD包含在jar中     
        try{     
            DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();    //创建一个文档构造工厂     
            dbf.setValidating(true);     
            DocumentBuilder builder=dbf.newDocumentBuilder();     
            builder.parse(new InputSource("xml-2-2.xml"));  //需要验证的XML名称     
        }catch(Exception e){     
            e.printStackTrace();     
        }     
    }     
}

上面代码中的类和结构主要完成了XML文档的解析,并且在解析之前验证当前XML文件是否符合某个DTD的定义。在上面的代码运行前需要将需要验证的XML和提供规范化的DTD文档引入到当前ValidateDTD项目中,后运行上面的代码实例,该项目会在项目文件中自动查找规范的DTD,然后验证xml文件。

五、结语
至此,有关文件定义格式的内容已经基本上讨论了一遍,从最初的元素声明到复杂多变的实体类型,DTD的引入无疑为XML的使用指定了一个统一的标准,这种标准是由提供方规定好,使用方遵守的一种规则,并在最后讨论了如何验证引用DTD的XML合法与否。另外描述XML文档结构的不仅仅只有DTD,DTD是一种早期的定义格式,它有很多缺点,如不支持数据类型,不易于扩展等,为了避免这种缺点后来又引入了Schema,它是DTD的继任者,下篇博客将着重讨论Schema。

위 내용은 XML로 완전히 구문 분석된 DTD 문서 유형 정의를 위한 샘플 코드(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
RSS 피드 : XML의 역할과 목적 탐색RSS 피드 : XML의 역할과 목적 탐색Apr 28, 2025 am 12:06 AM

RSSFEED에서 XML의 역할은 데이터를 구조화하고 표준화하고 확장 성을 제공하는 것입니다. 1.xml은 RSSFEED 데이터를 구성하여 쉽게 구문 분석하고 처리 할 수 ​​있도록합니다. 2.XML은 RSSFEED의 형식을 정의하는 표준화 된 방법을 제공합니다. 3.xml 확장 성을 사용하면 RSSFeed가 필요에 따라 새 태그와 속성을 추가 할 수 있습니다.

XML/RSS 스케일링 : 성능 최적화 기술XML/RSS 스케일링 : 성능 최적화 기술Apr 27, 2025 am 12:28 AM

XML 및 RSS 데이터를 처리 할 때 다음 단계를 통해 성능을 최적화 할 수 있습니다. 1) LXML과 같은 효율적인 파서를 사용하여 구문 분석 속도를 향상시킵니다. 2) 색소폰 파서를 사용하여 메모리 사용을 줄입니다. 3) XPath 표현식을 사용하여 데이터 추출 효율을 향상시킵니다. 4) 다중 프로세스 병렬 처리를 구현하여 처리 속도를 향상시킵니다.

RSS 문서 형식 : RSS 2.0 이상 탐색RSS 문서 형식 : RSS 2.0 이상 탐색Apr 26, 2025 am 12:22 AM

RSS2.0은 콘텐츠 게시자가 컨텐츠를 구조화 된 방식으로 배포 할 수있는 개방형 표준입니다. 제목, 링크, 설명, 릴리스 날짜 등과 같은 풍부한 메타 데이터가 포함되어있어 가입자가 컨텐츠를 빠르게 탐색하고 액세스 할 수 있습니다. RSS2.0의 장점은 단순성과 확장 성입니다. 예를 들어, 사용자 정의 요소가 허용되므로 개발자는 저자, 카테고리 등과 같은 요구에 따라 추가 정보를 추가 할 수 있습니다.

RSS 이해 : XML 관점RSS 이해 : XML 관점Apr 25, 2025 am 12:14 AM

RSS는 자주 업데이트되는 컨텐츠를 게시하는 데 사용되는 XML 기반 형식입니다. 1. RSSFEED는 제목, 링크, 설명 등을 포함하여 XML 구조를 통해 정보를 구성합니다. 2. RSSFEED를 만들려면 XML 구조로 작성하고 언어 및 출시 날짜와 같은 메타 데이터를 추가해야합니다. 3. 고급 사용에는 멀티미디어 파일과 분류 된 정보가 포함될 수 있습니다. 4. 디버깅 중 XML 검증 도구를 사용하여 필요한 요소가 존재하고 올바르게 인코딩되도록하십시오. 5. RSSFEED 최적화는 구조를 단순하게 유지하고 페이징, 캐싱 및 유지함으로써 달성 할 수 있습니다. 이 지식을 이해하고 적용함으로써 컨텐츠를 효과적으로 관리하고 배포 할 수 있습니다.

XML의 RSS : 태그, 속성 및 구조 디코딩XML의 RSS : 태그, 속성 및 구조 디코딩Apr 24, 2025 am 12:09 AM

RSS는 컨텐츠를 게시하고 구독하는 데 사용되는 XML 기반 형식입니다. RSS 파일의 XML 구조에는 컨텐츠 항목을 나타내는 루트 요소, 요소 및 여러 요소가 포함됩니다. XML Parser를 통해 RSS 파일을 읽고 구문 분석하고 사용자는 최신 컨텐츠를 구독하고 얻을 수 있습니다.

RSS에서 XML의 장점 : 기술 깊은 다이빙RSS에서 XML의 장점 : 기술 깊은 다이빙Apr 23, 2025 am 12:02 AM

XML은 RSS에서 구조화 된 데이터, 확장 성, 크로스 플랫폼 호환성 및 구문 분석 검증의 장점을 가지고 있습니다. 1) 구조화 된 데이터는 컨텐츠의 일관성과 신뢰성을 보장합니다. 2) 확장 성은 콘텐츠 요구에 맞게 맞춤형 태그를 추가 할 수 있습니다. 3) 크로스 플랫폼 호환성은 다른 장치에서 원활하게 작동합니다. 4) 분석 및 검증 도구는 피드의 품질과 무결성을 보장합니다.

XML의 RSS : 컨텐츠 신디케이션의 핵심을 공개합니다XML의 RSS : 컨텐츠 신디케이션의 핵심을 공개합니다Apr 22, 2025 am 12:08 AM

XML에서 RSS 구현은 구조화 된 XML 형식을 통해 컨텐츠를 구성하는 것입니다. 1) RSS는 채널 정보 및 프로젝트 목록과 같은 요소를 포함하여 XML을 데이터 교환 형식으로 사용합니다. 2) RSS 파일을 생성 할 때는 사양에 따라 컨텐츠를 구성하고 구독을 위해 서버에 게시해야합니다. 3) RSS 파일은 리더 또는 플러그인을 통해 구독하여 컨텐츠를 자동으로 업데이트 할 수 있습니다.

기본 사항을 넘어서 : 고급 RSS 문서 기능기본 사항을 넘어서 : 고급 RSS 문서 기능Apr 21, 2025 am 12:03 AM

RSS의 고급 기능에는 컨텐츠 네임 스페이스, 확장 모듈 및 조건부 구독이 포함됩니다. 1) 컨텐츠 네임 스페이스는 RSS 기능을 확장합니다. 2) 메타 데이터를 추가하기 위해 Dublincore 또는 iTunes와 같은 확장 된 모듈, 3) 특정 조건에 따라 조건부 구독 필터 항목. 이러한 기능은 XML 요소 및 속성을 추가하여 정보 수집 효율성을 향상시켜 구현됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기