00 03Java el desarrollo de esquemas de Web: alternativa basada en XML para la DTD

1 Esquema Introducción

la sintaxis DTD: <! ELEMENT nombre de elemento de restricción!>

de acuerdo con la sintaxis de esquema XML, de acuerdo con la sintaxis XML.

No puede haber más de un esquema XML, sólo una DTD. espacios de nombres de esquema para distinguir múltiples (similar a Java nombre del paquete).

DTD que es único tipo PCDATA, pero puede soportar más tipos de datos en el interior de esquema
| - tales como la edad, sólo puede ser un número entero, el esquema se puede definir directamente un tipo entero
, por tanto, encontrar sintaxis del esquema es más estricta.

sintaxis del esquema es más compleja, el esquema actualmente no puede sustituir a DTD, los dos coexisten.

2 proceso de desarrollo de esquemas

Crear un archivo de esquema, el nombre de sufijo .xsd.
| - root <schema>
| - dentro del elemento en el esquema
| - (1) Propiedades: xmlns="http://www.w3.org/2001/XMLSchema"Indica que el archivo actual es un archivo XML restricción
| - (2) Propiedades: targetNamespace="http://www.itcast.cn/20151111"el uso de restricción esquema de archivo, la restricción se introduce directamente a través del archivo de direcciones
| - (3) atributos: elementFormDefault="qualified"
paso:
| - (1) para ver cuántos elementos en XML, para definir cuántos <element>.
| - elementos simples (2) mirada y elementos complejos. Si los elementos son complejos, el uso <complexType>, y <sequence>se define el elemento, por ejemplo:

<complexType>
    <sequence>
        子元素
    <sequencs>
</complexType>

Si el elemento es un simple, directo utilización <element name="" type=""></element>definición de formato, se refiere a un nombre de archivo de restricciones de elementos nombre del atributo, tipo se refiere al tipo de datos.

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/person" 
xmlns:tns="http://www.example.org/person" 
elementFormDefault="qualified">
<element name="person">
    <complexType>
        <sequence>
            <element name="name" type="string"></element>
            <element name="age" type="int" />
        </sequence>
    </complexType>
</element>

</schema>

| - en el interior (3) la introducción de archivo de restricción en el archivo a ser limitado, donde xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"la propiedad indica que el archivo debe ser restringida archivos xmlns="http://www.itcast.cn/20151111"atributos son documentos encuadernados en el atributo targetNamespace, xsi: schemaLocation = "http://www.itcast.cn/20151111 Person.xsd "propiedad se refiere a la ubicación del archivo de restricción (formato: targetNamespace 空格 约束文件地址路径)

<?xml version="1.0" encoding="UTF-8"?>
<person xmlns="http://www.example.org/person"
xmlns:per="http://www.w3.org/2001/XMLSchema-instance"
per:schemaLocation="http://www.example.org/person person.xsd"
>
    <name>lks</name>
    <age>23</age>
</person>

3 limitaciones de esquema API Ver

(1) <sequence>: representan elementos en orden de aparición
(2) <all>: Representa puede aparecer un elemento sólo una vez
(3) <choice>: en la que a representa pueden ocurrir elementos
(4) maxOccurs="unbounded": elemento de atributo, el elemento representa el número de ocurrencias
(4) <any></any>: representa cualquier elemento

Puede restringir la propiedad
(1) escrito en elementos complejos dentro;
(2) escrito </complex>antes,
(3) sintaxis: <attribute name="" type="" use=""></attribute>nombre del atributo simplemente más constreñido nombre de propiedad, tipo se refiere a si el tipo de propiedad, el uso significa que la propiedad debe estar presente (requerido se refiere a debe estar presente ).

restricción de esquemas complejos
(1) la introducción de múltiples archivos de esquema, se puede dar a cada archivo individual del nombre.
(2) una pluralidad de restricciones de archivo de esquema redundantes en los elementos, se puede utilizar 别名:元素para definir.

4 proceso de resolución de Sax

XML analizan Existen dos técnicas: La bóveda y el saxofón.

dom pasos técnicos:
(1) una estructura de árbol de jerarquía XML dispensación en memoria de acuerdo con
(2) en el xml etiquetas, atributos, objetos de texto se empaquetan en

maneras: saxo-dirigida por eventos, mientras se leen resolución.

En paquete java.xml.parsers que:
(1) public abstract class SAXParser extends Object: Los ejemplos de tal método lata () desde SAXParserFactory.newSAXParser. Utilizando el public void parse​(File f, DefaultHandler dh) throws SAXException, IOExceptionmétodo, el primer parámetro es camino xml, un segundo parámetro es el controlador de eventos.
(2) public abstract class SAXParserFactory extends Object: Ejemplo () obtenido por newInsance.

proceso de implementación del saxofón:

5 manera Sax de uso jaxp

Sax manera no se puede lograr adiciones y supresiones se puede hacer sólo para consulta operación

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<person>
    <p1>
        <name>lks</name>
        <age>23</age>
    </p1>
    <p1>
        <name>hhy</name>
        <age>20</age>
    </p1>
</person>
public class JaxpTest {

	public static void main(String []args) throws Exception{
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		SAXParser saxParser = saxParserFactory.newSAXParser();
		saxParser.parse("src/dtdlearn/mydtd00/person.xml", new MyDefaultHandler());
	}
}

Imprimir todo el documento.
(1) La creación de una instalación de analizador
(2) para crear un analizador
(3) lleva a cabo el método de análisis sintáctico
(4) creen por sí mismas una clase que hereda DefaultHandler
tres métodos (5) en el interior del tipo regrabable

class MyDefaultHandler extends DefaultHandler{

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		System.out.print("<" + qName + ">");
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		System.out.print("<\\" + qName + ">");
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		System.out.print(new String(ch, start, length));
	}
	
}

Obtiene el valor de todos los elementos de nombre.
(1) define una bandera variable miembro = false
(2) determina el inicio si el elemento nombre del método, si el elemento de nombre, la bandera = true
(3.) Es la bandera determinado ya sea verdadera, y el método de ser así, imprime caracteres () del contenido
( 4) cuando la ejecución al final del nombre, pabellón conjunto es falso

class MyDefaultHandler1 extends MyDefaultHandler{
	private boolean flag = false;

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		if( "name".equals(qName)) {
			flag = true;
		}
	}
	
	

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		if(flag== true) {
			super.characters(ch, start, length);
			System.out.println();
		}
	}



	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		if( "name".equals(qName)) {
			flag = false;
		}
	}
} 

Obtener el primer elemento de valor de nombre.
(1) que define la variable miembro idx = 1
(2) determina el inicio si el método es nombre, si lo es, continúa para determinar idx está establecido, y si es así, entonces = bandera en true
(3.) Es la bandera determinado ya sea verdadera, de ser así, la impresión contenido
(4) cuando el final del nombre del elemento para ejecutar, bandera = false

class MyDefaultHandler2 extends MyDefaultHandler1{
	private int idx = 1;

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// TODO Auto-generated method stub
		super.startElement(uri, localName, qName, attributes);
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		// TODO Auto-generated method stub
		if( idx == 1) {
			super.characters(ch, start, length);
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// TODO Auto-generated method stub
		super.endElement(uri, localName, qName);
		if("name".equals(qName)) {
			idx++;
		}
	}
}
Publicado 77 artículos originales · ganado elogios 11 · vistas 2634

Supongo que te gusta

Origin blog.csdn.net/weixin_43762330/article/details/104532645
Recomendado
Clasificación