2009-08-10 35 views

Respuesta

5

He encontrado mi propia respuesta:

Todo tiene que ver con la cardinalidad:

xsd: la clave se usa para (0..N) y (1..1) multiplicidad. xsd: unique se usa para la multiplicidad opcional (0..1). Esta es también la razón por la cual un campo seleccionado en un xsd: unique puede ser nill.

Fuente de mi respuesta: http://www.xml.com/lpt/a/987

0

xsd: la clave es única Y se utiliza para una colección de elementos una clave dentro de un alcance xsd: unique es solo único dentro de un alcance.

Espero que esto ayude ...

+0

Entonces, cuando declaro varias llaves xsd: en diferentes elementos, ¿todas las claves definidas deben seguir siendo únicas? – Joep

+1

No, si tiene una colección de elementos de libro y declaró que xsd: key es el atributo isbn del elemento de libro en el esquema. Entonces los valores del atributo isbn deben ser únicos. esto no tiene influencia en otros elementos con otras teclas – norbertB

+0

Pero xsd: unique también lo hace. xsd: key también tiene un alcance. No puedo encontrar diferencias ...? – Joep

1

es similar a la base de datos.

campo clave es como PrimaryKey .. único e Identificación

único campo no es una clave, pero tiene que ser único ...

+0

Oke, pero ¿qué le agrega? el xsd que una llave es también un "id"? – Joep

1

Ver http://www.w3.org/TR/2004/REC-xmlschema-0-20041028/primer.html#quartelyReport.

En el ejemplo descrito en el enlace, los elementos "keyRefed" son los valores de los atributos de número de las partes del zip de las regiones y los elementos "keyed" son los valores del atributo de número de la parte del partes.

Único declara que los valores deben ser únicos pero también pueden ser nulos, clave: que deben ser únicos. Ambos tipos pueden ser referencias por elementos "keyrefed".

+2

Acabo de encontrarme con su publicación ... Corríjanlo ya que es incorrecto afirmar que 'Keys se usan con Keyrefs, restringiendo así los valores de los elementos" keyRefed "a los valores realmente usados ​​en los elementos" keyed ". Ver [ aquí] (http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#Identity- Constraint_Definition_details): '** {clave referenciada} ** Requerido si {categoría identidad-restricción } es keyref, prohibido de otra manera. Una definición de restricción de identidad con {categoría de restricción de identidad} igual a clave o única. –

11

xsd: unique no requiere que el campo exista para el selector. Si el campo existe, su valor debe ser único.

xsd: clave requiere que el campo exista para todos los resultados del selector. Cada elemento en el selector debe tener una clave.

Tenga en cuenta que xsd: keyref no es un requisito para xsd: key, la clave xsd: puede estar allí sin cualquier xsd: keyref.

+1

Acabo de encontrarme con su publicación ...Corrígelo ya que es incorrecto afirmar que 'solo se puede hacer referencia a una clave xsd: nombrada desde un xsd: keyref. Ver [aquí] (http://www.w3.org/TR/2004/REC-xmlschema- 1-20041028/structures.html # Identity-constraint_Definition_details): '** {clave referenciada} ** Requerido si {identity-constraint category} es keyref, prohibido de lo contrario. Una definición de restricción de identidad con {categoría de restricción de identidad} igual o única. –

+0

con 'xsd: unique', no se puede usar' xsd: keyref' - ¡sí se puede! Ver también: http://stackoverflow.com/questions/15842736/optional-key-in-xsd – Csq