XML Schema扩充

时间:2017-03-03 15:27:27

标签: java xml schema

尝试理解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);

为什么结果没有增加?我错过了什么?

1 个答案:

答案 0 :(得分:0)

架构验证程序(PSVI属性)添加到文档树的额外属性不是属性。它们的添加方式和访问方式因架构处理器而异,您可能需要使用API​​请求此处理。对于Xerces,有关于如何访问PSVI的信息:

http://xerces.apache.org/xerces2-j/faq-xs.html

如果使用Saxon作为模式验证器,则可以将结果捕获为树,其中NodeInfo.getSchemaType()方法返回节点的类型注释(但是,Saxon不提供完整的PSVI,只提供部分由XSLT和XQuery规范强制要求的PSVI。)