我想获取一个包含重新定义元素的XSD文件,其中另一个schemaLocation为String,其中已经处理了重定义(该字符串应代表合并的2个XSD文件)。 这甚至可能吗?
(我使用的是Xerces2-j - > java)
我无法从Schema生成Document或有效字符串:
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" ));
答案 0 :(得分:0)
首先让我们看看我能否根据我的理解来解释你的问题。
假设您有架构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平台无法访问)。