English 中文(简体)
在XML中,对XSD有效的属性
原标题:Validate invalid attribute in XML against the XSD

I want to figure out any invalid elements or attributes in an xml. I have created a XSD file from the xml using Oxygen XML Editor. Now I am trying to parse & validate the xml using the XSD but my xml parses even if I add a new attribute. Below is the code. Now even though I add JUNKATTRIBUTE to my xml, it is getting parsed. Any suggestions?

http://www.ohchr.org。

public static boolean validatehelp(String helpData, helpReport helpReport) {

    SAXParserFactory spf = SAXParserFactory.newInstance();
    SAXParser parser = null;
    spf.setNamespaceAware(true);
    spf.setValidating(true);

    FileReader fileReader = null;
    try {
         SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
         fileReader =  new FileReader("help_xsd.xsd");

         spf.setSchema(sf.newSchema(new SAXSource(new InputSource(fileReader))));
         //spf.setSchema(sf.newSchema(new Source[] {new StreamSource("help_xsd.xsd")}));



        parser = spf.newSAXParser();

        MySAXHandler handler = new MySAXHandler(configReport); 

        parser.parse(new InputSource(new StringReader(helpData)), handler);
        return true;
    }

My xml

<Help date="2020-06-24">
<product
id="en_US_SAN_15.0"
label="orange_16.0"
ProductName="orange 16.0 "
productName="orange 16.0 Pre"
productVersion="15.0"
baseUrl="http://help.stage.xyz.com/"
path="Help/en_US/"
ionId="orange_product_xyzlr"
ionCommentingAllowed="yes"
ionSiteArea="help"
ionRatingAllowed="yes"
ionRatingType="thumbs"
searchOptions="Community|xyz"
searchDefault="Community"
searchxyzRefinement="site=orange_V2_all"
="yes"
/>
<package
id="en_US_SAN_15.0_Using"
label="orange_16.0"
path="SAN/orange/15.0/Using"
description="SAN 15.0"
contextSensitivity="yes"
downloadContent="client.orange_V2_Using_en-us.zip"
downloadContentDefault="yes"
downloadPdf="orange_V4_help.pdf"
JUNKATTRIBUTE="JUNK"
/>
</Help>

<<>My XSD

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="Help">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="product"/>
        <xs:element ref="package"/>
      </xs:sequence>
      <xs:attribute name="appId" />
      <xs:attribute name="date"  type="xs:date"/>
      <xs:attribute name="locale" type="xs:NCName"/>
      <xs:attribute name="pubId" />
      <xs:attribute name="version"  type="xs:decimal"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="product">
    <xs:complexType>
      <xs:attribute name="baseUrl" type="xs:anyURI"/>
      <xs:attribute name="helpServiceUrl" type="xs:anyURI"/>
      <xs:attribute name="id" type="xs:NCName"/>
      <xs:attribute name="ionCommentingAllowed"  type="xs:NCName"/>
      <xs:attribute name="ionId"  type="xs:NCName"/>
      <xs:attribute name="ionRatingAllowed"  type="xs:NCName"/>
      <xs:attribute name="ionRatingType"  type="xs:NCName"/>
      <xs:attribute name="ionSiteArea"  type="xs:NCName"/>
      <xs:attribute name="label" />
      <xs:attribute name="multidomain"  type="xs:NCName"/>
      <xs:attribute name="path" />
      <xs:attribute name="productName"  type="xs:NCName"/>
      <xs:attribute name="productVersion"  type="xs:NCName"/>
      <xs:attribute name="searchxyzRefinement" />
      <xs:attribute name="searchBlueprintRefinement"  type="xs:NCName"/>
      <xs:attribute name="searchCommunityRefinement"  type="xs:NCName"/>
      <xs:attribute name="searchDefault"  type="xs:NCName"/>
      <xs:attribute name="searchOptions" />
    </xs:complexType>
  </xs:element>
  <xs:element name="package">
    <xs:complexType>
      <xs:attribute name="alias" />
      <xs:attribute name="baseUrl"  type="xs:anyURI"/>
      <xs:attribute name="contextSensitivity"  type="xs:NCName"/>
      <xs:attribute name="deprecated"  type="xs:NCName"/>
      <xs:attribute name="description" />
      <xs:attribute name="downloadContent" />
      <xs:attribute name="downloadContentDefault"  type="xs:NCName"/>
      <xs:attribute name="downloadPdf"  type="xs:NCName"/>
      <xs:attribute name="helpmapPath"  type="xs:anyURI"/>
      <xs:attribute name="id"  type="xs:NCName"/>
      <xs:attribute name="label" />
      <xs:attribute name="packageGenerator"  type="xs:NCName"/>
      <xs:attribute name="path" />
      <xs:attribute name="urlParams" />
    </xs:complexType>
  </xs:element>
</xs:schema>
问题回答

如果:

  • It is well formed
  • It conforms to any defined schema types associated with it.

就你而言,xml文件是完整的,没有与之相关的图象。 因此,这是有效的。

如果你想把xml与你联系起来,那么你就需要使用一个名称空间。

声明:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="myNamespaceHere" xmlns="myNamespaceHere">
...
</xs:schema>

页: 1

<Help date="2020-06-24" xmlns="myNamespaceHere">
...
</Help>

现在,当你证实这一点时,你们的教官将知道对科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、技术、科学、科学、科学、科学、科学、科学、技术、科学、科学、科学、技术、科学、科学、科学、科学、科学、科学、技术、科学、科学、科学、科学、技术、科学、科学、科学、科学、科学、技术、科学、科学、科学、科学、科学、科学、技术、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、技术、科学、科学、科学、科学、技术、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、技术、技术、科学、科学、科学、科学、科学、科学、技术、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、科学、技术和科学、技术、技术、技术、技术、技术、

<>>>>>

正如Petrou在评论中指出的,从XSD 有效性的观点来看,这一有效性并不正确。 实际不需要名称空间才能进行验证,但如不要求使用名称空间,则需要扫描符号elementFormDefault。 应规定“无资格”来标明图谋中的类型,无须限定名称。

然而,XSD教区通常无视没有名称空间的图象,这就是为什么从教区的观点来看,非名称的Xml检查总是作为“有效”的回报(只要其形成良好)。

根据你提供的守则,你的XML应当根据所提供的图表加以验证,然而,由于你没有列入关于<代码>MySAXHandler的定义,因此很难知道你是否读了handling<>。 错误发生时。

除致命错误外,还将通过打电话<代码>报告其他确认错误。 DefaultHandler.error() methods with a SAXParseException. 如果你想要处理验证错误,你就需要采用这种方法。 类似:

class MyHandler extends DefaultHandler {
    public void error(SAXParseException exception) throws SAXParseException {
        throw exception;
    }
}

有了这一手稿定义(加上你的代码其余部分),请见<代码>parse。 throw code cept cept cept

http://docs.oracle.com/javase/6/docs/api/org/xml/sax/ErrorHandler.html





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签