2017-09-10 5 views
1

data-*과 같은 동적 속성 이름으로 XML의 유효성을 검사해야합니다. 이제 RelaxNG 스키마를 사용했지만 동적 특성 이름은 지원하지 않습니다. 옵션은 무엇입니까?HTML5 data- * 속성을 사용하여 문서의 유효성을 검사하는 방법은 무엇입니까?

<?xml version="1.0" encoding="utf-8"?> 
<body xml:lang="cs" ns="www.x.y"> 
    <h id="x" ctime="2017-09">Heading..</h> 
    <desc kw="kw">Desc..</desc> 
    <section> 
    <h data-foo="bar" id="one" short="One">First heading</h> 
    <desc>Desc...</desc> 
    <p>Content..</p> 
    <ul data-buz="fuz"> 
     <li data-switch="click">list item</li> 
     <li>list item 2</li> 
    </ul> 
    </section> 
</body> 
+0

XML에서 예제를 제공 할 수 있습니까? –

+0

@ RaymondNijland 예, 물론, 제 질문을 편집했습니다. – Pavel

답변

4

미리 처리 유효성 검사 기능을 제공하기 전에 data-* 속성을 드롭 할 수있는 XML : 나는 ... XML의

예를 아무 관련 찾을 수 없습니다. 그렇지 않으면 RelaxNG 또는 다른 문법 기반 스키마 언어로 유효성을 검사하는 방법을 알 수 없습니다.

지금까지 XML을 전처리로, 하나의 방법은 기존의 XML 툴 체인이 될 것으로 그렇게합니다 :

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'> 
    <xsl:output method="xml" indent="no"/> 
    <xsl:template match="node() | @*"> 
    <xsl:copy> 
     <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
    </xsl:template> 
    <xsl:template match="@*[starts-with(name(), 'data-')]"/> 
</xsl:stylesheet> 
다음 data-* 속성을 삭제하지만,있는 그대로 모든 사람에 통과 XSLT 변환을 통해 실행

<xsl:template match="@*[starts-with(name(), 'data-')]"/>은 중요한 부분입니다. 이로 인해 data-* 속성이 바닥에 떨어집니다. 나머지 XSL 스타일 시트는 소스 XML의 다른 모든 것을 전달하는 기본적인 "식별 변환"입니다.

W3C Nu Html Checker (HTML5 유효성 검사기) 백엔드는 기능적으로 XSLT 변환과 동일하지만 Java로 작성된 data-* 속성에 대한 작업을 수행합니다. 당신이 궁금하다면, 그것을위한 코드는 여기 the GitHub repo for the W3C Nu Html Checker sources에 있습니다 :

https://github.com/validator/validator/tree/master/src/nu/validator/xml/dataattributes

그것은 본질적으로 검증 기능 이전에 구문 분석 시간 오프 구문 분석 이벤트에서 작동하는 SAX 필터의 the filterAttributes code in DataAttributeDroppingContentHandlerWrapper.java

를 참조하십시오.

당신도 더 있다면 그리고, 다른 전처리 필터 비슷한 일 수행하는 코드 호기심이 : the accompanying RelaxNG grammar가에서 요소를 허용하는 특별한 공간에서 그들을 넣어

에서 그 template 하위 트리에있는 모든 검사를 수행해야 할 필요가 당신은 일반적인 아이디어를 얻을, 어쨌든 없다 : 유효성 검사 로직을 표현할 수없는 소스에서 마크 업 구조의 경우가있는 경우 RelaxNG 또는 XSD의 경우 원본을 필터링 (전처리)하여 유효성 검사 기능에서 해당 마크 업을 숨 깁니다.