【发布时间】:2017-03-04 17:27:37
【问题描述】:
试图了解 XML Schema Augmentation 的工作原理。
从此链接引用: https://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
2.1 XML Schema 概述 XML Schema 由类型定义和元素声明等组件组成。这些可用于评估格式良好的元素和属性信息项(如 [XML-Infoset] 中定义)的有效性,并且还可以指定对这些项及其后代的扩充。 这种扩充使原始文档中可能隐含的显式信息,例如属性和元素的规范化和/或默认值以及元素和属性信息项的类型。
从此链接: https://www.ibm.com/developerworks/library/x-javaxmlvalidapi/#validation
有些架构不仅仅进行验证。除了为文档是否有效的问题提供真假答案外,它们还为文档增加了额外的信息。例如,它们可以提供默认属性值。 他们还可能将 int 或 gYear 等类型分配给元素或属性。验证器可以创建这样的类型增强文档并将它们写入 javax.xml.transform.Result 对象。
所以我假设如果我根据模式验证 XML 文档,它将生成一个增强的 XML 文档:
<thisIsAstring>Abc</thisIsAstring>
变成
<thisIsAstring type="String">Abc</thisIsAstring>
以上假设,因为我还没有让它工作。
当我执行以下代码时,结果包含或多或少与源相同。
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder parser = dbf.newDocumentBuilder();
Document document = parser.parse(new InputSource(new StringReader(inputMessage)));
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Source schemaSource = new SAXSource(new InputSource(new StringReader(inputSchema)));
Schema schema = factory.newSchema(schemaSource);
Validator validator = schema.newValidator();
DOMResult result = new DOMResult();
DOMSource source = new DOMSource(document);
validator.validate(source,result);
为什么没有增加结果?我错过了什么?
【问题讨论】: