Toon posts:

[ XML ] Herkennen van een schema.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Okee, ik ben me al enige tijd in XML enzo aan het verdiepen. Ik gebruik nu ook geen DTD meer, maar een XML schema.

XML SCHEMA :


<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.Test/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<element name="naar" type="xs:string"/>
<element name="van" type="xs:string"/>
<element name="kopteksts" type="xs:string"/>
<element name="inhoud" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

DIT SCHEMA WAS VROEGER DEZE DTD :

<!ELEMENT note (van, naar, koptekst, inhoud)>
<!ELEMENT van (#PCDATA)>
<!ELEMENT naar (#PCDATA)>
<!ELEMENT koptekst (#PCDATA)>
<!ELEMENT inhoud (#PCDATA)>


Okee, erg leuk. Het mooie is dat zo'n schema direct in een XML gekoppeld kan worden met de XML Data. En in VB kunnen we daar dan mooi doorheen lopen als we de Microsoft XML referentie hebben toegevoegd:


Dim objDOMDocument As DOMDocument
Dim objXMLDOMDocumentType As IXMLDOMDocumentType
Dim intCounter As Integer

Set objDOMDocument = New DOMDocument

objDOMDocument.async = False

objDOMDocument.Load "c:\xmldocument.xml"


With objDOMDocument.childNodes(0)

For intCounter = 0 To .childNodes.length - 1
MsgBox .childNodes(intCounter).nodeName
Next intCounter

End With

end sub


Ook weer erg leuk, ik krijg nu een node voor data en een node voor een schema.

:Z :Z :Z En dan nu mijn vraag:

Is er een manier om te kunnen achterhalen of de huidige node een schema bevat of dat deze gewoon XML data bevat??? Mijn doel is namelijk om VB het XML schema te laten ontleden. Ben erg benieuwd of iemand hier meer info over heeft *D .

Verwijderd

volgens mij zou zoiets als dit moeten werken:
code:
1
2
3
4
objIXMLDOMDocument.load("/path/to/xmlfile")
set objXMLDOMSchemaCollection = objIXMLDOMDocument.schemas
objXMLDOMDocument.schemas = objXMLDOMSchemaCollection
set objXMLDOMSchemaNode = objXMLDOMSchemaCollection.get("http://www.Test/XMLSchema")

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

uitge3D'd?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Op donderdag 10 januari 2002 12:12 schreef Mas*Mind het volgende:
volgens mij zou zoiets als dit moeten werken:
code:
1
2
3
4
objIXMLDOMDocument.load("/path/to/xmlfile")
set objXMLDOMSchemaCollection = objIXMLDOMDocument.schemas
objXMLDOMDocument.schemas = objXMLDOMSchemaCollection
set objXMLDOMSchemaNode = objXMLDOMSchemaCollection.get("http://www.Test/XMLSchema")
Het probleem dat ik heb is dat ik niet weet welke types je daarvoor hebt gebruikt. Ik heb alleen XMLSchemaCache en andere dingen waar ik weinig aan heb.

Maar het idee klinkt heel aantrekkelijk, alleen het lijkt wel alsof de DOMDocument gewoon niks met het schema's object kan doen.

Verwijderd

Topicstarter
Op donderdag 10 januari 2002 12:19 schreef OiSyN het volgende:
uitge3D'd?
Hoi OiSyn, bedankt voor je 'aardige' reacties over mij he :'( 3D is gewoon een hobby van me, waar ik onderhand behoorlijk ver mee kom. Dit is werk ( ook leuk ).

Zou leuk zijn als je hier ook wat zinnige tips voor me hebt.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

wat nou weer, ik vroeg alleen maar of je uitge3D'd was :?

maar nee, ik heb geen tips voor je

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Op donderdag 10 januari 2002 12:25 schreef OiSyN het volgende:
wat nou weer, ik vroeg alleen maar of je uitge3D'd was :?

maar nee, ik heb geen tips voor je
Ik doelde o.a. op je reactie in '3d in vb > iets namaken :S'. Geeft verder niet hoor, ik geef toe dat ik ( helemaal in 3D ) nog een hoop te leren heb, en ben je erg dankbaar voor je reacties in dat forum *D

Verwijderd

Topicstarter
Op donderdag 10 januari 2002 12:55 schreef Mas*Mind het volgende:
misschien heb je hier wat aan:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmpronamespaces.asp
:9~ Dank je wel mastermind! Dat lijkt dus gewoon precies wat ik zoek! ( En ik had al zooolang op microsoft lopen zoeken ). Klinkt wel logisch om n.a.v. de namespace te gaan kijken waar het schema verborgen zit :)

Verwijderd

post ff je code als je het werkende hebt. Heb er zelf ook mee lopen kloten, maar om een of andere vage reden zijn xmldoc.namespaces en xmldoc.schemas altijd leeg :?

Verwijderd

Topicstarter
Op donderdag 10 januari 2002 13:26 schreef Mas*Mind het volgende:
post ff je code als je het werkende hebt. Heb er zelf ook mee lopen kloten, maar om een of andere vage reden zijn xmldoc.namespaces en xmldoc.schemas altijd leeg :?
Ben nu tot dezelfde :? gekomen. Maar blijf lekker ( betaald :) ) verder zoeken naar een oplossing. Wel heel erg rar dat die namespaces en schema's leeg zijn. Ze staan er toch echt...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Wat ben je van plan? Je wilt toch noet gaan valideren hoop ik?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op donderdag 10 januari 2002 14:24 schreef mbravenboer het volgende:
Wat ben je van plan? Je wilt toch noet gaan valideren hoop ik?
*D Altijd leuk en interessant als jij bij de discussie komt mbravenboer *D

Ik wil het schema kunnen doorlopen om te controleren of het XML schema dat ik aangeleverd krijg overeen komt met het XML schema van onze DTD, en anders de admin de niet compatible gegevens laten koppelen voor de conversie :) Probleem zit hem nu dus nog even in het feit dat je die schema's niet zo makkelijk kan ontleden.

Nog enig idee :P

Verwijderd

Topicstarter
Mas*mind, Ik ben er net achter gekomen dat het bij ons leeg is omdat we inline schemes gebruiken. En daarvoor gelden de volgende :( regels:


The definition property is not supported when using inline schemas. This behavior is by design because the node being referenced can be deleted or modified after the document is loaded, yielding unpredictable results.

Note Inline schemas are not supported in MSXML 2.5 and earlier versions. To avoid an error on the root element, use the Xmlinst.exe "Replace Mode Tool" available from http://msdn.microsoft.com/downloads/default.asp?URL=/code/sample.asp?url=/msdn-files/027/001/469/msdncompositedoc.xml

Instead of using an external schema file, Microsoft XML Core Services (MSXML) version 3.0 or later allows you to use inline schemas. These schemas are useful when it is inconvenient to physically separate the schema and the instance (XML document). For example, if you generate XML-Data Reduced (XDR) schema from data retrieved from a database, it may be more convenient to put the schema and the data in the same file.

An element is associated with an inline schema just as it is with an external schema, through the "x-schema:" syntax when defining that element's namespace identifier. For an external schema, the URI or URL that follows "x-schema:" indicates the location of the external schema file. With an inline schema, that which follows "x-schema:" indicates the name of the schema within the XML instance document (indicated by the # sign followed by the name).

The "#" syntax following "x-schema:" refers to a schema within the local document only. This syntax cannot be used to reference a schema within an external document. For example, "x-schema:URI#name" is not allowed.

The inline schema associated with an element must precede that element within the document. When validating against a schema, if the name indicated through an element's namespace declaration does not correspond to an already parsed schema, an error will occur. An error will also occur when an element is associated with a schema that does not exist.


Validation against the remainder of the schema cannot occur because the schema does not contain a name attribute and because the reference to the schema is not prefaced by "x-schema:". MSXML 3.0 views that reference as a Uniform Resource Name (URN) with no special significance.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
apottjewijd: Ik wil het schema kunnen doorlopen om te controleren of het XML schema dat ik aangeleverd krijg overeen komt met het XML schema van onze DTD
Opportunistisch :P , maar dat zijn we van je gewend ;) .
Probleem zit hem nu dus nog even in het feit dat je die schema's niet zo makkelijk kan ontleden.
XML Schema's zijn draken van dingen. Ze kunnen ontzettend veel vormen aannemen voor dezelfde constructie en barsten van de syntaxtische suiker. Ik zou eerst eens goed bekijken hoever je wilt gaan in deze vergelijking.

Eventueel is het denk ik een heel goed idee om een XML Schema eerst desugaren naar een simpele vorm en die te vergelijken met de DTD. Als je het echt goed doet kan je je DTD ook omzetten naar die vorm en dan direct kijken of ze equivalent zijn.

Ik denk dat finite-state automaten daar een hele goede oplossing voor kunnen zijn omdat dat de meest generieke vorm van een schema is. Er is zelfs een zeer coole schema taal die dit gebruikt :D .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op donderdag 10 januari 2002 14:49 schreef mbravenboer het volgende:

XML Schema's zijn draken van dingen. Ze kunnen ontzettend veel vormen aannemen voor dezelfde constructie en barsten van de syntaxtische suiker. Ik zou eerst eens goed bekijken hoever je wilt gaan in deze vergelijking.
Op:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wp/htm/wp_xmlintegasp.asp

Staat een stuk te zien met een schema en de daarbij gereserveerde namespaces. Ik zit er aan te denken om mijn input te verplichten :) zich aan deze schema opbouw te houden.

Door zo'n schema kan ik makkelijk de 'veldnamen', de 'veldtypes', en eventueel nog wat extra veldinfo vergelijken met die van onze databases ( zo was mijn plan een beetje :P )
Eventueel is het denk ik een heel goed idee om een XML Schema eerst desugaren naar een simpele vorm en die te vergelijken met de DTD. Als je het echt goed doet kan je je DTD ook omzetten naar die vorm en dan direct kijken of ze equivalent zijn.
Als ik gewoon standaard zo'n schema 'vereis', dan denk ik dat ik het nog wel aankan ( al raak ik al wat ontmoedigd ;( )
Ik denk dat finite-state automaten daar een hele goede oplossing voor kunnen zijn omdat dat de meest generieke vorm van een schema is. Er is zelfs een zeer coole schema taal die dit gebruikt :D .
Wat zijn finite-state automaten :?

Verwijderd

Topicstarter
[ ga een beetje off topic ]

Zoals ook op
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wp/htm/wp_xmlintegasp.asp

is te lezen, is er dus een standaard opmaak voor het inserten, deleten en updaten van recordsets. Maar het rare is dat ze bij een update het complete originele record verwachten dat geupdate moet worden. Dit komt bij mij nogal raar over, stel dat je bijv. alleen een user ID hebt en niet alle info over die user...

Ik vraag me ook af of die standaard notitie van updaten, deleten en inserten wel handig is, en dat ik niet beter een eigen veld ( bijvoorbeeld veld 'action' ) kan bijhouden voor een insert, update of delete statement.

:) Waarschijnlijk klink ik in deze reply niet logisch meer... is dan beter gewoon te negeren *D

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
apottjewijd: Ik zit er aan te denken om mijn input te verplichten :) zich aan deze schema opbouw te houden.
Tja, als jij een schema opstelt met een target-namespace dan is het natuurlijk triviaal om te controleren of de input correct is als je een XML parser hebt die ook daadwerkelijk XML Schema's aankan. Ik kreeg echter de indruk dat je onbekende schema's wilden gaan vergelijken met jullie eigen schema...
Als ik gewoon standaard zo'n schema 'vereis', dan denk ik dat ik het nog wel aankan
Precies.
Wat zijn finite-state automaten :?
Een diagram met een aantal states. Tussen sommige states zijn verbindingen, tussen andere niet. Een aantal states zijn speciaal aangeduid als 'eindpunten'. Als een gegeven input door dit diagram komt en bij een eindpunt eindigt kan je zeggen dat hij aan de taal van het automaat voldoet...

Ik zal ff een linkje naar die leuke schema taal opzoeken...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Op donderdag 10 januari 2002 15:09 schreef mbravenboer nog meer :9~ info:

[ ... ]
Graag!... Het was eerst ook de bedoeling om allerlei soorten XML schema's te accepteren, maar nu ( sinds 5 minuten geleden ) zitten we te denken om alle klanten die compatible willen zijn gewoon onze DTD moeten gebruiken die vanaf internet te benaderen is. Is voor mij wel *D

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dit is een heel leuk stuk:

http://www.xml.com/pub/a/2001/12/12/schemacompare.html

Het gaat om Relax NG:

http://relaxng.org/

Check ook de tutorial:

http://www.oasis-open.org/committees/relax-ng/tutorial-20011203.html

en hier:

http://www.xml.gr.jp/relax/

Relax NG wordt vaak als technisch superieur aan XML Schema gezien. De syntax vind ik bovendien een stuk prettiger.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
apottjewijd: Graag!... Het was eerst ook de bedoeling om allerlei soorten XML schema's te accepteren
Haha :D . Daar kom je wel van terug naar het lezen van het artikel op www.xml.com >:) .
maar nu ( sinds 5 minuten geleden ) zitten we te denken om alle klanten die compatible willen zijn gewoon onze DTD moeten gebruiken die vanaf internet te benaderen is.
Lijkt mij veruit de verstandigste beslissing.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Ik kom nog even terug op het probleem dat ik met Mas*Mind had, daar heb ik een mooi VB stukje van gekregen om te achterhalen wat het schema is. Nou ben ik er acter gekomen dat dit alleen werkt met x-schema's en niet met een normale DTD.

Voorbeeld van een x-schema:

<?xml version="1.0" encoding="UTF-8"?>
<Schema name="Untitled-schema" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="achternaam" model="closed" content="textOnly" dt:type="string"/>
<ElementType name="email" model="closed" content="textOnly" dt:type="string"/>
<ElementType name="gegevens" model="closed" content="eltOnly" order="one">
<AttributeType name="xmlns" dt:type="string"/>
<attribute type="xmlns"/>
<group minOccurs="1" maxOccurs="*" order="one">
<element type="voornaam" minOccurs="1" maxOccurs="1"/>
<element type="tussenvoegsel" minOccurs="1" maxOccurs="1"/>
<element type="achternaam" minOccurs="1" maxOccurs="1"/>
<element type="straatnaam" minOccurs="1" maxOccurs="1"/>
<element type="huisnummer" minOccurs="1" maxOccurs="1"/>
<element type="plaatsnaam" minOccurs="1" maxOccurs="1"/>
<element type="telefoonnummer" minOccurs="1" maxOccurs="1"/>
<element type="email" minOccurs="1" maxOccurs="1"/>
<element type="webpagina" minOccurs="1" maxOccurs="1"/>
</group>
</ElementType>
<ElementType name="huisnummer" model="closed" content="textOnly" dt:type="i1"/>
<ElementType name="plaatsnaam" model="closed" content="textOnly" dt:type="string"/>
<ElementType name="straatnaam" model="closed" content="textOnly" dt:type="string"/>
<ElementType name="telefoonnummer" model="closed" content="textOnly" dt:type="i4"/>
<ElementType name="tussenvoegsel" model="closed" content="textOnly" dt:type="string"/>
<ElementType name="voornaam" model="closed" content="textOnly" dt:type="string"/>
<ElementType name="webpagina" model="closed" content="textOnly" dt:type="string"/>
</Schema>


De aanroep naar zo'n schema :


<gegevens xmlns="x-schema:SCHEMANAAM">

Verwijderd

dat was me allang duidelijk, maar jij werkte toch ook met x-schema :?

Verwijderd

Topicstarter
Op vrijdag 11 januari 2002 12:19 schreef Mas*Mind het volgende:
dat was me allang duidelijk, maar jij werkte toch ook met x-schema :?
Ik was met alles aan het prutsen, externe en interne DTD's ( en die geven "" terug ), een DCD, een W3C Schema, en nu eindelijk een externe x-schema ( wat dat is is me eigenlijk nog steeds niet helemaal duidelijk ), maar daar kan ik wel gewoon leuk doorheen huppelen :)

Verwijderd

Topicstarter
Het is me alleen nog niet helemaal duidelijk wanneer nou een DTD wordt gebruikt en wanneer een x-schema. De voordelen van een schema t.o.v. een DTD zijn ( volgens w3c ):


Ze zijn simpeler,
Op de toekomst voorbereid,
Flexibeler en functioneler dan DTD's,
Zelf weer geschreven in XML,
Ze ondersteunen data types,
Ze ondersteunen namespaces.


Okee, erg leuk. Maar een schema opzich kan ook weer een DTD aanroepen :? Dus vroeg ik me af of een schema gewoon een nieuwe versie is van de DTD's of dat er toch verschil zit en wat nou aan te bevelen is om te gebruiken.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
DTDs zijn antiek en volkomen ongeschikt voor wat je tegenwoordig wilt. Ze werken niet goed samen met namespaces en de uitdrukkingskracht is zeer beperkt.

XML-Data van Microsoft is ook geen goede oplossing: dit is de submission van Microsoft voor een opvolger van DTDs. Dit is dus echter niet exact de opvolger gevolger.

Je kunt dus het beste W3C's XML Schema gebruiken. Je kunt hiermee in de toekomst de beste support verwachten in parsers en je mag er vanuit gaan dat mensen die met jou communiceren ook XML Schema kennen en begrijpen.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Het verbaast me dat je geen 'leraar' in je profiel hebt staan mbravenboer, thnx voor de info weer, heb het hier voorgelegd en we gaan lekker over naar W3C schema's :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
apottjewijd: Het verbaast me dat je geen 'leraar' in je profiel hebt staan
Komt nog ;) .
heb het hier voorgelegd en we gaan lekker over naar W3C schema's :)
Ok, lijkt me verstandig :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1