xsd验证失败

时间:2016-12-16 05:26:15

标签: java xml validation xsd

我的xml验证失败,原因如下:

  

无法执行目标se.ericsson.jcat.ebs:xml-validation-plugin:1.0.2:验证(默认)项目ebs-extensions:无法执行mojo:解析/ home / xchoshu / latestWorkspace / ebs -extensions / src / main / resources / log4j2.xml,文件:/home/xchoshu/latestWorkspace/ebs-extensions/src/main/resources/log4j.xsd,第18行,第64列:src-resolve.4.1:错误解析组件' ConfigurationType'。检测到' ConfigurationType'没有名称空间,但没有目标名称空间的组件不能从模式文档&file文件中引用:/home/xchoshu/latestWorkspace/ebs-extensions/src/main/resources/log4j.xsd'。如果' ConfigurationType'意图具有命名空间,可能需要提供前缀。如果打算使用' ConfigurationType'没有命名空间,然后导入'没有"命名空间"属性应添加到'文件:/home/xchoshu/latestWorkspace/ebs-extensions/src/main/resources/log4j.xsd'。 - > [帮助1]

我的xds看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at
      http://www.apache.org/licenses/LICENSE-2.0
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://logging.apache.org/log4j/2.0/config" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="Configuration" type="ConfigurationType"/>
    <xs:complexType name="ConfigurationType">
        <xs:sequence>
            <xs:choice minOccurs="0" maxOccurs="1">
                <xs:element name="CustomLevels" type="CustomLevelsType"/>
                <xs:element name="CustomLevel" type="CustomLevelType"/>
            </xs:choice>
            <xs:element name="Properties" type="PropertiesType"/>
            <xs:choice minOccurs="0" maxOccurs="1">
                <xs:element name="Filters" type="FiltersType"/>
                <xs:element name="Filter" type="FilterType"/>
            </xs:choice>
            <xs:element name="ThresholdFilter" type="ThresholdFilterType"/>
            <xs:element name="Appenders" type="AppendersType"/>
            <xs:element name="Loggers" type="LoggersType"/>
        </xs:sequence>
        <xs:attribute name="packages" type="xs:string"/>
        <xs:attribute name="status" type="xs:string"/>
        <xs:attribute name="strict" type="xs:string"/>
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="advertiser" type="xs:string"/>
        <xs:attribute name="schema" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="PropertiesType">
        <xs:sequence>
            <xs:element name="Property" type="PropertyType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="AppenderType">
        <xs:sequence>
            <xs:element name="Layout" type="LayoutType" minOccurs="0"/>
            <xs:choice minOccurs="0" maxOccurs="1">
                <xs:element name="Filters" type="FiltersType"/>
                <xs:element name="Filter" type="FilterType"/>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="type" type="xs:string" use="required"/>
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="fileName" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="RootType">
        <xs:sequence>
            <xs:element name="AppenderRef" type="AppenderRefType" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="level" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="PropertyType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="name" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="KeyValuePairType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="key" type="xs:string"/>
                <xs:attribute name="value" type="xs:string"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="AppendersType">
        <xs:sequence>
            <xs:element name="Appender" type="AppenderType" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="AppenderRefType">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="ref" type="xs:string" use="required"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="LoggerType">
        <xs:sequence>
            <xs:choice minOccurs="0" maxOccurs="1">
                <xs:element name="Filters" type="FiltersType"/>
                <xs:element name="Filter" type="FilterType"/>
            </xs:choice>
            <xs:element name="AppenderRef" type="AppenderRefType"/>
        </xs:sequence>
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="level" type="xs:string" use="optional"/>
        <xs:attribute name="additivity" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="FilterType" mixed="true">
        <xs:sequence>
            <xs:element name="KeyValuePair" type="KeyValuePairType" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="type" type="xs:string" use="required"/>
        <xs:attribute name="level" type="xs:string" use="optional"/>
        <xs:attribute name="marker" type="xs:string" use="optional"/>
        <xs:attribute name="onMatch" type="xs:string" use="optional"/>
        <xs:attribute name="onMismatch" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="FiltersType">
        <xs:sequence>
            <xs:element name="Filter" type="FilterType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="CustomLevelType">
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="intLevel" type="xs:string" use="required"/>
    </xs:complexType>
    <xs:complexType name="CustomLevelsType">
        <xs:sequence>
            <xs:element name="CustomLevel" type="CustomLevelType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LoggersType" mixed="true">
        <xs:sequence>
            <xs:element name="Logger" type="LoggerType" minOccurs="0" maxOccurs="unbounded"/>
            <xs:element name="Root" type="RootType" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="LayoutType" mixed="true">
        <xs:sequence>
            <xs:element name="Pattern" type="xs:string" minOccurs="0"/>
        </xs:sequence>
        <xs:attribute name="type" type="xs:string" use="required"/>
        <xs:attribute name="pattern" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="ThresholdFilterType">
        <xs:attribute name="level" type="xs:string" use="optional"/>
        <xs:attribute name="onMatch" type="xs:string" use="optional"/>
        <xs:attribute name="onMismatch" type="xs:string" use="optional"/>
    </xs:complexType>
</xs:schema>

我的xml看起来像:

 <Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://logging.apache.org/log4j/2.0/config"
    xsi:schemaLocation="http://logging.apache.org/log4j/2.0/config https://ei-switching.rnd.ki.sw.ericsson.se/browser/jcat-bsp/log4j.xsd">

    <Appenders>
        <Console name="JCATDefaultConsoleAppender" target="SYSTEM_OUT"
            follow="true">
            <PatternLayout pattern="%d{default} %m [%t] %l%n%ex{full}" />
        </Console>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="JCATDefaultConsoleAppender" />
        </Root>
    </Loggers>

任何人都可以帮我纠正xsd。 TIA

此致 Shubhankar

1 个答案:

答案 0 :(得分:0)

XSD缺少名称空间声明 xmlns =“http://logging.apache.org/log4j/2.0/config”。这使得XSD有效。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns="http://logging.apache.org/log4j/2.0/config" 
           targetNamespace="http://logging.apache.org/log4j/2.0/config" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
    <xs:element name="Configuration" type="ConfigurationType"/>

但是你的XML文件有很多问题

enter image description here

您缺少强制性元素属性 ThresholdFilters Appenders 应至少包含1个 Appender (不是控制台

示例文档看起来像这样

<?xml version="1.0" encoding="utf-8"?>
<!-- Created with Liquid XML 2017 Liquid Studio - Data Designer Edition 15.0.0.6978 (https://www.liquid-technologies.com) -->
<ns:Configuration xmlns:ns="http://logging.apache.org/log4j/2.0/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://logging.apache.org/log4j/2.0/config C:\Temp\StackOverflow\41177776\Schema.xsd" packages="string" status="string" strict="string" name="string" advertiser="string" schema="string">
    <ns:CustomLevels><!--optional-->
        <ns:CustomLevel name="string" intLevel="string" />
        <ns:CustomLevel name="string" intLevel="string" />
        <ns:CustomLevel name="string" intLevel="string" />
    </ns:CustomLevels>
    <ns:Properties>
        <ns:Property>string</ns:Property>
        <ns:Property>string</ns:Property>
    </ns:Properties>
    <ns:Filters><!--optional-->
        <ns:Filter type="string" level="string" marker="string" onMatch="string" onMismatch="string">
            <ns:KeyValuePair key="string" value="string">string</ns:KeyValuePair>
        </ns:Filter>
    </ns:Filters>
    <ns:ThresholdFilter level="string" onMatch="string" onMismatch="string" />
    <ns:Appenders>
        <ns:Appender type="string" name="string" fileName="string" />
        <ns:Appender type="string" name="string" />
    </ns:Appenders>
    <ns:Loggers>
        <ns:Logger name="string" level="string" additivity="string">
            <ns:AppenderRef ref="string">string</ns:AppenderRef>
        </ns:Logger>
        <ns:Root>
            <ns:AppenderRef ref="string">string</ns:AppenderRef>
        </ns:Root>
    </ns:Loggers>
</ns:Configuration>