使用XSD / trang HTML进行Java HTML 5validation5放宽NG到XSD的转换

我的目标是在java中使用XSD架构进行独立的HTML 5标记validation。

在下面我描述我的方法。 任何帮助都表示赞赏 – 如果有替代或更好的方法可以做到这一点。

WHATTF发布了针对HTML 5的Relax NG / Schematron模式 。

Trang [3]是一个用于不同XML模式语言的开源转换器,应该能够从Relax NG转换为XSD。 使用WHATTF模式,可以按如下方式调用trang转换器:

$ java -jar ./trang.jar ./whattf/syntax/relaxng/html5.rnc html5.xsd 

但是,trang会因错误的类型转换而产生以下许多变形:

 whattf/syntax/relaxng/applications.rnc:265:51: warning: cannot convert datatype library "http://whattf.org/datatype-draft"; using datatype "string" [...] 

我认为要让trang工作,需要将pluggable-datatypes [4]传递给jing。 Jing [5]是一个Relax NGvalidation器,我认为它是由trang使用的。

在whattf / syntax / relaxng / datatype文件夹中,提供了这些pluggable-datatypes的java实现。 因此,我创建了一个html5-datatypes.jar并将其添加到trangs类路径中,如下所示:

 $ java -cp ./html5-datatypes.jar -jar ./trang.jar ./whattf/syntax/relaxng/html5.rnc html5.xsd 

但是,这会导致相同的错误。

除此之外,使用创建的XSD文件和javax.xml.validation.Validator ,如下所示:

 SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); Schema schema = schemaFactory.newSchema( new File("html5.xsd") ); Validator validator = schema.newValidator(); validator.validate( new StreamSource( new File("example.html") ) ); 

产生例外:

 org.xml.sax.SAXParseException: cos-element-consistent: Error for type 'time.inner'. Multiple elements with name 'script', with different types, appear in the model group. at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.xs.XSConstraints.reportSchemaError(Unknown Source) at org.apache.xerces.impl.xs.XSConstraints.fullSchemaChecking(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source) at org.apache.xerces.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source) at org.apache.xerces.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source) at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:594) at javax.xml.validation.SchemaFactory.newSchema(SchemaFactory.java:610) 

[3] thaiopensource.com/relaxng/trang.html

[4] thaiopensource.com/relaxng/pluggable-datatypes.html

[5] thaiopensource.com/relaxng/jing.html

来自html5规范的8.2节

http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html

虽然本说明书中描述的HTML语法与SGML和XML非常相似,但它是一种具有自己的解析规则的单独语言。

一些早期版本的HTML(特别是从HTML2到HTML4)基于SGML并使用了SGML解析规则。 但是,很少(如果有的话)Web浏览器曾经为HTML文档实现了真正的SGML解析; 作为SGML应用程序严格处理HTML的唯一用户代理历来是validation器。 由此产生的混淆 – validation者声称文档具有一个表示,而广泛部署的Web浏览器可互操作地实现不同的表示 – 已经浪费了数十年的生产力。 因此,此版本的HTML返回到非SGML基础。

鼓励有兴趣在其创作管道中使用SGML工具的作者使用XML工具和HTML的XML序列化。

因此,除非您正在编写xml形成的html5,否则您无法使用XSD来validationhtml5。

Web上似乎有一些XHTML 5 XSD。 例如,有一个开源的XHTML 5 Schema: http : //www.xmlmind.com/xmleditor/download.shtml