【问题标题】:XML Schema AugmentationXML 模式增强
【发布时间】: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);

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

【问题讨论】:

    标签: java xml schema


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多