問題: XSLT を介してかなりの量の XML を生成するサービスがいくつかあります。XSD はありません。時間をかけて XSD を作成しましたが、それらが正しいことを確認したいと思います。現在、XSD と XML が正しく検証されていることを確認しようとしています。
問題: すべての xsd にインポートされる xsd(common.xsd) があります。まだ公にホストされていないため、つい最近になって、common.xsd のフル パスを AccountList.xsd に入れることを発見し、さらに先に進むことができました。私は今、次のものを受け取っています:
org.xml.sax.SAXParseException; 行番号: 9; 列番号: 70; s4s-att-invalid-value: 要素「element」の「type」の属性値が無効です。記録された理由: UndeclaredPrefix: 'common:response' を QName として解決できません: プレフィックス 'common' が宣言されていません。
私は途方に暮れています。フォーラムで質問された例や、成功したソース コード スニペットが見つかりません。これを取得してxmlを正常に検証するための支援をいただければ幸いです。
共通.xsd
<xs:schema  version="1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"
        xmlns="http://www.myorg.com/xsd/gen_fin"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://www.myorg.com/xsd/gen_fin">
    <xs:complexType name="response">
        <xs:sequence>
            <xs:element name="code" type="xs:string"/>
            <xs:element name="description" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
AccountList.xsd
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema  version="1.0" elementFormDefault="qualified" attributeFormDefault="unqualified"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            xmlns:tns="http://www.myorg.com/xsd/accList"
            targetNamespace="http://www.myorg.com/xsd/accList"
            xmlns:common="http://www.myorg.com/xsd/gen_fin">
    <xs:import namespace="http://www.myorg.com/xsd/gen_fin" 
               schemaLocation="/home/me/dev/projects/svn/myorg/xsd/src/main/resources/bg/gen_resp/common.xsd"/>
    <xs:element name="fundamo">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="response" type="common:response" minOccurs="1" maxOccurs="1"/>
                <xs:element name="transaction" type="tns:transaction" minOccurs="0" maxOccurs="1"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="transaction">
        <xs:sequence>
            <xs:element name="transactionRef" type="xs:string"/>
            <xs:element name="dateTime" type="xs:string"/>
            <xs:element name="userName" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
テスト.java
final InputStream commonXsdStream = getXsd(BG_GEN_RESP_XSD_PATH, COMMON);
ClassPathResource fullXsdListing = new ClassPathResource(BG_GEN_RESP_XSD_PATH);
File[] allXsds = fullXsdListing.getFile().listFiles();
for (File currentXsd : allXsds) {
    final int filenameLength = currentXsd.getName().length();
    final String filenameSanExt = currentXsd.getName().substring(0, filenameLength - 4);
    if (!IGNORE.contains(filenameSanExt)) {
        final InputStream xsltStream = getXslt(BG_GEN_RESP_XSLT_PATH, filenameSanExt);
        final InputStream xsdStream = getXsd(BG_GEN_RESP_XSD_PATH, filenameSanExt);
        TransformerFactory xmlTransformer = TransformerFactory.newInstance();
        Templates xsltTemplate = xmlTransformer.newTemplates(new StreamSource(xsltStream));
        final XSLToXMLConvertor converter = new XSLToXMLConvertor();
        String generatedXml = converter.getXML(inputData, xsltTemplate);
        LOG.info(generatedXml);
        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = schemaFactory.newSchema(lnew StreamSource(xsdStream));
        Validator validator = schema.newValidator();
        validator.validate(new StreamSource(new StringReader(generatedXml)));
        /*
        DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        docBuilderFactory.setNamespaceAware(true);
        docBuilderFactory.setValidating(true);
        DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
        docBuilder.parse(new InputSource(new ByteArrayInputStream(generatedXml.getBytes("utf-8"))));
        */
        }
    }
}