선언을 공유하는 DTD에서 요소를 정의하는 방법은 무엇입니까?
-
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>
제휴하지 않습니다 StackOverflow