2012-07-23 4 views
0

내 질문을 읽어 주셔서 감사합니다. 나는 비슷한 질문을 찾아 보았지만 그 중 아무도 무슨 일이 일어나고 있는지 전혀 설명하지 못했다.이 .DTD를 잘못 사용하고 있습니까, 아니면 정확히 무엇을해야하는지 오해하고 있습니까?

나는 XML 파일이 있습니다

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/css" href="../wikiStyle.css"?> 
<!DOCTYPE article SYSTEM "../article.dtd"> 

<article xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <header> 
     <title>Foreign relations of Malta</title> 
     <id>19146</id> 
    </header> 

    <bdy> 
     <link xlink:type="simple" xlink:href="../205/40205.xml">Albania</link>&nbsp;· 
     <link xlink:type="simple" xlink:href="../588/67588.xml">Andorra</link>&nbsp;· 
    </bdy> 
</article> 

당신이 볼 수 있듯이을; 나는이 .dtd 파일을 참조했습니다, 그리고 그것은 같은 정의를 포함 :

<!ENTITY nbsp "&#160;"> <!-- no-break space = non-breaking space, 
            U+00A0 ISOnum --> 

내 목표는 판독 가능 브라우저에서이 .xml 파일을 표시하는 것입니다. CSS는 nbsp와 같은 요소를 포함하는 .xml 파일을 제외하고는 완벽하게 관리합니다. 이 경우에

, 내가 얻을 같은 오류 : 나는 그것을 알 수있는 바와 같이

XML Parsing Error: undefined entity 

10.1126/science.288.5472.1775</weblink>. PMID 10877698.</cite>&nbsp;</entry> 

--------------------------------------------------------------^ 

에서,은 .dtd이 라인은 브라우저에이 요소를 선언하고에 & NBSP를 사용하는 저를 활성화해야 내 XML은 (그리고 디스플레이 브라우저의 파서 &에 # 160을 확장했다.

  • 내가 일어나고 무엇을해야 이해 내에는 수정 건가요, 아니면 내가 마일입니다 무언가를 ssing?
  • 이 요소를 브라우저에서 표시 할 수 있도록 어떻게 선언 할 수 있습니까?

참고 : 저는 수백만 개의 XML 파일로 작업하고 있으며 생성하지 않습니다. .xml 파일 자체를 변경하지 않아도되는 솔루션이 필요합니다.

답변

1

엔티티 선언이 좋으므로 외부 DTD를로드하지 않는 브라우저의 문제 일 수 있습니다. (예 : https://developer.mozilla.org/en/XML_in_Mozilla) : 나는 당신이 수백만로 작업하는 것을 알고

<!DOCTYPE article [ 
<!ENTITY nbsp "&#160;"> <!-- no-break space = non-breaking space, 
            U+00A0 ISOnum --> 
]> 

나는이 문제를 해결할 수있는 유일한 방법은 각 파일의 내부 부분 집합에 엔티티 선언을 추가하는 것입니다 생각 파일을 생성하고 생성하지는 않지만 DOCTYPE 선언을 스크립트로 업데이트하고 사전 처리 할 수 ​​있습니다.

+0

도움 주셔서 감사합니다. 문제의 진단은 정확했고 .dtd는 단지 읽히지 않았습니다. 해결책으로는 내부 .dtd가 각 파일에 30 + kb를 추가하는 것으로 나타났습니다. 이는 작동하지 않습니다. 당분간 내가 찾은 최선의 해결책은 내 문서를 게으르게 파싱하고 각 요소의 각 인스턴스를 해당하는 hashcode로 대체하는 것입니다. – Paul

+0

브라우저에 대한 주된 관심사가 문서를 올바르게 표시하는 경우 (즉, 별도로 유효성을 검사하는 경우) 내부 하위 집합에 전체 DTD가 필요하지 않으며 문서에 언급 된 항목의 엔티티 선언 만 필요합니다 . 일부 수작업을 기꺼이 받아들이려면 엔티티 선언을 숫자로 된 참조로 대체하는 것처럼 엔티티 선언을 내부 하위 세트에 쉽게 삽입 할 수 있습니다. 손으로 작업하는 것이 너무 많아지면 XSLT를 사용한 단순한 ID 변환이 자동으로 이러한 작업을 쉽게 수행 할 수 있습니다. –

+0

@ C.M.Sperberg-McQueen - 좋은 의견과 전적으로 동의합니다. 나는 Paul이 주석에서 언급 한 30 + kb가 모든 엔티티 선언인지 또는 전체 DTD를 추가했는지 궁금합니다.제 XML 예제가 여러분이 말하는 것을 정확하게 보여주고 있다고 생각합니다. 엔티티 선언 만있는 내부 서브 세트 공공 및 시스템 식별자도 제거했습니다. –

관련 문제