Skip to content

Instantly share code, notes, and snippets.

@krig
Last active August 29, 2015 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krig/f510d4a0e66b13361424 to your computer and use it in GitHub Desktop.
Save krig/f510d4a0e66b13361424 to your computer and use it in GitHub Desktop.
# Här är ett konkret exempel:
#
# 1. Inga namespaces:
def node_type_optional_no_namespaces(self):
path = '//element[@name="nodes"]//element[@name="node"]/optional/attribute[@name="type"]'
return len(schema.rng_xpath(path)) > 0
# 2. Namespaces:
def node_type_optional_namespaces(self):
ns = {'t': 'http://relaxng.org/ns/structure/1.0'}
path = '//t:element[@name="nodes"]//t:element[@name="node"]/t:optional/t:attribute[@name="type"]'
return len(schema.rng_xpath(path, namespaces=ns)) > 0
# Koden i exempel 2 är fragil: Namespacet är hårdkodat.
# För att inte hårdkoda namespacet skulle jag behöva något sätt
# att plocka ut det ur dokumentet, förutsatt att det bara finns
# ett namespace (annars måste jag på något sätt kunna avgöra vilket
# av namespacen som applicerar på elementen jag är intresserad av),
# vilket innebär att jag måste lägga till en funktion till schemas API.
# Skulle någon få för sig att "uppgradera" namespacet så går min kod
# nu sönder. Hade jag bara kunnat ignorera namespacet hade min kod
# fungerat lika bra!
# Fler API-anrop = fler buggar. Fler parametrar = fler buggar.
# Mer kod = fler buggar. När resulterar XML namespaces i färre buggar?
# Det är definitivt inte här.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment