public abstract class SchemaFactory
extends Object
java.lang.Object | |
↳ | javax.xml.validation.SchemaFactory |
创建Schema
对象的工厂。 验证API的入口点。
SchemaFactory
是一个模式编译器。 它读取模式的外部表示并准备进行验证。
SchemaFactory
类不是线程安全的。 换句话说,应用程序的责任是确保至多有一个线程在任何给定的时刻都使用一个对象SchemaFactory
。 我们鼓励实施方法将方法标记为synchronized,以保护自己免受破坏的客户端的侵害。
SchemaFactory
不可重入。 当调用newSchema
方法中的一个时,应用程序可能不会试图以递归方式调用newSchema
方法,即使是从同一个线程也是如此。
该规范使用名称空间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 |
Protected constructors |
|
---|---|
SchemaFactory() 派生类的构造函数。 |
Public methods |
|
---|---|
abstract ErrorHandler |
getErrorHandler() 获取当前 |
boolean |
getFeature(String name) 查找功能标志的值。 |
Object |
getProperty(String name) 查找一个属性的值。 |
abstract LSResourceResolver |
getResourceResolver() 获取当前 |
abstract boolean |
isSchemaLanguageSupported(String schemaLanguage) 此 |
static SchemaFactory |
newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader) 返回 |
static SchemaFactory |
newInstance(String schemaLanguage) 查找支持指定模式语言并返回的 |
Schema |
newSchema(File schema) 将指定的 |
Schema |
newSchema(Source schema) 将指定的源解析为模式并将其作为模式返回。 |
abstract Schema |
newSchema() 创建一个特殊的 |
abstract Schema |
newSchema(Source[] schemas) 将指定的源分析为模式并将其作为模式返回。 |
Schema |
newSchema(URL schema) 将指定的 |
abstract void |
setErrorHandler(ErrorHandler errorHandler) 将 |
void |
setFeature(String name, boolean value) 设置功能标志的值。 |
void |
setProperty(String name, Object object) 设置属性的值。 |
abstract void |
setResourceResolver(LSResourceResolver resourceResolver) 设置 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
SchemaFactory ()
派生类的构造函数。
构造函数什么都不做。
派生类必须创建 SchemaFactory
对象,其中包含 null
ErrorHandler
和 null
LSResourceResolver
。
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. |
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. |
也可以看看:
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. |
也可以看看:
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. |
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. |
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 . |
SchemaFactory newInstance (String schemaLanguage)
查找支持指定模式语言并返回的 SchemaFactory
的实现。
要为给定模式语言查找 SchemaFactory
对象,此方法按以下顺序查找以下位置,其中“类加载器”引用上下文类加载器:
"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. $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. 要求类加载器在资源目录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. 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. |
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. |
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. |
Schema newSchema ()
创建一个特殊的 Schema
对象。
返回的 Schema
对象的确切语义取决于此 SchemaFactory
创建的模式语言。
此外,允许实现使用特定于实现的属性/特性来更改此方法的语义。
对于XML Schema,此方法创建一个 Schema
对象,该对象通过使用文档中指定的位置提示来执行验证。
返回的Schema
对象假定如果文档引用架构位置提示中的相同URL,则它们将始终解析为相同的架构文档。 这个假设允许实现重用模式文档的分析结果,以便针对相同模式的多个验证运行得更快。
请注意,架构位置提示的使用引入了拒绝服务攻击的漏洞。
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. |
Schema newSchema (Source[] schemas)
将指定的源分析为模式并将其作为模式返回。
被调用者将读取所有的Source
,并将它们组合成一个模式。 组合的确切语义取决于为此SchemaFactory
对象创建的模式语言。
当设置了ErrorHandler
,被调用者会将所有在源中找到的错误报告给处理程序。 如果处理程序抛出异常,它将中止模式编译,并且将从此方法抛出相同的异常。 此外,在向处理程序报告错误之后,允许被调用方抛出进一步处理。 如果未设置错误处理程序,则被调用程序将抛出它在源中找到的第一个错误。
生成的模式包含来自指定源的组件。 如果所有这些源都是使用适当的schemaLocation和namespace值导入到具有不同targetNamespace并且没有它自己的组件的单个模式文档(如果导入元素的顺序与源相同),则可以实现相同的结果。 XML Schema建议的4.2.3节描述了处理器在这方面的选项。 虽然处理器在处理JAXP模式源和XML模式导入时应保持一致,但符合JAXP的解析器之间的行为可能会有所不同; 特别是,无论schemaLocation中提供的信息如何,解析器都可以选择忽略除给定名称空间的第一个<import>之外的所有内容。
如果已解析的模式集包含XML Schema规范第5.1节中指定的错误,则必须将错误报告给 ErrorHandler
。
对于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. |
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. |
void setErrorHandler (ErrorHandler errorHandler)
将 ErrorHandler
设置为接收 newSchema
方法调用期间遇到的错误。
错误处理程序可用于在模式解析期间自定义错误处理过程。 当设置了ErrorHandler
时,解析模式期间发现的错误将首先发送到ErrorHandler
。
错误处理程序可以通过从处理程序中抛出SAXException
立即中止解析模式。 或者,例如,它可以向屏幕输出错误,并尝试通过从ErrorHandler
正常返回来继续处理
如果任何 Throwable
(或其派生类的实例)从 ErrorHandler
抛出,则 newSchema
方法的调用者将抛出相同的 Throwable
对象。
SchemaFactory
不允许扔 SAXException
没有首先将其报告给 ErrorHandler
。
即使在解析 Schema
期间,应用程序也可以调用此方法。
当 ErrorHandler
为空时,实现将表现得好像设置了以下 ErrorHandler
:
class DraconianErrorHandler implementsErrorHandler
{ public void fatalError(SAXParseException
e ) throwsSAXException
{ throw e; } public void error(SAXParseException
e ) throwsSAXException
{ throw e; } public void warning(SAXParseException
e ) throwsSAXException
{ // noop } }
当一个新的SchemaFactory
对象被创建时,最初这个字段被设置为空。 此字段不会被继承到Schema
S, Validator
S,或ValidatorHandler
S中的从这个创建SchemaFactory
。
Parameters | |
---|---|
errorHandler |
ErrorHandler : A new error handler to be set. This parameter can be null. |
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. |
也可以看看:
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. |
void setResourceResolver (LSResourceResolver resourceResolver)
设置 LSResourceResolver
以在解析模式时自定义资源解析。
SchemaFactory
在解析模式时需要定位外部资源时使用了LSResourceResolver
,但确切地说,构成“定位外部资源”的内容取决于每种模式语言。 例如,对于W3C XML Schema,这包括文件<include>d或<import> ed以及从模式文件引用的DTD等。
即使在解析 Schema
期间,应用程序也可以调用此方法。
当 LSResourceResolver
为空时,实现将表现得好像设置了以下 LSResourceResolver
:
class DumbDOMResourceResolver implementsLSResourceResolver
{ publicLSInput
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. |