当前位置:网站首页>Generate XML schema from class
Generate XML schema from class
2022-07-05 18:00:00 【User 7741497】
This chapter describes how to use %XML.Schema Enabled from XML Class generation for XML framework .
summary
To generate the same XML Multiple classes in the namespace define the complete schema of the type , Please use %XML.Schema Build architecture , And then use %XML.Writer Generate output for it .
Build an architecture from multiple classes
To build XML framework , Do the following :
- establish
%XML.Schemaexample . - You can choose to set the properties of the instance :
- To specify a namespace for any other unassigned type , Please specify
DefaultNamespaceattribute . The default value isNULL. - By default , Class documents for classes and their attributes are contained in the
<annotation>In the elements . To disable this feature , Please putIncludeDocumentationProperty specified as 0.
Be careful : Must be called on AddSchemaType() Method to set these properties .
- Of the calling instance
AddSchemaType()Method .
method AddSchemaType(class As %String,
top As %String = "",
format As %String,
summary As %Boolean = 0,
input As %Boolean = 0,
refOnly As %Boolean = 0) as %Status- class It's supporting xml The complete package name and class name of the class .
- top It's optional ; If specified , It will override the type name of this class .
- format Specify the format of this type . It has to be
"literal"( Text format , Default ),"encoded"( be used for SOAP code ),"encoded12"( be used for SOAP 1.2 code ), or"element". value“element”The same format as the text with the element at the top . - summary, If true, Will lead to InterSystems IRIS Enable xml Of
XMLSUMMARYParameters . If this parameter is specified , Then the schema will only contain the attributes listed by this parameter . - input, If true, Will lead to InterSystems IRIS Get input mode , Instead of output mode . in the majority of cases , The input mode and output mode are the same ; If you specify
XMLIOProperty parameters , Then they are different . - refOnly If true, Will lead to InterSystems IRIS Generate schemas only for referenced types , Instead of generating schemas for a given class and all referenced types .
This method returns a state that should be checked .
- Repeat the previous steps as needed .
- If you want to define the location of the import mode , You can call
DefineLocation()Method .
method DefineLocation(namespace As %String, location As %String)namespace Is the namespace used by one or more reference classes , The position is the corresponding pattern (XSD file ) Of URL Or path and file name .
You can call this method repeatedly to add locations for multiple imported schemas .
If you don't use this method , The pattern will contain a <import> Instructions , But it will not give the position of the mode .
- Define additional
<import>Instructions , You can callDefineExtraImports()Method .
method DefineExtraImports(namespace As %String, ByRef imports)namespace yes <import> The namespace to which the directive should be added ,imports It's a multidimensional array , Form the following :
Node | Value |
|---|---|
arrayname("namespace URI") | character string , Give the schema of this namespace (XSD file ) The location of . |
Generate output for schema
Create as described in the previous section %XML.Schema After an instance of the , Please do the following to generate output :
- Of the calling instance
GetSchema()Method takes the schema as the document object model (DOM) Node return of .
This method has only one parameter : The target namespace of the schema URI. This method returns %XML.Node An example of , The example is in “ take XML The document is represented as DOM” Chapter one introduces .
If the schema has no namespace , Please use “” As GetSchema() Parameters of .
- You can choose to modify this DOM.
- To generate a schema , Do the following :
a. establish %XML.Write Example , And you can choose to set properties ( Like indenting ).
b. You can choose to call the AddNamespace() Methods and other methods , Add namespace declarations to <schema> Elements .
Because the architecture may refer to simple XSD type , So call AddSchemaNamespace() To add XML Schema namespaces are useful .
c. Use schema as a parameter , Call the writer's DocumentNode() or Tree() Method .
Example
A simple example
The first example shows the basic steps :
Set schemawriter=##class(%XML.Schema).%New()
// Add classes and packages ( for example )
Set status=schemawriter.AddSchemaType("Facets.Test")
// Through its URI( In this case NULL) Retrieval architecture
Set schema=schemawriter.GetSchema("")
//create writer
Set writer=##class(%XML.Writer).%New()
Set writer.Indent=1
//use writer
Do writer.DocumentNode(schema)More complex architectural examples
Class SchemaWriter.Person Extends (%Persistent, %XML.Adaptor)
{
Parameter NAMESPACE = "http://www.myapp.com";
Property Name As %Name;
Property DOB As %Date(FORMAT = 5);
Property PatientID as %String;
Property HomeAddress as Address;
Property OtherAddress as AddressOtherNS ;
}Address Classes are defined in the same XML The name space (“http://www.myapp.com”) in , and OtherAddress Classes are defined in different XML The name space (“http://www.other.com”) in .
Company Classes are also defined in XML The name space “http://www.myapp.com” in . Its definition is as follows :
Class SchemaWriter.Company Extends (%Persistent, %XML.Adaptor)
{
Parameter NAMESPACE = "http://www.myapp.com";
Property Name As %String;
Property CompanyID As %String;
Property HomeOffice As Address;
} Be careful , No connection exists Person and Company Attribute relationship of class .
Namespace "http://www.myapp.com" Generation patterns , We can use the following methods :
ClassMethod Demo()
{
Set schema=##class(%XML.Schema).%New()
Set schema.DefaultNamespace="http://www.myapp.com"
Set status=schema.AddSchemaType("SchemaWriter.Person")
Set status=schema.AddSchemaType("SchemaWriter.Company")
Do schema.DefineLocation("http://www.other.com","c:/other-schema.xsd")
Set schema=schema.GetSchema("http://www.myapp.com")
//create writer
Set writer=##class(%XML.Writer).%New()
Set writer.Indent=1
Do writer.AddSchemaNamespace()
Do writer.AddNamespace("http://www.myapp.com")
Do writer.AddNamespace("http://www.other.com")
Set status=writer.DocumentNode(schema)
If $$$ISERR(status) {Do $system.OBJ.DisplayError() Quit }
}Output is as follows :
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s01="http://www.myapp.com"
xmlns:s02="http://www.other.com"
elementFormDefault="qualified"
targetNamespace="http://www.myapp.com">
<import namespace="http://www.other.com" schemaLocation="c:/other-schema.xsd"/>
<complexType name="Person">
<sequence>
<element minOccurs="0" name="Name" type="s:string"/>
<element minOccurs="0" name="DOB" type="s:date"/>
<element minOccurs="0" name="PatientID" type="s:string"/>
<element minOccurs="0" name="HomeAddress" type="s01:Address"/>
<element minOccurs="0" name="OtherAddress" type="s02:AddressOtherNS"/>
</sequence>
</complexType>
<complexType name="Address">
<sequence>
<element minOccurs="0" name="State">
<simpleType>
<restriction base="s:string">
<maxLength value="2"/>
</restriction>
</simpleType>
</element>
<element minOccurs="0" name="Zip">
<simpleType>
<restriction base="s:string">
<maxLength value="10"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
<complexType name="Company">
<sequence>
<element minOccurs="0" name="Name" type="s:string"/>
<element minOccurs="0" name="CompanyID" type="s:string"/>
<element minOccurs="0" name="HomeOffice" type="s01:Address"/>
</sequence>
</complexType>
</schema>Please pay attention to the following points :
- Patterns include
PersonAnd the types of all the referenced classes , as well asCompanyAnd the types of all the referenced classes . <import>The instruction importsOtherAddressNamespace used by class ; Because we usedDefineLocation(), So this instruction also indicates the position of the corresponding mode .- Because we're calling
DocumentNode()I usedAddSchemaNamespace()andAddNamespace(), therefore<schema>The element contains a namespace declaration , It defines prefixes for these namespaces . - If we don't use
AddSchemaNamespace()andAddNamespace(),<schema>These namespace declarations will not be included , The pattern will look like this :
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.myapp.com">
<import namespace="http://www.other.com" schemaLocation="c:/other-schema.xsd"/>
<complexType name="Person">
<sequence>
<element minOccurs="0" name="Name" type="s01:string" xmlns:s01="http://www.w3.org/2001/XMLSchema"/>
<element minOccurs="0" name="DOB" type="s02:date" xmlns:s02="http://www.w3.org/2001/XMLSchema"/>
<element minOccurs="0" name="PatientID" type="s03:string" xmlns:s03="http://www.w3.org/2001/XMLSchema"/>
<element minOccurs="0" name="HomeAddress" type="s04:Address" xmlns:s04="http://www.myapp.com"/>
<element minOccurs="0" name="OtherAddress" type="s05:AddressOtherNS" xmlns:s05="http://www.other.com"/>
</sequence>
</complexType>
<complexType name="Address">
<sequence>
<element minOccurs="0" name="State">
<simpleType>
<restriction base="s06:string" xmlns:s06="http://www.w3.org/2001/XMLSchema">边栏推荐
- 数据访问 - EntityFramework集成
- 使用QT遍历Json文档及搜索子对象
- [JMeter] advanced writing method of JMeter script: all variables, parameters (parameters can be configured by Jenkins), functions, etc. in the interface automation script realize the complete business
- GFS分布式文件系统
- mybash
- Is it safe to open an account online? What is the general interest rate of securities financing?
- 多线程(一) 进程与线程
- What are the changes in the 2022 PMP Exam?
- LeetCode 练习——206. 反转链表
- ITK Example
猜你喜欢

Redis Foundation

Configure pytorch environment in Anaconda - win10 system (small white packet meeting)

Neural network self cognition model

提高應用程序性能的7個DevOps實踐

Leetcode daily question: merge two ordered arrays

神经网络自我认知模型

How awesome is the architecture of "12306"?

使用QT遍历Json文档及搜索子对象

ELK日志分析系统

Anaconda中配置PyTorch环境——win10系统(小白包会)
随机推荐
Read libco save and restore the on-site assembly code
Abnormal recovery of virtual machine Oracle -- Xi Fenfei
7 pratiques devops pour améliorer la performance des applications
Sentinel flow guard
Career advancement Guide: recommended books for people in big factories
Interpretation: how to deal with the current security problems faced by the Internet of things?
IDC report: Tencent cloud database ranks top 2 in the relational database market!
删除数组中的某几个元素
Thesis reading_ Chinese NLP_ LTP
leetcode每日一练:旋转数组
在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?
This 17-year-old hacker genius cracked the first generation iPhone!
Data access - entityframework integration
MATLAB查阅
深拷贝与浅拷贝【面试题3】
较文心损失一点点性能提升很多
Eliminate the writing of 'if () else{}'
Cmake tutorial step5 (add system self-test)
GIMP 2.10教程「建议收藏」
EPM related