Most visited

Recently visited

Added in API level 8

SchemaFactory

public abstract class SchemaFactory
extends Object

java.lang.Object
   ↳ javax.xml.validation.SchemaFactory


创建Schema对象的工厂。 验证API的入口点。

SchemaFactory是一个模式编译器。 它读取模式的外部表示并准备进行验证。

SchemaFactory类不是线程安全的。 换句话说,应用程序的责任是确保至多有一个线程在任何给定的时刻都使用一个对象SchemaFactory 我们鼓励实施方法将方法标记为synchronized,以保护自己免受破坏的客户端的侵害。

SchemaFactory不可重入。 当调用newSchema方法中的一个时,应用程序可能不会试图以递归方式调用newSchema方法,即使是从同一个线程也是如此。

Schema Language

该规范使用名称空间URI来指定模式语言。 下表显示了本规范定义的值。

为了符合规范,实现只需要支持W3C XML Schema 1.0。 但是,如果它选择支持此处列出的其他模式语言,则它必须符合本规范中描述的相关行为。

这里没有列出的模式语言预计会引入自己的URI来表示自己。 SchemaFactory类能够在运行时为其他模式语言定位其他实现。

请注意,由于XML DTD与解析过程紧密相关,并且对解析过程有重大影响,因此不可能将DTD验证定义为独立于解析的过程。 由于这个原因,本规范没有定义XML DTD的语义。 这并不禁止实施者以他们认为合适的方式实现它,但是警告用户,在这个接口上实现的任何DTD验证都必须偏离XML 1.0中定义的XML DTD语义

value language
W3C_XML_SCHEMA_NS_URI ("http://www.w3.org/2001/XMLSchema") W3C XML Schema 1.0
RELAXNG_NS_URI ("http://relaxng.org/ns/structure/1.0") RELAX NG 1.0

Summary

Protected constructors

SchemaFactory()

派生类的构造函数。

Public methods

abstract ErrorHandler getErrorHandler()

获取当前 ErrorHandler设置为这个 SchemaFactory

boolean getFeature(String name)

查找功能标志的值。

Object getProperty(String name)

查找一个属性的值。

abstract LSResourceResolver getResourceResolver()

获取当前 LSResourceResolver设置为这个 SchemaFactory

abstract boolean isSchemaLanguageSupported(String schemaLanguage)

SchemaFactory是否支持指定的模式?

static SchemaFactory newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)

返回 SchemaFactory的命名实现的 SchemaFactory

static SchemaFactory newInstance(String schemaLanguage)

查找支持指定模式语言并返回的 SchemaFactory的实现。

Schema newSchema(File schema)

将指定的 File解析为模式并将其作为 Schema返回。

Schema newSchema(Source schema)

将指定的源解析为模式并将其作为模式返回。

abstract Schema newSchema()

创建一个特殊的 Schema对象。

abstract Schema newSchema(Source[] schemas)

将指定的源分析为模式并将其作为模式返回。

Schema newSchema(URL schema)

将指定的 URL解析为架构并将其作为 Schema返回。

abstract void setErrorHandler(ErrorHandler errorHandler)

ErrorHandler设置为接收 newSchema方法调用期间遇到的错误。

void setFeature(String name, boolean value)

设置功能标志的值。

void setProperty(String name, Object object)

设置属性的值。

abstract void setResourceResolver(LSResourceResolver resourceResolver)

设置 LSResourceResolver以在解析模式时自定义资源解析。

Inherited methods

From class java.lang.Object

Protected constructors

SchemaFactory

Added in API level 8
SchemaFactory ()

派生类的构造函数。

构造函数什么都不做。

派生类必须创建 SchemaFactory对象,其中包含 null ErrorHandlernull LSResourceResolver

Public methods

getErrorHandler

Added in API level 8
ErrorHandler getErrorHandler ()

获取当前 ErrorHandler设置为这个 SchemaFactory

Returns
ErrorHandler This method returns the object that was last set through the setErrorHandler(ErrorHandler) method, or null if that method has never been called since this SchemaFactory has created.

也可以看看:

getFeature

Added in API level 8
boolean getFeature (String name)

查找功能标志的值。

功能名称是任何完全限定的URI。 SchemaFactory可能识别功能名称,但暂时无法返回其值。

实施者可以免费(并鼓励)使用自己的URI构建自己的特性。

Parameters
name String: The feature name, which is a non-null fully-qualified URI.
Returns
boolean The current value of the feature (true or false).
Throws
SAXNotRecognizedException If the feature value can't be assigned or retrieved.
SAXNotSupportedException When the SchemaFactory recognizes the feature name but cannot determine its value at this time.
NullPointerException if the name parameter is null.

也可以看看:

getProperty

Added in API level 8
Object getProperty (String name)

查找一个属性的值。

属性名称是任何完全限定的URI。 SchemaFactory可能会识别属性名称,但暂时无法返回其值。

SchemaFactory不需要识别任何特定的属性名称。

Implementers are free (and encouraged) to invent their own properties, using names built on their own URIs.

Parameters
name String: The property name, which is a non-null fully-qualified URI.
Returns
Object The current value of the property.
Throws
SAXNotRecognizedException If the property value can't be assigned or retrieved.
SAXNotSupportedException When the XMLReader recognizes the property name but cannot determine its value at this time.
NullPointerException if the name parameter is null.

也可以看看:

getResourceResolver

Added in API level 8
LSResourceResolver getResourceResolver ()

获取当前 LSResourceResolver设置为这个 SchemaFactory

Returns
LSResourceResolver This method returns the object that was last set through the setResourceResolver(LSResourceResolver) method, or null if that method has never been called since this SchemaFactory has created.

也可以看看:

isSchemaLanguageSupported

Added in API level 8
boolean isSchemaLanguageSupported (String schemaLanguage)

SchemaFactory是否支持指定的模式?

Parameters
schemaLanguage String: Specifies the schema language which the returned SchemaFactory will understand. schemaLanguage must specify a valid schema language.
Returns
boolean true if SchemaFactory supports schemaLanguage, else false.
Throws
NullPointerException If schemaLanguage is null.
IllegalArgumentException If schemaLanguage.length() == 0 or schemaLanguage does not specify a valid schema language.

newInstance

Added in API level 9
SchemaFactory newInstance (String schemaLanguage, 
                String factoryClassName, 
                ClassLoader classLoader)

返回 SchemaFactory的命名实现的 SchemaFactory

Parameters
schemaLanguage String
factoryClassName String
classLoader ClassLoader
Returns
SchemaFactory
Throws
IllegalArgumentException if factoryClassName is not available, cannot be instantiated, or doesn't support schemaLanguage.

newInstance

Added in API level 8
SchemaFactory newInstance (String schemaLanguage)

查找支持指定模式语言并返回的 SchemaFactory的实现。

要为给定模式语言查找 SchemaFactory对象,此方法按以下顺序查找以下位置,其中“类加载器”引用上下文类加载器:

  1. If the system property "javax.xml.validation.SchemaFactory:schemaLanguage" is present (where schemaLanguage is the parameter to this method), then its value is read as a class name. The method will try to create a new instance of this class by using the class loader, and returns it if it is successfully created.
  2. $java.home/lib/jaxp.properties is read and the value associated with the key being the system property above is looked for. If present, the value is processed just like above.
  3. 要求类加载器在资源目录META-INF / services中找到匹配javax.xml.validation.SchemaFactory服务提供者提供程序配置文件。 有关文件格式和解析规则,请参阅JAR文件规范。 每个潜在的服务提供商都需要实施该方法:

            isSchemaLanguageSupported(String)
         
    The first service provider found in class loader order that supports the specified schema language is returned.
  4. Platform default SchemaFactory is located in a implementation specific way. There must be a platform default SchemaFactory for W3C XML Schema.

如果一切都失败了,将会抛出 IllegalArgumentException

故障排除提示:

有关属性文件的解析方式,请参见load(java.io.InputStream) 特别是,冒号':'需要在属性文件中转义,所以确保模式语言URI能够正确转义。 例如:

 http\://www.w3.org/2001/XMLSchema=org.acme.foo.XSSchemaFactory
 

Parameters
schemaLanguage String: Specifies the schema language which the returned SchemaFactory will understand. See the list of available schema languages for the possible values.
Returns
SchemaFactory New instance of a SchemaFactory
Throws
IllegalArgumentException If no implementation of the schema language is available.
NullPointerException If the schemaLanguage parameter is null.

newSchema

Added in API level 8
Schema newSchema (File schema)

将指定的 File解析为模式并将其作为 Schema返回。

这是一个方便 newSchema(Source)方法。

Parameters
schema File: File that represents a schema.
Returns
Schema New Schema from parsing schema.
Throws
SAXException If a SAX error occurs during parsing.
NullPointerException if schema is null.

newSchema

Added in API level 8
Schema newSchema (Source schema)

将指定的源解析为模式并将其作为模式返回。

这是一个方便 newSchema(Source[])方法。

Parameters
schema Source: Source that represents a schema.
Returns
Schema New Schema from parsing schema.
Throws
SAXException If a SAX error occurs during parsing.
NullPointerException if schema is null.

newSchema

Added in API level 8
Schema newSchema ()

创建一个特殊的 Schema对象。

返回的 Schema对象的确切语义取决于此 SchemaFactory创建的模式语言。

此外,允许实现使用特定于实现的属性/特性来更改此方法的语义。

W3C XML Schema 1.0

对于XML Schema,此方法创建一个 Schema对象,该对象通过使用文档中指定的位置提示来执行验证。

返回的Schema对象假定如果文档引用架构位置提示中的相同URL,则它们将始终解析为相同的架构文档。 这个假设允许实现重用模式文档的分析结果,以便针对相同模式的多个验证运行得更快。

请注意,架构位置提示的使用引入了拒绝服务攻击的漏洞。

RELAX NG

RELAX NG不支持此操作。

Returns
Schema Always return non-null valid Schema object.
Throws
UnsupportedOperationException If this operation is not supported by the callee.
SAXException If this operation is supported but failed for some reason.

newSchema

Added in API level 8
Schema newSchema (Source[] schemas)

将指定的源分析为模式并将其作为模式返回。

被调用者将读取所有的Source ,并将它们组合成一个模式。 组合的确切语义取决于为此SchemaFactory对象创建的模式语言。

当设置了ErrorHandler ,被调用者会将所有在源中找到的错误报告给处理程序。 如果处理程序抛出异常,它将中止模式编译,并且将从此方法抛出相同的异常。 此外,在向处理程序报告错误之后,允许被调用方抛出进一步处理。 如果未设置错误处理程序,则被调用程序将抛出它在源中找到的第一个错误。

W3C XML Schema 1.0

生成的模式包含来自指定源的组件。 如果所有这些源都是使用适当的schemaLocation和namespace值导入到具有不同targetNamespace并且没有它自己的组件的单个模式文档(如果导入元素的顺序与源相同),则可以实现相同的结果。 XML Schema建议的4.2.3节描述了处理器在这方面的选项。 虽然处理器在处理JAXP模式源和XML模式导入时应保持一致,但符合JAXP的解析器之间的行为可能会有所不同; 特别是,无论schemaLocation中提供的信息如何,解析器都可以选择忽略除给定名称空间的第一个<import>之外的所有内容。

如果已解析的模式集包含XML Schema规范第5.1节中指定的错误,则必须将错误报告给 ErrorHandler

RELAX NG

对于RELAX NG,这种方法必须抛出 UnsupportedOperationException如果 schemas.length!=1。

Parameters
schemas Source: inputs to be parsed. SchemaFactory is required to recognize StreamSource, SAXSource, and DOMSource.
Returns
Schema Always return a non-null valid Schema object. Note that when an error has been reported, there is no guarantee that the returned Schema object is meaningful.
Throws
SAXException If an error is found during processing the specified inputs. When an ErrorHandler is set, errors are reported to there first. See setErrorHandler(ErrorHandler).
NullPointerException If the schemas parameter itself is null or any item in the array is null.
IllegalArgumentException If any item in the array is not recognized by this method.
UnsupportedOperationException If the schema language doesn't support this operation.

newSchema

Added in API level 8
Schema newSchema (URL schema)

将指定的 URL解析为架构并将其作为 Schema返回。

这是一个方便 newSchema(Source)方法。

Parameters
schema URL: URL that represents a schema.
Returns
Schema New Schema from parsing schema.
Throws
SAXException If a SAX error occurs during parsing.
NullPointerException if schema is null.

setErrorHandler

Added in API level 8
void setErrorHandler (ErrorHandler errorHandler)

ErrorHandler设置为接收 newSchema方法调用期间遇到的错误。

错误处理程序可用于在模式解析期间自定义错误处理过程。 当设置了ErrorHandler时,解析模式期间发现的错误将首先发送到ErrorHandler

错误处理程序可以通过从处理程序中抛出SAXException立即中止解析模式。 或者,例如,它可以向屏幕输出错误,并尝试通过从ErrorHandler正常返回来继续处理

如果任何 Throwable (或其派生类的实例)从 ErrorHandler抛出,则 newSchema方法的调用者将抛出相同的 Throwable对象。

SchemaFactory不允许扔 SAXException没有首先将其报告给 ErrorHandler

即使在解析 Schema期间,应用程序也可以调用此方法。

ErrorHandler为空时,实现将表现得好像设置了以下 ErrorHandler

 class DraconianErrorHandler implements ErrorHandler {
     public void fatalError( SAXParseException e ) throws SAXException {
         throw e;
     }
     public void error( SAXParseException e ) throws SAXException {
         throw e;
     }
     public void warning( SAXParseException e ) throws SAXException {
         // noop
     }
 }
 

当一个新的SchemaFactory对象被创建时,最初这个字段被设置为空。 此字段不会被继承到Schema S, Validator S,或ValidatorHandler S中的从这个创建SchemaFactory

Parameters
errorHandler ErrorHandler: A new error handler to be set. This parameter can be null.

setFeature

Added in API level 8
void setFeature (String name, 
                boolean value)

设置功能标志的值。

功能可用于控制 SchemaFactory解析模式的方式,但 SchemaFactory不需要识别任何特定的功能名称。

功能名称是任何完全限定的URI。 SchemaFactory可能公开某个特征值,但无法更改当前值。

所有实现都需要支持FEATURE_SECURE_PROCESSING功能。 当功能是:

  • true: the implementation will limit XML processing to conform to implementation limits. Examples include entity expansion limits and XML Schema constructs that would consume large amounts of resources. If XML processing is limited for security reasons, it will be reported via a call to the registered fatalError(org.xml.sax.SAXParseException). See setErrorHandler(ErrorHandler).
  • false: the implementation will processing XML according to the XML specifications without regard to possible implementation limits.

Parameters
name String: The feature name, which is a non-null fully-qualified URI.
value boolean: The requested value of the feature (true or false).
Throws
SAXNotRecognizedException If the feature value can't be assigned or retrieved.
SAXNotSupportedException When the SchemaFactory recognizes the feature name but cannot set the requested value.
NullPointerException if the name parameter is null.

也可以看看:

setProperty

Added in API level 8
void setProperty (String name, 
                Object object)

设置属性的值。

属性名称是任何完全限定的URI。 SchemaFactory可能会识别属性名称,但无法更改当前值。

SchemaFactory不需要识别设置任何特定的属性名称。

Parameters
name String: The property name, which is a non-null fully-qualified URI.
object Object: The requested value for the property.
Throws
SAXNotRecognizedException If the property value can't be assigned or retrieved.
SAXNotSupportedException When the SchemaFactory recognizes the property name but cannot set the requested value.
NullPointerException if the name parameter is null.

setResourceResolver

Added in API level 8
void setResourceResolver (LSResourceResolver resourceResolver)

设置 LSResourceResolver以在解析模式时自定义资源解析。

SchemaFactory在解析模式时需要定位外部资源时使用了LSResourceResolver ,但确切地说,构成“定位外部资源”的内容取决于每种模式语言。 例如,对于W3C XML Schema,这包括文件<include>d<import> ed以及从模式文件引用的DTD等。

即使在解析 Schema期间,应用程序也可以调用此方法。

LSResourceResolver为空时,实现将表现得好像设置了以下 LSResourceResolver

 class DumbDOMResourceResolver implements LSResourceResolver {
     public LSInput resolveResource(
         String publicId, String systemId, String baseURI) {

         return null; // always return null
     }
 }
 

如果 LSResourceResolver引发 RuntimeException (或其派生类的实例),则 SchemaFactory将中止解析,并且 newSchema方法的调用者将收到相同的 RuntimeException

当新的SchemaFactory对象被创建时,最初这个字段被设置为空。 此字段不会被继承到Schema S, Validator S,或ValidatorHandler S中的从这个创建SchemaFactory

Parameters
resourceResolver LSResourceResolver: A new resource resolver to be set. This parameter can be null.

Hooray!