【问题标题】:XML Schema file to StringXML 模式文件到字符串
【发布时间】:2013-09-26 23:24:21
【问题描述】:

我想获取一个 XSD 文件,其中包含一个重新定义元素和另一个 schemaLocation 到一个字符串,其中重新定义已经被处理(该字符串应该代表合并的 2 个 XSD 文件)。 这甚至可能吗?

(我正在使用 Xerces2-j --> java)

我无法从架构生成文档或有效字符串:

SchemaFactory schemaFactory = 
  SchemaFactory.newInstance("http://www.w3.org/XML/XMLSchema/v1.1");
Schema schemaXSD = schemaFactory.newSchema( new File ( "example.xsd" ) );

或者让 XML 解析器处理重定义(这会将重定义加载为节点而不打开/加载第二个文件):

DocumentBuilderFactory parserFactory = DocumentBuilderFactory.newInstance();
parserFactory.setNamespaceAware(true);
DocumentBuilder parser = parserFactory.newDocumentBuilder();
return parser.parse(new File ( "example.xsd" ));

【问题讨论】:

    标签: java xml xsd schema


    【解决方案1】:

    让我们先看看我是否可以根据我的理解来说明你的问题。

    假设您有架构 A.xsd:

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
    <xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:complexType name="Base">
            <xsd:sequence>
                <xsd:element name="First"/>
            </xsd:sequence>
        </xsd:complexType>  
    </xsd:schema>
    

    还有一个重新定义的(B重新定义A):

    <?xml version="1.0" encoding="utf-8"?>
    <!--XML Schema generated by QTAssistant/XSR Module (http://www.paschidev.com)-->
    <xsd:schema xmlns="[{no target namespace}]" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="[{no target namespace}]" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:redefine schemaLocation="A.xsd">
            <xsd:complexType name="Base">
                <xsd:complexContent>
                    <xsd:extension base="Base">
                        <xsd:sequence>
                            <xsd:element name="Second" minOccurs="0"/>
                        </xsd:sequence>
                    </xsd:extension>
                </xsd:complexContent>
            </xsd:complexType>
        </xsd:redefine>
    </xsd:schema>
    

    我对你a String, where the redefine is already handled (The string should represent the merged 2 XSD files)的说法的理解是下面这个:

    <?xml version="1.0" encoding="utf-8"?>
    <!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
    <xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <xsd:annotation>
            <xsd:documentation xmlns="">Generated from "Set1" under "Release1"</xsd:documentation>
        </xsd:annotation>
        <xsd:complexType name="Base">
            <xsd:sequence>
                <xsd:element name="First" type="xsd:anyType"/>
                <xsd:element minOccurs="0" name="Second" type="xsd:anyType"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:schema>
    

    如果这就是您要问的,那么我不知道有任何 Java 解决方案会自动执行请求的重构。有可能做到;据我所知,您必须自己编写代码。

    我知道的唯一一个专门设计用于涵盖您的场景的工具是我与之关联的工具,但它仅在 .NET 上运行(最近它需要 .NET 4.0,这使得 Mono 平台遥不可及)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      相关资源
      最近更新 更多