OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   [xml-dev]still import problem

[ Lists Home | Date Index | Thread Index ]
  • To: <xml-dev@lists.xml.org>
  • Subject: [xml-dev]still import problem
  • From: =?gb2312?B?ZmNft72zrA==?= <fangc@bsoft.com.cn>
  • Date: Wed, 7 May 2003 09:19:28 +0800
  • Thread-index: AcMO/LK53ftVR0M+S9ihedmwQ6hZMQEcUDjAADG/jeA=
  • Thread-topic: [xml-dev]still import problem

I still couldn't find the mistake I have made.:(

For debug and watch convenience, I add the vb script here(Main.vbs) and the xml instance(Main.xml).all these file need to put into the same folder, and windows OS and MS XML SDK 4.0 required.

'///////////////////////////////////////////////////////////////////
Main.vbs

' Item types:
SOMITEM_SCHEMA                    = 4*1024
SOMITEM_ATTRIBUTE                 = SOMITEM_SCHEMA + 1
SOMITEM_ATTRIBUTEGROUP            = SOMITEM_SCHEMA + 2
SOMITEM_NOTATION                  = SOMITEM_SCHEMA + 3

SOMITEM_ANYTYPE                   = 8*1024
SOMITEM_DATATYPE                  = SOMITEM_ANYTYPE+256
SOMITEM_SIMPLETYPE                = SOMITEM_DATATYPE+256
SOMITEM_COMPLEXTYPE               = 9*1024

SOMITEM_PARTICLE                  = 16*1024
SOMITEM_ANY                       = SOMITEM_PARTICLE+1
SOMITEM_ANYATTRIBUTE              = SOMITEM_PARTICLE+2
SOMITEM_ELEMENT                   = SOMITEM_PARTICLE+3
SOMITEM_GROUP                     = SOMITEM_PARTICLE+256

SOMITEM_ALL                       = SOMITEM_GROUP+1
SOMITEM_CHOICE                    = SOMITEM_GROUP+2
SOMITEM_SEQUENCE                  = SOMITEM_GROUP+3
SOMITEM_EMPTYPARTICLE             = SOMITEM_GROUP+4

SCHEMAUSE_OPTIONAL   = 0
SCHEMAUSE_PROHIBITED = 1
SCHEMAUSE_REQUIRED   = 2

SCHEMACONTENTTYPE_EMPTY        = 0
SCHEMACONTENTTYPE_TEXTONLY     = 1
SCHEMACONTENTTYPE_ELEMENTONLY  = 2
SCHEMACONTENTTYPE_MIXED        = 3

remarks = 0

Set oSchemaCache = CreateObject("Msxml2.XMLSchemaCache.4.0")
nsTarget="http://www.test.com/ok";
oSchemaCache.add nsTarget, "main_derive.xsd"

Set oDoc = CreateObject("Msxml2.DOMDocument.4.0")
oDoc.async = false
oDoc.validateOnParse = false
set oDoc.schemas = oSchemaCache
if oDoc.load( "main.xml") = false then
	WScript.Echo "load xml document failed"
end if
oDoc.setProperty "SelectionLanguage", "XPath"
oDoc.setProperty "SelectionNamespaces", "xmlns:MN='http://www.test.com/ok' xmlns:XSI='http://www.w3.org/2001/XMLSchema-instance'"


result = ""
'Set oNo = oDoc.selectSingleNode("//cust:*[@curCursorIn]")
'Set oNo = oDoc.selectSingleNode("//cust:Customers/zz/症状名称")
Set oNo = oDoc.selectSingleNode("//MN:*[@curCursorIn]")
'Set oNo = oDoc.selectSingleNode("//MN:ECase/主诉/症状描述")
'Set oNo = oDoc.selectSingleNode("//MN:症状描述")
if oNo is Nothing then
	WScript.Echo "no node selected"
end if
result = result + printDecl(oNo) + vbNewLine

'Set oNo = oDoc.selectSingleNode("//po:purchaseOrder/items/item/quantity")
'result = result + printDecl(oNo) + vbNewLine

'Set oNo = oDoc.selectSingleNode("//po:purchaseOrder/items")
'result = result + printDecl(oNo) + vbNewLine

'Set oNo = oDoc.selectSingleNode("//po:purchaseOrder/items/item/@partNum")
'result = result + printDecl(oNo) + vbNewLine

'Set oNo = oDoc.selectSingleNode("//po:purchaseOrder/shipTo")
'result = result + printDecl(oNo) + vbNewLine

WScript.Echo result

Function printDecl(oNode)
    If oNode is nothing then exit function
    Set oDecl = oDoc.namespaces.getDeclaration(oNode)
    If oDecl.itemType = SOMITEM_ELEMENT Then
        printDecl = printElement(oDecl, 1)
    End If
    If oDecl.itemType = SOMITEM_ATTRIBUTE Then
       printDecl = printAttr(oDecl, 1)
       printDecl = printDecl + processType(oDecl.Type, 1)
    End If
End Function

Function processType(oType, t)
    If oType.itemType = SOMITEM_ANYTYPE Then
        res = res + printTab(t+1) + "<!-- " + oType.name +" -->" 
    End If
    If oType.itemType = SOMITEM_COMPLEXTYPE Then
        res = res + processComplexType(oType, t+1)
    End If
    If oType.itemType = SOMITEM_SIMPLETYPE Then
        res = res + processSimpleType(oType, t+1)
    End If
    processType = res + vbNewLine
End Function

Function processComplexType(oComplex, t)
    res = printTab(t) + "<xsd:complexType"
    If oComplex.name <> "" Then
        res = res + " name='" + oComplex.name +"'"
    End If
    res = res + ">"

    If oComplex.contentType = SCHEMACONTENTTYPE_EMPTY Then
        res = res + printRemark("emtpy")
    End If
    If oComplex.contentType = SCHEMACONTENTTYPE_TEXTONLY Then
        res = res + printRemark("textonly")
    End If
    If oComplex.contentType =SCHEMACONTENTTYPE_ELEMENTONLY Then
        res = res + printRemark("elementonly")
        res = res + processGroup(oComplex.contentModel, t+1)
    End If
    If oComplex.contentType = SCHEMACONTENTTYPE_MIXED Then
        res = res + printRemark("mixed")
        res = res + processGroup(oComplex.contentModel, t+1)
    End If
    res = res + vbNewline
    res = res + printRestrictions(oComplex, t+1)

    On Error Resume Next
    Set any = oComplex.anyAttribute.name
    If Err.number = 0 Then
        res = res + oComplex.anyAttribute.name
    End If

    For Each oAttr in oComplex.attributes
        res = res + printAttr(oAttr, t+1)
    Next

    processComplexType = res + printTab(t) + "</xsd:complexType>"+vbNewline
End Function

Function processSimpleType(oSimple, t)
    res = printTab(t) + "<xsd:simpleType"
    If oSimple.name <> "" Then
        res = res + " name='" + oSimple.name +"'"
    End If
    res = res + ">"+vbNewline
 
    If oSimple.baseTypes.length = 1 Then
        res = res + printRestrictions(oSimple, t+1)
    Else
        For Each oType in oSimple.baseTypes
            res = res + "<baseType name='" + printName(oType) +"'>"+vbNewline
        Next
    End If

    processSimpleType = res + printTab(t) + "</xsd:simpleType>"+vbNewline
End Function

Function processGroup(poGroup, t)
    res = ""

    If poGroup.itemType = SOMITEM_ALL Then
        res = res + printTab(t+1) + "<xsd:all>"+vbNewline
        res = res + processChoiceOrSequence(poGroup, t+1)
        res = res + printTab(t+1) + "</xsd:all>"
    End If

    If poGroup.itemType = SOMITEM_CHOICE Then
        res = res + printTab(t+1) + "<xsd:choice>"+vbNewline
        res = res + processChoiceOrSequence(poGroup, t+1)
        res = res + printTab(t+1) + "</xsd:choice>"
    End If

    If poGroup.itemType = SOMITEM_SEQUENCE Then
        res = res + printTab(t+1) + "<xsd:sequence>"+vbNewline
        res = res + processChoiceOrSequence(poGroup, t+1)
        res = res + printTab(t+1) + "</xsd:sequence>"
    End If
    processGroup = res
End Function

Function processChoiceOrSequence(poGroup, t)
    res = ""
    For Each item in poGroup.particles
        If item.itemType = SOMITEM_ELEMENT Then
            res = res + printElement(item, t+1)
        End If
        If (item.itemType and SOMITEM_GROUP) = SOMITEM_GROUP Then
            res = res + processGroup(item, t+1)+vbNewline
        End If
        If item.itemType = SOMITEM_ANY Then
            res = res + "any: " + item.name+vbNewline
        End If
    Next
    processChoiceOrSequence = res
End Function

Function printElement(oElement, t)
    res = printTab(t) + "<xsd:element "
    If oElement.isReference Then
        res = res + "ref='" + oElement.name + "'" + printParticles(oElement) + ">"
        res = res + "<!-- "
        res = res + " abstract='" & oElement.isAbstract & "'"
        res = res + " -->"
    Else
        Set oType=oElement.type
        res = res + "name='" + oElement.name + "'" + printParticles(oElement)
        res = res + " abstract='" & oElement.isAbstract & "'"
        res = res + " id='" & oElement.id & "'"
        If oType.name = "" Then
            res = res + ">" + vbNewLine 
            If oType.itemType = SOMITEM_COMPLEXTYPE Then
                res = res + printElement + processComplexType(oType, t+1)
            Else
                res = res + processSimpleType(oType, t)
		'res= res + "okhaha" + vbNewLine
            End If
            res = res + printTab(t) + "</xsd:element>"
        Else
            If printName(oType) <> "xsd:anyType" Then
                res = res + " type='" + printName(oType) + "'"
            End If

            If oType.itemType <> SOMITEM_COMPLEXTYPE Then
                If printRestrictions(oType, 0) = "" Then
                    res = res + "/>"
                Else
                    res = res + ">" + vbNewLine + processSimpleType(oType, t)
                    res = res + printTab(t) + "</xsd:element>"
                End If
            Else
                
		'res = res + ">" + vbNewLine + processComplexType2(oType, t)
                    res = res + printTab(t) + "</xsd:element>"
            End If
        End If
    End If
    rem = "scope:" & printName(oElement.scope)
    res = res + printRemark( "rem" )
    printElement = res
End Function

Function printParticles(oParticle)
        If oParticle.minOccurs <> 1 Then 
            res = res + " minOccurs='" & oParticle.minOccurs & "'"
        End If
        If oParticle.maxOccurs <> 1 Then 
            If oParticle.maxOccurs = -1 Then 
                res = res + " maxOccurs='unbounded'"
            Else
                res = res + " maxOccurs='" & oParticle.maxOccurs & "'"
            End If
        End If
        printParticles = res
End Function

Function printAttr(oAttr, t)
        If oAttr.isReference Then
            printAttr = printAttr + printTab(t) + "<xsd:attribute ref='" + oAttr.name + "'"
        Else
            printAttr = printAttr + printTab(t) + "<xsd:attribute name='" + oAttr.name + "'"
        End If
        If oAttr.type.name <> "" Then
            printAttr = printAttr + " type='" + printName(oAttr.type) + "'"
        End If
        If oAttr.defaultValue <> "" Then
            printAttr = printAttr + " default='" + oAttr.defaultValue + "'"
        End If
        If oAttr.fixedValue <> "" Then
            printAttr = printAttr + " fixed='" + oAttr.fixedValue + "'"
        End If
        If oAttr.use = SCHEMAUSE_OPTIONAL   Then printAttr = printAttr + " use='optional'"   End If
        If oAttr.use = SCHEMAUSE_PROHIBITED Then printAttr = printAttr + " use='prohibited'" End If
        If oAttr.use = SCHEMAUSE_REQUIRED   Then printAttr = printAttr + " use='required'"   End If
        printAttr = printAttr + "/>"
        rem = "scope:" & printName(oElement.scope)
        printAttr = printAttr + printRemark("rem")
End Function

Function printTab(t)
    tab=""
    For x=0 to t
        tab=tab+"  "
    Next
    printTab=tab
End Function

Function printName(item)
    printName =""
    If (item.itemType and SOMITEM_DATATYPE) = SOMITEM_DATATYPE Then
        printName= "xsd:"
    End If 
    If item.itemType = SOMITEM_ANYTYPE Then
        printName= "xsd:"
    End If 
    printName= printName + item.name
End Function

Function printRestrictions(oType, t)
    res = ""
    If oType.minExclusive <> "" Then
        res = res + printTab(t+1) + "<xsd:minExclusive value='"+ oType.minExclusive + "'/>" + vbNewLine
    End If
    If oType.minInclusive <> "" Then
        res = res + printTab(t+1) + "<xsd:minInclusive value='"+ oType.minInclusive + "'/>" + vbNewLine
    End If
    If oType.maxExclusive <> "" Then
        res = res + printTab(t+1) + "<xsd:maxExclusive value='"+ oType.maxExclusive + "'/>" + vbNewLine
    End If
    If oType.maxInclusive <> "" Then
        res = res + printTab(t+1) + "<xsd:maxInclusive value='"+ oType.maxInclusive + "'/>" + vbNewLine
    End If
    If oType.totalDigits > -1 Then
        res = res + printTab(t+1) + "<xsd:totalDigits value='" & oType.totalDigits & "'/>" + vbNewLine
    End If
    If oType.fractionDigits > -1 Then
        res = res + printTab(t+1) + "<xsd:fractionDigits value='" & oType.fractionDigits & "'/>" + vbNewLine
    End If
    If oType.length > -1 Then
        res = res + printTab(t+1) + "<xsd:length value='" & oType.length & "'/>" + vbNewLine
    End If
    If oType.minLength > -1 Then
        res = res + printTab(t+1) + "<xsd:minLength value='" & oType.minLength & "'/>" + vbNewLine
    End If
    If oType.maxLength > -1 Then
        res = res + printTab(t+1) + "<xsd:maxLength value='" & oType.maxLength & "'/>" + vbNewLine
    End If
    If oType.enumeration.length > 0 Then
        For each item in oType.enumeration
            res = res + printTab(t+1) + "<xsd:enumeration value='" + item + "'/>" + vbNewLine
        Next
    End If
    If oType.whitespace > 0 Then
        res = res + printTab(t+1) + "<xsd:whitespace value='" & oType.whitespace & "'/>" + vbNewLine
    End If
    If oType.patterns.length > 0 Then
        For Each pattern in oType.patterns
           res = res + printTab(t+1) + "<xsd:pattern value='" + pattern + "'/>" + vbNewLine
        Next
    End If

    printRestrictions = ""
    If res <> "" Then
	
	'printRestrictions = printRestrictions + printTab(t) + "<xsd:restriction base='" + printName(oType.baseTypes(0)) + "'>" + vbNewLine
        printRestrictions = printRestrictions + printTab(t) + "<xsd:restriction base='" +  "'>" + vbNewLine
        printRestrictions = printRestrictions + res
        printRestrictions = printRestrictions + printTab(t) + "</xsd:restriction>" + vbNewLine
    End If

End Function

Function printRemark(r)
    If remarks = 1 Then
        printRemark = "<!-- " + r + " -->"
    End If
    printRemark = printRemark + vbNewLine
End Function
'/////////////////////////////////////////////////////////////////////



Main.xml
<?xml version="1.0" encoding="UTF-8"?>
<MN:ECase xmlns:MN="http://www.test.com/ok"; xmlns:XSI="http://www.w3.org/2001/XMLSchema-instance";>
	<MN:test MyElementIndexBegin="1" MyElementIndexEnd="2">
		<MN:OneMan MyElementIndexBegin="3" MyElementIndexEnd="4" XSI:type="MN:Man" >
			<MN:Name MyElementIndexBegin="5" MyElementIndexEnd="6">Mr_A</MN:Name>
			<MN:Power curCursorIn="sss" MyElementIndexBegin="5" MyElementIndexEnd="6">300Pounds</MN:Power>
		</MN:OneMan>
		<MN:ok>haha</MN:ok>
	</MN:test>
</MN:ECase>


thanks

Best Regards
F.Beyond
-----邮件原件-----
发件人: fc_方超 
发送时间: 2003年5月6日 9:38
收件人: xml-dev@lists.xml.org
抄送: ht@cogsci.ed.ac.uk
主题: [xml-dev] new import problem

Sorry,I post a wrong message. I forget to add a new namespace in the Second file. So I added it this time.but the question is the same. The parser said "it is invalid derived from restriction particle,base type:'{http://www.test.com/}Man,derived type:'{http://www.test.com/ok>}SuperMan'

When I use the whole document,it will not cause any problem.and everythings are OK
<xs:schema xmlns:dn="http://www.test.com/ " xmlns:xs="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified"> <xs:simpleType name="PowerEnum”>
		<xs:restriction base="xs:string">
			<xs:enumeration value="1Pounds"/>
			<xs:enumeration value="2Pounds"/>
			<xs:enumeration value="300Pounds"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Man" abstract="true">
		<xs:sequence>
			<xs:element name="Name" type="xs:string"/>
			<xs:element name="Power" type="PowerEnum"/>
		</xs:sequence>
	</xs:complexType>
<xs:complexType name="SuperMan">
		<xs:complexContent>
			<xs:restriction base="Man">
				<xs:sequence>
					<xs:element name="Name" type="xs:string"/>
					<xs:element name="Power">
						<xs:simpleType>
							<xs:restriction base="PowerEnum">
								<xs:enumeration value="1Pounds "/>
								<xs:enumeration value="2Pounds "/>
							</xs:restriction>
						</xs:simpleType>
					</xs:element>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="test">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="OneMan" type="SuperMan"/>
				<xs:element name="ok" type="xs:string"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
but when I use the separate document,error occurred:parser(MS XML SDK)said I couldn’t use restriction to derive in main_derive.xsd
main.xsd
<xs:schema targetNamespace="http://www.test.com/"; xmlns="http://www.test.com/";  xmlns:xs="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified">
	<xs:simpleType name="PowerEnum">
		<xs:restriction base="xs:string">
			<xs:enumeration value="1Pounds"/>
			<xs:enumeration value="2Pounds"/>
			<xs:enumeration value="300Pounds"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="Man" abstract="true">
		<xs:sequence>
			<xs:element name="Name" type="xs:string"/>
			<xs:element name="Power" type="PowerEnum"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>

main_derive.xsd
<xs:schema xmlns="http://www.test.com/ok"; targetNamespace="http://www.test.com/ok"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:im="http://www.test.com/"; elementFormDefault="qualified">
	<xs:import namespace="http://www.test.com/"; schemaLocation="main.xsd"/>
	<xs:complexType name="SuperMan">
		<xs:complexContent>
			<xs:restriction base="im:Man">
				<xs:sequence>
					<xs:element name="Name" type="xs:string"/>
					<xs:element name="Power">
						<xs:simpleType>
							<xs:restriction base="im:PowerEnum">
								<xs:enumeration value="300Pounds"/>
							</xs:restriction>
						</xs:simpleType>
					</xs:element>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="test">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="OneMan" type="SuperMan"/>
				<xs:element name="ok" type="xs:string"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

sorry for consume all of ur time.

Best Regards
fbeyond
-----邮件原件-----
发件人: Henry S. Thompson [mailto:ht@cogsci.ed.ac.uk] 
发送时间: 2003年4月30日 17:40
收件人: fc_方超
抄送: xml-dev@lists.xml.org
主题: Re: [xml-dev] import problem

=?utf-8?B?ZmNf5pa56LaF?= <fangc@bsoft.com.cn> writes:

> Hi,I got a namespace problem.

You're using import for a schema document with the same target
namespace as the importing document -- you should be using include.

See the W3C XML Schema Primer [1] for an example.

ht

[1] http://www.w3.org/TR/xmlschema-0/#SchemaInMultDocs
-- 
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
                      Half-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/
 [mail really from me _always_ has this .sig -- mail without it is forged spam]

-----------------------------------------------------------------
The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
initiative of OASIS <http://www.oasis-open.org>

The list archives are at http://lists.xml.org/archives/xml-dev/

To subscribe or unsubscribe from this list use the subscription
manager: <http://lists.xml.org/ob/adm.pl>





 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS