1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2024-10-26 12:25:09 +03:00

trying to fix namespaces + validation problems for good, closing #63619 in

* valid.c include/libxml/tree.h: trying to fix namespaces +
  validation problems for good, closing #63619 in the process
* result/valid/dia.xml test/valid/dia.xml: the Dia test was
  wrong in this respect, fixed it.
Daniel
This commit is contained in:
Daniel Veillard 2001-11-08 23:36:42 +00:00
parent d536f7012d
commit be480fbbe3
5 changed files with 315 additions and 211 deletions

View File

@ -1,3 +1,10 @@
Fri Nov 9 00:34:13 CET 2001 Daniel Veillard <daniel@veillard.com>
* valid.c include/libxml/tree.h: trying to fix namespaces +
validation problems for good, closing #63619 in the process
* result/valid/dia.xml test/valid/dia.xml: the Dia test was
wrong in this respect, fixed it.
Thu Nov 8 18:31:40 CET 2001 Daniel Veillard <daniel@veillard.com>
* xmllint.c: Morus Walter patch to allow --format and --encode

View File

@ -228,10 +228,11 @@ typedef xmlElementContent *xmlElementContentPtr;
struct _xmlElementContent {
xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
const xmlChar *name; /* Element name */
const xmlChar *name; /* Element name */
struct _xmlElementContent *c1; /* first child */
struct _xmlElementContent *c2; /* second child */
struct _xmlElementContent *parent; /* parent */
const xmlChar *prefix; /* Element name */
};
/**

View File

@ -1,137 +1,137 @@
<?xml version="1.0"?>
<!DOCTYPE diagram [
<!ELEMENT diagram (diagramdata , layer*)>
<!ELEMENT diagramdata (attribute)*>
<!ELEMENT layer (object | group)*>
<!ATTLIST layer name CDATA #REQUIRED>
<!ATTLIST layer visible (true | false) #REQUIRED>
<!ELEMENT object (attribute* , connections?)>
<!ATTLIST object type CDATA #REQUIRED>
<!ATTLIST object version NMTOKEN #REQUIRED>
<!ATTLIST object id ID #REQUIRED>
<!ELEMENT connections (connection)*>
<!ELEMENT connection EMPTY>
<!ATTLIST connection handle NMTOKEN #REQUIRED>
<!ATTLIST connection to IDREF #REQUIRED>
<!ATTLIST connection connection NMTOKEN #REQUIRED>
<!ELEMENT group (object | group)*>
<!ELEMENT attribute (composite | int | enum | real | boolean | color | point | rectangle | string | font)*>
<!ATTLIST attribute name CDATA #REQUIRED>
<!ELEMENT composite (attribute)*>
<!ATTLIST composite type CDATA #IMPLIED>
<!ELEMENT int EMPTY>
<!ATTLIST int val NMTOKEN #REQUIRED>
<!ELEMENT enum EMPTY>
<!ATTLIST enum val NMTOKEN #REQUIRED>
<!ELEMENT real EMPTY>
<!ATTLIST real val CDATA #REQUIRED>
<!ELEMENT boolean EMPTY>
<!ATTLIST boolean val (true | false) #REQUIRED>
<!ELEMENT color EMPTY>
<!ATTLIST color val CDATA #REQUIRED>
<!ELEMENT point EMPTY>
<!ATTLIST point val CDATA #REQUIRED>
<!ELEMENT rectangle EMPTY>
<!ATTLIST rectangle val CDATA #REQUIRED>
<!ELEMENT string EMPTY>
<!ATTLIST string val CDATA #IMPLIED>
<!ELEMENT font EMPTY>
<!ATTLIST font name CDATA #REQUIRED>
<!DOCTYPE dia:diagram [
<!ELEMENT dia:diagram (dia:diagramdata , dia:layer*)>
<!ELEMENT dia:diagramdata (dia:attribute)*>
<!ELEMENT dia:layer (dia:object | dia:group)*>
<!ATTLIST dia:layer dia:name CDATA #REQUIRED>
<!ATTLIST dia:layer dia:visible (true | false) #REQUIRED>
<!ELEMENT dia:object (dia:attribute* , dia:connections?)>
<!ATTLIST dia:object dia:type CDATA #REQUIRED>
<!ATTLIST dia:object dia:version NMTOKEN #REQUIRED>
<!ATTLIST dia:object dia:id ID #REQUIRED>
<!ELEMENT dia:connections (dia:connection)*>
<!ELEMENT dia:connection EMPTY>
<!ATTLIST dia:connection dia:handle NMTOKEN #REQUIRED>
<!ATTLIST dia:connection dia:to IDREF #REQUIRED>
<!ATTLIST dia:connection dia:connection NMTOKEN #REQUIRED>
<!ELEMENT dia:group (dia:object | dia:group)*>
<!ELEMENT dia:attribute (dia:composite | dia:int | dia:enum | dia:real | dia:boolean | dia:color | dia:point | dia:rectangle | dia:string | dia:font)*>
<!ATTLIST dia:attribute dia:name CDATA #REQUIRED>
<!ELEMENT dia:composite (dia:attribute)*>
<!ATTLIST dia:composite dia:type CDATA #IMPLIED>
<!ELEMENT dia:int EMPTY>
<!ATTLIST dia:int dia:val NMTOKEN #REQUIRED>
<!ELEMENT dia:enum EMPTY>
<!ATTLIST dia:enum dia:val NMTOKEN #REQUIRED>
<!ELEMENT dia:real EMPTY>
<!ATTLIST dia:real dia:val CDATA #REQUIRED>
<!ELEMENT dia:boolean EMPTY>
<!ATTLIST dia:boolean dia:val (true | false) #REQUIRED>
<!ELEMENT dia:color EMPTY>
<!ATTLIST dia:color dia:val CDATA #REQUIRED>
<!ELEMENT dia:point EMPTY>
<!ATTLIST dia:point dia:val CDATA #REQUIRED>
<!ELEMENT dia:rectangle EMPTY>
<!ATTLIST dia:rectangle dia:val CDATA #REQUIRED>
<!ELEMENT dia:string EMPTY>
<!ATTLIST dia:string dia:val CDATA #IMPLIED>
<!ELEMENT dia:font EMPTY>
<!ATTLIST dia:font dia:name CDATA #REQUIRED>
]>
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
<dia:diagramdata>
<dia:attribute name="background">
<dia:color val="#ffffff"/>
<dia:attribute dia:name="background">
<dia:color dia:val="#ffffff"/>
</dia:attribute>
</dia:diagramdata>
<dia:layer name="Background" visible="true">
<dia:object type="Standard - Line" version="0" id="O0">
<dia:attribute name="obj_pos">
<dia:point val="1.95,6.85"/>
<dia:layer dia:name="Background" dia:visible="true">
<dia:object dia:type="Standard - Line" dia:version="0" dia:id="O0">
<dia:attribute dia:name="obj_pos">
<dia:point dia:val="1.95,6.85"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="1.9,6.8;11,8.55"/>
<dia:attribute dia:name="obj_bb">
<dia:rectangle dia:val="1.9,6.8;11,8.55"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="1.95,6.85"/>
<dia:point val="10.95,8.5"/>
<dia:attribute dia:name="conn_endpoints">
<dia:point dia:val="1.95,6.85"/>
<dia:point dia:val="10.95,8.5"/>
</dia:attribute>
<dia:attribute name="line_color">
<dia:color val="#000000"/>
<dia:attribute dia:name="line_color">
<dia:color dia:val="#000000"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.1"/>
<dia:attribute dia:name="line_width">
<dia:real dia:val="0.1"/>
</dia:attribute>
<dia:attribute name="line_style">
<dia:enum val="0"/>
<dia:attribute dia:name="line_style">
<dia:enum dia:val="0"/>
</dia:attribute>
<dia:attribute name="start_arrow">
<dia:enum val="0"/>
<dia:attribute dia:name="start_arrow">
<dia:enum dia:val="0"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="0"/>
<dia:attribute dia:name="end_arrow">
<dia:enum dia:val="0"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="1" to="O2" connection="3"/>
<dia:connection dia:handle="1" dia:to="O2" dia:connection="3"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Text" version="0" id="O1">
<dia:attribute name="obj_pos">
<dia:point val="4.8,4.75"/>
<dia:object dia:type="Standard - Text" dia:version="0" dia:id="O1">
<dia:attribute dia:name="obj_pos">
<dia:point dia:val="4.8,4.75"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
<dia:attribute dia:name="obj_bb">
<dia:rectangle dia:val="2.579,3.96359;7.021,4.96359"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string val="sdfsdfg"/>
<dia:attribute dia:name="text">
<dia:composite dia:type="text">
<dia:attribute dia:name="string">
<dia:string dia:val="sdfsdfg"/>
</dia:attribute>
<dia:attribute name="font">
<dia:font name="Courier"/>
<dia:attribute dia:name="font">
<dia:font dia:name="Courier"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="1"/>
<dia:attribute dia:name="height">
<dia:real dia:val="1"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="4.8,4.75"/>
<dia:attribute dia:name="pos">
<dia:point dia:val="4.8,4.75"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
<dia:attribute dia:name="color">
<dia:color dia:val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
<dia:attribute dia:name="alignment">
<dia:enum dia:val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Box" version="0" id="O2">
<dia:attribute name="obj_pos">
<dia:point val="10.95,7.5"/>
<dia:object dia:type="Standard - Box" dia:version="0" dia:id="O2">
<dia:attribute dia:name="obj_pos">
<dia:point dia:val="10.95,7.5"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="10.9,7.45;13.05,9.55"/>
<dia:attribute dia:name="obj_bb">
<dia:rectangle dia:val="10.9,7.45;13.05,9.55"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="10.95,7.5"/>
<dia:attribute dia:name="elem_corner">
<dia:point dia:val="10.95,7.5"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="2.05"/>
<dia:attribute dia:name="elem_width">
<dia:real dia:val="2.05"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="2"/>
<dia:attribute dia:name="elem_height">
<dia:real dia:val="2"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.1"/>
<dia:attribute dia:name="border_width">
<dia:real dia:val="0.1"/>
</dia:attribute>
<dia:attribute name="border_color">
<dia:color val="#000000"/>
<dia:attribute dia:name="border_color">
<dia:color dia:val="#000000"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#ffffff"/>
<dia:attribute dia:name="inner_color">
<dia:color dia:val="#ffffff"/>
</dia:attribute>
<dia:attribute name="line_style">
<dia:enum val="0"/>
<dia:attribute dia:name="line_style">
<dia:enum dia:val="0"/>
</dia:attribute>
</dia:object>
</dia:layer>

View File

@ -1,159 +1,159 @@
<?xml version="1.0"?>
<!DOCTYPE diagram [
<!ELEMENT diagram (diagramdata, (layer)*) >
<!DOCTYPE dia:diagram [
<!ELEMENT dia:diagram (dia:diagramdata, (dia:layer)*) >
<!ELEMENT diagramdata (attribute)* >
<!ELEMENT dia:diagramdata (dia:attribute)* >
<!ELEMENT layer (object | group)*>
<!ATTLIST layer
name CDATA #REQUIRED
visible (true|false) #REQUIRED >
<!ELEMENT dia:layer (dia:object | dia:group)*>
<!ATTLIST dia:layer
dia:name CDATA #REQUIRED
dia:visible (true|false) #REQUIRED >
<!ELEMENT object ((attribute)*, connections?)>
<!ATTLIST object
type CDATA #REQUIRED
version NMTOKEN #REQUIRED
id ID #REQUIRED >
<!ELEMENT dia:object ((dia:attribute)*, dia:connections?)>
<!ATTLIST dia:object
dia:type CDATA #REQUIRED
dia:version NMTOKEN #REQUIRED
dia:id ID #REQUIRED >
<!ELEMENT connections (connection)*>
<!ELEMENT dia:connections (dia:connection)*>
<!ELEMENT connection EMPTY>
<!ATTLIST connection
handle NMTOKEN #REQUIRED
to IDREF #REQUIRED
connection NMTOKEN #REQUIRED>
<!ELEMENT dia:connection EMPTY>
<!ATTLIST dia:connection
dia:handle NMTOKEN #REQUIRED
dia:to IDREF #REQUIRED
dia:connection NMTOKEN #REQUIRED>
<!ELEMENT group (object | group)*>
<!ELEMENT dia:group (dia:object | dia:group)*>
<!ELEMENT attribute (composite | int | enum | real | boolean |
color | point | rectangle | string | font)*>
<!ATTLIST attribute name CDATA #REQUIRED >
<!ELEMENT dia:attribute (dia:composite | dia:int | dia:enum | dia:real | dia:boolean |
dia:color | dia:point | dia:rectangle | dia:string | dia:font)*>
<!ATTLIST dia:attribute dia:name CDATA #REQUIRED >
<!ELEMENT composite (attribute)*>
<!ATTLIST composite type CDATA #IMPLIED>
<!ELEMENT dia:composite (dia:attribute)*>
<!ATTLIST dia:composite dia:type CDATA #IMPLIED>
<!ELEMENT int EMPTY>
<!ATTLIST int val NMTOKEN #REQUIRED>
<!ELEMENT dia:int EMPTY>
<!ATTLIST dia:int dia:val NMTOKEN #REQUIRED>
<!ELEMENT enum EMPTY>
<!ATTLIST enum val NMTOKEN #REQUIRED>
<!ELEMENT dia:enum EMPTY>
<!ATTLIST dia:enum dia:val NMTOKEN #REQUIRED>
<!ELEMENT real EMPTY>
<!ATTLIST real val CDATA #REQUIRED>
<!ELEMENT dia:real EMPTY>
<!ATTLIST dia:real dia:val CDATA #REQUIRED>
<!ELEMENT boolean EMPTY>
<!ATTLIST boolean val (true|false) #REQUIRED>
<!ELEMENT dia:boolean EMPTY>
<!ATTLIST dia:boolean dia:val (true|false) #REQUIRED>
<!ELEMENT color EMPTY>
<!ATTLIST color val CDATA #REQUIRED>
<!ELEMENT dia:color EMPTY>
<!ATTLIST dia:color dia:val CDATA #REQUIRED>
<!ELEMENT point EMPTY>
<!ATTLIST point val CDATA #REQUIRED>
<!ELEMENT dia:point EMPTY>
<!ATTLIST dia:point dia:val CDATA #REQUIRED>
<!ELEMENT rectangle EMPTY>
<!ATTLIST rectangle val CDATA #REQUIRED>
<!ELEMENT dia:rectangle EMPTY>
<!ATTLIST dia:rectangle dia:val CDATA #REQUIRED>
<!ELEMENT string EMPTY>
<!ATTLIST string val CDATA #IMPLIED>
<!ELEMENT dia:string EMPTY>
<!ATTLIST dia:string dia:val CDATA #IMPLIED>
<!ELEMENT font EMPTY>
<!ATTLIST font name CDATA #REQUIRED>
<!ELEMENT dia:font EMPTY>
<!ATTLIST dia:font dia:name CDATA #REQUIRED>
]>
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
<dia:diagramdata>
<dia:attribute name="background">
<dia:color val="#ffffff"/>
<dia:attribute dia:name="background">
<dia:color dia:val="#ffffff"/>
</dia:attribute>
</dia:diagramdata>
<dia:layer name="Background" visible="true">
<dia:object type="Standard - Line" version="0" id="O0">
<dia:attribute name="obj_pos">
<dia:point val="1.95,6.85"/>
<dia:layer dia:name="Background" dia:visible="true">
<dia:object dia:type="Standard - Line" dia:version="0" dia:id="O0">
<dia:attribute dia:name="obj_pos">
<dia:point dia:val="1.95,6.85"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="1.9,6.8;11,8.55"/>
<dia:attribute dia:name="obj_bb">
<dia:rectangle dia:val="1.9,6.8;11,8.55"/>
</dia:attribute>
<dia:attribute name="conn_endpoints">
<dia:point val="1.95,6.85"/>
<dia:point val="10.95,8.5"/>
<dia:attribute dia:name="conn_endpoints">
<dia:point dia:val="1.95,6.85"/>
<dia:point dia:val="10.95,8.5"/>
</dia:attribute>
<dia:attribute name="line_color">
<dia:color val="#000000"/>
<dia:attribute dia:name="line_color">
<dia:color dia:val="#000000"/>
</dia:attribute>
<dia:attribute name="line_width">
<dia:real val="0.1"/>
<dia:attribute dia:name="line_width">
<dia:real dia:val="0.1"/>
</dia:attribute>
<dia:attribute name="line_style">
<dia:enum val="0"/>
<dia:attribute dia:name="line_style">
<dia:enum dia:val="0"/>
</dia:attribute>
<dia:attribute name="start_arrow">
<dia:enum val="0"/>
<dia:attribute dia:name="start_arrow">
<dia:enum dia:val="0"/>
</dia:attribute>
<dia:attribute name="end_arrow">
<dia:enum val="0"/>
<dia:attribute dia:name="end_arrow">
<dia:enum dia:val="0"/>
</dia:attribute>
<dia:connections>
<dia:connection handle="1" to="O2" connection="3"/>
<dia:connection dia:handle="1" dia:to="O2" dia:connection="3"/>
</dia:connections>
</dia:object>
<dia:object type="Standard - Text" version="0" id="O1">
<dia:attribute name="obj_pos">
<dia:point val="4.8,4.75"/>
<dia:object dia:type="Standard - Text" dia:version="0" dia:id="O1">
<dia:attribute dia:name="obj_pos">
<dia:point dia:val="4.8,4.75"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="2.579,3.96359;7.021,4.96359"/>
<dia:attribute dia:name="obj_bb">
<dia:rectangle dia:val="2.579,3.96359;7.021,4.96359"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
<dia:string val="sdfsdfg"/>
<dia:attribute dia:name="text">
<dia:composite dia:type="text">
<dia:attribute dia:name="string">
<dia:string dia:val="sdfsdfg"/>
</dia:attribute>
<dia:attribute name="font">
<dia:font name="Courier"/>
<dia:attribute dia:name="font">
<dia:font dia:name="Courier"/>
</dia:attribute>
<dia:attribute name="height">
<dia:real val="1"/>
<dia:attribute dia:name="height">
<dia:real dia:val="1"/>
</dia:attribute>
<dia:attribute name="pos">
<dia:point val="4.8,4.75"/>
<dia:attribute dia:name="pos">
<dia:point dia:val="4.8,4.75"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000"/>
<dia:attribute dia:name="color">
<dia:color dia:val="#000000"/>
</dia:attribute>
<dia:attribute name="alignment">
<dia:enum val="1"/>
<dia:attribute dia:name="alignment">
<dia:enum dia:val="1"/>
</dia:attribute>
</dia:composite>
</dia:attribute>
</dia:object>
<dia:object type="Standard - Box" version="0" id="O2">
<dia:attribute name="obj_pos">
<dia:point val="10.95,7.5"/>
<dia:object dia:type="Standard - Box" dia:version="0" dia:id="O2">
<dia:attribute dia:name="obj_pos">
<dia:point dia:val="10.95,7.5"/>
</dia:attribute>
<dia:attribute name="obj_bb">
<dia:rectangle val="10.9,7.45;13.05,9.55"/>
<dia:attribute dia:name="obj_bb">
<dia:rectangle dia:val="10.9,7.45;13.05,9.55"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="10.95,7.5"/>
<dia:attribute dia:name="elem_corner">
<dia:point dia:val="10.95,7.5"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="2.05"/>
<dia:attribute dia:name="elem_width">
<dia:real dia:val="2.05"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="2"/>
<dia:attribute dia:name="elem_height">
<dia:real dia:val="2"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.1"/>
<dia:attribute dia:name="border_width">
<dia:real dia:val="0.1"/>
</dia:attribute>
<dia:attribute name="border_color">
<dia:color val="#000000"/>
<dia:attribute dia:name="border_color">
<dia:color dia:val="#000000"/>
</dia:attribute>
<dia:attribute name="inner_color">
<dia:color val="#ffffff"/>
<dia:attribute dia:name="inner_color">
<dia:color dia:val="#ffffff"/>
</dia:attribute>
<dia:attribute name="line_style">
<dia:enum val="0"/>
<dia:attribute dia:name="line_style">
<dia:enum dia:val="0"/>
</dia:attribute>
</dia:object>
</dia:layer>

116
valid.c
View File

@ -424,10 +424,16 @@ xmlNewElementContent(xmlChar *name, xmlElementContentType type) {
}
ret->type = type;
ret->ocur = XML_ELEMENT_CONTENT_ONCE;
if (name != NULL)
ret->name = xmlStrdup(name);
else
if (name != NULL) {
xmlChar *prefix = NULL;
ret->name = xmlSplitQName2(name, &prefix);
if (ret->name == NULL)
ret->name = xmlStrdup(name);
ret->prefix = prefix;
} else {
ret->name = NULL;
ret->prefix = NULL;
}
ret->c1 = ret->c2 = ret->parent = NULL;
return(ret);
}
@ -451,6 +457,8 @@ xmlCopyElementContent(xmlElementContentPtr cur) {
"xmlCopyElementContent : out of memory\n");
return(NULL);
}
if (cur->prefix != NULL)
ret->prefix = xmlStrdup(cur->prefix);
ret->ocur = cur->ocur;
if (cur->c1 != NULL) ret->c1 = xmlCopyElementContent(cur->c1);
if (ret->c1 != NULL)
@ -484,6 +492,7 @@ xmlFreeElementContent(xmlElementContentPtr cur) {
if (cur->c1 != NULL) xmlFreeElementContent(cur->c1);
if (cur->c2 != NULL) xmlFreeElementContent(cur->c2);
if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
if (cur->prefix != NULL) xmlFree((xmlChar *) cur->prefix);
xmlFree(cur);
}
@ -505,6 +514,10 @@ xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob)
xmlBufferWriteChar(buf, "#PCDATA");
break;
case XML_ELEMENT_CONTENT_ELEMENT:
if (content->prefix != NULL) {
xmlBufferWriteCHAR(buf, content->prefix);
xmlBufferWriteChar(buf, ":");
}
xmlBufferWriteCHAR(buf, content->name);
break;
case XML_ELEMENT_CONTENT_SEQ:
@ -594,6 +607,14 @@ xmlSnprintfElementContent(char *buf, int size, xmlElementContentPtr content, int
strcat(buf, "#PCDATA");
break;
case XML_ELEMENT_CONTENT_ELEMENT:
if (content->prefix != NULL) {
if (size - len < xmlStrlen(content->prefix + 10)) {
strcat(buf, " ...");
return;
}
strcat(buf, (char *) content->prefix);
strcat(buf, ":");
}
if (size - len < xmlStrlen(content->name + 10)) {
strcat(buf, " ...");
return;
@ -936,16 +957,28 @@ xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) {
switch (elem->etype) {
case XML_ELEMENT_TYPE_EMPTY:
xmlBufferWriteChar(buf, "<!ELEMENT ");
if (elem->prefix != NULL) {
xmlBufferWriteCHAR(buf, elem->prefix);
xmlBufferWriteChar(buf, ":");
}
xmlBufferWriteCHAR(buf, elem->name);
xmlBufferWriteChar(buf, " EMPTY>\n");
break;
case XML_ELEMENT_TYPE_ANY:
xmlBufferWriteChar(buf, "<!ELEMENT ");
if (elem->prefix != NULL) {
xmlBufferWriteCHAR(buf, elem->prefix);
xmlBufferWriteChar(buf, ":");
}
xmlBufferWriteCHAR(buf, elem->name);
xmlBufferWriteChar(buf, " ANY>\n");
break;
case XML_ELEMENT_TYPE_MIXED:
xmlBufferWriteChar(buf, "<!ELEMENT ");
if (elem->prefix != NULL) {
xmlBufferWriteCHAR(buf, elem->prefix);
xmlBufferWriteChar(buf, ":");
}
xmlBufferWriteCHAR(buf, elem->name);
xmlBufferWriteChar(buf, " ");
xmlDumpElementContent(buf, elem->content, 1);
@ -953,6 +986,10 @@ xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) {
break;
case XML_ELEMENT_TYPE_ELEMENT:
xmlBufferWriteChar(buf, "<!ELEMENT ");
if (elem->prefix != NULL) {
xmlBufferWriteCHAR(buf, elem->prefix);
xmlBufferWriteChar(buf, ":");
}
xmlBufferWriteCHAR(buf, elem->name);
xmlBufferWriteChar(buf, " ");
xmlDumpElementContent(buf, elem->content, 1);
@ -3122,6 +3159,8 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
/* VC: Unique Element Type Declaration */
tst = xmlGetDtdElementDesc(doc->intSubset, elem->name);
if ((tst != NULL ) && (tst != elem) &&
((tst->prefix == elem->prefix) ||
(xmlStrEqual(tst->prefix, elem->prefix))) &&
(tst->etype != XML_ELEMENT_TYPE_UNDEFINED)) {
VERROR(ctxt->userData, "Redefinition of element %s\n",
elem->name);
@ -3129,6 +3168,8 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
}
tst = xmlGetDtdElementDesc(doc->extSubset, elem->name);
if ((tst != NULL ) && (tst != elem) &&
((tst->prefix == elem->prefix) ||
(xmlStrEqual(tst->prefix, elem->prefix))) &&
(tst->etype != XML_ELEMENT_TYPE_UNDEFINED)) {
VERROR(ctxt->userData, "Redefinition of element %s\n",
elem->name);
@ -3363,7 +3404,7 @@ xmlValidateSkipIgnorable(xmlNodePtr child) {
static int
xmlValidateElementType(xmlValidCtxtPtr ctxt) {
int ret = -1;
int ret = -1, tmp;
int determinist = 1;
NODE = xmlValidateSkipIgnorable(NODE);
@ -3451,6 +3492,15 @@ cont:
}
ret = ((NODE->type == XML_ELEMENT_NODE) &&
(xmlStrEqual(NODE->name, CONT->name)));
if (ret == 1) {
if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
ret = (CONT->prefix == NULL);
} else if (CONT->prefix == NULL) {
ret = 0;
} else {
ret = xmlStrEqual(NODE->ns->prefix, CONT->prefix);
}
}
if (ret == 1) {
DEBUG_VALID_MSG("element found, skip to next");
/*
@ -3483,6 +3533,18 @@ cont:
CONT = CONT->c2;
goto cont;
}
if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
ret = (CONT->c1->prefix == NULL);
} else if (CONT->c1->prefix == NULL) {
ret = 0;
} else {
ret = xmlStrEqual(NODE->ns->prefix, CONT->c1->prefix);
}
if (ret == 0) {
DEPTH++;
CONT = CONT->c2;
goto cont;
}
}
/*
@ -3508,6 +3570,18 @@ cont:
CONT = CONT->c2;
goto cont;
}
if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
ret = (CONT->c1->prefix == NULL);
} else if (CONT->c1->prefix == NULL) {
ret = 0;
} else {
ret = xmlStrEqual(NODE->ns->prefix, CONT->c1->prefix);
}
if (ret == 0) {
DEPTH++;
CONT = CONT->c2;
goto cont;
}
}
DEPTH++;
CONT = CONT->c1;
@ -3710,6 +3784,15 @@ xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) {
}
switch (cur->type) {
case XML_ELEMENT_NODE:
if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
if (size - len < xmlStrlen(cur->ns->prefix + 10)) {
if ((size - len > 4) && (buf[len - 1] != '.'))
strcat(buf, " ...");
return;
}
strcat(buf, (char *) cur->ns->prefix);
strcat(buf, ":");
}
if (size - len < xmlStrlen(cur->name + 10)) {
if ((size - len > 4) && (buf[len - 1] != '.'))
strcat(buf, " ...");
@ -3762,7 +3845,7 @@ xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) {
* xmlValidateElementContent:
* @ctxt: the validation context
* @child: the child list
* @cont: pointer to the content declaration
* @elemDecl: pointer to the element declaration
* @warn: emit the error message
*
* Try to validate the content model of an element
@ -3772,9 +3855,16 @@ xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) {
static int
xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
xmlElementContentPtr cont, int warn, const xmlChar *name) {
xmlElementPtr elemDecl, int warn) {
int ret;
xmlNodePtr repl = NULL, last = NULL, cur, tmp;
xmlElementContentPtr cont;
const xmlChar *name;
if (elemDecl == NULL)
return(-1);
cont = elemDecl->content;
name = elemDecl->name;
/*
* Allocate the stack
@ -4026,6 +4116,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
xmlNodePtr child;
int ret = 1;
const xmlChar *name;
const xmlChar *prefix = NULL;
CHECK_DTD;
@ -4097,16 +4188,21 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
/*
* Fetch the declaration for the qualified name
*/
if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
if ((elem->ns != NULL) && (elem->ns->prefix != NULL))
prefix = elem->ns->prefix;
if (prefix != NULL) {
elemDecl = xmlGetDtdQElementDesc(doc->intSubset,
elem->name, elem->ns->prefix);
elem->name, prefix);
if ((elemDecl == NULL) && (doc->extSubset != NULL))
elemDecl = xmlGetDtdQElementDesc(doc->extSubset,
elem->name, elem->ns->prefix);
elem->name, prefix);
}
/*
* Fetch the declaration for the non qualified name
* This is "non-strict" validation should be done on the
* full QName but in that case being flexible makes sense.
*/
if (elemDecl == NULL) {
elemDecl = xmlGetDtdElementDesc(doc->intSubset, elem->name);
@ -4211,7 +4307,7 @@ child_ok:
case XML_ELEMENT_TYPE_ELEMENT:
child = elem->children;
cont = elemDecl->content;
ret = xmlValidateElementContent(ctxt, child, cont, 1, elem->name);
ret = xmlValidateElementContent(ctxt, child, elemDecl, 1);
break;
}