선언을 공유하는 DTD에서 요소를 정의하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1621735

  •  06-07-2019
  •  | 
  •  

문제

동일한 선언을 공유하는 DTD에서 요소를 어떻게 정의 할 수 있습니까?

나는 이것을 시도하여 구문 오류로 이어집니다.

<!ELEMENT (expression|condition) (code-text+)>

표현과 조건이 동일한 선언을 갖는 경우, 이는 동일한 하위 요소와 속성을 의미합니다.

도움이 되었습니까?

해결책

(사이드 참고 : 원칙적으로 DTD 대신 XSD를 사용하는 데 동의합니다 (또는 사용하십시오. Relaxng, 이것은 XSD에 대한 훌륭하고 표준화 된 대안이며 이해하고 읽기가 훨씬 쉽습니다. 확장 코드에 대해 너무 걱정하지 마십시오. 읽기 쉽고 강력한 표현력을 제공합니다. 기술에 의해 차단되는 대신 필요한 것을 구축하는 데 도움이됩니다. Visual Studio, Eclipse 등과 같은 Ides는 모델을 구축하기위한 그래픽 디자인 도구를 가지고있어 XSD를 산들 바람으로 만들 수 있습니다.)

그러나 그것은 당신의 질문에 대답하지 않습니다. DTD에서 정의를 재사용하는 것은 매우 쉽습니다. 를보세요 HTML DTDs, 그것은 항상 발생합니다. 열쇠는 매개 변수 엔티티를 사용하는 것입니다. 간단한 예는 다음과 같습니다.

<!-- the "model" -->
<!ENTITY % commoncontent
    "content | xxx">
<!ENTITY % commonattrs
    "att1  CDATA  #IMPLIED
     att2  CDATA  #IMPLIED">

<!-- elements -->
<!ELEMENT root ANY>
<!ELEMENT content ANY>
<!ELEMENT xxx EMPTY>

<!-- elements that share the same model -->
<!ELEMENT hello  (%commoncontent;)+>
<!ELEMENT world  (%commoncontent;)+>

<!-- adding the attributes to the elements with the same model -->
<!ATTLIST hello %commonattrs;>
<!ATTLIST world %commonattrs;>

기본적으로 만든 hello 그리고 world 요소에는 정확히 동일한 속성 세트 및 내용이 포함되어 있습니다. 컨텐츠로서 비장 및 변환되지 않은 요소의 정의를 사용하여 위의 DTD와 함께 다음 XML 문서를 유효하게 만듭니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root SYSTEM "multipleSharedDefinitions.dtd">
<root>
    <hello att1="bla">            
        <content />
    </hello>
    <world att1="bla" att2="blabla">
        <content />
        <xxx />
    </world>
</root>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top