Enterprise COBOL for z/OS 6.3.0, Language Reference
Este exemplo mostra a análise de vários documentos XML com validação em relação a um esquema e um procedimento de processamento que captura o código de retorno e
o código de razão que o analisador gera após analisar cada documento.
Todos os documentos XML são bem formados, mas não necessariamente válidos.
O programa deve ser compilado usando a opção do compilador XMLPARSE (XMLSS).
O exemplo usa o esquema que foi descrito no conceito relacionado sobre esquemas XML.
Suponha que o arquivo item.xsd contenha o esquema no formato de texto e que o esquema pré-processado tenha sido gerado no arquivo item.osr por meio do seguinte
comando do z/OS UNIX:
xsdosrg -v -o /u/HLQ/xml/item.osr /u/HLQ/xml/item.xsd
O exemplo usa a cláusula XML-SCHEMA para associar o esquema do nome do esquema XML ao ddname ddschema.
A seguinte instrução DD associa o ddname ao arquivo z / OS UNIX externo que contém o esquema:
//GO.DDSCHEMA DD PATH='/u/HLQ/xml/item.osr'
Programa ValidCk - Program ValidCk
Identification division.
Program-id. ValidCk.
Environment division.
Configuration section.
Special-names.
xml-schema schema is 'ddschema'.
Data division.
Working-storage section.
01 xml-decode.
02 rtn comp Pic 9(2).
02 rsn comp-5 Pic 9(4).
01 hv pic x(16) value '0123456789ABCDEF'.
01 T Pic 999 COMP.
01 xml-document-1.
02 pic x(52) value
'<!--Valid: the "itemName" element can be omitted-->'.
02 pic x(31) value '<stockItem itemNumber="123-AB">'.
02 pic x(36) value ' <quantityOnHand>1</quantityOnHand>'.
02 pic x(12) value '</stockItem>'.
01 xml-document-2.
02 pic x(44)
value '<!--Invalid: missing attribute itemNumber-->'.
02 pic x(11) value '<stockItem>'.
02 pic x(30) value ' <itemName>No name</itemName>'.
02 pic x(36) value ' <quantityOnHand>1</quantityOnHand>'.
02 pic x(12) value '</stockItem>'.
01 xml-document-3.
02 pic x(47)
value '<!--Invalid: unexpected attribute warehouse-->'.
02 pic x(46) value
'<stockItem itemNumber="074-UN" warehouse="NJ">'.
02 pic x(37) value ' <quantityOnHand>10</quantityOnHand>'.
02 pic x(32) value ' <itemName>Not here!</itemName>'.
02 pic x(12) value '</stockItem>'.
01 xml-document-4.
02 pic x(46)
value '<!--Invalid: illegal attribute value 123-Ab-->'.
02 pic x(31) value '<stockItem itemNumber="123-Ab">'.
02 pic x(33) value ' <itemName>Paintbrush</itemName>'.
02 pic x(37) value ' <quantityOnHand>10</quantityOnHand>'.
02 pic x(12) value '</stockItem>'.
01 xml-document-5.
02 pic x(46)
value '<!--Invalid: missing element quantityOnHand-->'.
02 pic x(31) value '<stockItem itemNumber="074-UN">'.
02 pic x(32) value ' <itemName>Not here!</itemName>'.
02 pic x(12) value '</stockItem>'.
01 xml-document-6.
02 pic x(42)
value '<!--Invalid: unexpected element comment-->'.
02 pic x(31) value '<stockItem itemNumber="123-AB">'.
02 pic x(33) value ' <itemName>Paintbrush</itemName>'.
02 pic x(36) value ' <quantityOnHand>1</quantityOnHand>'.
02 pic x(35) value ' <comment>Nylon bristles</comment>'.
02 pic x(12) value '</stockItem>'.
01 xml-document-7.
02 pic x(46) value
'<!--Invalid: out-of-range element value 100-->'.
02 pic x(31) value '<stockItem itemNumber="123-AB">'.
02 pic x(33) value ' <itemName>Paintbrush</itemName>'.
02 pic x(38) value ' <quantityOnHand>100</quantityOnHand>'.
02 pic x(12) value '</stockItem>'.
Procedure division.
m.
xml parse xml-document-1 validating with file schema
processing procedure p
xml parse xml-document-2 validating with file schema
processing procedure p
xml parse xml-document-3 validating with file schema
processing procedure p
xml parse xml-document-4 validating with file schema
processing procedure p
xml parse xml-document-5 validating with file schema
processing procedure p
xml parse xml-document-6 validating with file schema
processing procedure p
xml parse xml-document-7 validating with file schema
processing procedure p
goback
.
p.
evaluate xml-event
when 'COMMENT'
display ' '
display xml-text
when 'END-OF-DOCUMENT'
display ' Document successfully parsed.'
when 'EXCEPTION'
move xml-code to xml-decode
Divide rsn by 16 giving tally remainder T
display ' RC=' rtn ', reason=x'''
hv(function mod(rsn / 4096 16) + 1:1)
hv(function mod(rsn / 256 16) + 1:1)
hv(function mod(rsn / 16 16) + 1:1)
hv(T + 1:1) ''''
end-evaluate
.
End program ValidCk.
Saída do programa ValidCk - Output from program ValidCk
Na saída a seguir, é possível ver quais documentos XML no programa de origem falharam na validação no esquema.
Para os documentos que não eram válidos, o analisador sinalizou uma exceção XML e passou o controle para o procedimento de processamento com o registro especial
XML-EVENT contendo 'EXCEPTION' e o registro especial XML-CODE contendo o código de retorno e um código de razão específico.
Valid: the "itemName" element can be omitted
Document successfully parsed.
Invalid: missing attribute itemNumber
RC=24, reason=x'8613'
Invalid: unexpected attribute warehouse
RC=24, reason=x'8612'
Invalid: illegal attribute value 123-Ab
RC=24, reason=x'8809'
Invalid: missing element quantityOnHand
RC=24, reason=x'8611'
Invalid: unexpected element comment
RC=24, reason=x'8607'
Invalid: out-of-range element value 100
RC=24, reason=x'8803'
© Copyright IBM Corp.