尝试理解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);
为什么结果没有增加?我错过了什么?
答案 0 :(得分:0)
架构验证程序(PSVI属性)添加到文档树的额外属性不是属性。它们的添加方式和访问方式因架构处理器而异,您可能需要使用API请求此处理。对于Xerces,有关于如何访问PSVI的信息:
http://xerces.apache.org/xerces2-j/faq-xs.html
如果使用Saxon作为模式验证器,则可以将结果捕获为树,其中NodeInfo.getSchemaType()方法返回节点的类型注释(但是,Saxon不提供完整的PSVI,只提供部分由XSLT和XQuery规范强制要求的PSVI。)