Studio提供了一个向导,该向导读取XML模式(从文件或URL),并生成一组支持XML的类,这些类对应于模式中定义的类型。
所有的类都扩展%XML.Adaptor
。
指定一个包来包含类,以及控制类定义细节的各种选项。
向导还可以作为类方法使用,也可以使用该类方法。 在内部,SOAP向导在读取WSDL文档并生成web客户端或web服务时使用此方法;
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码,InterSystems IRIS将使用本书前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
要使用XML架构向导,请执行以下操作:
下一个屏幕显示模式,以便可以验证选择了正确的模式。
该选项适用于每个对应于用nillable="true"
指定的XML元素的属性。
如果选择此选项,向导将向属性定义添加XMLNIL=1
。
否则不添加该参数。
该参数的详细信息请参见将对象投影到XML中的“处理空字符串和空值”。
XMLNILNOOBJECT
属性参数,它控制向导是否为生成的类中适用的属性指定XMLNILNOOBJECT
属性参数。该选项适用于每个对应于用nillable="true"
指定的XML元素的属性。
如果选择此选项,向导将向属性定义添加XMLNILNOOBJECT=1
。
否则不添加该参数。
该参数的详细信息请参见将对象投影到XML中的“处理空字符串和空值”。
下一个屏幕显示关于要生成的类的选项的一些基本信息。
NAMESPACE
参数。
在本例中,NAMESPACE
被设置为模式中targetNamespace
的值。如果不设置此选项,则不指定NAMESPACE
。
建议在所有情况下都选择这个选项,因为每个支持XML的类都应该分配给一个XML名称空间。 (但是,为了向后兼容,可以将此选项清除。)
%Persistent
。可以稍后在向导中针对各个类更改这一点。
<complexType> b
的<sequence>
组成的<complexType>
a。当向导生成一个包含属性a
的持久类时,该属性有三种可能的形式。
可以将其定义为对象列表、一对多关系(默认)或父子关系。
下表总结了这些选择:在持久性类中为集合属性使用关系 | 向多对关系添加索引 | 使用父子关系 | 生成的属性A的形式 |
---|---|---|---|
selected (default) | not selected | not selected | 无索引的一对多关系 |
selected (default) | selected | not selected | 在多侧与索引的一对多关系 |
selected (default) | 如果选择Use parent-child relationship,则忽略此选项 | selected | 父子关系 |
not selected | not selected | not selected | List of objects |
此外,如果未选择使用父子关系,则可以选择将%OnDelete
方法添加到类以级联删除。如果选择此选项,当向导生成类定义时,它会在这些类中包含%OnDelete()
回调方法的实现。生成的%OnDelete()
方法删除类引用的所有持久对象。如确实选择了使用父子关系,请不要选择此选项;父子关系已经提供了类似的逻辑。
注意:如果修改生成的类,请确保根据需要修改%OnDelete()
回调方法。
如果生成持久类,向导可以向每个对象类型类添加临时属性,以便可以为对象投影InterSystems IRIS内部标识符。选项如下:
Property %identity As %XML.Id (XMLNAME="_identity", XMLPROJECTION="ATTRIBUTE") [Transient];
Property %identity As %XML.Oid (XMLNAME="_identity", XMLPROJECTION="ATTRIBUTE") [Transient];
Property %identity As %XML.GUID (XMLNAME="_identity", XMLPROJECTION="ATTRIBUTE") [Transient];
底部的表格列出了模式中的XML名称空间。在这里,指定包含该行中显示的XML名称空间的类的包。要执行此操作,请在程序包名字段中为该行指定程序包名。
%XML.Adaptor
外,每个类还继承会%Populate
。SqlColumnNumber
关键字指定一个值,以便属性在SQL中的顺序与它们在架构中的顺序相同。XMLSEQUENCE
参数设置为0。在某些情况下,如果XML文件的元素顺序与XML架构不同,则此选项非常有用。默认情况下,XMLSEQUENCE
参数在生成的类中设置为1。这可确保属性以与架构中相同的顺序包含在类定义中。
XMLIGNORENULL=1
添加到类定义中。否则,它不会添加此参数。xsd:base64Binary
类型的任何元素生成%Stream.GlobalBinary
类型的属性。如果清除此选项,则该属性的类型为%xsd.base64Binary
。请注意,向导将忽略xsd:base64Binary
类型的任何属性。
Extensions/Type
。在此,可以选择以下选项之一: Persistent
-如果选择此选项,则类是持久性类。Serial
-如果选择此选项,则类为序列类。Registered Object
-如果选择此选项,则类为注册对象类。所有生成的类还扩展%XML.Adaptor
。
然后,向导将生成这些类,并在需要时编译它们。
对于这些类的属性,如果架构中相应元素的名称以下划线(_)开头,则属性名称以百分号(%)开头。
XML架构向导也可用作%XML.Utils.SchemaReader
类的process()
方法。要使用此方法,请执行以下操作:
%XML.Utils.SchemaReader
的实例。process()
方法:method Process(LocationURL As %String,
Package As %String = "Test",
ByRef Features As %String) as %Status
对于它生成的每个属性,XML架构向导会根据架构中指定的XSD类型自动使用适当的InterSystems IRIS数据类型类。下表列出了XSD类型和相应的InterSystems IRIS数据类型:
用于XML类型的InterSystems IRIS数据类型
源文档中的XSD类型 | 生成的IRIS类中的数据类型 |
---|---|
anyURI | %xsd.anyURI |
base64Binary | %xsd.base64Binary或%Stream.GlobalBinary,具体取决于选择的选项。确定每个字符串是否可能超出字符串长度限制,如果可能,则将生成的属性从%xsd.base64Binary修改为适当的流类。) |
boolean | %Boolean |
byte | %xsd.byte |
date | %Date |
dateTime | %TimeStamp |
decimal | %Numeric |
double | %xsd.double |
float | %xsd.float |
hexBinary | %xsd.hexBinary |
int | %xsd.int |
integer | %Integer |
long | %Integer |
negativeInteger | %xsd.negativeIntege |
nonNegativeInteger | %xsd.nonNegativeInteger |
nonPositiveInteger | %xsd.nonPositiveInteger |
positiveInteger | %xsd.positiveInteger |
short | %xsd.short |
string | %String (注意:责任确定每个字符串是否可能超出字符串长度限制,如果可能,则将生成的类型修改为适当的流类。) |
time | %Time |
unsignedByte | %xsd.unsignedByte |
unsignedInt | %xsd.unsignedInt |
unsignedLong | %xsd.unsignedLong |
unsignedShort | %xsd.unsignedShort |
no type given | %String |
对于它生成的每个属性,XML架构向导还使用架构中的信息自动设置以下关键字:
对于它生成的每个属性,XML架构向导会根据需要自动设置XMLNAME
、XMLPROJECTION
和所有其他与XML相关的参数。它还根据需要设置其他参数,如MAXVAL
、MINVAL
和VALUELIST
。
在极少数情况下,可能需要编辑生成的类来容纳超长的字符串或二进制值,超出字符串长度限制。
对于任何字符串类型,XML架构都不包含任何指示字符串长度的信息。XML架构向导将所有字符串值映射到InterSystems IRIS %String
类,并将所有base64Binary
值映射到%xsd.base64Binary
类。这些选择可能不合适,具体取决于类要承载的数据。
在使用生成的类之前,应该执行以下操作:
%string
或%xsd.base64Binary
的属性。考虑将在其中使用这些类的上下文,特别是这些属性。%string
属性可能需要包含超出字符串长度限制的字符串,请将该属性重新定义为适当的字符流。同样,如果认为%xsd.base64Binary
属性可能需要包含超过相同限制的字符串,请将该属性重新定义为适当的二进制流。%string
、%xsd.string
和%BINARY
的属性,默认情况下,MAXLEN
属性参数为50
个字符。可能需要指定更高的限制才能进行正确的验证。(对于%xsd.base64Binary
类型的属性,MAXLEN
为“”
,这意味着不会通过验证检查长度。但是,字符串长度限制确实适用。)
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。