第二十六章 控制到 XML 模式的映射 - 影响架构的编译器关键字
影响架构的编译器关键字
required 关键字通过删除 minOccurs="0" 属性来影响 XML 架构。例如,考虑以下类:
Class Schema.PropKeywords Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter XMLTYPENAMESPACE="mytypes";
Property Property1 As %String;
Property Property2 As %String [ Required ];
}
如果我们为此处使用的命名空间生成架构,我们会看到以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" targetNamespace="test">
<complexType name="PropKeywords">
<sequence>
<element minOccurs="0" name="Property1" type="s:string"/>
<element name="Property2" type="s:string"/>
</sequence>
</complexType>
</schema>
请注意,minOccurs 的默认值为 1;也就是说,Property2 是必需的。
注意:出于兼容性原因,%XML.Reader 默认情况下不检查必需的属性,但可以使其这样做;请参阅使用 XML 工具中的检查所需元素和属性。另外,默认情况下, IRIS Web 服务不会检查所需的属性,但可以使其这样做;请参阅检查必需的元素和属性。
没有其他属性关键字影响数据类型类的架构。
影响 XML 模式的参数
IRIS 数据类型类使用许多参数。 (有关列出每个数据类型类支持的参数的表,请参阅定义和使用类中的数据类型。)在大多数情况下,还可以将它们指定为属性参数。
影响 XML 模式的参数如下:
CONTENT
影响属性值的转义方式;请参阅处理特殊 XML 字符。
与其他可能的值相比,“MIXED”值会导致架构发生变化。考虑下面的类:
Class Schema.CONTENT Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter XMLTYPENAMESPACE = "mytypes";
Property Property1 As %String;
Property Property2 As %String(CONTENT = "STRING");
Property Property3 As %String(CONTENT = "ESCAPE");
Property Property4 As %String(CONTENT = "MIXED");
}
如果我们为此处使用的命名空间生成架构,我们会看到以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:s="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" targetNamespace="mytypes">
<complexType name="CONTENT">
<sequence>
<element minOccurs="0" name="Property1" type="s:string"/>
<element minOccurs="0" name="Property2" type="s:string"/>
<element minOccurs="0" name="Property3" type="s:string"/>
<element name="Property4">
<complexType mixed="true">
<choice maxOccurs="unbounded" minOccurs="0">
<any processContents="lax"/>
</choice>
</complexType>
</element>
</sequence>
</complexType>
</schema>
请注意,这三个属性具有相同的类型信息,因为 XML 以相同的方式处理它们。然而, IRIS 对属性的处理方式有所不同,如处理特殊 XML 字符中所述。
如果使用该对象作为 Web 方法的输入或输出,并且 SoapBodyUse 已针对该方法进行编码,则 IRIS 会将混合内容视为默认的字符串内容。也就是说,如果将 CONTENT 指定为“MIXED”,则该值将被忽略。
DISPLAYLIST
如果还指定了 VALUELIST 并且 XMLLISTPARAMETER 等于“DISPLAYLIST”,则会影响架构。请参阅这两个参数的讨论。
MAXLEN
控制 maxLength 属性,它是一个方面或限制。 Facet 定义 XML 类型可接受的值。以下示例显示了其中的几个。考虑下面的类:
Class Schema.BasicFacets Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter XMLTYPENAMESPACE = "mytypes";
Property Property1 As %Integer (MINVAL=10, MAXVAL=1000);
Property Property2 As %String (MINLEN=20, MAXLEN=100);
}
如果我们为此处使用的命名空间生成架构,我们会看到以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:s="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="mytypes">
<complexType name="BasicFacets">
<sequence>
<element minOccurs="0" name="Property1">
<simpleType>
<restriction base="s:long">
<maxInclusive value="1000"/>
<minInclusive value="10"/>
</restriction>
</simpleType>
</element>
<element minOccurs="0" name="Property2">
<simpleType>
<restriction base="s:string">
<maxLength value="100"/>
<minLength value="20"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
</schema>
当 SOAP 向导或 XML 架构向导在架构中发现 maxLength 限制时,它会在生成的类中根据需要设置 MAXLEN 属性参数。
MAXVAL
控制 maxInclusive 属性。请参阅 MAXLEN 中的示例。
MINLEN
控制 minLength 属性。请参阅 MAXLEN 中的示例。
当 SOAP 向导或 XML 架构向导在架构中发现 minLength 限制时,它会在生成的类中根据需要设置 MINLEN 属性参数。
MINVAL
控制 minInclusive 属性。请参阅 MAXLEN 中的示例。