문제

문서 DTD를 사용하여 다음을 수행했습니다.

file.xsl :

<!DOCTYPE xsl:stylesheet[
  <!ENTITY red "rgb(255,0,0)">
]>

<xsl:stylesheet>
   [...]
   <xsl:attribute name="color">&red;</xsl:attribute>
   [...]
</xsl:stylesheet>

모든 것을 XML-Schema로 바꾸고 싶었습니다. 그래서 나는 시도했다 :

file.xsd :

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="red" type="xs:token" fixed="rgb(255,0,0)" />
</xsd:schema>

file.xsl :

<xsl:stylesheet
    xmlns:defs="http://www.w3.org/2001/XMLSchema-instance"
    defs:noNamespaceSchemaLocation="file.xsd">

    [...]
    <xsl:attribute name="color"><defs:red/></xsl:attribute>
    [...]
</xsl:stylesheet>

이제 Xalan Red를 통해 파일을 구문 분석하는 것은 DTD 버전과 같이 번역되지 않습니다. 내 오류는 어디에 있습니까? 구문 분석 프로세스 중에 스키마 파일을 읽지 않습니까?

도움이 되었습니까?

해결책

그만큼 fixed 요소 정의의 속성은 파서에게 텍스트 대체를하도록 지시하지 않습니다. 그것은 단순히 요소의 값이 항상 동일해야 함을 의미합니다.

실제로, 나는 당신의 XSLT가 스키마에 대해 검증되지 않는 XML을 생성한다고 생각합니다. <defs:red> 요소는 "rgb(255,0,0)". 당신이 사용하더라도 default 대신에 fixed, 이것은 텍스트 대체가 아닙니다. 그것은 단지 값이 지정되지 않으면 DOM 인스턴스에서 값이 쿼리 될 때 "로 설정된 값을 찾을 수 있음을 의미합니다.rgb(255,0,0)".

다른 팁

Schemas를 사용하여 DTD가 아닌 구조 규칙을 선언한다고해서 엔티티를 사용하는 것을 배제하지는 않습니다.

선언 된 내용을 대체하기 위해 엔티티 참조를 사용하는 방식은 변경되지 않습니다.

엔티티 참조는 DTD 파일 내에서만 선언 할 필요가 없습니다. XML 파일에서 인라인으로 선언 할 수 있습니다.

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY red "rgb(255,0,0)">
]>
<foo>
  <bar color="&red;" /> 
</foo>

http://www.ibm.com/developerworks/xml/library/x-tipentref.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top