XML模式增强



试图了解XML模式增强的工作方式。

引用此链接:https://www.w3.org/tr/2001/rec-xmlschema-1-20010502/

2.1 XML模式的概述 XML模式由类型定义和元素声明之类的组件组成。这些可用于评估形成良好的元素和属性信息项的有效性(如[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);

为什么结果不增加?我想念什么?

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

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

如果将撒克逊人用作模式验证器,则可以将结果捕获为nodeinfo.getschematype()方法的树,返回节点的类型注释(但是,萨克森没有提供完整的psvi,只有零件,只有部分XSLT和Xquery规范规定的PSVI。)

最新更新